OmniAICreator/Qiita-1.07M huggingface dataset:
plotlyのshow()でvscodeのJupyter上でうまく表示できない時に・・

## 0. はじめに

plotlyの本を読んで写経している時に、vscodeのjupyterにて`show()`コマンドで何も表示されなくて苦戦したので簡単だがメモを残しておく。

**※以下のgithubコードの以下部分を動かしてましたが、以下のように「No renderer could be found for mimetype ・・(略)」と出てグラフが表示されなかった。**

**※サンプルは「plotly.expresss」だが、通常のplotly.graph_objects(import plotly.graph_objects as go)も同様です**

https://github.com/plotly-dash-book/plotly-dash-book/blob/master/ch01_plotly_express/01_01_about.ipynb

![スクリーンショット 2022-08-21 141348.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373060/06d2a2ae-cabf-32ca-4bfb-7e6f16fc5acc.png)


- 動作環境
  *  OS : Windows10 pro (Ver.2004)
  *  python 3.9.6(pyenv)
  *  plotry 5.10.0
  *  jupyter notebook(vscode-jupyter) ※vscodeではなく通常のjupyterだと問題ないかもです


## 1. 解決方法

2つ紹介する。**1-2のほうがオススメ**

### 1-1. 解決方法①plotを使用する

vscodeではなくブラウザ表示させる方法。
'show()'の代わりに`from plotly.offline import plot`を使用する

```python:
import plotly.express as px
from plotly.offline import plot

gapminder = px.data.gapminder()

#.show()は取り除く
plot(
    px.scatter(
    gapminder, x="gdpPercap", y="lifeExp", log_x=True, hover_name="country"
    )
)
```

![スクリーンショット 2022-08-21 141755.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373060/f72ede45-579b-facd-4b2d-2aeb8db77c55.png)



### 1-2. 解決方法②デフォルトのレンダラーを設定する方法

レンダラーとは「データを所定の形式に従って処理し、描画するシステム」こと。
これをjupyterでの表示形式に設定させればOK。`pio.renderers.default = 'notebook'`

```python:
import plotly.express as px
import plotly.io as pio
pio.renderers.default = 'notebook' #1回設定しておけばいい！

gapminder = px.data.gapminder()

px.scatter(
    gapminder, x="gdpPercap", y="lifeExp", log_x=True, hover_name="country"
).show()
```

![スクリーンショット 2022-08-21 142236.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373060/1e65cdf1-6646-7604-61a7-2197b1656cbb.png)

## 2. おわりに
stackoverflow等でも色々調べたが、解決策に至らなかった為に調べた。
もしこれでもうまくいかない場合は、設定可能なレンダラーをとりあえず全部試してみてもいいかもしれない(以下[]の中)。

```
Renderers configuration
-----------------------
    Default renderer: 'notebook_connected'
    Available renderers:
        ['plotly_mimetype', 'jupyterlab', 'nteract', 'vscode',
         'notebook', 'notebook_connected', 'kaggle', 'azure', 'colab',
         'cocalc', 'databricks', 'json', 'png', 'jpeg', 'jpg', 'svg',
         'pdf', 'browser', 'firefox', 'chrome', 'chromium', 'iframe',
         'iframe_connected', 'sphinx_gallery', 'sphinx_gallery_png']
```


## 3. 2023/1/1追記

久々にこの方法でやってみたらまた動かなくなってました。
そこでまた迷走していたら、以下URLのvscodeの拡張機能「Jupyter Notebook Renderers」にて解決しました。

https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter-renderers&ssr=false#overview

**この拡張機能を有効にし、カーネルを再起動するだけで他の設定は不要でした(以下は有効にした後の例)**

![スクリーンショット 2023-01-01 121901.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373060/c5171e06-8087-16c2-9d04-2bc84b9767a2.png)

![スクリーンショット 2023-01-01 122158.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373060/6ea125dd-eb6e-bb50-69fc-19f258a66c4d.png)


## 参考

https://plotly.com/python/renderers/
Gitコマンドでrbenv version ruby-2.7.4' is not installedtというエラーが出る

# はじめに

