OmniAICreator/Qiita-1.07M huggingface dataset:
WEB開発をやり始めてみる(Ruby:FizzBuzz)

# やったこと
### FizzBuzz
```ruby:
def fizz_buzz(n)
    if n % 15 == 0
        "FizzBuzz"
    elsis n % 3 == 0
        "Fizz"
    elsis n % 5 == 0
        "Buzz"
    else
        n.to_s
    end
end

puts(1)
puts(2)
puts(3)
puts(5)
puts(15)
```
# まとめ
### 15が先にあるのは、仮に3が上にあると3が該当するため、15を先に入れている。
```ruby:
def fizz_buzz(n)
    if n % 15 == 0
        "FizzBuzz"
```
### n.to_sは「n」に対して数値で返すメソッド（.to_s）
```ruby:
else
        n.to_s
    end
```
JavaScriptのクロージャについて（自分のための備忘録）

◆クロージャとは
　関数とその中に同封された関数の「外」にある変数の組み合わせ。
　（関数とその関数が宣言された環境を合わせて指すプログラム用語。）

◆クロージャはなぜ重要？どのように使われる？
　・関数のバリエーションを作るのに便利。
　・関数内で使用される変数や定数を外から変更されたくない時に使える。

◆クロージャの例
　const root = x => {
　　return y => y ** (1/x); 
　}

　const root2 = root(2);
　console.log(root(4)); // -> 2
SakuraサーバーでLaravelを動かしてデータベースと接続する方法

# 参考URL
## インストール方法
* https://note.com/koushikagawa/n/nb69ebe8b3e90
## Migrationについて
* https://knowledge.cpi.ad.jp/howto-cpi/laravel-migration/

# 手順
## SSHでサーバーにアクセス
```
$ ssh <User>@<User>.sakura.ne.jp
```

## composerのインストール
```
$ cd www
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar
```

## composerでLaravelのインストール
```
$ php composer.phar create-project laravel/laravel test
```

## データベースと接続
### .envファイルを編集
```.env
DB_CONNECTION=mysql
DB_HOST=<URL>
DB_PORT=3306
DB_DATABASE=<Database>
DB_USERNAME=<Username>
DB_PASSWORD=<Password>
```

### アプリケーションキーの作成
```
$ php artisan key:generate
```

### マイグレーションする
* Laravelでは、マイグレーションファイルにテーブルの定義を記載して、それをマイグレーションすることによりデータベースを操作する
```
$ php artisan migrate
```
Python,Ruby,PHP,Java,JavaScript,Perlのソケット通信の比較 | プログラミング言語比較

<a href="https://qiita.com/yuki_kimoto/items/f9c2454e7f9130ddb003">Qiita > プログラミング言語の比較</a>

プログラミング言語Python,Ruby,PHP,Java,JavaScript,Perlのソケット通信の比較

# Python

https://qiita.com/nadechin/items/28fc8970d93dbf16e81b

# Ruby

https://qiita.com/kudojp/items/d416d4c97f9d0512c088

# PHP

https://qiita.com/shiba0410/items/3102592350039bc1a7b9

# Java

https://qiita.com/Hyman1993/items/a3aaabbb2e83580d68d2

# JavaScript

https://qiita.com/take4eng/items/d0b009c48ee8c3fe420a

# Perl

https://perlzemi.com/blog/20090406123890.html
[書籍感想]PMBOKはじめの一歩 スッキリわかるプロジェクトマネジメントの基本

## 読了した書籍について

