OmniAICreator/Qiita-1.07M huggingface dataset:
[Mac OS Catalina]accountsdのCPU使用率から来る排熱がヤバいのを解決


# はじめに

今朝、自分のMacbookPro(バージョン10.15.6)を立ち上げたところChromeブラウザを立ち上げただけでファンが轟音を掻き鳴らし、Mac本体がとてつもなく熱くなり始めました。

アクティビティモニタでCPUの使用状況を見たところ、”accountsd”なるプロセスが凄まじくCPUを食っていることがわかったので、対処療法を取ることにしました。


# 現状確認

「アプリケーション」の「アクティビティモニタ」を起動、CPU使用率を確認してやったところ
accountsdの%CPU(CPU使用率)が300%を超えていました。(CPU3つ分のコアを食っているということ。)


![](https://paper-attachments.dropbox.com/s_493ECF5C2E84B30F33BB914821AEEC72CC9C963B46D61FA52929FCB4D9015113_1601521596935_image.png)


※同様の症状を訴えている方の撮ったスクショ([accountsd process 500% CPU in Catalina 10.15.7/Apple公式コミュニティ](https://discussions.apple.com/thread/251846520))


# accountsdとは？

[Apple公式](https://developer.apple.com/documentation/accounts#//apple_ref/doc/uid/TP40011024)によると、『ユーザーがログイン認証情報を入力しなくても、アプリ内から外部アカウントにアクセスして管理できるようにしてくれる』ものとのことです。

[Quora](https://www.quora.com/What-is-accountsd-and-why-does-it-want-to-use-the-login-keychain)の回答で、『キーチェーン (保存されたクレデンシャルとパスワードのデータベース) から、それらのクレデンシャルを必要とするアプリケーションに保存されたパスワードやその他のクレデンシャルを送信するアカウントのデーモン(常駐アプリ)だ』という説明がされていて、しっくりきました。


# 対処法リスト

下記の対処療法全部をやる必要はないです。一つ一つ試してやって上手く行ったらそこでストップしましょう。

### (1)アクティビティモニタの「システム診断」→ 「Spotlight診断」→ 再起動
アプリケーション → アクティビティモニタ →  左上歯車から
![スクリーンショット 2020-10-01 12.51.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403039/56b6e204-c192-9bda-49ec-5d5c01bcfd1c.png)



### (2)Wifiの再起動

### (3)iCloudをサインアウトした上でMac本体を再起動

### (4)iCloudを再ログイン

### (5)セーフモードで起動後、本体を再起動
参考:[Macをセーフモードで起動する/Apple公式](https://support.apple.com/ja-jp/guide/mac-help/mh21245/mac)

###(6)OSをアップデートする
10.15.6なら10.15.7に

### (7)iCloud Driveのオプションを外す
システム環境設定 → インターネットアカウント → iCloud > オプションボタンすべてのチェックを外す→再起動
※Macにアイテムを保存するかどうかを尋ねるポップアップメッセージが表示されたら、「このMacに保存」を選択してください。(こうすることで再度有効化が出来るので)

### (8)環境設定からサインアウト
[参考：「Apple ID」環境設定からサインアウトする/Apple公式](https://support.apple.com/ja-jp/guide/mac-help/mchla99dc8da/mac#:~:text=Sign%20out%20of%20your%20Apple%20ID%20preferences&text=On%20your%20Mac%2C%20choose%20Apple%20menu%20%3E%20System%20Preferences%2C%20select,Click%20Sign%20Out.)


# 参考記事

[Catalina 10.15.7 Update = accountsd hitting 400% CPU if using iCloud](https://mrmacintosh.com/catalina-10-15-7-update-accountsd-using-400-if-using-icloud-mail/)

[accountsd process 500% CPU in Catalina 10.15.7/Apple公式コミュニティ](https://discussions.apple.com/thread/251846520)
Nginxの設定ファイルのテストとパフォーマンスを上げる設定

# はじめに
はじめまして、youtuber系エンジニアのやっすんです！

今回は、パフォーマンスに関する部分を説明します！
具体的には、以下の内容です。

- 設定ファイルの検証
- パフォーマンスに影響を与えるディレクティブ

Youtubeでも説明しているので、作業用としてお使いください！

[【YouTube動画】NGINXの設定ファイルのテスト、パフォーマンスを上げる設定](https://youtu.be/jJFFLbqghbk)
[![NGINXの設定ファイルのテスト、パフォーマンスを上げる設定](https://img.youtube.com/vi/jJFFLbqghbk/0.jpg)](https://www.youtube.com/watch?v=jJFFLbqghbk)


# 設定ファイルの検証
Nginxでは、設定ファイルの文法チェックをコマンド1つで確認できます。

```bash
$ nginx -t
```

文法が正しければ、次のような結果になります。

```bash
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

使えるOSは限られますが、次のコマンドでも実行できます。

```bash
$ service nginx configtest
```

## Webサイト上で確認する方法
locationの書き方は、Webサイト上で試すこともできます。
https://nginx.viraptor.info


# パフォーマンスに影響を与えるディレクティブ
Nginxのパフォーマンスに影響を与える基本的なディレクティブについて紹介します。
久保達彦・道井俊介著『nginx実践入門』に他にも有益なディレクティブがあるので、ぜひ読んでみてください。


## sendfile
有効にすると、ファイルの読み込み・レスポンス送信にsendfile()システムコールを使用できます。
これを使うと、ファイル送信が効率的になります。

```
sendfile on;
```

## tcp_nopush
sendfileディレクティブが有効な場合、パケットサイズを最大にし、送信するパケット数を最小にできます。

```
tcp_nopush on;
```

## open_file_cache
一度配信したファイル情報 (ファイルの更新日時、ディレクトリの存在有無など) を一定期間保存できるようになります。
maxでキャッシュする最大数、inactiveで保持する時間を設定できます。

```
open_file_cache max=1000 inactive=20s;
```

## pcre_jit
正規表現のJITコンパイルを有効にし、正規表現の処理速度を向上させることができます。

```
pcre_jit on;
```

## gzip / gzip_static
リクエストのたびにgzip圧縮する。
圧縮したコンテンツを配信することで、WEBサイトを高速にし、サーバーの負荷を減らすことができます。

```
gzip on;
```

gzipファイルが存在すれば、ブラウザが圧縮転送に対応するようにできます。

```
gzip_static on;
```

## keepalive
保持するコネクション数を指定することができます。
コネクションが維持されるため、通信が高速になります。

```
upstream http_backend {
  ...
  keepalive 16;
}
```

ただ、これを使用するためには、HTTP/1.1である必要があります。

```
server {
  ...
  proxy_http_version 1.1;
}
```


# まとめ
今回はNginxの設定ファイルの文法チェックのやり方、パフォーマンスに影響を与えるディレクティブを紹介しました。
ディレクティブの紹介で出てきた用語については、別途説明する予定です。

また、何か間違いや指摘がありましたら、コメントよろしくお願いします。

[twitter](https://twitter.com/yassun_youtuber)や[youtube](https://www.youtube.com/channel/UCajrdoGzHzDogrNrLYYmGsg/featured?view_as=public)でのコメントもお待ちしています！
vim-anywhereをmacvim-kaoriyaと共存させる

# tl;dr

```sh
ln -s /Applications/MacVim.app/Contents/bin/mvim /usr/local/bin/mvim
curl -fsSL https://raw.github.com/cknadler/vim-anywhere/master/install | bash

echo "控えめに言って最&高"
```

# Vimをどこでも使わせてくれ

[Vim](https://www.vim.org)が，最高のテキストエディタの一つであることはよく知られている．
ひとたびVimの操作に慣れてしまえば，なぜ世の中のソフトウェアがVimライクに操作できないのか，全く意味がわからなくなるだろう．

そんな要望から作られたのが[cknadler/vim-anywhere](https://github.com/cknadler/vim-anywhere)である．
どこからでも，ショートカットひとつで普段遣いのVimが立ち上がり，入力した内容はクリップボードにプレーンテキストとしてコピーされるので，実質的にはVimでテキスト入力をしたのと同じ体験が得られる．
いわゆる，最☆高というやつである．

# 日本語ユーザとしては，香り屋さんのVimも欠かせない

Vimは，基本的にはアルファベットの入力を想定して作られたテキストエディタではあるが，日本語環境もよく整備されている．
日本語入力環境の改善に多大なる貢献をし，またVimを日本に広めた双璧の一人でもある[KoRoN](https://github.com/koron)さんの[香り屋](https://www.kaoriya.net)パッチは，日本語をVimで取り扱う上で必須のものになっている．
香り屋さんのパッチがあらかじめ当てられたVimとしては，Windowsでは[vim-kaoriya](https://www.kaoriya.net/software/vim/)が，Macでは[macvim-kaoriya](https://github.com/splhack/macvim-kaoriya)が，それぞれ配布されている．

さて，vim-anywhereはMacにインストールできるが，ぜひともmacvim-kaoriyaを使いたいものである．
しかし，vim-anywhereのインストール手順では，Homebrewを使ってmacvimをインストールせよ，と書いてある．
Homebrew上のmacvimは，当然香り屋パッチが当てられてないので，このままでは折角のvim-anywhereが日本語ユーザにとってイマイチ使いづらいものになってしまう．

# vim-anywhereはシンプルに`mvim`にパスが通っているか確認しているだけ

ということでvim-anywhereで立ち上がるgVimを，普段遣いのmacvim-kaoriyaに設定したいわけだが，どうもvim-anywhereは，インストール前に`mvim`にパスが通っているかを確認しているらしい．
インストール後は，その`mvim`のパスを呼び出してきているだけなので，ここを騙くらかしてやれば，任意のgVim環境でvim-anywhereを実行できるということになるだろう．

よって，単純にパスの通ったディレクトリに，macvim-kaoriyaのプログラムをシンボリックリンクする．

```sh
ln -s /Applications/MacVim.app/Contents/bin/mvim /usr/local/bin/mvim
```

あとは，vim-anywhereに記載の手順に従って

```sh
curl -fsSL https://raw.github.com/cknadler/vim-anywhere/master/install | bash
```

を実行すれば終わりである．
あとは，vim-anywhereの使い方をよく読むか，[rcmdnk's blog/vim-anywhere: Mac/LinuxでどこでもVimを立ち上げてテキスト入力する](https://rcmdnk.com/blog/2018/02/20/computer-vim/)を読んで設定する．

# 終わりに

Vimを，テキスト入力のインターフェースとして利用するというのは，とても良い発想だといえる．
vim-anywhereで呼び出されたgVimは，当然のように普段遣いしているvimなので，シンタックスハイライトや補完，スニペットの利用が可能である．
ここで作成したテキストは，プレーンテキストの形でクリップボードへ移されるので，メールにそのままペーストしてもなんの問題もない．
結局，我々が使うソフトウェアの多くは，入力されたテキストを最終的に整形して処理するだけのものに過ぎない．
テキスト入力環境そのものは，より効率的なソフトウェアと連携させるという考え方が最善なのではないだろうか．
ARライブとは、ダンサーと光の演出がシンクロする

## ARライブとは

音楽アーティストやアイドル、ダンスパフォーマーなどのライブにおいて光や音などの様々な演出がされます。
![スマホからライブ会場が出現、ダンサーと光の演出がシンクロするARライブとは.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332191/a68acf86-3e6d-d8ff-00a5-e234c29ecc2d.jpeg)
スマホからライブ会場が出現、Oculus QuestでのVR会議システムデモ – ONETECH

ARライブはARグラスやスマートフォンを通してライブを見ることで3Dモデルをライブ空間に出現させ、今までにできなかった演出を可能にします。

ダンスパフォーマーのARライブではマイケルジャクソンやマドンナの専属ダンサーとして活躍していた「ケント・モリ」さんがリアルタイムモーションキャプチャーでダンスとAR映像と音をシンクロさせた見事なパフォーマンスを見せています。

このようにユーザーの目の前にARを利用してライブ会場を出現させる、ライブでダンサーなどの人の動きと映像や光などをシンクロさせるなど、ライブに現実を拡張する技術（AR）を組み合わせることをARライブと呼ぶようです。

## コロナが非接触型のコミュニケーションを後押し
Oculus QuestでのVR会議システムデモ【ONETECH】[Youtube Link](https://youtu.be/rL38TZliJbw)

新コロナの影響でテレワーク全盛の中でVR会議の選択肢もあります。ONETECHは社会の問題に対して積極的に解決のため、開発を進めている会社です。

主な機能
・日程予約
・会議室予約
・事前に会議の資料を共有
・会議で資料をOculusQuestへ自動ダウンロードして共有できる。
・会議で３Dモデルも共有できる
・通話もできる

ONETECHでも2020年5月ごろからAR、VR、MR、ライブ配信などのシステム開発やアプリケーション制作の問い合わせが急増しています。今回紹介したアーティストのライブだけでなく、テレワークを発展させるためのアイデアが多いです。

弊社ではAR・VR・MRアプリの開発実績とWEBRTCやRTMPライブ配信の実績がありますのでそれらを組み合わせたバーチャル空間での非接触型のコミュニケーションツールとしてのXRを提案しております。


##SHOWROOMがARライブ事業に注力

パフォーマーの配信大手「SHOWROOM」がAR・VRライブ事業に力を入れています。

5Gを見据え数十億円の投資を想定して、元メルカリCOOをプロジェクトチームに据えて注力しています。

SHOWROOM 前田裕二が新たに事業戦略を発表 [Youtube Link](https://youtu.be/WWphSkssMz4)

SHOWROOMの前田社長は1990年代のテレビの時代が1対100万人、1対1,000万人の演者と受信者の割合だったと言っています。

また、スマホの登場により受信者だった人たちが発信側に周り、1対数百、1対数十の世界になりました。

更に今後の5Gの登場で再度受信者の「集合」を実現させようとしています。

## KDDIがリアルタイムでAR演出可能な配信システムを導入
KDDI株式会社はリアルタイムでARライブ配信システムをライブハウス「WWW X」に導入しました。

また、ライブ参加者には様々なライブ映像を同時に受信するための「ライブ配信用マルチビューアー」を提供しています。

「ライブ配信用マルチビューアー」は複数受信したライブ映像を切り替えるために使用されます。

5G X 遠隔演出　ARライブの可能性【DAOKO】[Youtube Link](https://youtu.be/QTyUCoiPcKk)

Read More: [https://onetech.jp/blog/what-is-ar-live-9096](https://onetech.jp/blog/what-is-ar-live-9096)
IP電話の導入(ネットワーク)ー午後

応用情報技術者平成28年秋期 午後5

ファイル：2016h28a_ap_pm_qs.pdf

参照：
https://www.ap-siken.com/kakomon/28_aki/pm05.html

メモを簡単に記載します。
詳細の分析は、上記リンクをご参照くだいますようよろしくお願いします。


１、本文中の下線①について，(1)，(2)に答えよ。
（１）、優先度の設定に，ポート番号ではなく，IPアドレスを使用した理由を20字以内で述べよ。

ポート番号は範囲での指定はできないから（私の答え）
⇒
ポート番号は動的に決定されるから（参考答え）

ポート番号を利用できないの理由とは、
・ポート番号は動的に値が割り当てられる
・ポート番号の範囲での指定はできず、個々に指定するが必要である

本来は、範囲指定できれば、動的に割り当てられても、構わないですが、
範囲指定できないと、この方法は無理ですね。


＜＜IP電話の仕組み＞＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/78a67024-dc1b-4deb-d206-e6b64e4454a1.png)

＜＜QoS＞＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/cfa5c92f-e63c-f259-5752-e8040199eed7.png)



（２）、優先度を高く設定する送信元IPアドレスとサブネットマスク，宛先IPアドレスとサブネットマスクの組合せを，ドット付き10進表記で全て答えよ。

10.141.0.0/16
の16とは、上位から16ビットまでが共通のビット列であること。
つまり、/後ろの数字は、サブネットマスクまでの２進数の桁数です。

なので、サブネットマスクは、255.255.0.0です。

組み合わせとは、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591618/625e06b8-574e-52b7-8172-856d3010f88a.png)



本社のIP電話機が設置されているセグメントは「10.21.0.0/16」、支社のIP電話機が設置されているセグメントは「10.141.0.0/16」なので、
・本社から支社への通信
[送信元]
IPアドレス：10.21.0.0，サブネットマスク：255.255.0.0
[宛先]
IPアドレス：10.141.0.0，サブネットマスク：255.255.0.0

・支社から本社への通信
[送信元]
IPアドレス：10.141.0.0，サブネットマスク：255.255.0.0
[宛先]
IPアドレス：10.21.0.0，サブネットマスク：255.255.0.0
以上の2つが高い優先度を設定すべき通信になります。


なお、なぜ、SIPが必要ないとは、

RTP通信はSIPサーバを介さずに電話機同士で直接が行われていることから。それぞれの拠点のIP電話機が配置されているセグメント間の通信だけ優先度を高く設定すればRTP通信を優先させることができます。


３、拠点内でのQoSについて，本文中のgに入れる適切な字句を30字以内で述べよ。

通常の利用に必要なネットワーク帯域が足りる（私の答え）
⇒
IP電話機間の通信は他の通信の影響を受けない（参考答え）

ここは、QoS設定が必要の理由は、
本社と支社の間でファイル転送が集中した際に，RTPによる音声データの通信が影響を受けて，本社と支社の間での通話中に音声の途切れや遅延が発生するおそれがあるので，QoSの考慮が必要である。

つまり、拠点以内では、そのIP電話機間の通信はファイル転送などの通信の影響はあるかないかとのことですね。
web開発勉強する体験

学校に先生から教えてもらった知識の大方は仕事に合わないである。そこで、ひとつ技術が身につくので、いい仕事を探しやすくなるかなあと思っている。よく聞いた話ですが、「web開発が初心者に対するほかの種類より成果見やすくて、モチベーションを上げる。モチベーションを持つことができれば、引き続き勉強することができるなれます」。だから、web開発を選びしようとすることを決めってしまった。ところが、企業の募集要項を開き見たときに僕は驚いた。なぜ条件はこんなに多いとか、自分は全く満たしていないとかって思う。

１月中旬から、僕はうとうとと学習に取り組んだ。まず、freeCodeCampで基礎のHTMLやCSSを習った。freeCodeCampというはオンラインでweb開発者のあつまりであり、ここで開発における様々な必要な技術を学べる。しかも、実践力を非常に重視している。実行しながら知識を吸収しているという主旨である。その自分自身の手で完成しった作品を見たとき、なるほど、面白い気分になれる。誇りも感じられる。一日に３〜４時間プラグラミングしっていた。疲れた頃、よく数日を休んだ。なんかちょっと不真面目な感じそうだね。２ヶ月後、４月になった。４月から６月までの間には、たくさんの本を読んだ。本を読むことで概念やコード後のロジックが理解できるようになった。でも、読書だけするなら、プラグラミング能力が退化するになるかもしれません。長い時間を過ぎると、習ったことを忘れてしまって、繰り返し読まなければなりません。僕の場合はもう何回も読んでしまった。

プロジェクトについては初心者なら大きなのをしなくて小さいのをしてください。この小さいのっては今自分の能力で解決できることなんです。なぜなら、大きいプロジェクトは及ぶ方面がいろいろから。技術だけでなく、設計やデザインも含まれている。最初の頃僕は考えず、プロジェクトに取り組んだ。結果は難しさが高くになった一方だ。複雑すぎて、一つジェクトを完全に作るのは不可能になった。一部だけをするのは学んだこともあるんだけど、前者より自分はできるのかという思いを感じられないんだと思う。

上記から、まとめた技術を勉強するの過程中以下の３つの注意点をご注意ください。

1. 時間管理すること
2. 読書だけしなくて、プロジェクト主導すること
3. 適切なプロジェクトを選ぶこと

僕の体験からもし皆さんはなにか考え事があれば、嬉しいです。これから、普通の方法を変えて試してみたいと思っています。次は皆さんにその経験を紹介したいと思います。
スムーズメッシュでハードエッジを有効に（MEL）

スムーズメッシュでハードエッジを有効にしたい
https://support.borndigital.co.jp/hc/ja/articles/360010574093-%E3%82%B9%E3%83%A0%E3%83%BC%E3%82%BA%E3%83%A1%E3%83%83%E3%82%B7%E3%83%A5%E3%81%A7%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A8%E3%83%83%E3%82%B8%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%9F%E3%81%84

上の記事をmelにしました。
選択オブジェクトでスムーズメッシュのハードエッジが有効になります。


```
string $mySel[] = `ls -sl`;
for ($each in $mySel)
{
setAttr ($each +".useGlobalSmoothDrawType") 0; // Use Global(OpenSubdiv Catmull-Clark)
setAttr ($each +".smoothDrawType") 0; // Maya Catmull-Clark
setAttr ($each +".khe") yes; // Hard edges
}
```

![名称未設定-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410880/1d3eb850-dd52-c44b-d1bd-2291c313b17b.jpeg)



こちらの記事を参考にしてます。
https://forums.cgsociety.org/t/adaptive-opensubdiv-on-maya-2015-standard-mel-inside/1650677
[ServiceNow]参照フィールドを確定するとスタイルが崩れる問題の対処方法

# 事象
Parisにアップデート後、サービスポータルのカタログフォームで参照フィールドの選択ボックスを確定すると幅が短くなる。

![確定前](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/7dc39e06-a5eb-a216-18df-f22c4cb0ef0d.png)
![確定後](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/98259b95-69fa-9618-41a5-efdf10602944.png)


## プラットフォーム
Paris

## 参考URL
https://hi.service-now.com/kb_view.do?sysparm_article=KB0820131

# 原因
参照フィールドの左側に[i]ボタンを表示させないように、下記のようなCSSを追加していたため

```
.add-on.ng-scope {
  display: none;
}
```

# 対処方法
対象のスタイルを削除するだけだと[i]ボタンが復活してしまいます。
![参照アイコン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/7100cf04-da45-509c-dcc1-4669c628cb20.png)


下記のスタイルを追加
(2020/10/03 海外のslackでHIに教えてもらったcssを共有してもらったので更新しました）

```
.ref-picker-container.field-has-reference .btn-default {
  display: none;
}
```
結果がこちら
![スクリーンショット 2020-10-02 12.35.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676866/2b5d4ef5-96af-0ad9-57ff-79ed1dc5191c.png)
React JSXの基礎知識

今回はReactの特徴の一つであるJSXについて解説します。

#JSXとは
Javascript内でHTMLを簡単に記述するための言語です。
ほとんどの構文はJavascriptのように記述しますが、HTMLのように記述することもできます。

また、ReactではJSXがデファクトスタンダード（業界標準）であり、Reactを学習する上でJSXの知識は必須と言えます。

##トランスパイラ
JSXはJavascriptではありません。ですので、JSXの構文をブラウザは理解することができません。
そこでJSXの構文を理解できるようにする。この変換することをトランスパイラと呼んでいて、翻訳のような役割を果たしています。
例:
 　JSX　→　JavaScript(EC6)
有名なトランスパイラ:
Babel, CoffeeScript,TypeScript...etc

##JSXの文法

######Reactパッケージのインストールが必須であること

```qiita.jsx
//.jsxファイル内の先頭にて宣言する
import React from "react"
```

######基本的にはHTMLとほとんど同じ記述であること

ただし、HTMLのclassはclassNameとする必要があり、変数名は全てキャメルケースで書くこと（classNameなど）
空要素は全て閉じなければならないといった違いもあります。
例:

```qiita.jsx
<input type="text" id="hoge" />
```

######{}の中に変数や関数を埋め込むことができること
※divタグ内で変数fooが呼び出される。
例:

```qiita.jsx
const foo="<h1>React</h1>"
const APP = () => {
 return(
  <div id="hoge" className="hoge">
    {foo}
  </div>
 );
};
```

##最後に
JSXを使うことで、記述量が多くなった時に可読性を向上させることができるためとても使いやすいです。私もReactを学習し始めたばかりなので、同じようにReactを学習されている方のお役に立てれば幸いです。今後も引き続きアウトプットをしていきたいと思っておりますので、よろしくお願い致します。

最後まで読んでいただき、ありがとうございました！
GitのLogを見やすくしてみた

# はじめに

プロダクトのソースコード管理において、最早デファクトスタンダードと言っても過言ではないGit。
今回は、そんなGitのLogがデフォルトでは見辛いと感じたので、
サードパーティー製のツール等を使わずにカスタムしてみようと思います。

# 実行環境

- macOS: 10.15.7
- Git: 2.23.0

# とりあえずデフォルトを眺めてみる

![スクリーンショット 2020-10-02 12.45.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126713/c41ae341-928b-27d8-97f9-ba1c86c67baf.png)

正直、デフォルトでも全然問題ない...笑

そもそも、ログは直前のcommit(自分のアクション)ぐらいしか確認しない。
でも、手間を掛けずに見やすくなったらいいな。という温度感です。

# デコってみた

![スクリーンショット 2020-10-02 12.44.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126713/73e51b08-c0f8-52de-2af0-7952262b0c93.png)

各項目のハイライトと、分岐や変更量の表示によって、
直感的に把握しやすくなった気がします。


# コマンド

- [git-log](https://git-scm.com/docs/git-log)

```console
$ git log --stat --graph --date=iso --decorate=short --pretty=format:"%C(black bold)--------------------------------------------------%n%n%C(black bold)[%Creset%C(yellow)%h%Creset%C(black bold)]%Creset%C(magenta)%d%n%C(black bold)[%Creset%C(red)%cd%Creset%C(black bold)]%n%C(black bold)[%Creset%C(blue)%cn%Creset%C(black bold)] [%Creset%C(blue)%ce%Creset%C(black bold)]%n%C(black bold)[%Creset%C(green)%s%Creset%C(black bold)]%n"
```

作った時にFaceBookでシェアしたら反応が良かったので、Gistで公開した覚えがあります。
公開日が2016/07/23でした。(当時、私は弊社のインターン生でしたw)

# さいごに

インターン...楽しかったなぁ。

以下のようにプロファイルにエイリアスを登録しておくと、
役に立つ事があるかもしれません。

```console:.bashrc
alias gl='git log --stat --graph --date=iso --decorate=short --pretty=format:"%C(black bold)--------------------------------------------------%n%n%C(black bold)[%Creset%C(yellow)%h%Creset%C(black bold)]%Creset%C(magenta)%d%n%C(black bold)[%Creset%C(red)%cd%Creset%C(black bold)]%n%C(black bold)[%Creset%C(blue)%cn%Creset%C(black bold)] [%Creset%C(blue)%ce%Creset%C(black bold)]%n%C(black bold)[%Creset%C(green)%s%Creset%C(black bold)]%n"'
```
UnityとHerokuを使ったサーバー構築の簡易実装

#目的
・友達が、Unityとherokuをつかたオンラインゲームを作ってくれたので、知見を共有
そのやりとりはこちら：https://youtu.be/HxjDO8XpxEY

#できるようになること
・unityで作ったゲームをオンラインゲーム化

#使う技術
・Unity
・git
・socket通信：定義は[こちら](https://qiita.com/megadreams14/items/32a3eed4661e55419e1c)

#説明すること
・サーバー側（Node.js側）の手順

#説明しないこと
・node.jsのインストール方法
・npmのインストール方法
・herokuアカウントの作成方法
・・Unity側でのSocket通信：[こちらを参考にした](https://qiita.com/riyosy/items/5789ccdeee644b34a743)

#環境
・iMac：macOS Catalina バージョン10.15.5
・node.js：12.18.4
・npm：6.14.8

#手順の概要
・[こちら](https://devcenter.heroku.com/articles/node-websockets#create-a-websocket-server)を参考
・基本的には、サーバーにNode.jsのファイルをおくために、まずはローカルでフォルダを作り、WebSocketとsever.jsファイルを作成。あとはHerokuにアップすればOK。

#手順
##node.jsをアップデートする
[こちら](https://qiita.com/Hide-Zaemon/items/cbb4497237843a729994)を参考にした

##npmをアップデートする

```
nmp i -g nmp
```
をターミナルで入力

##ローカル（手元のPC）で適当なフォルダを作る
![スクリーンショット 2020-10-02 12.28.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67439/a1115bf8-d9c4-a169-8f79-35ba080687a4.png)
##そのフォルダでnpmを作成する

```
npm init --yes
```
をターミナルで入力

##package.jsonを変更する

```package.json
{
  "name": "NodeJSTest01",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "engines": {
    "node": "12.18.x" // node.jsのバージョンに合わせて修正
  },
  "scripts": {
    "start": "node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "ws": "^7.3.1"
  }
}
```

##フォルダにserver.jsを作成する
実際作る場合、node.jsについて調べて修正するといいぞぃ！

```server.js
// サンプル
const WebSocketServer = require('ws').Server;
const wss = new WebSocketServer({port: process.env.PORT || 3000});

// 接続：ログを出す
wss.on('connection', (ws) => {
  console.log('Client connected');
  ws.on('close', () => console.log('Client disconnected'));
});

// 送信：1秒毎に日時をクライアントに送信
setInterval(() => {
  wss.clients.forEach((client) => {
    client.send(new Date().toTimeString());
  });
}, 1000);
```


##ローカルテストをする
・Unity側のコードをlocalhost:3000で行う

##その他諸々ファイルを作る

何をgitに反映させないのかを決めるもの

```.gitignore
node_modules/
```

サーバー起動をどのファイルから行うか決めるもの（かな？）

```Procfile
web: node server.js
```


##herokuのアプリを作る（herokuアカウントを作ってない方は作っておく）
https://devcenter.heroku.com/articles/node-websockets#create-a-websocket-server を参考に
ターミナルで
・git init
・heroku create ,,,,
をやって確認すれば終わり
jestでリクエスト途中の状態をチェックする

例えばボタンが押されてからリクエストが完了するまで読み込み中になる場合


```js:Button.js
//...
const onPress = async ()=> {
  setLoading(true)
  await fetch(...) // 何かしらの非同期処理
  setLoading(false)
}
```

```js:Button.spec.js

describe('button', ()=> {
  it('assigns loading true till the request to complete', ()=> {
    // ...createやfetchをmockした後
    expect(button.props.loading).toEqual(false)
    let promise
    act(()=> {
      promise = button.props.onPress()
    }) // ボタンが押された処理を開始
    expect(button.props.visible).toEqual(true)
    await act(async()=> await promise) // リクエストを待機
    expect(button.props.visible).toEqual(false)
  })
})

```

と言った具合に、非同期な処理の途中状態をテストすることが出来ます。
Laravelの認証jwt-authにログイン失敗時のロックアウト機能を追加し、セキュリティを高める方法

## jwt-authにロックアウト機能を追加してセキュリティを高めましょう。

最近ではフロントエンドとバックエンドを疎結合するのがモダンな実装なので、
フロントエンドはvue,nuxtなどのSPAを使い、LaravelをAPIサーバとして使うパターンが多いのではないでしょうか。

nuxtやvueからLaravelにログインする際、APIの認証（ログイン機能）としてよく使われるのがjwt-authです。
https://github.com/tymondesigns/jwt-auth

JWT認証をLaravelで導入する手順については、いろんな記事があるのですが、
セキュリティを強化するため、jwt-authの標準では搭載されていない**認証に複数回失敗した時のロックアウト機能**を追加しました。

## jwt-authの導入

LaravelへのAPI認証実装とjwt-authの導入についてはこれらの記事がわかりやすいです。
APIでログインしてbearerトークンを返し、フロントエンドのSPAなどから利用する時に使います。

https://qiita.com/zaburo/items/176f907ea46767283785
https://qiita.com/nozaki-sankosc/items/7ed320d6549f5f92b9b9

### Bearer認証について

https://qiita.com/h_tyokinuhata/items/ab8e0337085997be04b1

## laravel標準のログインにはロックアウト機能があるのだが・・・

laravelの標準ログイン機能には、失敗した時にロックアウトする機能が標準搭載されています。素敵ですね。

https://www.ritolab.com/entry/55

```laravel/app/Http/Controllers/Auth/LoginController.php
    protected $maxAttempts = 2;     // ログイン試行回数（回）
    protected $decayMinutes = 10;   // ログインロックタイム（分）
```

こんな風に2つの変数を追加するだけでロックアウト機能を有効にしてくれるナイスな機能なのですが、残念ながらjwt-authを使っている場合、この変数を追加するだけではもちろん使えません。

## jwt-authでもロックアウト機能を使う方法

https://qiita.com/zaburo/items/176f907ea46767283785#controllerの作成と記述

こちらの記事のようにAPIログインしtokenを返す機能を実装した場合のlogin()メソッドは以下のようになります。

```
//id,pwで認証してtokenを発行
    function login(){

        $credentials = request(['email', 'password']);

        //もし認証エラーなら
        if(!$token = auth('api')->attempt($credentials)){
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        //OKならtoken発行
        return $this->respondWithToken($token);
    }
```

このメソッドを以下のように修正しました。

```php
    use AuthenticatesUsers;
    protected $maxAttempts = 3;
    protected $decayMinutes = 1;

    public function login(Request $request)
    {
        $credentials = $request->input(['email', 'password']);

        // ログイン失敗回数をチェックして、制限を超えている場合はロックアウト
        if ($this->hasTooManyLoginAttempts($request)) {
            $this->fireLockoutEvent($request);
            return $this->sendLockoutResponse($request);
        }

        // ログインに失敗した場合のみ、試行回数を増やす
        // 成功した場合はカウントしない。
        if (!$token = auth('api')->attempt($credentials)) {
            $this->incrementLoginAttempts($request);
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        // ログインに成功した場合は、制限をクリアする(お好みで)
        $this->clearLoginAttempts($request);
        $result = $this->respondWithToken($token);
        return $result;
    }
```

この設定で、ログインに3回失敗すると1分間のロックアウトがかかり、429 Too Many Requests レスポンスが返ります。
ロックアウト制限中は正しいログイン情報を送ってきてもログインは通しません。

sendLockoutResponse($request) には、「あと何秒で使えるようになるよ」という情報が入っているのですが、
さらにセキュリティを高めるのであれば単純に abort(429) を返せば良いでしょう。

```php
 if ($this->hasTooManyLoginAttempts($request)) {
            $this->fireLockoutEvent($request);
            abort(429);
        }
```

失敗のしきい値などはenvファイルに書いて管理したほうが良いかもしれませんね。
参考になりましたらLGTMボタンお願いします:relaxed:
【Ruby on Rails】enumを日本語表記にする方法

# 目標
enumでの表記を日本語にする

# 開発環境
ruby 2.5.7
Rails 5.2.4.3
OS: macOS Catalina

# 前提
※　▶◯◯　を選択すると、説明等が出てきますので、
　　よくわからない場合の参考にしていただければと思います。

# 流れ
1 gemを導入
2 config/application.rbを編集
3 config/locales/ja.ymlを作成、編集
4 viewを変更


# gemを導入
今回はgem 'rails-i18n'とgem 'enum_help'を導入します。

```rb:Gemfile
gem 'rails-i18n'
gem 'enum_help'
```
```:ターミナル
$ bundle install
```

# config/application.rbを編集
config.load_defaults以下４行を追記。

```rb:config/application.rb
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 5.2
    config.paths.add 'lib', eager_load: true
    config.time_zone = 'Tokyo'
    config.i18n.default_locale = :ja
    config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]

    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration can go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded after loading
    # the framework and any gems in your application.
  end
```

# config/locales/ja.ymlを作成、編集
config/locales配下にja.ymlを作成。

```yml:config/locales/ja.yml
ja:
  enums: 
    talk: # モデル名
      contributor: # カラム名
        customer: '会員' # enumの値
        shop: '店舗' # enumの値
        admin: '管理者' # enumの値
    customer: # モデル名
      privacy: # カラム名
        published: 公開 # enumの値
        closed: 非公開 # enumの値
```
# viewを変更

_i18nを日本語表記にしたいカラムの後に追加。

```erb:app/views/homes/about.html.erb
<%= @talk.contributor_i18n %>
```

# 補足
エラーの日本語表記については[こちら](https://qiita.com/japwork/items/aba5a5883d0588ce926f)
更新日、作成日を好みの表記については[こちら](https://qiita.com/japwork/items/25adc4c78be4230bb591)
バイナリサーチを使った、配列における任意の検索方法


【概要】
----------------------------------------
<b>1.結論</b>

<b>2.バイナリサーチとは何か</b>

<b>3.どのようにコーディングするか</b>

<b>4.ここから学んだこと（エラーの時に使用）</b>



1.結論
----------------------------------------
<b>lengthメソッドとwhile文、if文</b>を組み合わせて使う！
<br>
2.バイナリサーチとは何か
----------------------------------------
配列に入ったデータ等（同じ値は入っていないものとします）に対して行う検索方法です。内容としては、中央の値を確認し、そこから左右との大小関係を比較し順々に探していく検索方法です！
<br>
3.どのようにコーディングするか
----------------------------------------

```ruby
def binary_search(array, number_factors, value)
  min_factor = 0
  max_factor = number_factors - 1 #---❷
  while min_factor <= max_factor do　#---❸
    center_factor = (min_factor + max_factor) / 2　#---❹
    if array[center_factor] == value
      return center_factor
    elsif array[center_factor] < value
      min_factor = center_factor + 1
    else
      max_factor = center_factor - 1 #---❺
    end
  end
  return -1　#---❻
end

array=[1,2,3,6,7,10,11,23,25,31]

puts "お探しの数字は何番でしょうか？"
value = gets.to_i
number_factors = array.length　#---❶

result = binary_search(array, number_factors, value)

if result == -1　#---❼
  puts "#{value}は現在登録されておりません。"
else
  puts "#{value}は#{result}番目です。"
end
```

❶：まずarrayの配列の要素を数えます。バイナリサーチは要素を半分に分けるところから始まります。
<br>
❷：左端の要素が何番か、と右端の要素が何番かを決めています。配列の一番最初は"0"が当てられるので左端は0,右端は0を含めた要素の数になるので"-1"をしています。(ex:1...15までは10個ありますが、要素は左端は"0"から始まるので右端は"9"になります)
<br>
❸：ここでは左からの要素の数と右からの要素の数を比べています。左端の数が右端の数を超えることはないためです。<br>
❹：❹〜❻までバイナリサーチの要の部分です。center_factorで中央の要素を求めました。配列の要素が奇数の場合は自動的に四捨五入をされます。
<br>
❺：半分に分け、左右のどちらから検索するのかを決めています。もし中央が探したい番号の場合があるのでreturn で返します。これは❼で出力される形になります。もし中央の要素の中身の数字が、入力した数字ではなかった場合は大小で左端から攻めていくのか右端から攻めていくのかを決めています。入力した値の方が大きければ、左端から検索(この配列は左から右にかけて大きくなっているので）、入力した値の方が小さければ、右端から検索(この配列は右から左にかけて小さくなっているので）しています。そうするとまた❹-❺をwhile文によって繰り返します。
<br>
❻：検索した数字が見つからなかった場合を指します。"0"or"1"でoff,onを判定をするのが一般的ですが、吐配列の要素で"0"を使用しているので"-1"でわかりやすく表現しています。
<br>
❼：最後に、検索された結果を出力しています。



<br>
4.ここから学んだこと（エラーの時に使用）
----------------------------------------
の部分で”.round"をつけなくてもいいのかな？と思って調べてみると自動的に四捨五入されるようです。指定の位で四捨五入する際は".round(2)<小数第2位までを表示するので小数第3位で四捨五入されます>"などでコーディングしてあげると便利に使えます！
<br>
homebrew でのWarning解決

Homebrew導入後に、"$brew doctor"を実行。

```
$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: Broken symlinks were found. Remove them with `brew cleanup`:
  /usr/local/bin/code
```
Warning発生。
下記を実行し、解決。

```
$ brew cleanup
Pruned 1 symbolic links from /usr/local

$ brew doctor
Your system is ready to brew.
```
Phoenix LiveView：リンク・ナビゲーション

The Pagmatic Studioというサイトが[無料のLiveViewのオンラインコース](https://online.pragmaticstudio.com/courses/liveview)を提供しているので、それを教材としてLiveViewを勉強している。

そこでリンク・ナビゲーションが若干ややこしく感じたので、頭を整理しながらこのテーマに焦点を絞り、ざっくりまとめてみようと思う。

コードサンプルは、架空のguitarsデータベーステーブルが存在しそれのINDEXとSHOWページに取り組む前提で作成。

## ルーティング

ルーティングは、[Phoenix.LiveView.Router.live/4](https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.Router.html#live/4)を使用して、MVCと同じ要領で定義する。

```elixir
live "/guitars", GuitarLive
```

## リンク・ナビゲーション

ざっくり3パターンをメモる。他にあれば、後で追加する。

### A: 普通のHTMLアンカータグ

- クリックすると、HTTPリクエストが発生し、新たにLiveViewプロセスがspawnされる。
- LiveViewを使用しているのであれば、普通これは避けたいと思う。

### B: [`phx-click`](https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#module-bindings)をもつHTMLアンカータグ

- フルリロードなしに画面が更新される。
- URLは更新されない。

##### テンプレート

アンカータグに下記の属性を付加する。

- `phx-click="任意のLiveViewイベント名"`
- `phx-value-XXX="任意の値"` （XXXは任意のキー）

```eex
<nav>
  <%= for guitar <- @guitars do %>
    <a href="#" phx-click="show_guitar" phx-value-id="<%= guitar.id %>">
      <%= guitar.name %>
    </a>
  <% end %>
</nav>
```

##### サーバー

`handle_event`でLiveViewイベントを処理し、ソケットの状態を更新。その状態変化を元に差分が計算され、画面が更新される。

```elixir
def handle_event("show_guitar", %{"id" => id}, socket) do
  id = String.to_integer(id)
  guitar = Guitar.get_guitar!(id)
  socket = assign(socket, selected_guitar: guitar)
  {:noreply, socket}
end
```

### C: `live_patch`により生成されるHTMLアンカータグ

- フルリロードなしに画面が更新される。
- URLも更新可能。

##### テンプレート

```eex
<nav>
  <%= for guitar <- @guitars do %>
    <%= live_patch guitar.name,
      to:
        Routes.live_path(
          @socket,
          __MODULE__,
          id: guitar.id
        ),
      replace: true
    %>
  <% end %>
</nav>
```

`live_patch`により生成されたアンカータグには、`/guitars?id=123`みたいな`href`の他に２つの特別な属性が付加される。

- `data-phx-link`
- `data-phx-link-state`

```eex
<a data-phx-link="patch" data-phx-link-state="replace" href="/guitars?id=123" replace="">
 Fernandes APG-100
</a>
```

クリックするとLiveViewのJavaScriptが、DOMクリックイベントをインターセプトし、LiveViewイベントをサーバーにプッシュする。

##### サーバー

- LiveViewイベントは`handle_params` で処理する。
- （必要に応じてのみ呼び出される `handle_event`とは異なり）`handle_params`はマウント後に呼び出され、`live_patch`が使用されるたびに呼び出されるので、URLをコピーして新たに開いたブラウザに貼り付けても機能する。
- URLパラメータを受け取る場合は、パターンマッチングで値を取得する。
- URLパラメータがない場合に備えキャッチオールも用意しておく。

```elixir
# URLパラメータがマッチする場合
def handle_params(%{"id" => id}, _url, socket) do
  id = String.to_integer(id)
  guitar = Guitar.get_guitar!(id)
  socket = assign(socket, selected_guitar: guitar)
  {:noreply, socket}
end

# URLパラメータがない場合、もしくはマッチしない場合
def handle_params(_params, _url, socket) do
  {:noreply, socket}
end
```

##### LiveViewの処理の流れ

- 1: LiveViewイベントがWebSocket経由でブラウザからサーバーにプッシュされる。
- 2: `handle_params`が呼び出され、URLパラメータに基づいて状態が更新される。
- 3: ビューの差分がサーバーからブラウザにプッシュされる。
- 4: LiveViewのJavaScriptが、ブラウザのURLを変更し、ブラウザのPush StateAPIを使用してブラウザの履歴にURLを追加する。

## D: サーバー主導で`live_patch`したい場合（`push_patch`）

```ex
socket =
  push_patch(socket,
    to:
      Routes.live_path(
        socket,
        __MODULE__,
        id: guitar.id
      )
  )
```

以上
よく使う.htaccess 記述（自分用メモ）

# basic認証
## .htaccess
```apache:.htaccess
#bacic認証
AuthUserFile /PATH_TO_FILE/.htpasswd
AuthType Basic
AuthName "Web access"
Require valid-user
```
## .htpasswd
```apache:.htpasswd
#pw password
user:password(MD5)
```
MD5パスワード生成サイト
http://www.cityjp.com/cript/crpt.cgi

# SSLリダイレクト
## https統一

```apache:.htaccess
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
```

# URLを統一編
## wwwなしに統一（www ❌ ）

```apache:.htaccess
# wwwを無しに統一
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
```

## wwwありに統一（www ⭕️ ）

```apache:.htaccess
# wwwを有りに統一
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteCond %{HTTP_HOST} (.+)$ [NC]
RewriteRule ^(.*)$ https://www.%1/$1 [R=301,L]
```

## index.htmlなしに統一
```apache:.htaccess
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://www.example.com/$1 [R=301,L]
```

# AddType編

## HTMLファイルでPHP実行を有効

```apache:.htaccess
# AddTypeを使う場合
AddType application/x-httpd-php .html .htm

# AddHandlerを使う場合
AddHandler application/x-httpd-php .php .html


### XSERVER ###
#サーバー番号が2001（sv2001）以降
AddHandler fcgid-script .html

#サーバー番号が1999（sv1999）以前
AddHandler x-httpd-php5.6 .php .phps .html

### お名前.com ###
Action myphp-cgi /php.cgi
AddHandler myphp-cgi .html
```

お名前.comの場合
php.cgiファイル作成

```cgi:php.cgi
#! /usr/bin/bash
exec /usr/local/bin/php-cgi
```

## SVGを有効

```apache:.htaccess
AddType image/svg+xml .svg .svgz
```

# リダイレクト編

## ファイルをリダイレクト
```apache:.htaccess
Redirect permanent /cgi-bin/contact/index.cgi /contact/index.html
```

## 404エラー リダイレクト
```apache:.htaccess
ErrorDocument 404 /not_found.html
```

## WPコンテンツをリダイレクト
```apache:.htaccess
# WPコンテンツをリダイレクト
RewriteCond %{QUERY_STRING} preview=true [OR]
RewriteCond %{REQUEST_URI} ^(/news/?)
RewriteRule (.*) /wordpress/$1
```

## RewriteRuleでリダイレクト
```apache:.htaccess
RewriteEngine on
RewriteRule (.*) http://www.xxxxxxx.jp/ [L,R=301]
```

## index.htmlなしにリダイレクト
```apache:.htaccess
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ /$1 [R=301,L]
```

#参考サイト
https://www.ecco.jp/blog/htaccess-redirect/
Git HubでVisual Studio 2015で作成したプロジェクトをアップロードする．2020年10月更新

#はじめに
前回記事
[Git HubでVisual Studio 2015のWin32コンソールアプリケーションを開発する．](https://qiita.com/RyoyaHase/items/bd7400f21f01614e776e)
では，
GitHubでリポジトリを作成
↓
新規でWin32コンソールアプリケーションを作成
↓
コミット及びプッシュ

の一連の流れを行った．

ここでは新規に作るのではなく，既に作成したWin32コンソールアプリケーションをGitHubにアップロードを行う．
前提として前回記事の内容を理解しているものとする．

######前回記事の内容①
1．Githubでリポジトリの新規作成

######今回の記事の内容
2．ローカルファイルにプロジェクトを追加

######前回記事の内容②
3．プロジェクト（ソリューション）のコミット
4．プロジェクト（ソリューション）のプッシュ
5．完成したプロジェクトをデフォルトブランチとして更新（最新の状態を共有できるように）

#1．プロジェクト（ソリューション）の新規作成

[前回記事](https://qiita.com/RyoyaHase/items/bd7400f21f01614e776e)の
[3．Git Hubでリポジトリの作成]
(https://qiita.com/RyoyaHase/items/bd7400f21f01614e776e#3-git-hub%E3%81%A7%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E4%BD%9C%E6%88%90) 
4．リポジトリとVisual Studioのプロジェクトを連携
5．完成したプロジェクトをデフォルトブランチとして更新（最新の状態を共有できるように）
を参照．

#2．ローカルファイルにプロジェクトを追加

①今回は新規編集用にver0.1というブランチを作成．
②右下に表示されているのが現在編集しているブランチ．（ブランチ名をダブルクリックで変更可能）

![06-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758746/dd2491cc-bedf-43e8-ad73-7b72bd9fcd39.jpeg)

ローカルパスで指定したフォルダを開く（ここでは，C:\Users\ユーザ名\Desktop\qiita_test）．

![2-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758746/da5c291b-b532-adc1-c841-74861879d270.jpeg)

この中にアップロードしたプロジェクトをそのまま置くか，Srcフォルダを作成して置く．
今回はver2.1.0というプロジェクトを入れる．

![2-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758746/b2b71b45-b13d-018c-de49-c9315ec9e50e.jpeg)

チームエクスプローラーのホーム下部に，追加したプロジェクトが表示されているので，編集したいブランチで開く．

![2-3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758746/f19001e0-6ce8-bfb3-48eb-bc561080180a.jpeg)

#3～5．コミット，プッシュ，デフォルト変更．

[前回記事](https://qiita.com/RyoyaHase/items/bd7400f21f01614e776e)の
[7. プロジェクト（ソリューション）のコミット]
(https://qiita.com/RyoyaHase/items/bd7400f21f01614e776e#7-%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88) 
8. プロジェクト（ソリューション）のプッシュ
9. 完成したプロジェクトをデフォルトブランチとして更新（最新の状態を共有できるように）
を参照．

アップロードするだけなら結構簡単な印象．
C言語　システムコールを使用してファイルの中身を表示するプログラム。open,close,read,writeの使用例

システムコール (ほんとうは、**システムコールをラップした関数**) のopen,close,read,writeを使ったサンプルコードです。

一度openしたファイルをreadするときは、readで読み取った分を記録して、再度readで呼び出すと続きから読み込んでくれるという仕様になっています。

また、readは読み取ったbyte数を返す関数なので、0になるまでwhileでループさせて上げることで終わりまで読み込むことができます。

```c
/* open */
#include <fcntl.h>
/* read */
#include <sys/types.h>
#include <sys/uio.h>
/* read & write & close */
#include <unistd.h>

#define BUF_SIZE 1024

int main(int ac, char **av)
{
	int fd;
	int rc;
	char buf[BUF_SIZE];

	if (ac != 2)
	{
		write(1, "error\n", 6);
		return (0);
	}
	if ((fd = open(av[1], O_RDONLY)) == -1)
	{
		write(1, "error\n", 6);
		return (0);
	}
	while ((rc = read(fd, buf, BUF_SIZE)))
	{
		if (rc == -1)
		{
			write(1, "error\n", 6);
			return (0);
		}
		write(1, buf, rc);
	}
	close(fd);
	return (0);
}
```

## 追記 (おまけ)

catコマンドの実装の中身を見ていてwriteに対してもエラー処理をしているのを見つけました。

[freebsd/freebsd: FreeBSD src tree (read-only mirror)](https://github.com/freebsd/freebsd)

writeは外部とつながってないので、エラーの可能性を考慮していなかったのですが、一考の余地ありそうです。

```c
while ((nr = read(rfd, buf, bsize)) > 0)
	for (off = 0; nr; nr -= nw, off += nw)
		if ((nw = write(wfd, buf + off, (size_t)nr)) < 0)
			err(1, "stdout");
if (nr < 0)
{
	warn("%s", filename);
	rval = 1;
}
```

ちなみに、close関数に関してはエラーの処理はされていませんでした。
RとPythonでデータのハッシュ化

この前仕事で匿名化を頼まれかなり苦労した。
そもそもデータをもらう時点で匿名化されていることがほとんどで匿名化されていないデータをもらうことがほとんどなかった。

実際調べてみるとハッシュ化する方法はあるが、データフレーム形式を想定している情報は少なかった。
機密データなのでオフライン環境でやらないといけないかもしれないため、ライブラリは事前にインストールされている想定である。

今回は次回のために反省点も踏まえてコードをまとめていきたい。


# Rでのやり方
ハッシュ化のライブラリはfastdigestを使う。
指定するのはインポートするcsvとハッシュ化したい列名だけ。
対話形式で一つ一つ確認して作業することができる。

```r:hashing.R
# ライブラリインストール
install.packages("fastdigest")
# ライブラリインポート
library("fastdigest")

# fastdigestを使ってハッシュ化の自作関数を作る
hash_algo <- function(data){
    x <- paste("abc" ,data)
    x <- fastdigest(x)
    return(x)
}

#データの読込み
path <- ""
df <- read.csv(path, header=T)
# 読み込みの確認
str(df)

# ハッシュ化したい列名の格納
hash_list <- c("", "",...)

# ハッシュ化
for (i in 1:length(hash_list)){
    df[,hash_list[i]] <- sapply(df[,hash_list[i]], fastdigest)
}

# エクスポート
write.csv(df,"hashed.csv")
```
# Pythonでのやり方
pandasとhashlibを使ってハッシュ化を行う。
Pythonはスクリプトでサクッと終わらせたい。
事前にハッシュ化したい列名を決めておいき、パスを指定してコードを実行するだけ。

```python:hashing.py
import os
import sys
import pandas as pd
import hashlib

# ハッシュ化したい列名の格納
hash_list = []

# ハッシュ化ルールの関数
def hash_algo(data):
    # ここを複雑に書くと逆変換されにくくなる
    x = "abc" + str(data)
    x = hashlib.sha256(x.encode("utf-8")).hexdigest()
    return x

# 読み込みから出力
def hashing(path, hash_list=hash_list):
    # データの読み込み
    df = pd.read_csv(path, encoding='utf-8')

    # ハッシュ化処理
    for i in range(0,len(hash_list)):
        df[hash_list[i]] = list(map(hash_algo, df[hash_list[i]]))

    # ファイルのエクスポート
    outpath = os.path.dirname(path)
    outfilename = os.path.splitext(os.path.basename(path))[0] + "_hashed.csv"
    df.to_csv( outpath + "/" + outfilename, index=False)

if  __name__ == "__main__" :
    hashing(sys.argv[1])
```

もしもっと賢いやり方あったら教えてください。
ECCUBE テーブル取得


##前提　エンティティーが存在する。
src/Eccube/Entity/CustomerAddress.php

### 新規作成の場合
$CustomerAddress = new \Eccube\Entity\CustomerAddress();

### 編集の場合
$app['orm.em']
->getRepository('Eccube\Entity\CustomerAddress');　// src以降を記載
 ->find($id);// 検索対象のIDを指定
【Rails】初心者が image_tagで画像のサイズ変更（模索中）


###1. form_tagで画像を表示する

```erb
<li><%= image_tag @post.image.url,size:"180x200" %></li>
または
<li><%= image_tag @post.image.to_s,size:"180x200" %></li>
```
<p>表示することができるようになったコードは↑です。
gemはcarrierwaveとmini_magickをインストールしました。

###2. 失敗例
```erb
<li><%= image_tag @post.image.url %></li>
```
sizeを定義しないと、画像サイズが巨大でブラウザがめちゃくちゃに。
erbファイルにsize指定を外して、uploaderでリサイズしようとしても変化がない。↓

```rb
version :thumb do
    process resize_to_fill: [50, 100]
  end
```


###4. 今後の課題
erbファイルに直接size指定をしたことで、ブラウザ表示自体のフォーマットが崩れるエラーは解決できた。しかし画像自体が伸びてしまった。
mini_magickがインストールできていることは確認できたが、uploaderファイルをどう変更してもリサイズができない。uploaderファイルでのリサイズ方法を発見する。
condaでPythonの仮想環境を作る

# はじめに
Pythonの仮想環境を使う際につまずいたのでメモとして残しておきます。また、vscodeで仮想環境を使うときによくわからなかったポイントをまとめたいと思います。
# condaで仮想環境を作る
仮想環境を作るには、以下のようにコードを実行します。

```
$ conda create -n (仮想環境名) python (ライブラリ名)
```
仮想環境名は好きな名前で良いです。次のpythonの部分では`python=3.7`のようにしてバージョンを指定することもできます。ライブラリ名の部分に欲しいライブラリ名を入れると、仮想環境を作る際に一緒にインストールしてくれます。

このようにすることで、anaconda3/envs/仮想環境名/python.exeが追加されると思うのでvscodeで仮想環境を切り替えるときはこのexeファイルを指定するといけます。

また、

```
$ conda create -n env python anaconda
```
とすると、仮想環境envを作る際に一緒にanacondaをインストールしてくれます。

# 仮想環境を切り替える
仮想環境の有効化は

```
$ conda activate (仮想環境名)
```
仮想環境の無効化は

```
$ conda deactivate (仮想環境名)
```
でできます。
また、以下のようにすることでconda仮想環境の一覧を得ることができます。

```
$ conda info -e
```
# 仮想環境を削除する
以下のコマンドで仮想環境を削除することができます。

```
$ conda remove -n (仮想環境名) --all
```

# ライブラリをインストールする
以下のコマンドでライブラリをインストールできます。

```
$ conda install (ライブラリ名)
```
rails c　が立ち上がらず大量の行のエラーが出る

#問題
中間テーブルを作成した後くらいにrails cでコンソールを立ち上げようとしたが、以下のようなエラーが出た

```
: Unknown key: :throught. Valid keys are: :class_name, :anonymous_class, :foreign_key, :validate, :autosave, :table_name, :before_add, :after_add, :before_remove, :after_remove, :extend, :primary_key, :dependent, :as, :through, :source, :source_type, :inverse_of, :counter_cache, :join_table, :foreign_type, :index_errors (ArgumentError)
```

rails sも立ち上がらず。

#結論
中間テーブルのアソシエーションが間違っていた。以下のように修正した後、db:migrate:resetで解決。

roomsテーブルとusersテーブルの中間テーブルとしてroom-usersテーブルがあったが、
アソシエーションを以下のように組んでしまっていた。
テーブルの関係がおかしいままdb:migrateされているので、db:migrate:resetでテーブルの削除と再作成、db:migrateを行うと解決した。

###間違い
```
(roomモデル)
class Room < ApplicationRecord
  has_many :rooms, through: :room_users
  has_many :room_users
end
```

```
(userモデル)
  has_many :rooms, through: :room_users
  has_many :room_users
```
間違いが２つある。
1.記載順
has_many :room_usersと記述する前に、throughでroom_usersを使用している。
2.モデル名
roomモデルの中に自身とのアソシエーションを組んでいる。


###修正後
```
(roomモデル)
class Room < ApplicationRecord
  has_many :room_users
  has_many :users, through: :room_users
end
```


```
(userモデル)
  has_many :room_users
  has_many :rooms, through: :room_users
```



#rails sやrails cにアソシエーションがなぜ関係あるのか
consoleやローカルサーバーを立ち上げる時にデータベースやマイグレーションファイルを通過するため。
そのマイグレーションファイルないでエラーが出て、consoleやローカルサーバーが立ち上がらなかった。

以上です。
【Ruby】代数演算子

###代数演算子
以下のようなものがあります。

| 代数演算子 | 意味                   | 
| :----------: | :----------------------: |
| +          | 足し算                 | 
| -          | 引き算                 | 
| *          | 掛け算                 | 
| /          | 割り算                 |
| %          | 剰余（割った時の余り） |     | 
| **         | べき乗                 |


入力

```ruby
puts 9 + 3
puts 9 - 3
puts 9 * 3
puts 9 / 3
puts 9 % 5
puts 9 ** 2

puts 10 / 3
puts 10.0 / 3
```
出力

```
12
6
27
3
4
81

3                   #小数点以下は切り捨てられる
3.3333333333333335     
```
Windows開発環境が捗るツール一覧

## はじめに

ここ最近のWindowsは開発マシンとして、WSLやDocker、VSCode等のおかげでずいぶん使いやすくなったなと感じています。

Macに比べ、マシンの選択肢の幅も広がるし、もうWindowsでいいやとなって長くなり、そろそろ使うツールも固まってきたので決定版として整理しておきます。

クラウドサービスも多分に含まれているためWindowsにあまり関係ないものも混じっていますが、飽くまで私のメモなのでご容赦ください。

他に「これはマストだろ！」とか「絶対こっちのが使いやすい！」みたいなのあればぜひ、ご教示いただければ幸いです。

## 前提

- Windows 10 Pro
- WSL2オン
- memory 16G
- 開発言語はPython
- DBはPostgreSQL



## コミュニケーション

### 社内向け
- Slack

- Tandem


### 社内＆社外向け
- Zoom

- Line

  

## ファイル共有

- Google Drive
- Dropbox



## ファイル検索、キーバインド、画面スナップ

- Microsft PowerToys

  

## フォント管理

- NexusFont



## マインドマップ

- XMind



## 社外説明資料

- PowerPoint

- Google Slide

  

## 社内説明資料

- Typora



## ドキュメント作成

- Google Docs
- Google Spreadsheet
- Jupyter Notebook w/VSCode



## バージョン管理

- Git

- GitHub

- SourceTree

  

## コーディング

- VSCode w/Remote Container
- Android Studio for Flutter



## ターミナル

- Windows Terminal

  

## プロジェクト＆チケット管理

- JIRA

### 個人のToDo

- Microsft ToDo
- Trello



## CI

- Docker
- CircleCI



## 設計図作成

- PlantUML w/VSCode
- Draw.io (ER図作成用)
    - Lucidchartもよいのでどちらを使うかは迷い中
    - 実装からの自動生成はSchemeSpyを試してみたい

  

## プロトタイピング＆画面デザイン

苦手分野なので使い分けは今後…

- Figma
- Adobe XD



## SQLクライアント

前提はRDBはPostgreSQL、たまにMongoDBとSQLiteを使う。



- VSCode
- DB Browser for SQLite



## パケット解析

- WireShark
【一瞬の興味】日本人はどこの国の国民性と似ているか

米国の大統領選だったり、日本の総理大臣が新しくなったりする中で、日本人ってどんな特性なのかなっと思ったので、朝ご飯たべる前程度の時間でかるーく見てみました。というノリ

もちろん詳しくは知りませんが、hofstede insightsによる行動様式と価値観などの国民性を数値化したホフステッド指数([data hofstede](https://geerthofstede.com/research-and-vsm/dimension-data-matrix/?_ga=2.14739574.1545356180.1601592631-662590749.1600905258))を用いて、日本人の「行動様式と価値観」がどの国と似ているのか、その他の国はどうななのか軽く把握。
階層クラスタリング(一般的(だと思っている)な"ward"法,　距離:"euclidean")で図示


データの中身は

* These are the data as used in our books (version 2015 12 08):
 * Power distance index (PDI)
 * Individualism (IDV)　
 * Masculinity (MAS)　
 * Uncertainty avoidance index (UAI)　
 * Long-term orientation (LTO)　
 * Indulgence versus restraint (IVR)　

ランキングして、高い低いは色々あると思うが、"似ている"度合いについて

## データ整備

```python
import warnings
warnings.filterwarnings('ignore')

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage

plt.style.use('seaborn-darkgrid')

# 上記webサイトからDL済データ
data_from_web = pd.read_csv('6-dimensions-for-website-2015-08-16.csv', index_col=0)

# 欠損値への処理は行わず、全データ揃っているもののみ抽出
data_from_web_all = data_from_web[data_from_web != '#NULL!'].dropna(0)
data_from_web_all.index = data_from_web_all['country']
data_from_web_all = data_from_web_all.drop('country', 1)
```

## 階層クラスタリング作成

```python
fig, ax = plt.subplots(1, 1, figsize=(12, 15))
ax = dendrogram(linkage(data_from_web_all, method="ward", metric="euclidean"),
                labels=data_from_web_all.index, 
                orientation="left", leaf_font_size=15,
                color_threshold=100)
fig.tight_layout()
fig.show()
```

![fig.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509334/ca88abb2-cf02-30d8-c437-6bcb6537328b.png)

黒色のクラスタの中にJapan。それっぽいようなそれっぽくないような。
短時間の発表で気をつけて欲しいなと感じたこと

# はじめに

大学で行なわれたハッカソンの発表を聴いていて、自分自身の社会人1年目の研修を思い出させるような既視感がありました。同時に、5〜10分程度の短時間の発表では全体像を伝えることは難しいため、少しの工夫でもっと良くなるのにと感じた点をまとめたいと思います。

いろいろなイベントがあると思いますが、ここではお題が発表されてからの作業時間が24時間程度のイベントを前途としています。

私がプレゼンテーションの資料を作る時には、60秒で1枚ぐらいの分量を基本にしています。話しに慣れていない場合には、30秒で1枚程度にして、どんどん内容を読んでいく方法も取れると思います。10分程度の時間を全てスライドにすると10枚程度、デモを含めるとかなり少ないスライドでポイントを伝える必要があります。

意識的・無意識的なテクニックで、中身のないプレゼンでも何となく聴取を良い気分にさせることはできます。そんな発表のスタイルや所作についてのノウハウをまとめているページも散見されます。しかし、アイデアを上手に表現できることは素晴しいことですが、まず必要な情報を含めなければいけません。

制作に失敗して作品が動作しなくても、表彰台には立てないかもしれませんが、問題はまったくありません。ひょっとしたら特別賞なんかを準備してもらえるかもしれません。しかし作品が完璧に動いたとしても、明示的に必要な情報を伝えなかったために、ちゃんと動いていることすら理解されない・伝わらない可能性があると思います。

情報の量が大ければ良いというわけでもありません。ポイントを絞って、「見れば分かるだろう」という思い込みを捨てて、聴衆に十分な知識がなくても理解できるレベルの、分かりやす過ぎる発表を行なう事が大切です。

# プレゼンの構成 - 発表に含めるべき点

発表時間に応じて自分の考えや作品に対する説明を詳しくしたり、ポイントだけをまとめたるなど、分量は工夫します。しかし、どのような発表スタイルでも、次のような情報は最低限必要なはずです。

1. 与えられたテーマと、それをどう解釈したのかについての簡単な説明
2. 既に世の中にある似たようなもの（先行事例）の簡単なまとめ
3. 先行事例を踏まえて、自分のアイデア・作品のユニークな点(新規性)のまとめ

それぞれ1ページ以内で、できれば1.と2.は1ページにまとめるぐらいの簡潔さが良いと思います。良い提案や説明をしても、聞き手は『いや似たようなものはあるのでは？』という気持ちになるものです。

まずテーマを自分なりにどう解釈したのか説明しましょう。テーマが詳細に与えられている場合もあると思いますが、それでも理解した点を明確にすることは大切です。5W1Hを意識しつつ、いつ(When)、どこ(Where)は抜けても、誰(who)が何(what)をどう(How)するのか、それはどうして(Why)なのか、といった点は具体的に説明するべきです。

そして、後から既存の何かを真似をしたんじゃないのか、と疑われてしまうこともあるでしょう。けれど、真似はどんどんしてください。そしても、もっと良くなるように、他の課題も解決できるように、自分のアイデアを加えてあげてください。そして、発表ではそのオリジナルを紹介し、その違いを説明しましょう。

場合によっては斬新すぎて似たようなものがないという場合もあるでしょう。その場合には既存の技術で問題を解決したらどうなるかを想像し、それとの違いから自分のアイデアを説明することもできます。いずれにしても、何かと比べることで聴衆が理解するための負担は減ります。

## 似たようなものがあって、どうしていいか分からない

せっかく思いついた考えと同じに見えるものを発見してテンションがだだ下がった人は、まだまだ観察が足りません。きっと何か足りない機能や、カバーできていない利用者たちがまだ存在しているはずです。既存技術や製品を組み合せて、新しい課題に対応できるのであれば、まったく問題ありません。

素晴しそうに見える製品でも使ってみると、いろいろ問題が発生するものです。実際に試すわけにはいきませんが、素晴しそうなものがあるという理由で諦める必要はまったくありません。

## ハッカソンでは製品の品質にこだわり過ぎない

ある程度、動くものを作成することはハッカソンでは大切ですし、その品質で判定される評価項目もあるでしょう。作品の品質だけで評価されるイベントもあるかもしれません。しかし、それでも、発表者にとって大切なことは作ろうと考え努力した過程にあります。たとえ動かなくとも自分が作ろうとしたものについては正々堂々と胸を張って説明してください。

表彰されるかどうかは結果にしか過ぎません。結果で評価されることには慣れているかもしれませんが、その過程に注目できるようになって欲しいと思います。

# さいごに

ここでの内容はアイデアソンに近いのでは？という印象を持たれた方もいるかもしれません。
しかしアイデアソンでの評価は実現可能性よりも、それが実現することによってどれだけの変化が社会に生まれるか、といった視点・期待が強く作用すると思います。

ハッカソンでも対象は技術よりも社会の有り様で、(開発を目指したソリューションの素晴しさだけでなく)どのように社会にインパクトを与えるのか論理的に説明しなければいけません。この両者は似ていますが、実現可能性を証明するために何かを開発することが求められています。

場慣れしている発表者は、時々、目の前にいる聴衆を観察してウケのよい言葉を並べて発表をすることがありますが、期待感だけ煽って中身をきちんと説明していないことは伝わってしまいます。

発表が拙くても、きちんと何が問題で、技術でどのように解決を狙って、対象とした問題がどのように変化していくはずなのか、中身をきちんと伝えましょう。そのためには世の中がどうなっているのか、経済学的、心理学的な視点も含めて、日頃から興味を持って専門外の知識に触れるようにしましょう。
Macで10.15.7 CatalinaにしたらaccountsdによりCPUが暴走

## 概要
2020年9月24日リリースのmacOS 10.15.7 Catalinaにアップデートした後
数日後にaccountsdのCPU占有率が500%近くまで上昇した時の対処法についてです。

こちらの方法で必ず治るとは限りませんが
少なくとも当方の環境では改善されたので、本記事を執筆しました。

結論を先に書きますと
**macOS Catalina 10.15.7 Comboをインストールする**ことで改善されました。

[こちらの公式サイトにてダウンロード可能](https://support.apple.com/kb/DL2052?locale=ja_JP)
## 私の端末
MacBook Pro (15-inch, 2018)
## 本現象の経緯
**[2020/08/14　09:03]**
macOS Catalina 10.15.6 追加アップデートを実施。
正常終了。

**[2020/09/25　08:19]**
macOS Catalina 10.15.7 アップデートを実施。
正常終了。

**[2020/10/02　09:00くらい]**
いつも通りMacの電源を入れたところ、ファンの音がうるさいので
アクティブモニタにて確認したところ
『accountsd』のCPU占有率が500%近くまで上昇している。
## 実施した対処法
###対処法1：accountsdをとりあえず強制終了
アクティビティモニタでaccountsdを強制終了してみました。
**※accountsdはiCloudの同期をしたりするものらしいので、これはやらない方が良いです。**
**　私は別にどうなっても良かったので試しにやってみただけです。**

**結果：ダメでした**
キルされるが、すぐにaccountsdが起動されて
またCPU占有率が500%近くまで上昇。

###対処法2：iCloudアカウントをサインアウト
「iCloudアカウントを一度サインアウトしたら改善されたよ」と
書いている記事をちらほら見かけたのでやってみました。

左上のリンゴマーク　→　[システム環境設定]　→　[Apple ID]　→　"サインアウト"

実施後、再起動する。

**結果：ダメでした**
改善された方々との違いはわかりませんが
私の環境では改善されませんでした。

###対処法3：macOS Catalina 10.15.7 Comboをインストール
「macOS Catalina 10.15.7 Comboをインストールすると改善されたよ」という記事も
見かけたので、ダメ元で実施。

[公式サイトよりdmgファイルをダウンロード](https://support.apple.com/kb/DL2052?locale=ja_JP)

ダウンロードしたファイルを起動。
あとは画面に出てくるものをポチポチしてインストールを実施。
最後に再起動。

**結果：改善されました**
何が原因なのかはまだわかりませんが
私の環境ではこの方法で改善されました。

## 終わりに
Windowsはアップデートによる不具合の発生をよく見かけるけどMacでは初めてでしたので
Macも少し様子見てからアップデートするようにしようかな、と思いました。