この記事は2022年4月にまとめていた「細かいつまずいたことをメモしておく(4月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Gitコマンドを叩くと以下のエラーが出るようになってしまった

```
rbenv version ruby-2.7.4' is not installed
```

またブランチを変更してもでてしまう

# 解決方法

これはovercommitをインストールしたことに起因していた
overcommitは.gitのホックに直接設定を書き込むためにブランチを変更してもその設定は引き継がれている
そのためブランチを変更して`overcommitがはいっていない状態`にしても動いてしまうのでエラーが発生する

overcommitを追加したブランチを早くマージする必要がありました
VPNにつなげるとdocker-compose upでのインストールで止まる

# はじめに

この記事は2022年4月にまとめていた「細かいつまずいたことをメモしておく(4月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

WSL2(Ubuntu20.04)でVPNをつなげた状態で`docker-compose build`をすると`apt-get update`などでインストールが止まってしまいタイムアウトしまった

# 解決方法

これはDocker内部のネットワークとVPNの間で問題がおきることでインストールが遅くなってしまうのが原因っぽい
`wsl-vpnkit`というのをインストールすることで改善するようになった

https://github.com/sakai135/wsl-vpnkit

[ダウンロード](https://github.com/sakai135/wsl-vpnkit/releases/tag/v0.3.2)から最新のtar.gzを取得します。
そのあとPowerShellを開いて、ダウンロードした場所にディレクトリを移動して以下のコマンドを叩く

```
# PowerShell

wsl --import wsl-vpnkit $env:USERPROFILE\wsl-vpnkit wsl-vpnkit.tar.gz --version 2
wsl -d wsl-vpnkit
```

また、PC起動時に毎回以下のコマンドでVPNkitを起動する

```
wsl.exe -d wsl-vpnkit service wsl-vpnkit start
```

また`wsl-vpnkit`を実行しないとコンテナ内からネットワークにつなげなくなるので`git`がコンテナから実行できない場合はvpnkitが動いているか確認するとよいです
Pipfile と Pipfile.lock から同等なrequirements.txtを出力する

```python:requirements.py
import os
import json


def get_path(filename):
    return os.path.join(os.path.dirname(os.path.realpath(__file__)), filename)


def main():
    with \
            open(get_path('Pipfile'), "r") as fp, \
            open(get_path('Pipfile.lock'), "r") as fl, \
            open(get_path("requirements.txt"), "w") as fr:
        json_fl = json.load(fl)
        text_fp = fp.read()
        for name, pkg in json_fl["default"].items():
            if name in text_fp:
                print(name, pkg["version"], file=fr, sep="")


if __name__ == "__main__":
    main()

```
Pipfile.lockと実用上支障ない程度には同等なrequirements.txtが出力される、本当はhashまで比較した方が良いが多くの場合は差異がない。

Google App Engine はサービスが依存するライブラリを`requirements.txt`でしか受け付けないので上記`requirements.py`を`Pipfile`と同じディレクトリに入れて`requirements.txt`に変換している。早く改善してほしい。
【Laravel】ローカルにすでに存在するファイルを S3 に保存する

これをしたくて検索しても、たいていアップロードしてS3に保存する的な利用方法での実装が多く、
- すでに存在するファイルを保存したい
- 名前はそのまま
- 公開権限をつけたい

という前提だとなかなか情報にたどり着かずでした。

そのため、いろいろ試行錯誤したところ下記のようにシンプルなコードで実装することができました（Laravel5.5です）。

```PHP:Laravel
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\File;

$disk = Storage::disk('s3');
$disk->putFileAs($savePath, New File($filePath), $fileName, ['ACL' => 'public-read']);
```

`$savePath` ： S3上のパス ※最初と最後の / は省く
`$filePath` ： ローカル上のファイルのフルパス（ファイル名含む）
`$fileName` ： S3に保存するときのファイル名

ちなみに、`Illuminate\Http\File` を use せず、`…, New File($filePath),…` を `…, New \File($filePath),…` とすると、`Illuminate\Support\Facades\File` が読み込まれてしまいエラーになる場合があるのでご注意を。

## 追記
上記はLaravel8では動作しませんでした。本バージョンでは下記になります。
```PHP:Laravel
$disk = Storage::disk('s3');
$disk->putFileAs($savePath, $filePath, $fileName, ['ACL' => 'public-read']);
```
Python pre-commitのblackでcannot import name '_unicodefun' from 'click'

# はじめに

この記事は2022年3月にまとめていた「細かいつまずいたことをメモしておく(3月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

pre-commitを走らせたところblackで以下のエラーが発生した

```
Traceback (most recent call last):
  File "/home/app/.cache/pre-commit/repojrl1o9ni/py_env-python3/bin/black", line 8, in <module>
    sys.exit(patched_main())
  File "/home/app/.cache/pre-commit/repojrl1o9ni/py_env-python3/lib/python3.8/site-packages/black/__init__.py", line 1423, in patched_main
    patch_click()
  File "/home/app/.cache/pre-commit/repojrl1o9ni/py_env-python3/lib/python3.8/site-packages/black/__init__.py", line 1409, in patch_click
    from click import _unicodefun
ImportError: cannot import name '_unicodefun' from 'click'
```

# 解決方法

これは`.pre-commit-config.yaml`の`blackのバージョンが古い`ことから起きていた

```yaml:.pre-commit-config.yaml
- repo: https://github.com/psf/black
  rev: 22.3.0
  hooks:
    - id: black
      language_version: python3
```

バージョンを`22.3.0`に固定したら動くようになった
kubernetesでデプロイの更新をしたがPendingで止まってしまう

# はじめに

この記事は2022年3月にまとめていた「細かいつまずいたことをメモしておく(3月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

デプロイを更新したのにKubernetesがPendingで止まってしまっていた

# 解決方法

ポッドに対してresourcesを2つ定義していたのが原因だった。
コンテナを1つのポッドに2つ立ててたのでそれぞれにリソース設定をしていた
EKSでconnectex: a socket operation was attempted to an unreachable networkというエラーが出る

# はじめに

この記事は2022年3月にまとめていた「細かいつまずいたことをメモしておく(3月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

「Kubernetes on AWS アプリケーションエンジニア本番環境へ備える」という本のP42のコマンドでエラーが発生した

```
connectex: a socket operation was attempted to an unreachable network
```

# 解決方法

これはAWS CLIがインストールされていない、またはAWS Configureがされていないことが原因でした
AWS CLIは自動で環境変数が設定されるようですが、私は手動でいれることで動くようになりました

```
C:\Program Files\Amazon\AWSCLIV2
```

また、Credentialも他の設定があるせいで以下のエラーになってたので、メモ帳で修正しました

また書籍通りだとクラスターのバージョンでエラーになります

```
error: invalid version, 1.14 is no longer supported, supported values: 1.18, 1.19, 1.20, 1.21
```

そこで、`--version 1.14`と修正しました
Ubuntuを再インストールすると指定したファイルはありませんとエラーになる

# はじめに

この記事は2022年3月にまとめていた「細かいつまずいたことをメモしておく(3月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Ubuntuをアンインストールして再インストールして起動すると`指定したファイルはありません`とエラーがでてしまい起動ができなくなってしまった

アンインストールしてからインストールした際にでてキーを押すとウインドウが消えてしまう

# 解決方法

しばらく時間をあけてインストールしたら治った。アンインストールが影響していたようだった
CodePipelineの実行を1つのロールを複数で利用したらエラーになった

# はじめに

この記事は2022年3月にまとめていた「細かいつまずいたことをメモしておく(3月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

ハンズオン勉強会でいままで実行できていたCodePipelineが実行できないトラブルが発生した
1つのCodePipelineロールを全員で共有して利用しようとしていた

# 解決方法

これは`クロスアカウント`に該当する問題が発生しており、設定により禁止されているためエラーになっていた
それぞれが別のCodePipelineロールを新規作成することで解決した
Vuetify: Invalid prop: custom validator check failed for prop "value"エラーが発生する

# はじめに

この記事は2022年3月にまとめていた「細かいつまずいたことをメモしておく(3月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Vuetifyを利用していたところ`Invalid prop: custom validator check failed for prop "value"`というエラーが発生した

# 解決方法

初期値を`""`ではなく、`null`や`[]`にすることで解決した

# 参考

https://stackoverflow.com/questions/60332960/vue-vuetify-invalid-prop-custom-validator-check-failed-for-prop-value-found
Pytestで親ディレクトリの関数をimportできない

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Pytestで親ディレクトリにあるテスト対象の関数をインポートしようとしたがインポートがなぜかできなかった

# 解決方法

`test/`と`親ディレクトリ`に`__init__.py`を置いたらできるようになった
PythestというよりもPythonで注意すべきところだった
Vuetifyでサイドメニューを作ってrouter-linkを使うとCSSが効いてしまう

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Vuetifyを利用してサイドメニューを作った際にリンクのCSSが効いてしまうので無効にしたかった

# 解決方法

v-contentに`to`が指定できるのでこれを利用すると問題なくできた

# 参考

https://reffect.co.jp/vue/vuetify-v-list-group-link
Railsのコントローラ

### コントローラの作成コマンド
今回はBooksコントローラを作成します
```ruby
rails g controller books
Running via Spring preloader in process 51297
      create  app/controllers/books_controller.rb
      invoke  erb
      create    app/views/books
      invoke  test_unit
      create    test/controllers/books_controller_test.rb
      invoke  helper
      create    app/helpers/books_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    scss
      create      app/assets/stylesheets/books.scss
```

このように表示させると成功です。

BooksControllerを見てみると、
「ApplicationController」を継承しているのが分かります
このApplicationControllerは「app/controllers/application_controller.rb」で定義されています
ここではアプリケーションの全てのコントローラーで共通するヘルパーメソッドや属性などを定義する場所になります

```ruby
class ApplicationController < ActionController::Base
end
```
このApplicationControllerはActionController::Baseを継承していて、
コントローラーの大元になっていて、Railsのコントローラーが持つ基本的な機能を提供しています。

### Controllerのアクションに対してフックで処理を差し込む

複数のアクションで共通のdestroyアクションを用意する

```ruby
def show
  @book = book.find(params[:id])
  (省略)
end

def destory
  @book = book.find(params[:id])
  (省略)
end
```

上記の実装でshowメソッドとdestoryメソッドを見比べるとBook.findが重複しています。
このように同じ処理をメソッドへ抽出し、アクションを呼び出す前や後に実行するフックが用意されています。

「show」「destory」アクションのそれぞれ共通で利用している処理を切り出します。

```ruby
class BooksController < ApplicationController
  before_action :set_book, only: [:show, :destory]
    def show
      (省略)
    end
    
    def destory
      (省略)
    end
    
    def set_book
      @book = Book.find(params[:id])
    end
end
```
フックはonlyやexcepといったオプションをつけることができる/
only →　特定のアクション
except → 指定したアクション以外

フックの一覧
before_action→アクションの実行例
after_action→アクションの後
around_action→アクションの前後
Elyraのjupyter buildでエラーが発生する

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

コンテナでElyraを利用するときに`jupyter build`の段階で以下のエラーが発生するようになった

```
Step 8/29 : RUN jupyter lab build --dev-build=False --minimize=False
 ---> Running in 563e167986a4
Traceback (most recent call last):
  File "/opt/conda/bin/jupyter-lab", line 6, in <module>
    from jupyterlab.labapp import main
  File "/opt/conda/lib/python3.9/site-packages/jupyterlab/labapp.py", line 15, in <module>
    from jupyter_server.serverapp import flags
  File "/opt/conda/lib/python3.9/site-packages/jupyter_server/serverapp.py", line 38, in <module>
    from jinja2 import Environment, FileSystemLoader
  File "/opt/conda/lib/python3.9/site-packages/jinja2/__init__.py", line 12, in <module>
    from .environment import Environment
  File "/opt/conda/lib/python3.9/site-packages/jinja2/environment.py", line 25, in <module>
    from .defaults import BLOCK_END_STRING
  File "/opt/conda/lib/python3.9/site-packages/jinja2/defaults.py", line 3, in <module>
    from .filters import FILTERS as DEFAULT_FILTERS  # noqa: F401
  File "/opt/conda/lib/python3.9/site-packages/jinja2/filters.py", line 13, in <module>
    from markupsafe import soft_unicode
ImportError: cannot import name 'soft_unicode' from 'markupsafe' (/opt/conda/lib/python3.9/site-packages/markupsafe/__init__.py)
1 error occurred:
        * Status: The command '/bin/bash -o pipefail -c jupyter lab build --dev-build=False --minimize=False' returned a non-zero code: 1, Code: 1
```

Elyarのバージョンは2.2.3でした

# 解決方法

`MarkupSage`のバージョンを固定したら解決した

```Dockerfile:Dockerfile
RUN pip3 install MarkupSafe==2.0.1
RUN pip3 install --upgrade elyra==2.2.3
RUN jupyter lab build --dev-build=False --minimize=False
```

# 参考
WSL2でPysmbの接続がきなくなってTimeOutエラーになる（VPN)

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

いままでPysmbに接続ができていたのにいきなり接続できなくなった

# 解決方法

これはWSL2特有の問題っぽく、sudo service docker startでデーモンを起動するとVPNにつながらなくなっていた

```
# つながる
$ ping xx.xx.xx.xx(VPNのIP)

$ sudo service strat docker

# つながらない
$ ping xx.xx.xx.xx(VPNのIP)

# VPNを別のにつなげる
# dockerデーモンが起動しているがつながる
$ ping --.--.--.--
```

検証のためUbuntu18.04LTSをインストールしてDockerをいれたところなぜかpingが通ったので、Ubuntu(WSL)とDockerがいい感じにルーティンしているのがあるタイミングで壊れたのがおそらく原因だとわかった

Dockerを再インストールすることで解決した

```
# アンインストール

$ sudo apt-get purge docker-ce
$ sudo rm -rf /var/lib/docker

# インストール
$ curl https://get.docker.com | sh 
```

これでつながるようになりました。しかし、根本的な解決にはなっていないのでいつおこるかは不明

いきなりsudo apt-get updateができなくなる事象もこれで解決できた
RailsのbrakemanでSexpTypeErrorがでる

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Brakeman実行すると以下のエラーが表示された

```
/myapp $ brakeman
Loading scanner...
Processing application in /myapp
Processing gems...
[Notice] Detected Rails 6 application
Processing configuration...
[Notice] Error while processing /myapp/config/application.rb
[Notice] Escaping HTML by default
Parsing files...
Processing initializers...
/usr/local/bundle/gems/brakeman-4.7.2/lib/ruby_parser/bm_sexp_processor.rb:82:in `process': Result must be a Sexp, was Array:[:arglist, s(:str, "1.0")] (SexpTypeError)
```

# 解決方法

以下のバージョンでインストールするように変更した

```Gemfile:Gemfile
gem 'brakeman', '~> 5.2.0',  require: false
```

# 参考

https://zenn.dev/ishiki/articles/brakeman_sexp_type_error
RspecでMissing host to link to!とエラーがでる

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Rspecを実行したところ`Missing host to link to!`というエラーが発生した

# 解決方法

test環境のデフォルトURLを追加すれば解決する

```rb:/config/environment/test.rb
 config.action_mailer.default_url_options = { host: 'localhost:3000' }
```

# 参考

https://qiita.com/daik/items/41a9bc8dec5ccec37f40
Rspecでuninitialized constant Rack::MiniProfileがでて実行できない

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Rspecを実行したところ以下のエラーが発生した

```
Failure/Error: require_relative '../config/environment'

NameError:
  uninitialized constant Rack::MiniProfiler
  Did you mean?  MiniMime
```

# 解決方法

`Gemfile`の`rack-mini-profile`に`require: false`をつけて、`/conifg/environment/rack-profile.rb`を編集する

```Gemfile:Gemfile
gem 'rack-mini-profiler', '~> 2.0', require: false
```

```rb:/config/environment/rack-profile.rb
if defined?(Rack::MiniProfiler)
  Rack::MiniProfiler.config.auto_inject = false
end
```

# 参考

https://gist.github.com/kogax/7779591

https://qiita.com/kwappa/items/41855b6713f6fc4330ac
datascience-nootebookでjupyter_notebook_configが読み込まれない

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

以下の設定を`jupyter_notebook_config.py`にしたのだが設定が読み込まれなかった

```py:jupyter-notebook_config.py
c.NotebookApp.port = 8000
```

# 解決方法

検証したところこれは`jupyter/datascience-notebook`特有の問題っぽかった
パスワードを設定していたので、その設定をDockerfileに移すとうまく動くようになった

```
CMD  /bin/sh -c "jupyter notebook \
    --NotebookApp.password='sha1:718dd5f3b9a5:a997a62e22ea4347b30b2692c5432d893ec98f63'"
```

また、パスワードの設定をなくすとなぜかポートが8888になってしまった
よくわからないがこの設定で動くようになったので変更した
【YAML】複数行で記述する方法

## 空白で連結
```sample.yml
test: >
  aaa
  bbb
  ccc

# "aaa bbb ccc\n"
```

最後の改行を削除

```sample.yml
test: >-
  aaa
  bbb
  ccc

# "aaa bbb ccc"
```

## 改行で連結
```sample.yml
test: |-
  aaa
  bbb
  ccc

# "aaa\nbbb\nccc"
```
JupyterNotebookのパスワード生成がSha1にならない

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

以下のコマンドでパスワードを発行したところ`argo2`で暗号化されてしまいJupyterでパスワード設定ができなかった

```
python -c 'from notebook.auth import passwd;print(passwd())'
```

# 解決方法

このコードであればSha1で暗号化された

```
$ python -c "import IPython;print(IPython.lib.passwd())"
```
datalistで選択後にも候補を全て表示させる

# 概要

HTMLの< datalist >要素は、選択後に候補が選択したものしか表示されなくなります。
再度、全ての候補を表示させるには、選択した候補を削除する必要があります。

今回はjqueryを使って、選択後も全ての候補が表示されるようにします。

# ソースコード
```test.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <label for="lang">プログラミング言語</label>
    <input list="lang-list" id="lang" name="lang" />

    <datalist id="lang-list">
        <option value="python">
        <option value="php">
        <option value="Go">
    </datalist>
</body>
</html>
```

```test.js

var temp = "";
//候補が表示される前に入力値を削除する
$("#lang").mousedown(function() {
    //tempに選択されている文字列を入れる
    temp = $("#lang").val();
    //入力を削除する
    $("#lang").val("");
});
//候補が表示された後に入力値を入れ直す
$("#lang").click(function () {
    if(temp !== ""){
        $("#lang").val(temp);
    }
});

```

# 解説
< datalist >はクリックされた時に入力値があると候補が出なくなるため、それより前に要素を消してあげる必要があります。そこで.mousedownを使ってクリックより前に削除をし、.clickを使ってもとに戻すということをしてあげます。

必要ないことがほとんどだとは思いますが、ユーザーの用途に合わせて導入してみてください。
vuexでunknown mutation typeとエラーがでる

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Vuexで`unknown mutation type`というエラーが発生した

# 解決方法

index.jsにmutationだけ移したら解決した

https://qiita.com/TsukasaGR/items/e8a47889f65c53751309
Room等で作成したDBの配置先とDB内を参照する方法

# はじめに
Room等でデータベース絡みの実装を行う際に、DB内のデータを参照したり、DB消してみたり等色々検証が必要ですよね。
その際に必要不可欠なDBの配置先とDB内を参照する手順を備忘録的にまとめておこうと思います。

# DB配置先確認方法

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/44cf876a-2776-7486-2f32-ee9abdff348b.png" width="220px">

画面右下のDevice File Exprorerから、[data] > [data] > [パッケージ名] > [databases]の中にroom等で作成したdbが配置されています。
こちらから対象のdbを消したりできるので、検証時に便利です。

# DB内参照方法

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/977360e2-bb51-70ca-7e98-0b0b488c63c7.png" width="220px">

上記スクショの通り、 [View] > [Tool Windows] > [App Inspection] を選択していきます。

するとLogcatなどが並ぶタブ内にApp Inspectionが追加されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/dab3afab-cb26-1470-e91b-de97ce418658.png" width="420px">

追加されたApp Inspectionタブを開くと、左側にdbのリストが表示されているはずなので、ここから確認したいdbを選択するとdb内の情報が参照可能です。

# さいごに
もはやDBを触る際には上記は必要不可欠な機能ですね。
上記理由からご存知の方も多いかもしれませんが、忘れてしまった方は是非ご活用ください。
5.4節 弱収束点列とOpialの定理　定理5.4.3で躓いた話

# はじめに

非線形・凸解析学入門の5.4.弱収束点列とOpialの定理における定理5.4.3で躓いたので、躓いた点を備忘録として残しておく。数学は非専門なので、間違いがあると思います。間違いがあればご指摘頂ければ幸いです。

# 備忘録

## その１
https://mathlog.info/articles/3437

## その２
https://mathlog.info/articles/3438
Salesforceでフローを作成しよう～特定の値のレコードを自動で承認プロセスを起動させる方法

こんにちは。
今回はRakesh Gupta氏のナレッジを翻訳しました

元のナレッジはこちらです
Auto Submit Record into Approval Process with Flow
https://help.salesforce.com/s/articleView?id=000366485&type=1


## 概要
承認プロセスを作成します
そして保存後レコード トリガー フローを作成します。
そして、レコード保存後に承認プロセスを自動起動します

今回は例として
キャンペーンレコード作成時や更新時に「キャンペーンの予算」（BudgetedCost）金額が1000000円を超えた場合、承認プロセスを自動起動する

というフローを作成してみます


## 前提　承認プロセスを作成しよう

フロー作成前にキャンペーンの承認プロセスを作成しましょう


まずは以下のようにキャンペーンオブジェクトの承認プロセスを作成して有効化しましょう
今回作成する承認プロセス（Campaign_budget_greater_than_1M）は以下となります

![承認プロセス01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/d6fe8576-5c12-b56f-8b3e-9ac47f1b4736.png)


## フローを作成しよう

次はフローを作成します

フローから「新規フロー」をクリックします
![フロー01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/23826540-4c0c-c102-4858-58c54edce661.png)


### まずは開始条件を設定します

フローをトリガーするタイミング: レコードが作成または更新された
実行フロー: レコードが保存された後
オブジェクト: キャンペーン
[すべての条件に一致 (AND)] を選択します。
条件を設定
行 1
項目: キャンペーン |IsActive
演算子: 次の文字列と一致する
値: {!$GlobalConstant.True}
行 2
項目： キャンペーン |Budgeted Cost
演算子: 以上
値: 1000000

条件の要件に一致するようにレコードを更新したときのみ　を選択します
[完了] をクリックします。
![フロー0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/8f5da403-b7d3-5eb7-faee-8eee63f57dda.png)

###  次にアクションを作成します

アクションを作成します
「相互関係」から「アクション」を選択しましょう
![アクション０１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/9de3f7ec-7d46-ca8f-cc4d-b80588ce7cfe.png)

[アクション] ボックスに、「承認申請」と入力します。

入力値の設定:
カスタムオブジェクト ID： {!$Record.Id}
承認プロセス名または ID: Campaign_budget_greater_than_1M
登録コメント: フローによる自動送信
[完了] をクリックします。
![承認0003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/ee60b6b2-c35b-eb15-b1a5-478313c91718.png)

###　最後にフローを保存しましょう

以下のようにフローの送信をします

[保存] をクリックします。
フロー ラベルを入力すると、API 名が自動入力されます。任意のラベルを入力してください
[詳細を表示] をクリックします。
種別: レコードトリガフロー
フローを実行するための API バージョン: 51
インタビュー表示ラベル: Submit campaign for Approval {!$Flow.CurrentDateTime}
[保存] をクリックします。
![保存01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/da583e51-829c-6257-2834-fa96b57c48d4.png)



9. フローを確認し問題無さそうであれば、「有効化」ボタンをクリックします。


なお、
登録コメント: フローによる自動送信
の文章は、以下のように承認プロセスのコメントに記載される内容です

![承認コメント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/9787e705-bcd6-7653-1920-c7c1578f8b6e.png)

## 謝辞

今回この記事を執筆したRakesh Gupta様、本当にありがとうございます。
そしてこの記事を公開してくださったSalesforce様、本当にありがとうございます。

Thank you　Rakesh Gupta！

Rakesh Gupta氏についてはこちら

Rakesh is Senior Solution Architect, Salesforce MVP, and Author. With a background in computer science, Rakesh is passionate about solution design and process automation
actions/setup-go@v3にキャッシュ機能が実装されたのでGithub Actionsの設定を書き替える

## 目次

- [はじめに](#はじめに)
- [これまで](#これまで)
- [これから](#これから)
- [おわりに](#おわりに)

## はじめに

初めまして、Rasといいます。普段は[デジタル創作同好会traP](https://trap.jp)というところで活動しています。

https://trap.jp

Github ActionsでGoを使うときは[actions/setup-go](https://github.com/actions/setup-go)を使うのが一般的だと思います。

https://github.com/actions/setup-go

先日v3.2.0がリリースされ、キャッシュ機能が実装されました。Github Actionsのワークフローの記述がより簡潔になります。

https://github.com/actions/setup-go/releases/tag/v3.2.0

CIの実行時間が1分以上短縮できた話や移行でハマってしまった話をしています。良ければこちらもどうぞ (今日投稿されたばかりのピチピチ記事です:fish::sparkles:)。

https://trap.jp/post/1655

## これまで

(ワークフローの発火条件等は省略しています)

```yaml
build:
    name: Build
    runs-on: ubuntu-latest
    env:
      GOCACHE: /tmp/go/cache
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-go@v3
        with:
          go-version: 1.19
      - uses: actions/cache@v3
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-gomod-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-gomod-
      - uses: actions/cache@v3
        with:
          path: /tmp/go/cache
          key: ${{ runner.os }}-go-build-${{ github.ref }}-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-go-build-${{ github.ref }}-
            ${{ runner.os }}-go-build-
      - run: go mod download
      - run: go build -o myApp .
```

## これから

```yaml
build:
  name: Build
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-go@v3
      with:
        go-version-file: ./go.mod # v3.1.0で実装された。go.modからバージョンを取得できる
        cache: true               # デフォルトはfalse
    - run: go mod download
    - run: go build -o myApp .
```

## おわりに

是非使ってみてください。

ちなみにGo強化月間が開催されているみたいですね。

https://qiita.com/official-events/ae80b010f51f7018891a

もう1回貼るんですが本題はこっちなのでこちらも是非ご覧ください！

https://trap.jp/post/1655
１文字だけの要素にもletter-spacingが効くのは仕様だと思っていた

表題の件、気づいたきっかけは「２倍ダーシの隙間問題」。横棒を２つ並べて２倍ダーシで表示したい時、横棒に使用する文字によっては隙間ができてしまい繋がって見えません。この対策には、CSSの`letter-spacing`プロパティに負の値を指定することで隙間を詰める方法があります：

```html:html
<p>――山路を登りながら、こう考えた。</p>
<p><span>――</span>山路を登りながら、こう考えた。</p>
<p><span>―</span>―山路を登りながら、こう考えた。</p>
```

```css:css
span {
  letter-spacing: -0.1em;
}
```

![sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469745/1b095ade-baca-7b2f-3955-b0ec33232058.png)
ところが、２番目の`p`要素のように横棒２つを`span`タグで囲んだ場合、後続のテキストも左側に引き込まれてダーシとの字間が詰まってしまいます。そのため、`span`要素に`margin-right: 0.1em`を加えるなどして見え方を補正する必要があります。

では、3番目の`p`要素のように左側の横棒のみを`span`タグで囲んだ場合はどうでしょう。こちらはダーシの後ろのテキストが引き込まれることなくダーシ間の隙間だけが詰まりました。このやり方が簡単で良さそうに思えますが...。

いや、ちょっと待った。「１文字だけ含む要素に`letter-spacing`を効かせる」...これってCSSの仕様上アリなのでしょうか？

仕様書[CSS Text Module Level 3](https://www.w3.org/TR/css-text-3/)の[7.2. Tracking: the letter-spacing property](https://www.w3.org/TR/css-text-3/#letter-spacing-property)によると、EXAMPLE 23にこんな説明があります。

> EXAMPLE 23
> An inline box is expected to only include letter spacing between characters completely contained within that element, thus excluding letter spacing on the right or trailing edge of the element:

(Google翻訳）
> インライン ボックスには、その要素内に完全に含まれる文字間の文字間隔のみが含まれることが期待されます。したがって、**要素の右端または後端の文字間隔は除外されます**。

つまり、これがあるべき姿だったのですね。

(1) `letter-spacing`に指定した値は**文字間の間隔にのみ**影響を与える
(2) 単一文字のみを含む要素に`letter-spacing`を適用してもレンダリング結果に影響しない（下図に引用）

![css-spec_example23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469745/ef3e009b-53bd-50b8-8217-9a9cb2a68125.png)

いずれも、冒頭に示した「横棒を囲む`span`要素」の実際の表示と整合しません。実際、現状の主要ブラウザは(1),(2)に関してCSS仕様書どおりには実装されていないようです。面白いことにIE6とIE7は`span`の内側のみ正しい結果になっていました：

https://twitter.com/kazhashimoto1/status/1560184725427621896

ソースコード： https://codepen.io/kaz_hashimoto/pen/eYMbeXO

「２倍ダーシ」で`span`要素の後続のテキストも引き込まれていた現象はこれだったのですね。

なお、引用したツイートの内容を補足すると、2002年2月13日付（現在もOpenのまま）
[Bug 125390: CSS letter-spacing style extends after last letter of element with letter-spacing](https://bugzilla.mozilla.org/show_bug.cgi?id=125390)
が登録された当時は、CSS仕様書にletter-spacingの件の振る舞いは明記されていませんでした。
現在のフォーマットでEXAMPLEが載ったのは[2013年10月10日のWD](https://www.w3.org/TR/2013/WD-css-text-3-20131010/)からで、それ以前では
[2007年3月6日のWD](https://www.w3.org/TR/2007/WD-css3-text-20070306/)で初めてサンプルコードが載ったようです：
![css-spec-wd_20070306.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469745/088b25fb-a5a1-276a-1650-fc96c5efdd4f.png)
図で文字"f"の後のspacingが[0]になっているのがわかります。

参考： csswg-drafts/issues/1518
[[css-text] letter-spacing should not apply to the end edge of a line/span?](https://github.com/w3c/csswg-drafts/issues/1518)
Yoctoベースの組み込みLinux

# はじめに
APSで紹介されていた
[Yoctoベースの組み込みLinux「Wind River Linux」を使って、Raspberry Pi上で動作するLinuxディストリビューションをゼロから作る](https://www.aps-web.jp/academy/wr-linux/18676/)
に従って、Raspberry Pi 4で動作するLinuxディストリビューションを作成してみました。

# 機材
|機器|メーカ|
|:-----|:-----|
|ホストPC|Lenovo E570|
|Raspberry Pi 4 ModelB|Raspberry Pi|
|microSDカード 32G|SanDisk|

# ホストPCの準備
ホストPCは「Lenovo E570」を使用し、[Ubuntu Desktop 22.04.01 LTS](https://jp.ubuntu.com/download) をインストールしました。
[Universal USB Installer](https://universal-usb-installer.jp.uptodown.com/windows)を使用してUSBからインストールしました。

USBから起動させるためにBIOSの設定を変更する必要がある場合、Windowsを再起動して画面が暗くなっている間に、LENOVOロゴが表示されるまでF1キーをタップしているとBIOSに入りやすいそうです。

# Raspberry Pi Imager
SDカードに書き込みを行うために[Rasberryp Pi Imager](https://www.raspberrypi.com/software/)をインストールします。
下記のコマンドを実行することでインストールできました。
```
sudo apt install rpi-imager
```

# 手順
基本は記事に従って進めればいいのですが、一部手順通りではうまくいかないところがあります。

### Raspbian Liteを入手し、microSDカードへ書き込む
現在は「2020-02-13-raspbian-buster-lite.zip」はダウンロードできないようでした。
代わりにRaspberry Pi ImagerでmicroSDカードの準備を行います。

Raspberry Pi Imagerを起動して「OSを選ぶ」をクリックします。
![step0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148400/f79802b1-0b45-2e11-9afe-0f4ab8e06ffb.png)

「Raspberry Pi OS (other)」を選択します。
![step1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148400/68e56ea8-2e4f-1321-db93-9d09d83a5dad.png)

「Raspberry Pi OS Lite (32-bit)」を選択します。
![step2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148400/55bc14b7-a41f-c785-c77b-efcb48f3c70a.png)

「設定」ボタンをクリックします。OSを選択しないと設定ボタンは表示されません。
![step3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148400/daf8d971-5d14-0401-d29f-608efba6ea3d.png)

「永続的な設定」で「終わったときにメディアを取り出す」のチェックを外します。microSDカードにOSを書き込んだ後に、microSDカードの中身を編集する必要があるためです。
![step4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148400/a5f1ee51-5384-cefc-85fd-beb71639ebc0.png)

### bitbakeコマンドでLinuxディストリビューションをビルドする
```
記事では、
bitbake wrlinux-image-glibc-std -c populate_sdk_ext
とありますが、
bitbake wrlinux-image-std -c populate_sdk_ext
とするようです。
```
Linuxディストリビューションのビルドには約20時間かかりました。
E570では4つの処理を並列して行っていました。
試してはいませんが、下記の記事を参考にすることで時間を短縮できるのかもしれません。
[Yocto ビルド並列数の調整方法](https://qiita.com/byuu/items/95086d07e317dfe64ee2)
[Yocto build 時間を10時間から10分に高速化した話](https://qiita.com/naohikowatanabe/items/868eefed28cefec20ff8)

一日で終わらせることができなかったので一度中断して再開しました。
※中断はターミナルで「Ctrl + Z」です。
※再開は「jobs」コマンドで中断しているジョブを確認して「fg ジョブ番号」です。

### ビルド結果をmicroSDへ書き込み、起動する
パーテンションのマウントは下記になりました。
```
/media/ユーザ名/boot
/media/ユーザ名/rootfs
```

# 編集後記
いろいろ試していると容量を数10Gから数100G単位で使用していきます。
アンインストールは下記に従えばいいのだろうか。
[Uninstalling Wind River Linux](https://docs.windriver.com/bundle/Wind_River_Linux_Getting_Started_LTS_1/page/teu1550266023470.html)

# 参考
[UbuntuをUSBから起動する](https://dailylife.pman-bros.com/ubuntu-usb-boot/)
[Yoctoベースの組み込みLinux「Wind River Linux」を使って、Raspberry Pi上で動作するLinuxディストリビューションをゼロから作る](https://www.aps-web.jp/academy/wr-linux/18676/)
[Yocto ビルド並列数の調整方法](https://qiita.com/byuu/items/95086d07e317dfe64ee2)
[Yocto build 時間を10時間から10分に高速化した話](https://qiita.com/naohikowatanabe/items/868eefed28cefec20ff8)
[Wind River Linux](https://www.windriver.com/japan/products/linux/tutorial/build-with-code)
vuex-persistedstateでVuex mutations should be function but "mutations.default" isエラーが発生する

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

vuex-persistedstateを導入したら`Vuex mutations should be function but "mutations.default" is`というエラーがでた

# 解決方法

原因はmoduleを使わずに`index.js`にすべてを書いていたことだった
ファイル分割をしたら正しく動いた

https://maasaablog.com/development/vue/491/

https://stackoverflow.com/questions/54691262/vuex-mutations-should-be-function-but-mutations-default-is
Vue3でVuetify、Vuexが使えない(not foundになる)

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Vue3にVuetifyをいれたのだがうまく動作していない

# 解決方法

Vue3だとVuetifyが2022年2月時点で対応していない

Vue2に戻してVuexを入れた
vue-routerやVuexは最新でないものを入れないとnot foundになる

今回は`vuetify@2.6.3`、`vuex@3.1.2`を入れた
Splunk: エクセルでSplunk向けのUNIX時間を計算する


###### 実施環境

Splunk Free 8.2.2
Microsoft Office Professional Plus 2016

### 0. 概要

 Splunk における日時データは、内部的には UNIX 時間の形式で格納されています。
このことを意識することはあまりありませんが、たまに UNIX 時間の形式そのままで取り扱いたい場合があります。

インターネットを探せば UNIX 時間の変換ツールはいくらでも転がっていますが、今回はそれらは使用せず、 Excel の機能のみを用いて変換を行います。

### 1. UNIX 時間

そもそも UNIX 時間(別名 POSIX 時間、エポック秒、ユニックス時刻、etc...)とは何でしょうか。
 UNIX 時間とは、「1970年1月1日0時0分0秒」(別名 UNIX エポック)から経過した秒数で日時を表す形式です。
なお、この「1970年1月1日0時0分0秒」は協定世界時(別名 UTC )での日時であり、例えば日本の場合は+9時間して「1970年1月1日9時0分0秒」となることに注意が必要です。

実際に「 strptime 」関数を使用して、「2022年4月1日12時34分56秒」を Splunk 上で UNIX 時間に変換してみましょう。
なお、今回使用した Splunk では日本標準時(別名 JST )が適用されています。

```Splunk:Splunk
| makeresults
| eval time_unix = strptime("2022/04/01 12:34:56", "%Y/%m/%d %H:%M:%S")
```

![WS000208.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/898e9445-2370-8a1c-8dd5-202e42fa4d65.jpeg "UNIX時間")

「1648784096」という値が出力されました。
これが日本標準時での「2022年4月1日12時34分56秒」の UNIX 時間表記となります。

### 2. Windows 1900 日付システム

次にエクセルの日時データですが、こちらはまた別の形式で日時データを内部的に保持しています。
それが、「 Windows 1900 日付システム」といわれる形式です。

この形式では、「1900年1月**0**日0時0分0秒」からの経過「日数」(すなわち、「1900年1月1日0時0分0秒」=1、「1900年1月2日0時0分0秒」=2、...となります)で日時を記述します。
日未満の時/分/秒は小数によって表現されます。
なお、こちらの形式では協定世界時かどうかを考える必要はないです。

実際にセルの表示形式を「数値」にして、「2022年4月1日12時34分56秒」をエクセル上で Windows 1900 日付システムに変換してみましょう。

![WS000217.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/87c97d01-f18e-9c63-8c3f-ae239960dbdb.jpeg "Windows1900日付システム")

「44652.5242592593」という値が出力されました。
これが「2022年4月1日12時34分56秒」の Windows 1900 日付システム表記となります。

### 3. UNIX 時間 と Windows 1900 日付システムの関係図

UNIX 時間 と Windows 1900 日付システムの関係は、以下の図のような形になっています。

![WS000218.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/af35a7d1-e235-51ab-b0bc-fa362aa637d6.jpeg "関係図")

### 4. UNIX 時間 ⇒ Windows 1900 日付システム

 UNIX 時間を Windows 1900 日付システムに変換するには、以下のような操作を行います。

1. 時差(今回は+09:00)を秒に変換し、 UNIX 時間に加算する

1. 1の結果を日に変換する

1. 2の結果に「25569日」を加算する

「25569日」は1900年1月0日から1970年1月1日の間の日数で、次のように算出されます。

1(日：1/0~1/1の補正分)+365(日)×70(年)+1(日：2/29分)×18(年：1900~1970の閏年の数)=25569

上記の式をエクセルで記載すると、以下のようになります。

```Excel:Excel
=(UNIX時間+(時差*60*60))/(60*60*24)+(1+365*70+1*18)
```

![WS000219.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/fc7b73bb-286a-9a92-a3c0-8531c859d77a.jpeg "UNIXからWindows")

### 5. Windows 1900 日付システム ⇒ UNIX 時間

先ほどとは逆に、 Windows 1900 日付システムを UNIX 時間に変換するには、以下のような操作を行います。

1.  Windows 1900 日付システムから「25569日」を減算する

1. 1の結果を秒に変換する

1. 2の結果から時差(今回は+09:00)を秒に変換して減算する

上記の式をエクセルで記載すると、以下のようになります。

```Excel:Excel
=(Windows1900日付システム-(1+365*70+1*18))*(24*60*60)-(時差*60*60)
```

![WS000220.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/1ff55602-49a7-f553-7a8d-4aacb2de1137.jpeg "WindowsからUNIX")
Vueで"export 'default' (imported as 'router') was not found inエラーががでる

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

`vue-router`を利用しようとすると`export 'default' (imported as 'router') was not found in`というエラーがでる

# 解決方法

Veu3にしていたのでそれようの`vue-router`をインストールする必要がある

```
$ yarn remove vue-router
$ yarn add vue-router@next
```

vue-routerの設定は以下を参考にした

https://reffect.co.jp/vue/vue-cli-vue-router-setting#routerjsVue3
Webpackerがnode_moduleにあるのにError: Cannot find module 'vue/compiler-sfc'

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Vue環境でWepackerが`Error: Cannot find module 'vue/compiler-sfc'`というエラーを出すようになっていた
`node_module`にちゃんと存在しているのになぜ

# 解決方法

`docker-compose down`をしなおして立ち上げたらエラーがなくなった
おそらくですがキャッシュが効いていたのかもしれない
Vuexをインストールしたらexport '○○' was not found in

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 問題

Vuexをインストールしようとするのエラーが発生した

```
export '○○' was not found in
```

# 解決方法

VuexをVue3で使っていたが対応しておらず、Vue2でしか利用できなかった

```
$ yarn add vue@next vue-loader@next @vue/compiler-sfc
```

# 参考

https://universato.hatenablog.com/entry/2021/07/16/025001
Railsのdevice_token_authでパスワード再設定で参考にした記事

# はじめに

この記事は2022年2月にまとめていた「細かいつまずいたことをメモしておく(2月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください

# 参考

https://footlog-blog.net/posts/20220103-the-event-of-no-redirection-by-resetting-the-password-of-devise_token_auth/
【vscode】ショートカット一覧【mac】

※備忘録として、随時更新します


| 選択系 | コマンド |
|:-----:|:----:|
|   矩形選択|  command + shift + option + 矢印キー |
|  同一単語一括選択 |  command + shift + Lキー |
| 任意箇所を複数選択 | option + drag |

| 移動系 | コマンド |
|:-:|:-:|
| タブ移動  | ctrl + tab  |
| タブ移動2  |  command + shift +  ] |
|  行移動 |   option + 矢印キー(⬆︎or⬇︎) |
| 指定した行数に移動  |   ctrl + G |
| カーソルを文字の先頭（最後）へ | command + ⇦(⇨) |
| カーソルの下に行挿入 | command + enter |
| カーソルの上に行挿入 | command + shift + enter 

| ファイル操作系 | コマンド |
|:-:|:-:|
| ファイル検索  | command + P  |
| サイドバーを開く  | command + B  |

| タブ | コマンド |
|:-:|:-:|
| <%= %>  | pe + tab  |
| <% %>  | er + tab  |
|   |   |



### 行削除

    command + shift + K

### 行コピペ

    option + shift + 矢印キー(⬆︎or⬇︎)
【Python itertools】総当たりで組み合わせを求める

# やりたいこと

以下のように与えられた配列の各要素を超えないような数のすべての組み合わせを求めたいとします。

```python
Args: [3, 1, 2]
Returns: [
    [1, 1, 1],
    [1, 1, 2],
    [2, 1, 1],
    [2, 1, 2],
    [3, 1, 1],
    [3, 1, 2]
]
```

# 実装

```python
from itertools import product
from string import ascii_lowercase

def get_combination(input_list):
    return [
        list(map(lambda x:ascii_lowercase.index(x) + 1, tup))
        for tup in list(product(*tuple([ascii_lowercase[:num] for num in input_list])))
    ]

if __name__ == '__main__':
    combination = get_combination([3, 1, 2])
    print(combination)
```

出力は以下のようになります。

```
[[1, 1, 1], [1, 1, 2], [2, 1, 1], [2, 1, 2], [3, 1, 1], [3, 1, 2]]
```

## 解説

`string.ascii_lowercase` で小文字アルファベットの文字列を取得します。これをインデックスで切り出します。例えば以下のようになります。

```python
>>> from string import ascii_lowercase
>>> ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> ascii_lowercase[:2]
'ab'
```

`itertools.product` で総当たりの組み合わせを求めます。例えば以下のようになります。

```python
>>> from itertools import product
>>> list(product('ab', 'ab'))
[('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')]
```

`('a', 'b')` を `[1, 2]` に変換する方法は以下のようになります。

```python
>>> list(map(lambda x: ascii_lowercase.index(x) + 1, ('a', 'b')))
[1, 2]
```

# 参考資料

https://docs.python.org/ja/3/library/itertools.html

https://docs.python.org/ja/3/library/string.html
AWSのデフォルトリージョンを東京にしてみた

# やってみた
コンソール画面左下にある Unified Settingsから設定画面へ移動

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/516945/4ffd6479-a4b7-d8c4-cc01-b67d9b6b42bc.png)

デフォルトのリージョンを上記の画面の様に東京リージョンに設定し保存を押せばOKです！

# 公式ドキュメント
https://docs.aws.amazon.com/ja_jp/awsconsolehelpdocs/latest/gsg/select-region.html?icmpid=docs_unified-settings_help_panel
React + Rails + AWS Fargate の構成を実現したい - 00 全体概要編

## 概要

現在正社員としてバックエンド + インフラをメインにWeb系エンジニアをしている。
技術力の向上を目的に個人開発を行いたいと常日頃考えているが、現時点で開発したいアプリケーションがない状況である。
このまま考えてるだけでは時間がもったいないため、まずはモダンかつ定番なWebサービス構成を作ることにした。
これにより、いざ個人開発でサービスを作りたいと思った時にアプリケーション開発に注力できるようにする。

## 自分のスキル

- 実プロジェクトではJavaScriptをメインで使用している
    - TypeScriptは使っていない
    - Reactはある程度読むことはできるがガリガリ書いていない

- AWSの設計・構築をメインで担当している
    - ECSなどのコンテナサービスは使っていない
    - CDKによるインフラコード化は経験あり
- CI/CDに関して一定の知見はある

## やりたいこと

以下技術も用いた構成を実現し、いざ個人開発でサービスを作りたいと考えた時にアプリケーション開発に注力可能とする

- 共通
    - Docker
- フロントエンド
    - React + TypeScript + ESLint
- バックエンド
    - Ruby on Rails
- インフラ
    - AWS Fargate
- その他(余力があれば)
    - GitHub ActionsによるCICD実現
    - Terraformによるインフラコード化

## 全体構成図

TBD - draw.ioで作成する

## 進め方
以下などの記事を参考に、構築を進める。

https://zenn.dev/hibriiiiidge/books/49ee4063b10cec1df1a2

https://zenn.dev/prune/books/28c2d690e11e45

## 目次案

仮ではあるが、以下の流れで進めようと考える。
以下項目ごとにQiitaで記事を作成する。

- [フロントエンドの環境構築(Docker + React + TypeScript + ESLint + Prettier + VSCode)](https://qiita.com/memomaruRey/items/ccb7870cabd0bb639652)
- [バックエンドの環境構築(Docker + Rails)](https://qiita.com/memomaruRey/items/8c0103f16bd304c22bda)
- [フロントエンドとバックエンドの連携](https://qiita.com/memomaruRey/items/96c9371fbe1c7b58be9c)
- [フロントエンドのテスト整備(Jest)](https://qiita.com/memomaruRey/items/d146b4a527c11089a429)
- [バックエンドのテスト整備(RSpec)](https://qiita.com/memomaruRey/items/8a11180578a5d270545d)
- [フロントエンドのCI導入(GitHub Actions)](https://qiita.com/memomaruRey/items/a6a9567f9c07fd50c8f0)
- [バックエンドのCI導入(GitHub Actions)](https://qiita.com/memomaruRey/items/3895c5ddf5735dcd6ecc)
- AWS概要
- AWS設定 & フロントエンドデプロイ
- AWS設定 & バックエンドデプロイ
- フロントエンドのCD導入(GitHub Actions)
- バックエンドのCD導入(GitHub Actions)
- Terraformにインフラコード化
フロントエンドエンジニアを目指してJavaScriptを基礎か学び直す[分割代入]

これまで真剣に向き合ってこなくてもなんとかやってこれたのですが、
「ちゃんとフロントエンドエンジニアになろう」と決心して奮闘している1児の父です！

フロントエンドエンジニアを目指したい人の役に立てれば嬉しいです！

## clean-code-javascript
キレイなコードが書けるようにと思って見ていたら、コードの解説でわからない箇所が出てくる始末…。

https://github.com/mitsuruog/clean-code-javascript

非常に勉強になったのでオススメです！
これまで書いたコードを思い出して懺悔しながら読んでおりました…

## 本題の分割代入について

clean-code-javascriptの中の例としてあったコードに下記のようなものがありました。

```JavaScript
1 const address = 'One Infinite, Loop Cupertino 95014';
2 const cityZipCodeRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/;
3 const [, city, zipCode]= address.match(cityZipCodeRegex);
```

僕がわからなかったのは3行目です…

```JavaScript
3 const [, city, zipCode]= address.match(cityZipCodeRegex);
```

すごく基本的なコードだと思いますが…「そんなのもわからないのか！！」
と言いたい気持ちは抑えておいてもらえると嬉しいです…

結論から言えば…**「,（カンマ）」は1つ目を飛ばすことができる**記述です。
1つ目というのは…

```JavaScript
1 const address = 'One Infinite, Loop Cupertino 95014';
2 const cityZipCodeRegex = /^[^,\\]+[,\\\s]+(.+?)\s*(\d{5})?$/;
    3 const [, city, zipCode]= address.match(cityZipCodeRegex)||[];
```

1行目を2行目の正規表現を使って、3行目でmatchを使用し条件の一致した文字列を返しているわけですが、1つ目に返ってくる結果をスキップして、2つ目をcityに代入、3つ目をzipCodeに代入しているということですね。
【初心者向け】 Next.js 公式チュートリアル 学習記録2

# はじめに
Next.jsはReactと何が違うのか、Next.jsの特徴、
公式チュートリアルで学んだことを自分用のメモとして簡単にまとめます。

以下の記事の続きです。
[【初心者向け】 Next.js 公式チュートリアル 学習記録1](https://qiita.com/bear05/items/24ea86e65da79bcdb600)

# Pre-rendering and Data Fetching
## Pre-rendering
通常、Next.jsでは事前にすべてのページを静的HTMLレンダリングする。(プレレンダリングする)
ブラウザの負荷を下げられる
→Next.jsではブラウザのJavaScriptを無効にしてもページが表示されるが、Reactでは表示されない。
結果、パフォーマンスとSEOが向上する。

## Two Forms of Pre-rendering

事前レンダリングにはStatic GenerationとServer-side Renderingの2つの形式がある。 
Static Generation…ビルド時にhtmlをレンダリングする。
Server-side Rendering…リクエスト事にhtmlをレンダリングする。

Next.js では、ページごとに事前レンダリングの形式を選択できる。
ほとんどのページでSG、その他のページではSSRを使用して、ハイブリッドなNext.js アプリを作成できる。
可能な限りSGが望ましい。
SNSや動画配信アプリなど、リアルタイムであることが重視されるものはSSGで作成するとよい。

データの取得あるなしにかかわらず、SGを実行できる。
データを取得する場合は、「getStaticProps」を用いる。
「getStaticProps」はサーバー側で実行される。

SSRの場合は、「getServerSideProps」を用いる。

Next.jsでもCSRが使用できる。
使用するときは、SEOが関連しない非公開ページを作成するときなど。

以下の記事にレンダリングについて詳しく解説されていた
[Next.jsにおけるSSG（静的サイト生成）とISRについて（自分の）限界まで丁寧に説明する](https://qiita.com/thesugar/items/47ec3d243d00ddd0b4ed)

## Dynamic Routes

動的ルートはページのコンテンツへのルート(ファイルパス)が外部データに依存する場合に使用する。
動的なURLを作成することができる。
動的なページは[]で囲む。

「getStaticPaths」でパスを作れる

## fallback
存在しないurlをたたいたときどういう動きをするか設定する

## Catch-all Routes
動的ルートの階層構造を深くすることができる


# 参考記事
[Next.js　チュートリアル](https://nextjs.org/)
[【日本一わかりやすいNext.js入門】#1 講座の概要](https://www.youtube.com/watch?v=F77RUjHZEAc)
React + Rails + AWS Fargate の構成を実現したい - 01 バックエンド環境構築編(Docker + Rails)

# 概要

https://qiita.com/memomaruRey/items/746f9cff0ceefe8b6157

# 本記事のゴール
以下を参考にDocker + Railsの環境構築を行う。

https://zenn.dev/hibriiiiidge/books/49ee4063b10cec1df1a2/viewer/dc751838fa3715f814dd

以下つまづいた点をメモする。

# つまづいた点
## 1. Dockerfileの修正

参考のDockerfileだとエラーが発生したので、修正

```diff
FROM ruby:2.6.6

ENV LANG C.UTF-8
ENV TZ Asia/Tokyo

RUN mkdir /app
WORKDIR /app

ADD Gemfile /app/Gemfile
- RUN apt-get update -qq && \
- apt-get install -y build-essential \
- libpq-dev \
- sudo \
- gem install bundler:2.0.1
+ RUN apt-get update -qq
+ RUN apt-get install -y build-essential libpq-dev
+ RUN gem install bundler:2.0.1

RUN bundle install

ADD . /app
```

## 2. config/yamlの修正
差分がわかるように以下記載

```diff_yaml
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
- host: localhost

development:
  <<: *default
+ host: db
  database: app_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
+ host: <%= ENV['DB_HOST'] || 'db' %>
  database: app_test
```

## 3. docker-compose up後

### エラー内容
```bash
backend  | Could not find gem 'mysql2 (>= 0.4.4)' in any of the gem sources listed in your Gemfile.
backend  | Run `bundle install` to install missing gems.
backend exited with code 7
```

### 解決策
エラーメッセージより、以下を実行する
```
docker-compose run backend bundle install
docker-compose up
```

https://qiita.com/satto0303/items/c135c2279a1646921fc2

## 4. localhost:5000 アクセス後

### エラー内容
```
ActiveRecord::NoDatabaseError (Unknown database 'app_development'):
```

### 解決策

以下でデータベースを作成してから、再度アクセスする

```
docker-compose up
docker-compose exec backend bin/rails db:create
```

### エラー内容
```
Migrations are pending. To resolve this issue, run: rails db:migrate RAILS_ENV=development
```

### 解決策

`rails db:create`後に`rails db:migrate`を行う

```
docker-compose exec backend bin/rails db:create
docker-compose exec backend bin/rails db:migrate
```

参考
https://k-koh.hatenablog.com/entry/2020/02/06/103517
cscの作法 その265

# 概要
cscの作法、調べてみた。
練習問題やってみた。
構想編2。

# 練習問題
shellcodeを実装せよ。

# 方針2
- win32apiを使う。
- VirtualAllocExでメモリー確保。
- WriteProcessMemoryでshellcodeを転送。
- CreateRemoteThreadで実行。
- 問題あり
ソースok
コンパイルok
exe実行で、defenderに検知されて隔離、バンされる。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/fd17e1eb-1d71-2682-a1f6-1836e4f08049.png)



以上。
コピペで準備 composer

````
# php.ini を変更
# コメントアウトと値の設定
# extension=openssl
# extension_dir = "ext" 

# インストール用フォルダを作って移動
mkdir install
cd install 

# https://getcomposer.org/download/ 
# Command-line installation の通りに実行して composer.phar をダウンロード
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

# composer.phar を 移動
mv composer.phar ../
cd ../
# 実行用バッチファイル作成
echo php "%~dp0composer.phar" %* > composer.bat

# 実行テスト
composer.bat --version

````
N+1問題のイメージ画像

![スクリーンショット 2022-08-21 10.35.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/8af891e4-c146-6488-7379-531b670a4e49.png)

N＋１問題の説明です。1：Nというのは１ユーザーに対してN個の投稿データが存在することをさします。

![スクリーンショット 2022-08-21 10.25.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/61c96efb-1d08-f07d-a868-f12d3e294db7.png)

![スクリーンショット 2022-08-21 10.25.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/b70935c0-1141-c2ad-b83e-2a99edf9eb48.png)

![スクリーンショット 2022-08-21 10.26.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/08eeb6ca-a3ab-96e9-a424-9f89f4f35f1e.png)

![スクリーンショット 2022-08-21 10.26.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/25073e7d-2fc3-d516-f97e-6f0abed6c8e7.png)

![スクリーンショット 2022-08-21 10.26.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/e22fdc82-3c46-6447-f2ac-5bc97f2558c4.png)
自作ネットワークオーディオプレーヤー

FreeBSD 12-STABLEで作っているネットワークオーディオプレーヤーです。ならべてテストしてみています。

mpg123を使っているので対応しているフォーマットはmp3だけですが、[WBGO](https://www.wbgo.org/)が聞けるので十分です。

![IMGP0021.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/0031e644-1da5-794c-cca5-b98189c58853.jpeg)

一番手前のはAtheros AR9341なSOCからSPDIFを出しています。Flashが8Mにできなかったので、4MのSPI Flashが2つ入ってます。GPIOのパターンから74HC04の2回路でバッファにしてTOSLINKモジュールにつないであります。

黒い大きいのはRalink RT3883でUSBオーディオにつないでします。Flashは8Mなんので余裕です。USBオーディオモジュールも自作です。

USBオーディオモジュールもいろいろ作っています。

![FcVqZbOaQAEKeke.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/a14ec9fd-574f-60e0-65d6-ed44c40f3ff9.jpeg)

奥の白いのはAR9341でI2Sが出せるようにしました。これも4M x 2なFlashです。I2Sのコネクタは自作USBオーディオモジュールと同じです。

AR9341はSPDIFが最初できたのでSPDIFなDAIのWM8805GEDSを購入してI2Sすることも考えたのですが、Pin MUXのおかげでI2Sの直だしが思いのほか簡単にできました。

SPDIFはI2Sの情報に属性情報が追加されるので、処理が重くなり不利になり、音に影響があるかもしれません。

またSPDIFだと送り側と受け側で別々にクロックを持つ必要があり、音にはよくなさそうです、

昔何も分かってなかった頃、SPDIFは光でデジタルだから音がいいと思い込んでいました。

すべてMIPS 74Kです。FreeBSDのAudioスタックは24KなMIPSではまともに動きません。

最近はオーディオ機器にも関わらず冷却用のファンがついていて、騒音を出す機器もあります。ルーターは省電力でファンがなく静穏なのも良いです。

Ralink好きなのですが、AtherosのPin muxとSPDIFサポートはすばらしいと思います。

すべてHardOffで入手したもので総額1000円にもならないと思います。

右のアルミの箱はぺるけさんのFET式差動ヘッドホンアンプ Version 2でケーブルはモガミ電線のNEGLEX 2510です。

残念ながら会社は解散されたようですが、モガミ電線の社長さんはFreeBSDの資料をいろいろ書かれていました。

sysctlのdev.pcm.0.bitperfectやdev.pcm.0.play.vchanrateを変えてみるのも良さそうです。
Mac購入後のおすすめ初期設定・ツール

# はじめに
プログラミング学習中の[@kat_log](https://twitter.com/kat__log "Twitter")と申します。

M2マックに買い替えまして、自分が行った初期設定をご紹介してみようと思います!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/e6bb1b7a-8490-5013-62e2-2b85ce13ffb7.png)

# ツール関係

## ブラウザダウンロード
王者Chromeも好きですが、自分はBraveというブラウザが気に入っています!
- デフォルトで色んなサイトの広告がカットされます
- BATという仮想通貨を受け取れます(実際に受け取るにはBitFlyerという仮想通貨の口座開設・連携が必要です)

https://brave.com/

### 常にフルURLを表示する
1. ブラウザを開く
1. メニューバーの「表示」タブ
1. 常にフルURLを表示する

:::note info
もしくは、URLバー（オムニボックスと言うらしいです）を右クリックして出るメニューから常にフルURLを表示
:::

## グーグル日本語入力ダウンロード
便利です!(雑すぎる説明😂)

https://www.google.co.jp/ime/

## Clipyダウンロード
クリップボード管理アプリです!
何個も前にコピーしたデータにアクセスできるので、まとめてコピー・まとめて貼り付けといったことができるようになります!

https://clipy-app.com/

## RunCatダウンロード
メニューバーにCPU使用率を常駐で表示できます!

![Screen Shot 2022-08-21 at 8.43.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/7a7b4df7-cdad-9b26-43e6-b6b8c5a002af.png)


https://apps.apple.com/jp/app/runcat/id1429033973?mt=12

## Just Focusダウンロード
ポモドーロテクニックを導入できます！
25分経つと画面全体を画像で覆われるので確実に休憩に入れます！
（自分の場合アラーム鳴らしたり通知が飛んでくるくらいだと、無視してぶっ続けてしまいポモドーロを取り入れられていなかったのですが、こちらのツールで解決しました）

https://apps.apple.com/jp/app/just-focus/id1142151959?mt=12

# 設定関係

:::note warn
英語でセットアップしているため日本語の場合↓の項目名に違いがあるかもしれません。
:::

## マウスポインターの動きを最速にする
1. 設定
1. トラックパッド
1. ポイント＆クリックタブ
1. トラッキングスピードを一番右にする

## ページスクロールを最速にする
1. 設定
1. アクセシビリティ
1. マウス＆トラックパッドタブ
1. マウスオプション
1. スクロールスピードを一番右にする

## 文字カーソルの移動を最速にする
1. 設定
1. キーボード
1. キーボードタブ
1. キーリピート、ディレイアンティルリピートを一番右にする

## CapsLockキーをコントロールキーに変更する
1. 設定
1. キーボード
1. キーボードタブ
1. モディフィアキー
1. CapsLockをコントロールにする

## ファインダーにパスバーを表示する
1. ファインダーを開く
1. メニューバーの「表示」タブ
1. パスバーを表示をクリックする

## ファインダーにてファイルの拡張子を表示する
1. ファインダーを開く
1. メニューバーの「ファインダー」タブ
1. 「環境設定」
1. 「詳細」タブ
1. 「すべてのファイル名拡張子を表示」にチェック
![Screen Shot 2022-09-10 at 9.22.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/483a9d89-1557-c0b3-7c2a-97aa5b803df2.png)


# おわりに
お読みいただきありがとうございました！
どなたかの参考になれば嬉しいです😆