書籍名：[PMBOKはじめの一歩 スッキリわかるプロジェクトマネジメントの基本](https://www.amazon.co.jp/PMBOK%E3%81%AF%E3%81%98%E3%82%81%E3%81%AE%E4%B8%80%E6%AD%A9-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8B%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E5%9F%BA%E6%9C%AC-%E9%A3%AF%E7%94%B0-%E5%89%9B%E5%BC%98-ebook/dp/B09P2Z6BHY)
作者 : 飯田 剛弘, 奥田 智洋, 國枝 善信
分野 : PMPMBOK（第6、7版）の解説

## 手に取った理由
現場リーダに任命され、世界標準の知識体系がないものかと探したところ、PMBOKに行きつきました。
数あるPMBOKに関する書籍の中から、下記の理由により選ばせていただきました。
- 資格対策本でないこと
    - PMBOKの大筋を理解することが目的のため
- 第6版と第7版の違いに言及があること
    - PMBOKは2021年に大幅な改定があり、改定理由などを知りたいため

## 書籍の概要
全7章構成ですが、大きく2部構成の形になっています。
- 1部：ケーススタディ
    - 1章：テーマパークにPMを導入した場合（立上げ〜終了までの一連の流れ）
    - 2章：家のリフォームにPMを導入した場合（QCDについて）
    - 3章：オフィス移転にPMを導入した場合（リスクの特定〜対応）
    - 4章：夏祭りにPMを導入した場合（立上げ、役割分担、調達、終了）
- 2部：PM・PMBOKに関する解説
    - 5章：PM　概要と活用
    - 6章：PM　Q&A
    - 7章：PM　第7版の概要

プロジェクトマネジメントを実施する中で特に重要な要点をまとめたものが5章になります。
その理解を助けるために1〜4章で様々なプロジェクトの例が記載されています。
5章はPMBOKの第6版を元に記載されています。第7版との違いは第7章に記載されています。

## 得られたこと

PMBOKで重要な要素である「5つのプロセス」「10の知識体系」について一通り意味を理解することができました。
現場リーダを担う中で、QCDは意識していたものの、その他のプロジェクト構成要素について改めて考えるきっかけになりました。
特に「コミュニケーション」「リスク」といった要素に関する考慮はすぐにでも取り入れていきたいと思います。

## 得られなかったこと

タイトルの「はじめの一歩」の通り、理解の助けにはなりますが、PMBOKに則った成果物を作ろうと思うと本書だけでは難しいと思います。
例として、各マネジメント計画書が何故必要でどのように活用するかは理解したのですが、どのようなことを記載するかがわかっていません。
そのためPMBOKに即した成果物を作成していこうと考えた場合、別の参考書などが必要になるのかなと思います。

## 最後に

PMBOKに記載されているプロジェクトの各要素（5つのプロセス、10の知識体系）を知ることはとても重要であると感じました。
一方で、リーダとしての活動に活用できる要素はあまり多くはありません。
直近でぶち当たっている悩み（例：稼働が高くなりすぎる等）についての解決策は、PMBOKを学べば解決できるというわけではなさそうです。
PMBOKについては、一旦は概要の理解で終えておきたいと思います。
今後は別の種類のハウツー本や諸先輩方の意見、Qiita記事などを読み、リーダとしての成長に繋げていきたいと思います。



<details>
<summary>自分用振り返りメモ</summary>

- プロジェクトマネジメント・プロセス群
    - 立ち上げプロセス群
    - 計画プロセス群
    - 実行プロセス群
    - 監視・コントロールプロセス群
    - 終結プロセス群

- プロジェクトマネジメント知識エリア
    - プロジェクト統合マネジメント
    - プロジェクト・スコープ・マネジメント
    - プロジェクト・スケジュール・マネジメント
    - プロジェクト・コスト・マネジメント
    - プロジェクト品質マネジメント
    - プロジェクト資源マネジメント
    - プロジェクト・コミュニケーション・マネジメント
    - プロジェクト・リスク・マネジメント
    - プロジェクト調達マネジメント
    - プロジェクト・ステークホルダー・マネジメント

- プロジェクトマネジメント計画書
    - プロジェクト憲章

- プロジェクトマネジメント計画書・各種計画書
    - 変更管理計画書
    - コミュニケーション・マネジメント計画書
    - コスト・マネジメント計画書
    - イテレーション計画書
    - 調達マネジメント計画書
    - 品質マネジメント計画書
    - リリース計画書
    - 要求事項マネジメント計画書
    - 資源マネジメント計画書
    - リスク・マネジメント計画書
    - スコープマネジメント計画書
    - スケジュール・マネジメント計画書
    - ステークホルダー・エンゲージメント計画書
    - テスト計画書

</details>
Windows11 で音量変更時の通知音を消す

Windows11 で PC の音量変更をする度に通知音が鳴ります。音楽を聞いているときなんかは邪魔でしょうがありません。

ということで通知音を出なくしようと思います。Windows10 と設定箇所が微妙に変わっていたのでメモ。

### 設定方法
[スタートボタン]を右クリックし、[設定]を選択します。

設定画面が開くので、[システム] > [サウンド]を選択します。

![スクリーンショット 2022-10-13 055843.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524682/eefae5cb-a7ca-560c-a2b1-e9c966874370.png)

一番下までスクロールし、[サウンドの詳細設定]を選択します。

![スクリーンショット 2022-10-13 055912.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524682/9f387f2b-08dd-a415-8f21-019f1cd4fe22.png)

サウンド画面が開くので、[サウンド]タブに切り替えます。

プログラム イベント内の[通知]を選択し、サウンドを (なし) に変更します。

![スクリーンショット 2022-10-13 055705.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2524682/deae7112-df12-ce68-7932-04aafc5c315f.png)
世界一やさしい問題解決の授業

https://www.amazon.co.jp/%E4%B8%96%E7%95%8C%E4%B8%80%E3%82%84%E3%81%95%E3%81%97%E3%81%84%E5%95%8F%E9%A1%8C%E8%A7%A3%E6%B1%BA%E3%81%AE%E6%8E%88%E6%A5%AD%E2%80%95%E8%87%AA%E5%88%86%E3%81%A7%E8%80%83%E3%81%88%E3%80%81%E8%A1%8C%E5%8B%95%E3%81%99%E3%82%8B%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8F-%E6%B8%A1%E8%BE%BA-%E5%81%A5%E4%BB%8B/dp/4478000492/ref=asc_df_4478000492/?tag=jpgo-22&linkCode=df0&hvadid=296017455562&hvpos=&hvnetw=g&hvrand=5555728649900129368&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009255&hvtargid=pla-526783532076&psc=1&th=1&psc=1

背景
読解力から発展して様々なビジネルスキルを本から学びたいと思った一つに、課題解決力がありました。
いくつか本を絞り込んだ中から選んだのが本書です。

本書のテーマ
「考え抜く技術」、「考え抜き、行動する癖」を身につけ、自ら責任を持てる人生を送れるようになること。

個人的なポイント
１，問題解決でやること
現状を正確に把握→問題の原因を見極める→効果的な打ち手を考え抜く→実行する

２，分解の木で出てきた項目をアンケートにいれる

３，情報を集め分析する
これはあくまでよりよい判断をすつるためなので、何がなんでも分析を完璧にするということではない。
これにハマってしまうと本質がぶれてしまう。

４，課題分析シート
具体的な目的を決めないで分析を始めてしまうと役に立たなかったりする。
何をどうすればいいか人目でわかる課題分析シートが便利。
課題、仮説、根拠、分析、情報源に分けて考えていく。

５，打ち手を考える
分類の木を使って課題に対する打ち手を考える。

６，打ち手を実行しやすさ効果で分類
有効な打ち手を優先度高く実行することができる。
自分たちでできないことは、人の協力も得ようと考えられる。

７，目標を達成できるかどうかは
「良いプランを立てる」×「しっかり実行する」という掛け算できまる。
しっかり実行するには計画も大事。

８，意思決定ツール
・良い点悪い点リスト
・評価軸×評価リスト
上記を使って打ち手の評価を行い、どの選択肢がいいか決める方法がある。

一番心に残ったこと
問題解決の方法を身につければ、主体的に動けるようになるというところ。

私は、「主体的に動けてるつもりでいた人間」だったかもしれません。
主体的に動くとは、「情熱とやる気を持って、どんなときでも一番に行動し、発言していればそれが評価される」というのが、主体性だとおもいこんでいた節がありました。
しかし、それは「気合でゴー！くん」で、「問題解決キッズ」ではありませんでした。
とりあえず目標を立てて、とりあえず行動していればなにか見えてくるはずと。
そんな感じで行動していましたが、「目標をもつ→うまく行かなければ考える→なぜこうなったのか本質を探る→原因を見つけたら打ち手を考える→進み具合をチェックする」が主体性がある人の行動だったと気づきました。

目標→行動になってしまうと、それをやる本質がわかってない。A→D人間。（以下記事参照）
https://qiita.com/Mune_robo/items/e4bb37de0fe8b8d0f7aa
行動に移る前の課題、原因、打ち手があるからこそ本質が見えてきて、主体性をもって動けるようになる。

今後やること
・今後も読書のアウトプットも続けるが、課題解決の考え方のアウトプットをして考え方を身につける
・どんなときも上記の考え方を実施した上で実行に移す
・原因や計画の進捗具合も把握する

まとめ
最近は課題解決に関する研修も各所でやっていて、なんとなく見ていましたが、流れをちゃんと理解していなかったです。

今更ながらこの考え方って、とても大事ですよね。
どんな職業についても活かせるスキルだと言えます。
私は目に見えるスキル（資格とか）が大好きなんですが、目に見えないスキルの重要性をひしひしと感じています。
その最たるものが、こういったスキルではないかと思いました。

最近読んでいた、読解力、文脈力などの分野とは異なるが、お客様と話すときに
・高い読解力、文脈力をつかって抱えている課題を抽出する
・問題解決力で課題を整理し、打ち手のアイデアを出す
ということができれば、提案の質も上がることが考えられる。
【Python】Iris（アヤメ）のデータをpandasのdf（DataFrame）で読み込む方法

## 背景
- 以前、[scikit-learnのToy datasetsの紹介記事](https://qiita.com/takuma-1234/items/f475c04c0e616fb919c1)を書きました。
- 今回は、Toy datasetsの中でもよく使用されるIris（アヤメ）のデータを例に、pandasのDataFrame（df）での読み込み方法を紹介します。

## 目標
- scikit-learnのIrisデータをDataFrame（df）で読み込めるようになる。

## Irisデータをdfで読み込む方法
```python:Irisデータをdfで読み込む方法
import pandas as pd
from sklearn.datasets import load_iris

#Irisデータをsklearnから読み込み
iris = load_iris()

#辞書型に近い型でデータが入っているので必要箇所を指定してdataとcoloumsとしてdfで読み込み
df = pd.DataFrame(data = iris.data, columns = iris.feature_names)

print(df)

#出力
     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                  5.1               3.5                1.4               0.2
1                  4.9               3.0                1.4               0.2
2                  4.7               3.2                1.3               0.2
3                  4.6               3.1                1.5               0.2
4                  5.0               3.6                1.4               0.2
..                 ...               ...                ...               ...
145                6.7               3.0                5.2               2.3
146                6.3               2.5                5.0               1.9
147                6.5               3.0                5.2               2.0
148                6.2               3.4                5.4               2.3
149                5.9               3.0                5.1               1.8

[150 rows x 4 columns]

```

## 参考資料

https://kakakakakku.hatenablog.com/entry/2021/04/19/090229

https://dataanablog.com/first-time-pandas-iris-dataset/

https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html#

https://biotech-lab.org/tech-info/python-ml/scikit-learn/library/sklearn-utils/bunch-class

## 個人ブログ

https://takuma-tech.com/2022/10/12/319/
CSSで描いた正三角形を回転する

# はじめに
CSSでborderを使って正三角形を書く方法は分かったのですが、これを回転rotateさせると、borderで描いたので中心がわからないのできれいに回りません。

# 解決方法
これを解決するには、中心点originを変更する方法
```
transform-origin: 50% 66.6%; 
```
と
正三角形を内接円とするboxを描く方法があると思います。


# 実行例
後者でやってみたのでcodepenを貼り付けます。  

<p class="codepen" data-height="458" data-default-tab="result" data-slug-hash="JjvwgjL" data-user="kalz2q" style="height: 458px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/kalz2q/pen/JjvwgjL">
  reeact-equilateral-triangle-rotate</a> by kalz2q (<a href="https://codepen.io/kalz2q">@kalz2q</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

# 終わりに
codepenのソースは[こちら](https://codepen.io/kalz2q/pen/JjvwgjL?editors=0010)
Swiftにおけるクリップボードでの複数文字列の扱い

## はじめに
VSCodeだと⌘D, ⇧⌘L, ⌥click、Xcodeだと⌥⌘Eなどで複数文字列を選択することができます。
これを使えば、複数文字列のコピペも行うことができます。
内部的には単なる文字列とは異なる扱いをしているようだったのですが、公式ドキュメントも含めこの辺りを扱っている記事等が見当たらなかったので、まとめてみました。
クリップボードへの読み書きは`NSPasteboard`を用いています。 

## 準備
```swift
import AppKit
let pasteboard = NSPasteboard.general
```

## 単なる文字列の読み書き
```swift
let copied = "hoge"

// write
pasteboard.declareTypes([.string], owner: nil)
pasteboard.setString(copied, forType: .string)

// read
let item = pasteboard.pasteboardItems!.first!
let pasted = item.string(forType: .string)! // => "hoge"
```

## 複数文字列の読み書き
```swift
let copied = [
    "hoge",
    "foo\nbar" // 2行に渡る文字列
]


// write
pasteboard.declareTypes([.string, .multipleTextSelection], owner: nil)

let string = copied.joined(separator: "\n") // => "hoge\nfoo\nbar"
pasteboard.setString(string, forType: .string)

let lineCounts = copied.map { $0.components(separatedBy: "\n").count } // => [1, 2]
pasteboard.setPropertyList(lineCounts, forType: .multipleTextSelection)


// read
let item = pasteboard.pasteboardItems!.first!
let string = item.string(forType: .string)! // => "hoge\nfoo\nbar"
let lineCounts = item.propertyList(forType: .multipleTextSelection) as! [Int] // => [1, 2]

var components = string.components(separatedBy: "\n")
var pasted: [String] = []
lineCounts.forEach { count in
    pasted.append(components.prefix(count).joined(separator: "\n"))
    components.removeFirst(count)
}
// pasted => ["hoge", "foo\nbar"]
```

## 解説
クリップボード上の複数文字列は、
- __string__: `\n`で結合した一つの文字列
- __multipleTextSelection__: 各文字列が何行であるかを表した配列

の二つを組み合わせて表現されています。
前者はただの文字列なのですが、後者は文字列の配列そのまま保存しているわけではなく、`bplist`という形式に変換しています（データ量削減のため？）。
`bplist`は、`plist`をバイナリとして表したデータ形式です。
iOS開発者にとってはお馴染みかと思いますが、`plist`の中身はXMLになっており、配列や辞書を保存できます。
`bplist`については[ここ](https://devblog.lac.co.jp/entry/20211129)や[ここ](https://medium.com/@karaiskc/understanding-apples-binary-property-list-format-281e6da00dbd)で分かりやすく説明されていますが、変換は`NSPasteboard`インスタンスの`setPropertyList(_:forType:)`, `propertyList(forType:)`がやってくれるので、お任せしています。

文字列配列とこのデータ構造の間の変換は自分で行います。
もっとスマートなやり方があれば教えてください。

## おわりに
[公式ドキュメント](https://developer.apple.com/documentation/appkit/nspasteboard/pasteboardtype/1533542-multipletextselection)の解説が皆無で、
- `multipleTextSelection`のdataが`bplist`形式をとっていること
- その中身が行数の配列になっていること

の両方に気づくのに時間がかかりました。
`plist`が使われていることに気づくまでは、`propertyList(forType:)`ではなく`data(forType:)`でdataを取得して`PropertyListDecoder`でdecodeするという回りくどいことを試したりもしていました。

もっとドキュメント充実させてほしいとも思いましたが、こんなことをやろうとしている人はごく少数しかいない気もしますし、そんなもんかもしれません。
この記事が少しでも、こんなことをやろうとしているごく少数の人の助けになれば幸いです。
[python] エラーの処理 -except-




# はじめに
pythonによるプログラムを組む時、予期せぬエラーが発生するときがある。
例えば、共有のエクセルファイルを読み込むとき、誰かがファイルを開いている状態であるとか、指定のファイル名が存在しないなど
しかし、エラー処理をしないままの状態だと、プログラムが最後まで実行されず、途中で終了してしまう。
今回はエラー処理についてまとめてみた。

# 環境
windows 10

```python
import platform
print('python version: ' , platform.python_version())
# python version:  3.7.8
```

# 前回記事
https://qiita.com/junzai/items/05d2ffab903e57b47233

https://qiita.com/junzai/items/e14275bb412ea3ac5618


# Code
## 問題
```python
f = open("nofile.xlsx", 'r')
print('second process')
```
```
Traceback (most recent call last):
  File "error.py", line 19, in <module>
    f = open("nofile.xlsx", 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'nofile.xlsx'
```
エラーが発生した場合、エラーが発生した以後のコードは実行されず、プログラムが終了してしまう。
→ エラーが発生した場所は飛ばして残りすべてのコードを実行する方がプログラムとして有益である。
## エラーがある場合
```python
try:
    f = open("nofile.xlsx", 'r')
    print('opened file')
except:
    print('cannot open it')
finally:
    print('process done')
```
```
cannot open it
process done
```

`try` でコードの実行を試みる
`except` エラーが生じた場合のコードを実行する。
`finally` エラーの有無に関係なく、最終的にコードを実行する。 
エラー以降の`try`のコードは実行されず、`except`文が実行された。

## エラーがない場合
```python
try:
    f = open("file_exist.xlsx", 'r')
    print('opened file')
except:
    print('cannot open it')
finally:
    f.close()
    print('process done')
```
```
opened file
process done
```
エラーがない場合、`except`文は実行されない。

## エラー条件の指定
```python
try:
    a = 9/0
    print(a)
except ZeroDivisionError:
    print('zero division error')
except FileNotFoundError:
    print('no file')
finally:
    print('process done')
```
```
zero division error
process done
```
該当するエラーが発生した時のみ、コードを実行する。



## エラー文の出力
```python
try:
    f = open("nofile.xlsx", 'r')
except Exception as e:
    print(e)
```
```
[Errno 2] No such file or directory: 'nofile.xlsx'
```

## traceback によるエラー文の出力
```python
import traceback

try:
    a = 9/0
    print(a)
except Exception:
    traceback.print_exc()
```


```
Traceback (most recent call last):
  File "error.py", line 24, in <module>
    a = 9/0
ZeroDivisionError: division by zero
```

## logging によるエラー文の出力
```python
import logging

try:
    a = 9/0
    print(a)
except Exception:
    logging.exception("it is error")
```
```
ERROR:root:it is error
Traceback (most recent call last):
  File "error.py", line 13, in <module>
    a = 9/0
ZeroDivisionError: division by zero
```
`logging`や`traceback `によってエラーの発生した部分など、より追加的な情報を表示することができる。




# まとめ
エラー処理を適切に行うことによって、プログラムの管理がより容易になる。
現在、私は自作の1000行ほどののプログラムを仕事の自動化プログラムとして利用しているが、少し条件が変わるとプログラムが強制終了するなど、トラブルが多い。
よってプログラムの管理も考えた設計をするためには、エラー処理の工夫が必要となる。

# 関連記事
https://docs.python.org/3/tutorial/errors.html
ESLintに指摘された"Array.prototype.map() expects a return value from arrow function  array-callback-return"を解決する

はじめに
--
reactでuseStateを使用して連想配列を追加したり削除、更新する記述が多々あります。
実装をしてしばらくしてからログをみると、下記の指摘内容が表示されていました。
~~~
"Array.prototype.map() expects a return value from arrow function  array-callback-return"
~~~

初めてみる指摘内容だったので調べたこと、修正内容を備忘録として残そうと思います。

指摘された状況と似た例
--
自分が指摘された状況と似ている例を作りました。
下記の様に、作成したuseStateの連想配列(worldFoods)に別の配列(JapaneseFoods)の値を入れたいという状況です。
そして、`JapaneseFoods.map`の箇所が指摘されてしまいました。

~~~react
const JapaneseFoods = [
   {name: soba, place: kyoto},
   {name: takoyaki, place: dotonbori},
   {name: sushi, plce: ginza}
]

const [worldFoods, setWorldFoods] = useState([{
    name: "",
    place: ""
  }])

//"JapaneseFoods.map"の箇所で指摘された
JapaneseFoods.map((JapaneseFood) => {
        setWorldFoods(worldFood => [...worldFood,{
          name: JapaneseFood.name,
          place: JapaneseFood.place
        }])
      })
~~~

なぜ"JapaneseFoods.map"の箇所が指摘されたのか
--
これは`mapメソッド`の本来の使用方法と少しづれていることが原因で指摘されていたようです。
下記の公式ドキュメントには下記のように説明されています。

>返値
>与えられた関数を配列のすべての要素に対して呼び出し、その結果からなる新しい配列です。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map

mapメソッドは返値を準備していますが、僕が書いたコードだと、「JapaneseFoodsの値を繰り返して、worldFoodsの配列に格納している」だけなので、返値を使うタイミングはありません。

そのため`「mapメソッドを使っているんだから、配列を返値として作成されてるけど使ってないよね？使わないの？」`とesLintが指摘しているのですね。

指摘内容を修正
--
ではどの様に修正すれば警告はなくなるのかというと、`forEachメソッド`を使用することです。
forEachメソッドはmapメソッドと同じ様に与えられた配列の要素を繰り返すという点では同じですが、下記の公式ドキュメントに書いてある通り返値がありません。

>返値
>undefined です。


https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

そのため、使用されない配列が無駄に作成されることもなく、警告を解消することができました。

終わりに
--
似たメソッドがどんな違いがあるのかを理解して、なぜこのメソッドを使ったのかを説明できるエンジニアになれるように日々勉強頑張ります。

参考
--
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
バッチでpowershellを実行する方法

<h1>バッチでpowershellを実行する方法</h1>

<h2>基本</h2>

```batch
powershell -Command ("Get-Alias")
```

<h2>応用</h2>

* for文との組み合わせ
```bat
for /f "usebackq" %%i in (powershell -Command("Get-Alias"^)) do (
    echo %%i
)
```

* for文との組み合わせ2
```bat
for /f "usebackq" %%i in (powershell -Command("Get-Volume | ?{$_.DriveLetter -eq 'C'}"^)) do (
    echo %%i
)
```
powershellのコマンド内はシングルクォートにするのがミソ

何かあれば追記
応用情報振り返りとポイント、気づき(午後:問3, 問4, 問5, 問7)

**※この記事は受験当日の私の個人的な話に寄っています。全問解説ではないので万人に有効なアドバイスとは限りません。試験対策に何したかなどは後で別記事にまとめます。**

(追記)書きました

https://qiita.com/are-38-a/items/b15b90cb84be5b415546

# 解答速報が出たので
午前(公式)

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2022r04.html

午後(TAC)

https://www.tac-school.co.jp/kouza_joho/sokuhou.html

これに基づいて話をします。配点予想はTAC発表に基づきます。

# 午前
**自己採点: 85%**

### 感想
- **過去問から同じ問題が出ると言うのは本当だった。** あっこれ見たことある！がたくさん。
- **計算が大変とか面倒くさめな問題はとりあえず後回しにしたのが結果的に良かったと思う。** 

### ポイント(個人的)
- 問5
    - 色々値を入れてみて無理やり解きました(他の問題でもいくつか無理やり解いた)。時間は余裕があるので力技も大事。
- 問12
    - コンテナはゲストOS持たないっていうのは個人的には衝撃的だった。前日にちょうどコンテナの話を勉強していたので助かった。
    - **ここでコンテナのことを調べた人は午後救われたかもしれない。** 
- 問21
    - 情報と言うより電気回路自体に関する知識が度々問われている。電気系の勉強をしたことのある人は有利かも。
    - コンデンサは直流電流は通さない(通さないわけではないんだけど)けど交流電流は通す、コイルは直流電流は通すけど交流電源を通しにくくする(通しはする)、とか。
- 問29
    - 普通に間違えた。データベースに対する理解が足りないなと反省。
    - [応用情報技術者平成27年秋期 午前問30](https://www.ap-siken.com/kakomon/27_aki/q30.html)
        - 過去問に出てた
- 問44
    - **これも午後のセキュリティ問題の布石でしたね。** 
    - 午前問題で出た単語で知らないものがあったらちゃんと調べておくというのは意味ありそうな気がする。(要検証)
- 問50
    - ア「～今後もペアプログラミングを継続する」を選択してしまった。
    - [振り返りのフレームワーク「KPT法」とは｜そのメリットや進め方、実施のポイントについて](https://shiftasia.com/ja/column/kpt%E3%81%A8%E3%81%AF/)
        - K:Keep（成果が出ていて継続すること）
        - P:Problem（解決すべき課題）
        - T:Try（次に取り組むこと）
    - アはK。Tはまだやってないこと。
- 問64
    - [応用情報技術者平成31年春期 午前問64](https://www.ap-siken.com/kakomon/31_haru/q64.html)
        - 過去問に出てた
    - これは手で計算させるような問題なのか？

# 午後
**自己採点: 86%** (記述は完璧でない場合、方向性があっていれば部分点1点とした)

### 感想
- **午前で出た単語が出ますねえ！** さっさと途中退出して勉強するべきだったのかも。

### ポイント
**選択した問題: 問3プログラミング、問4システムアーキテクチャ、問5ネットワーク、問7情報システム開発** 
- 問1 
    - ネットワーク寄りな問題に感じた。
    - 問5のネットワークを解くつもりで勉強していたのでそこまで違和感なく解けた。
    - 予想18点
- 問3
    - 再帰苦手…
    - なぜかコードの穴埋めは全部あっていた。
        - とりあえず表を見て、使いそうな変数探して、適当に埋めるの大事。
    - にも関わらず処理を追えていなかったので具体的な数値を入れる問題を間違えた。
    - 予想13点
- 問4
    - 前々日あたりにたまたまコンテナを触っていたので助かった！(単純にラッキー)
        - [【Docker初歩の初歩】DockerでApache+PHP+MySQLなLAMP環境構築をする(ついでに簡単な掲示板を作って動かす)](https://qiita.com/are-38-a/items/fbd08334a7d613c3d824)
    - 予想19点
- 問5
    - **必須のセキュリティの対策にもなるし、意外と学習範囲狭いのでネットワークは個人的おすすめ。**
    - 最後の設問3(3)で「Web会議サービス」とだけ書いた。
    - どうして本社VPNサーバを解答に入れなきゃいけないのかよくわからない。
        - リモートPCとの接続のため？でも下線部③で設定されたってのがよくわからない。
    - 予想18点
- 問7
    - 設問1(1)(b)
        - 40 ms
        - 1回目の検知から10 ms 周期で5回目までって何 ms ですか？図を書いてみましょう。
    - 他はびっくりするほど簡単で本当にびっくりした(びっくりした)。
        - あまりにびっくりしたのでいまでもびっくりしている。
    - 予想19点

# 結論

- ちゃんと対策すれば1ヶ月前からの勉強でも合格できる(合格したとは言っていない)。
- **試験関係ないと思っても、勝手に自分で色んな技術に触れておくと必ず役に立つ日が来る。**
ヒアドキュメント とは

## 勉強前イメージ

cat的なやつイメージ？

## 調査

### ヒアドキュメント とは

ヒア文字列とも言われます。
プログラミング言語の機能の一つで、改行コードなど特殊な文字列をソースコードの中に記述するための方法です。
言語によって記法は異なりますがよく使われるヒアドキュメントの開始など型は決まっています。


なぜヒアドキュメントを使うかというと、以下ヒアドキュメントを使う場合と使わない場合のシェルスクリプトを置いてみましたが
可読性も高まり修正もしやすくなります。


- ヒアドキュメントを使わない場合

```
#!/bin/bash
echo "hello world!"
echo "hello world!!"
echo "hello world!!!"
echo "hello world!!!!"
echo "hello world!!!!!"
```

- ヒアドキュメントを使う場合

```
!/bin/bash
cat <<EOF
hello world!
hello world!!
hello world!!!
hello world!!!!
hello world!!!!!
EOF
```

### ヒアドキュメントの書き方

- 通常

通常の記載方法は上記にも記載していますが `cat <<EOF` と `EOF` で表示したい文章をはさみます。

```
!/bin/bash
cat <<EOF
[文字列]
....
[文字列]
EOF
```

- 変数

以下のように変数展開も可能です。

```
#!/bin/bash
STR="Hello world"

cat <<EOF
${STR}
hello world!
hello world!!
EOF
```

- 変数展開しない

変数と認識される文字列をそのまま文字列で表示させるにはEOFにダブルクォーテーションをつけることで展開されないようにできます。

```
#!/bin/bash
STR="Hello world"

cat <<"EOF"
${STR}
hello world!
hello world!!
EOF
```

- コマンド実行

以下のようにバッククォートで囲むことでコマンドも実行されます。

```
#!/bin/bash

cat <<EOF
hello world!
hello world!!
`date`
EOF
```

- コマンド実行しない

変数同様EOFにダブルクォーテーションをつけることで中身のコマンドが実行されません。

```
#!/bin/bash

cat <<"EOF"
hello world!
hello world!!
`date`
EOF
```

## 勉強後イメージ

ヒアドキュメントという言葉はほぼ知らなかったけど使ったことはあったわ。
ただ、そんなややこしいことはしてなかったので
変数展開できるとかコマンド実行できるとかは知らなかった。

## 参考

- [ヒアドキュメント 【here document】 ヒア文字列](https://e-words.jp/w/%E3%83%92%E3%82%A2%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88.html)
- [シェルスクリプトでヒアドキュメントを使う様々な方法 (bash / zsh)](http://everything-you-do-is-practice.blogspot.com/2017/11/bash-zsh.html)
iOS16を旧Xcodeでビルドする！

# こんな方向け
- まだXcode13を使ってるけど、iOS16を持つ実機でビルドしたい。
- 新しいバージョンXcode14のDeviceSupportからiOS16用のDeviceSupportフォルダをXcode13に入れたけど、ビルドできない。

## 解決できるエラー
```This operation can fail if the version of the OS on the device is incompatible with the installed version of Xcode. You may also need to restart your mac and device in order to correctly detect compatibility.```

## 開発環境
macOS: Monterey 12.5 Intel
Xcode: 13.2.1
iOS: 16.0.3


# 結論
- iOS16から[DeveloperMode](https://developer.apple.com/jp/news/?id=r1sz7dke)というのが追加されている、これをOnにしてないとDeviceSupportを入れてもビルドできないようです！


# もっと詳しく！
1. XcodeをKillしておく。
2. DeviceSupportフォルダを手に入れる。([こちら](https://github.com/filsv/iOSDeviceSupport)からダウンロードしてもいい。)
    - Xcode14をダウンロードする
        - https://developer.apple.com/download/all/?q=Xcode
    - ダウンロードできたら以下から16.0のフォルダをコピー！
        - `/Applications/Xcode14.0.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport`
3. 次に旧XcodeのDeviceSupportディレクトリーに移動し、先ほどコピペしたフォルダをコピペ
    -  `/Applications/Xcode13.2.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport`
4. iPhoneをUSB接続すると以下のダイアログが表示される。
    - これはOSのアップデートではなく、一部データがインストールされるだけなので、ビビらずインストールしましょう！（[詳細](-https://support.apple.com/ja-jp/HT208831)）
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535198/d72c788d-1aab-d970-bd85-bc22e80ca9fc.png)
5. 次にiPhoneのSetting>Privacy>Developer Modeを開き、ONにしましょう！
    - https://developer.apple.com/jp/news/?id=r1sz7dke
6. これでXcode13を開き、RUNすればビルドできるはずです！
    - うまくいかない場合は、MacとiPhoneを再起動すると直るかも！

# お疲れ様でした！
Next.jsのチュートリアル読んで感動したこと

Next.js公式読んだ
https://nextjs.org/
# Next.js？
reactでwebアプリケーション作るとなると色々考えないといけないけど、これらを簡単にしてくれるのがnext.js
>・Code has to be bundled using a bundler like webpack and transformed using a compiler like Babel.
・You need to do production optimizations such as code splitting.
・You might want to statically pre-render some pages for performance and SEO. You might also want to use server-side rendering or client-side rendering.
・You might have to write some server-side code to connect your React app to your data store.

具体だと、こんな機能を提供する。
>・An intuitive page-based routing system (with support for dynamic routes)
・Pre-rendering, both static generation (SSG) and server-side rendering (SSR) are supported on a per-page basis
・Automatic code splitting for faster page loads
・Client-side routing with optimized prefetching
・Built-in CSS and Sass support, and support for any CSS-in-JS library
・Development environment with Fast Refresh support
・API routes to build API endpoints with Serverless Functions
Fully extendable

# 感動したこと
### Routing
pages配下にファイルを置くだけでそれがURL pathになる。
routingライブラリいらない。
### Client-Side Navigation
Linkタグ使えば、
クライアントサイドナビゲーションが可能。ブラウザのページ遷移より速い。
リンク先のページのコードをバックグラウンドでプリフェッチ。

### Image Optimization
next/image がデフォルトで画像最適化してくれるようになってる。
自動で、ブラウザがサポートしているモダンな画像フォーマットにしてくれる。最近だとWebPとか。

### Pre-rendering
デフォルトでプリレンダリングしてくれる。あらかじめHTML作っておく。
パフォーマンスとSEO観点で良いこと。
ブラウザでJS無効にしてもページが表示される。

### Two Forms of Pre-rendering
プリレンダリングに2つ形式がある。
Static Generation と Server-side Rendering
この二つの形式をページごとに使い分けることができる。

### Static Generation
名前の通り静的なページで使うと良い。
ブログとかヘルプとかドキュメントとか。

データ取得してから表示したいページだったら、getStaticPropsを使う。
これを使うと。「ヘイ！　このページはいくつか依存しているデータがあるから、プリレンダーするときに解決しといて」とnext.jsに伝えることができる。
ここに書いたコードはサーバーサイド内で実行されるから、DBに投げるクエリを書いちゃっても大丈夫。
本番環境だと、ビルド時にしか実行されないから、頻繁に更新があったり、リクエストごとに変わったりするページには不向き。
代わりに、Server-side Rendering使うと良い。
### Server-side Rendering
ビルド時ではなく、リクエストごとにデータを取得したい時に使う。その分遅くはなる。
getServerSideProps使ってその中に処理書けばok。
useEffectみたいな感じ？

### SWR
データフェッチ用の React フック
めちゃ簡単に書けそう。
Client-side Renderingでよいなら、これを使うのを強くお勧めしている。

### API Routes
API Routesをサポートしている。
ただし、getStaticPropsからAPI Routes呼び出すな。処理を直接書け。
フォームの登録処理APIとかはいい使用例。
SpringBoot_アノテーション

初投稿。手探りですが色々書いていこうと思います。
SpringBootでは様々なアノテーションが登場する。

**Lombok**
@AllargsConstructor
コンストラクタを自動生成してくれる。
@Data
getter/setterが使える。
toString,equals,canEqual,hashCodeがオーバーライドされている。

**Mybatis**
@Mapper
Mybatisを使うためにインターフェースに付ける。
MybatisにDB接続できるようになる。
@Select
SQLを用いてDB検索できる。
@Insert
SQLを用いてDBに値を設定できる。

@Service
サービスとして付与。サービスはビジネスロジックとして処理を記述する。
Bean登録を意味する。

@RequiredArgsConstructor
finalで宣言したフィールドに対してインスタンスを生成してくれる。コンストラクタをいちいち修正しなくて良くなる。DIに使える。

@Transactional
一定の範囲で処理がロールバックされる。アノテーションを付けたメソッド以降の処理が同一トランザクション管理範囲となる。

@SpringBootApplication
SpringBootのメインクラスに付与。

@Controller
付与したクラスをコントローラとする。

@GetMapping
GET＝取得処理。

@PostMapping
POST=投稿処理。新たなデータ登録等を行う。

@RequestMapping
プログラム全体の処理の入り口となる。("/○○")はURLを指定
これを付与すればGetMappingのパスを省略可能。

@ModelAttribute
引数と一緒に付与すると、addAttributeできソース省略が可能。

@RequiredArgsConstructor
クラスに付与することで必須のメンバ（finalのメンバ）へ値をセットするための引数付きコンストラクタを自動生成することができる。

@Validated
例えばPOSTメソッドの引数に付与するとバリデーションが扱えるようになる。併せてBindingResultを引数追加すると、バリデーションエラーが発生しているか確認することができる。

@NotBlank
文字列がnullでないかつ空文字でないことを検証する。

@Size
指定した桁数チェックを行う。

@Test
テストメソッドで有ることを認識させる。

@ResponseBody
テンプレートの戻り値が直接記述される場合に付与。

@PathVariable
@GetMappingする際に、引数で渡すIDと同様に渡してあげるとそのIDに紐づく画面に遷移できる。
【Linux】ファイルサイズの確認で疑問に思った事(備忘)

# ファイルサイズ確認時の疑問

実務上で、ファイルのサイズを確認する際に`lsコマンド or duコマンド`を使用する事があります。
どちらのコマンドもよく使うコマンドなんですが、サイズの表記が違います。

例えば、`ls -lコマンド`はバイトで結果が出力されますが、`duコマンド`ではブロックサイズで結果が出力されます。
※`ls -sコマンド`でブロックサイズ。`du -bコマンド`でバイトの結果を得る事も可能です。

当方の環境では、ブロックサイズは4096で設定されていました。
読み書きがあった場合は、上記で指定したブロックサイズの値分は領域が確保されます。
例えば、ファイルのサイズが1バイトである場合に、`ls -lコマンド`を叩いた場合は1バイトと出力されますが、、`duコマンド`を叩いた場合は4(4096バイト)と出力されます。


```shell-session:ブロックサイズの確認
[root@localhost log]# xfs_info /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=406016 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1624064, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
```

当方は、「ファイルサイズを取得してこい」と言われた場合はバイトで取得したデータでお伝えするような文化で育ってきました。
余り深くは考えていなかったのですが、ファイルを別環境に転送する等を考えた場合はこれでよいのかな？と思っています。環境によって、ブロックサイズの設定が違う可能性がある事を懸念しています。


ただ、ディスクの使用量という観点ではブロックサイズでお伝えするのが正しいと考えています。
他の現場であれば、どのようにファイルのサイズを調べているのか、、気になるところです。

一応検証で使ったコマンドを載せておこうと思います。

## 検証で使ったコマンド

```shell-session:検証

[root@localhost ~]# cd /var/log
[root@localhost log]# ll | grep "^d"
drwxr-xr-x. 2 root   root       204  6月 29 21:57 anaconda
drwx------. 2 root   root        23  6月 29 21:57 audit
drwxr-xr-x. 2 chrony chrony       6  8月  8  2019 chrony
drwxr-xr-x. 2 root   root         6  6月 29 21:57 rhsm
drwxr-xr-x. 2 root   root        23  6月 29 21:57 tuned

[root@localhost log]# ll -a anaconda/ | awk '{print $5,$9}'
204 .
4096 ..
23350 X.log
21764 anaconda.log
2141 ifcfg.log
1288513 journal.log
0 ks-script-6X_JQs.log
0 ks-script-S7CoUF.log
114301 packaging.log
31865 program.log
89791 storage.log
135005 syslog

[root@localhost log]# du -ba anaconda/
21764   anaconda/anaconda.log
135005  anaconda/syslog
23350   anaconda/X.log
31865   anaconda/program.log
114301  anaconda/packaging.log
89791   anaconda/storage.log
2141    anaconda/ifcfg.log
0       anaconda/ks-script-6X_JQs.log
0       anaconda/ks-script-S7CoUF.log
1288513 anaconda/journal.log
1706934 anaconda/


[root@localhost log]# du -a anaconda/
24      anaconda/anaconda.log
132     anaconda/syslog
24      anaconda/X.log
32      anaconda/program.log
112     anaconda/packaging.log
88      anaconda/storage.log
4       anaconda/ifcfg.log
0       anaconda/ks-script-6X_JQs.log
0       anaconda/ks-script-S7CoUF.log
1260    anaconda/journal.log
1676    anaconda/

[root@localhost log]# ls -s anaconda/
合計 1676
  24 X.log            4 ifcfg.log       0 ks-script-6X_JQs.log   112 packaging.log    88 storage.log
  24 anaconda.log  1260 journal.log     0 ks-script-S7CoUF.log    32 program.log     132 syslog
```
patchコマンドについて

●カーネルの一部機能に変更を加えたい場合やバージョンアップを行いたい場合などに、必要なパッチを取得・適用。パッチとは特定のファイルに対する差分情報のことで、2つのファイル間の差異を出力する diff コマンドによって作成。
patch コマンドを使用してパッチファイルを適用（差分情報を使って内容を更新）。

patch コマンドでパッチの適用に失敗した場合は、適用できなかった差分情報が「該当ファイル.rej」というファイルに出力。
複数のパッチを扱う場合には、それらが両立できるものなのか、適用する順番に指定はないか注意する。複数のパッチが順序通り揃っている場合、これを一気に適用する「patch-kernel」というスクリプトが用意されている場合がある。

●patch コマンドの使い方の種類

■リダイレクトを使う
patch [オプション]　< パッチファイル

■パイプを使う
cat パッチファイル　| patch [オプション]

■patchの引数にすべて指定
patch [オプション]　対象　パッチファイル

※上二つの方法では現在の作業ディレクトリとパッチファイル内に書かれたパスから、パッチを当てる対象ファイルを自動的に判断するが、最後の方法ではパッチの対象ファイルを明示的に引数で指定している点に注意。

●オプションとして指定できるもの。-p0 や、-R が特に重要

・-pN (Nは階層[/]数)
　-p0 パッチないのパスを修正しない
　-p1 パッチ内のパスの先頭のスラッシュまでを取り除く
　-pN パッチ内のパスのN階層のディレクトリを取り除く

・-d パッチ適用の際の作業ディレクトリを指定
・-R パッチを逆向きに適用し、変更を取り消し
Docker-laravel9のエラーのメモawait import('source-map-support').then((r) => r.default.install())

# 背景
サーバーの環境構築している途中で
```
$npm run dev
```
を実行しようとしたら、以下のエラーが起きた

# エラーとして、問題になった部分
```
> dev
> vite

file:///var/www/html/project/node_modules/vite/bin/vite.js:7
    await import('source-map-support').then((r) => r.default.install())
    ^^^^^

SyntaxError: Unexpected reserved word
    at Loader.moduleStrategy (internal/modules/esm/translators.js:140:18)
    at async link (internal/modules/esm/module_job.js:42:21)
```
# エラーの原因
npm(nodejs)のバージョンが古かったのが原因である

# エラーの解決するために修正した部分
Dockerfileの中身
```
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash -
RUN apt-get install -y nodejs

```
を以下に修正すると問題なく動いた
```
RUN curl -sL https://deb.nodesource.com/setup_18.x | bash -
RUN apt-get install -y nodejs
```
そのあと、dockerを再起動しなおす。
```
$ docker compose up -d --build
```

# 結論
エラー解決
バージョンアップする際には注意しようー
Epson Printer TM-T82 ePos でSSL通信を可能にし、HttpsとHttpの混在環境から抜け出す。

WebブラウザーからEpsonのサーマルプリンタに印刷を頼むとき、通常であれば、HttpsとHttpが混在するのでできない。
これを解決する方法は、

EpsonPrinterでSSLを有効にする。
プリンター内の自己証明書機能で、そのプリンターのローカルIPアドレスを加え、証明書を作成。
Webでそのローカルアドレスをたたけば、証明書をファイルに保存が可能（Chromeでは.crtファイル。FireFoxでは.pemファイル）
その証明書をTrustRootCertificationAuthoritiesに登録。登録するとき、.pemファイルはうまく登録できたが、.crtファイルはできなかった。（なぜか不明）
（Start-run-”MMC.exe”　　MicrosoftManagementConsole”）
ブラウザーでそのページのすべての権限を初期化し、再ロード。
Printerへの通信がHttpsで可能になった。（js内のPortは８００８から８０４３に変更しておくこと。）
macのdownloadフォルダを自動整理

# 目的

ダウンロードフォルダに溜まったファイルを週ごとにフォルダを作って、そこへ入れてもらう。

# 手順
１、Automatorを開く
２、新規作成 => カレンダーアプリを選択
３、シェルスクリプトの実行を選択

以下のようなスクリプトを書く

```
cd ~/Downloads
today=$(date "+%Y%m%d")
mkdir ${today}
find ./ -exec -mtime +7 mv "{}" ./${today}/ \;
```

4、保存するとカレンダーが立ち上がって予定に追加されているので、予定を開いて繰り返しにチェックを入れて動かしたい曜日もドラッグ&ドロップで動かす。

以上。

エラーのキャッチとか何も考慮していないけど、一応これでいける・・・はず。

# スクリプトの解説

```
ダウンロードフォルダへ移動
今日の日付を変数に格納
変数に入っている文字列をフォルダ名にして新規作成
7日前までのファイルを見つけて作ったフォルダに移動
```
【競プロ典型90問】007をPythonで解説

# はじめに
最近競プロを始めたので，[競プロ典型90問][1]の★1~★3を解いて典型問題へのアプローチ方法を学んでいます．
公式のソースコードがC++で困っているPython勢の方も多いと思うので，自分の解答をシェアしたいと思います！
初心者の解答なので，もっといい方法があれば教えていただけると嬉しいです！

# 007 CP Classes（★3）
https://atcoder.jp/contests/typical90/tasks/typical90_g

## 問題文
ABC 競技プログラミング塾には $N$ 個のクラスがあり、番号 $i$ $(1≤i≤N)$ のクラスはレーティング $A_i$ の生徒を対象としています。
今、$Q$ 人の生徒がこの塾に入塾しようとしています。番号 $j$ $(1≤j≤Q)$ の生徒のレーティングは $B_j$ です。各生徒は自分に合わないレベルのクラスに行くと不満になります。各生徒について、その不満度は次のように定義されます。
- 対象レーティング $a$ と自分のレーティング $b$ の差の絶対値、すなわち $∣a−b∣$

$j=1,2,3,…,Q$ それぞれについて、番号 $j$ の生徒の不満度として考えられる最小値を求めてください。ただし、$1$ 人も入らないクラス、複数人から成るクラスがあっても良いものとします。

## 制約
- $1≤N≤300000$
- $1≤Q≤300000$
- $0≤A_i≤10^9$
- $0≤B_j≤10^9$
- 入力はすべて整数

# 解法
$Q$ 人の生徒それぞれについて，$N$ 個のクラスの中で最も不満が少なくなるクラスを選べば良いです．
これを愚直に実装しようとすると，生徒 $1$ 人に対してその生徒のレーティング $b_j$ と $A_1 \sim A_N$ の $N$ 個の対象レーティングを比較してその最小値を求める操作を $Q$ 人の生徒に対して行う必要があります．この計算量は $O(NQ)$ で，$N, Q$ の制約からわかるように`TLE` してしまいます．
そこで， 生徒 $1$ 人に対する操作を工夫することを考えます．
数値のリストの中から特定の値，もしくは最も近い値を探す方法として二分探索があります．ここでは二分探索について詳しくは説明しませんが，$1$ 回あたりの操作で探索範囲を半分にしていく探索方法で，リストの長さを $N$ とすると $O(\log N)$ の計算量で探索できます．
二分探索を行うためには，対象となるリストがソートされている必要があるので，まずは $A_1 \sim A_N$ を昇順ソートし，ソート後に $A_{1'} \sim A_{N'}$ になったものとします．そして，各生徒のレーティング $b_j$ について二分探索をして， $A_{1'} \sim A_{N'}$ の中にソートされた状態を保ったまま $b_j$ を挿入できる位置を探します．
ここで，もしその位置がリストの両端であれば， $b_j$ に最も近い値は隣の要素の値になります．一方で，リストの両端でない場合は，挿入できる位置の両隣の値のどちらかが最も $b_j$ の値に近くなるので，実際に計算してどちらのほうが不満度が小さくなるのかを比較する必要があります．
$A_1 \sim A_N$ のソートにかかる計算量は $O(N \log N)$ で，$Q$ 人の生徒に対する二分探索の計算量は $O(Q\log N)$ なので，全体で $O(\( N+Q\) \log N)$ の計算量で実装できます．

↓↓↓ 二分探索の説明はこちらがわかりやすいのでオススメです ↓↓↓

https://www.momoyama-usagi.com/entry/info-algo-search

# 実装
Pythonで二分探索を行う際に使えるモジュールとして `bisect` があります．これは競プロをしているとよく使うモジュールだと思うので，使い方を覚えておくと良いと思います．[公式リファレンス][2]を確認してみてください．

```Python: answer.py
import sys
input = sys.stdin.readline
from bisect import bisect_left


N = int(input())
A = list(map(int, input().split()))
Q = int(input())
A.sort()
ans = []
for _ in range(Q):
    B = int(input())
    # ソートされた順序を保ったままBをAに挿入できる位置を二分探索
    i = bisect_left(A, B)
    if i == 0:
        # BがAのどの値よりも小さければ最も低いレベルのクラスに行く
        ans.append(abs(A[0] - B))
    elif i == N:
        # BがAのどの値よりも大きければ最も高いレベルのクラスに行く
        ans.append(abs(A[N-1] - B))
    else:
        # 挿入後の両端の不満度を比較して小さい方へ行く
        ans.append(min(abs(A[i-1] - B), abs(A[i] - B)))
# 出力
for i in range(Q):
    print(ans[i])
```


# さいごに
今回使った二分探索は，競プロをしているといろいろなパターンの問題で出会うと思います．汎用性が高く，モジュールを使うことで簡単に実装できるので，この機会にしっかり身につけておくことをオススメします．
よく分からないことやコードの改善点などありましたら, 気軽にコメントしてください.

最後までお付き合いいただきありがとうございました！

<!-- リンク集 -->
[1]: https://atcoder.jp/contests/typical90
[2]: https://docs.python.org/ja/3/library/bisect.html
twitterのリツイート者，フォローしている人を非表示にするユーザースクリプトを作った

# つくったもの
　需要があるかわからないけどtwitterのリツイート者，フォローしている人を非表示にするユーザースクリプトを作った．理由はモノが流れてきたときに，その上の「○○さんがリツイートしました」という表示を見て「こいつもこんなん見てんのかよ・・・」という気持ちになるのが嫌だったから．

# 効果
![mosaic_20221012225020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/302a0160-e60c-87c3-f06c-fedf67680de6.png)

これがなくなります．
あと，

![mosaic_20221012225850.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/703910/76b56672-8f67-abad-e334-5547462cdff0.png)

ユーザーページのヘッダーにあるこれも消えます．

# 使い方
Tampermonkeyをブラウザ拡張機能で追加して以下のリンク先からUserscriptをインストールしてやってください．適当に作ったものなのでメンテの期待はあまりなさらないように・・・



- Firefox用Tampermonkey
https://addons.mozilla.org/ja/firefox/addon/tampermonkey/

- Chrome用Tampermonkey
https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=ja


- **今回作ったUserscript**
https://github.com/MunoLike/my-userscripts/raw/main/remove_anoying_info.user.js
目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞ Step [O15o__10o0] 盤サイズの変更

目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞ Step [O15o__10o0] 盤サイズの変更

# 連載の目次

📖 [目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞](https://qiita.com/muzudho1/items/744f6051954525878b84)  

# Step [O15o__10o0] 盤サイズの変更 - resize コマンド

## Step [O15o__11o0] コマンド実装 - kernel.go ファイル

👇 以下の既存ファイルを編集してほしい  

```plaintext
  	📂 kifuwarabe-uec14
	├── 📂 kernel
  	│	├── 📄 board_area.go
  	│	├── 📄 o12o__11o1o0_board.go
	│	├── 📄 go.mod
👉 	│	├── 📄 kernel.go
 	│	├── 📄 logger.go
 	│	└── 📄 stone.go
    ├── 📄 .gitignore
 	├── 📄 engine_config.go
  	├── 📄 engine.toml
    ├── 📄 go.mod
  	├── 📄 go.work
	└── 📄 main.go
```

👇 がんばって、 Execute メソッドに挿入してほしい  

```go
// ...略...

	// この下にコマンドを挟んでいく
	// -------------------------

	case "boardsize": // [O15o__11o0]
		// Example: `boardsize 19`
		var sideLength, err = strconv.Atoi(tokens[1])

		if err != nil {
			logg.C.Infof("? unexpected sideLength:%s\n", tokens[1])
			logg.J.Infow("error", "sideLength", tokens[1])
			return true
		}

		k.Position.Board.Init(sideLength, sideLength)
		logg.C.Info("=\n")
		logg.J.Infow("ok")

		return true

	// ...略...

	// この上にコマンドを挟んでいく
	// -------------------------

// ...略...
```

## Step [O15o__12o0] 動作確認

👇 以下のコマンドをコピーして、ターミナルに貼り付けてほしい

Input:  

```shell
go run .
```

これで、思考エンジン内の入力待機ループに入った  

👇 以下のコマンドをコピーして、ターミナルに貼り付けてほしい  

Input:  

```shell
boardsize 9
```

Output > Console:  

```plaintext
[2022-09-12 20:44:12]   # boardsize 9
[2022-09-12 20:44:12]   =
```

Output > Log > Plain:  

```plaintext
2022-09-12T20:44:12.860+0900	# boardsize 9
2022-09-12T20:44:12.896+0900	=
```

Output > Log > Json:  

```json
{"level":"info","ts":"2022-09-12T20:44:12.894+0900","caller":"kifuwarabe-uec14/main.go:61","msg":"input","command":"boardsize 9"}
{"level":"info","ts":"2022-09-12T20:44:12.896+0900","caller":"kernel/kernel.go:76","msg":"ok"}
```

Input:  

```shell
board
```

Output:  

```plaintext
[2022-09-12 20:56:20]   # board
[2022-09-12 20:56:20]   = board:'''
. +++++++++++
. +.........+
. +.........+
. +.........+
. +.........+
. +.........+
. +.........+
. +.........+
. +.........+
. +.........+
. +++++++++++
. '''
```

# ~~Step [O15o__13o0]~~

Removed  

## ~~Step [O15o__13o1o0]~~

Moved to `O11o__10o_2o0`  

## ~~Step [O15o__13o2o_1o0]~~

Moved to `[O11o__10o_3o0]`  

## ~~Step [O15o__13o2o_2o0]~~

Moved to `[O11o__10o_4o0]`  

## ~~Step [O15o__13o2o_3o0]~~

Merged to `[O11o_3o0]`  

## ~~Step [O15o__13o2o_4o0]~~

Moved to `[O11o__10o_6o0]`
目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞ Step [O15o__14o_1o0] データファイル作成

目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞ Step [O15o__14o_1o0] データファイル作成

# 連載の目次

📖 [目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞](https://qiita.com/muzudho1/items/744f6051954525878b84)  

# Step [O15o__14o_1o0] データファイル作成 - data/board1.txt ファイル

あとで使うファイルを先に作成する  

👇 以下のファイルを新規作成してほしい  

```plaintext
  	📂 kifuwarabe-uec14
	├── 📂 data
👉 	│	└── 📄 board1.txt
	├── 📂 kernel
  	│	├── 📄 board_area.go
  	│	├── 📄 board_coord.go
 	│	├── 📄 board_set.go
  	│	├── 📄 board.go
	│	├── 📄 go.mod
	│	├── 📄 go.sum
 	│	├── 📄 kernel.go
 	│	├── 📄 logger.go
 	│	└── 📄 stone.go
    ├── 📄 .gitignore
 	├── 📄 engine_config.go
  	├── 📄 engine.toml
    ├── 📄 go.mod
  	├── 📄 go.work
 	└── 📄 main.go
```

```plaintext
    ABCDEFGHJKLMNOPQRST
   +++++++++++++++++++++
 1 +...................+
 2 +.xxx...............+
 3 +.x.x...............+
 4 +.xxx...............+
 5 +...................+
 6 +...................+
 7 +...................+
 8 +...................+
 9 +...................+
10 +...................+
11 +...................+
12 +...................+
13 +...................+
14 +...................+
15 +...................+
16 +...................+
17 +...................+
18 +...................+
19 +...................+
   +++++++++++++++++++++
```
目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞ Step [O15o_1o0] 座標の定義

目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞ Step [O15o_1o0] 座標の定義

# 連載の目次

📖 [目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞](https://qiita.com/muzudho1/items/744f6051954525878b84)  

# Step [O15o_1o0] 座標の定義

## ~~Step [O15o0]~~

Moved to `[O12o__10o1o0]`  

## ~~Step [O16o0]~~

Remove  

### Step [O16o1o0] コマンド実装 - kernel.go ファイル

👇 以下の既存ファイルを編集してほしい  

```plaintext
  	📂 kifuwarabe-uec14
	├── 📂 kernel
	│	├── 📄 board_coord.go
  	│	├── 📄 board_area.go
  	│	├── 📄 o12o__11o1o0_board.go
	│	├── 📄 go.mod
👉 	│	├── 📄 kernel.go
 	│	├── 📄 logger.go
 	│	└── 📄 stone.go
    ├── 📄 .gitignore
 	├── 📄 engine_config.go
  	├── 📄 engine.toml
    ├── 📄 go.mod
  	├── 📄 go.work
  	└── 📄 main.go
```

👇 がんばって、 Execute メソッドに挿入してほしい  

```go
	// ...略...
	// この下にコマンドを挟んでいく
	// -------------------------
	// ...略...

	// * アルファベット順になる位置に、以下のケース文を挿入
	case "test_get_point_from_code": // [O16o1o0]
		// Example: "test_get_point_from_code A1"
		var point = k.Position.Board.coordinate.GetPointFromGtpMove(tokens[1])
		var code = k.Position.Board.coordinate.GetGtpMoveFromPoint(point)
		logg.C.Infof("= %d %s", point, code)
		logg.J.Infow("ok", "point", point, "code", code)
		return true

	// ...略...
	// この上にコマンドを挟んでいく
	// -------------------------
	// ...略...
```

## Step [O16o2o0] 動作確認

👇 以下のコマンドをコピーして、ターミナルに貼り付けてほしい

Input:  

```shell
go run .
```

これで、思考エンジン内の入力待機ループに入った  

👇 以下のコマンドをコピーして、ターミナルに貼り付けてほしい  

Input:  

```shell
test_get_point_from_code A1
```

Output > Console:  

```plaintext
[2022-09-17 17:18:46]   # test_get_point_from_code A1
[2022-09-17 17:18:46]   = 22 A1
```

## ~~Step [O17o0]~~

Moved to `[O12o__10o2o0]`  

## ~~Step [O18o0]~~

Moved to `[O12o__10o3o0]`
Select文覚え書き

すんません、個人のただのメモです
現場では本読む余裕なく、というか本とか　
おけず　(･_･;


inner join
outer joinのように、基準テーブルなくて
一致した行があるやつのみ抽出

なのでouter joinのように　
不一致行を得れない　
outer join は基準テーブルがある 
左のテーブルを逐次読み、右のテーブルを　
フルスキャンするのが　Left outer join

逆がRight outer join 
両方から検索するのが　full join

union
select文の結果を合成させる

select num,name from tableA
union
select '0' as num, '名前0' as name 
order by num
limit 4 

num name
0    名前0　下のselect文
1    名前1　上のselect文
2    名前2　上
3    名前3　上

上下、二つのselect結果を合成させる
フロントエンドのテスト手法まとめ

# テスト

ソフトウェアの品質を担保するためのもの

## フロントエンドのテスト(画面)

開発者が望んだように、ユーザーがちゃんとページを見れることや、機能を使用できるかどうかなど

## バックエンドのテスト(DB)

実際にデータベースから削除されたかどうかなど

## メリット

- エラーの早期発見
- ホットフィックスを防ぐ
- チェック漏れができる(国際化対応やアクセシビリティ)

## 難しい理由

- 要件が変わりやすい(デザインなどは変わってしまう)
    - とくにスタートアップなど
- ツールの移り変わりが激しい
- テスト手法が多すぎるし、複雑
- Reactなどが最近出てきたので、知見もたまっていない
- バックエンドと比べてクリティカルでないので、書いても効果を実感しづらい
    - 費用対効果が悪い

## 種類

### Testing Pyramid(テスティングピラミッド)

- E2Eテストは書くのが大変で実行速度も遅い
- ユニットテストが一番あるべき
- 現代は主流でなくなりつつある

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629357/9de3fe5d-3538-e855-75b9-6b257d0b7361.png)


### TESTING TROPHY(テスティングトロフィ)

- 現在主流になりつつある
- Testing Libraryの作者 Kent C. Doddsが提唱
- Next.jsの開発元のVercel CEOのGuillermo Raunchも同様の発言をしていた
- スタティックテストが追加
- 自信係数
    - 図の上行にくほど、正しく動くことへの自信を与える
- 量が多いほど書くべきテストを増やすべき
- インテグレーションテストが最もコスパが良い


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629357/d70e97df-cb64-722c-9f9c-593501c57adb.png)

### ユニットテスト(単体テスト)

- 関数やメソッドのテスト(ほぼ同じ)
    - 関数
        - 独立して定義されたもの
    - メソッド
        - クラスで定義されているもの
- APIのテストにも有効だが、本番のAPIではなく、モックを使用する
- Meta製のJestが安定で最も使われている
- Vitestが人気が出ている
    - 速度が早い
    - 設定がかんたん

### インテグレーションテスト(結合テスト)

- ユニット相互作用のテスト
    - 複数の機能がうまく連動しているかどうかを調べる
- Testing Library
    - getByTestIdは最終手段

### E2Eテスト(エンドツーエンドテスト)

- ブラウザを動作して行うインタラクションテスト
- コードや実装とは一切関係なくユーザーからアプリケーションがどう見えるかどのようにアプリケーションを動かすかという点のみ扱う
- モックではなく、実際のAPIを使いブラウザで実行されることが特徴
- Cypressが最も使われていて安定
- Microsoft製のPlaywrightが人気
    - ユーザーの操作からコードを生成できる

### スタティックテスト(静的テスト)

- フォーマットやタイプミス、型のテスト
- ESLint, Prettier, TypeScript

### スナップショットテスト

- UIが変更されていないかを確認
- スナップショット(プログラムの出力)を取得し、過去のスナップショットファイルと比較する
- Jest

### ビジュアルリグレッションテスト

- コードの変更によって生じる視覚的な差異など視覚的な構造のテスト
- ページやコンポーネントのスクリーンショットを過去のスクリーンショットと比較する
- Percyのような専用ツールをCypressやPlaywrightなどのE2Eツールと組み合わせて使うことが多い
- 最近はUIコンポーネント管理のツールのStroybookがリグレッションテストに使われている

### パフォーマンステスト

- 従来は手作業で行われることが多かったが、最近はCIで自動化させることも多い。パフォーマンスの許容値を設けてそれを下回った場合はデプロイさせない
- LighthouseやPageSpeed Insightsなど

### アクセシビリティテスト

- アクセシビリティ標準の基準に従って、インターフェースをテスト
- 障害のある人がWebサイトへアクセスしたときに効果的に使用できるようにするもの
- スクリーンシーダー、AccessLint、axe-core、Lighthouse、pa11yなど
目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞ Step [O11o_4o0] 石の色定義

目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞ Step [O11o_4o0] 石の色定義

# 連載の目次

📖 [目指せ！第１４回ＵＥＣ杯コンピューター囲碁大会＜本編＞](https://qiita.com/muzudho1/items/744f6051954525878b84)  

# Step [O11o_4o0] 石の色定義

`石` を定義していないが、先に `石の色` を定義する  

石の色の組み合わせを定義する。  
石の色の組み合わせは以下の４通りある。これらの集合を `Color` と名付けることにする   

* `Color_None` - 隣接する連は１つもない
* `Color_Black` - 黒石の連とだけ隣接する
* `Color_White` - 白石の連とだけ隣接する
* `Color_Mixed` - 黒石と白石の連の両方に隣接する

## Step [O11o_4o1o0] ファイル作成 - color.go

👇 以下のファイルを新規作成してほしい  

```plaintext
  	📂 kifuwarabe-uec14
	├── 📂 kernel
👉	│	├── 📄 color.mod
	│	├── 📄 go.mod
 	│	├── 📄 kernel.go
 	│	└── 📄 logger.go
    ├── 📄 .gitignore
 	├── 📄 engine_config.go
  	├── 📄 engine.toml
    ├── 📄 go.mod
  	├── 📄 go.work
 	└── 📄 main.go
```

```go
// BOF [O11o_4o1o0]

package kernel

import "fmt"

type Color uint

const (
	Color_None Color = iota
	Color_Black
	Color_White
	Color_Mixed
)

// String - 文字列化
func (c Color) String() string {
	switch c {
	case Color_None:
		return ""
	case Color_Black:
		return "x"
	case Color_White:
		return "o"
	case Color_Mixed:
		return "xo"
	default:
		panic(fmt.Sprintf("unexpected color:%d", int(c)))
	}
}

// GetAdded - 色の加算
func (c1 Color) GetAdded(c2 Color) Color {
	switch c1 {
	case Color_None:
		return c2
	case Color_Black:
		switch c2 {
		case Color_None:
			return Color_Black
		case Color_Black:
			return Color_Black
		case Color_White:
			return Color_Mixed
		case Color_Mixed:
			return Color_Mixed
		default:
			panic(fmt.Sprintf("unexpected my_color:%s adds_color:%s", c1, c2))
		}
	case Color_White:
		switch c2 {
		case Color_None:
			return Color_White
		case Color_Black:
			return Color_Mixed
		case Color_White:
			return Color_White
		case Color_Mixed:
			return Color_Mixed
		default:
			panic(fmt.Sprintf("unexpected my_color:%s adds_color:%s", c1, c2))
		}
	case Color_Mixed:
		return Color_Mixed
	default:
		panic(fmt.Sprintf("unexpected my_color:%s adds_color:%s", c1, c2))
	}
}

// GetOpponent - 色の反転
func (c Color) GetOpponent() Color {
	switch c {
	case Color_None:
		return Color_Mixed
	case Color_Black:
		return Color_White
	case Color_White:
		return Color_Black
	case Color_Mixed:
		return Color_None
	default:
		panic(fmt.Sprintf("unexpected color:%d", int(c)))
	}
}

// EOF [O11o_4o1o0]
```