OmniAICreator/Qiita-1.07M huggingface dataset:
VSCodeの「format on save」を統一していなかったばかりにマージの手間が増えたよって話

# 概要
社内で、とあるプロジェクトのソースをマージしようとした時の話です。
やけに差分が多いなと思っていると、どうやらロジック自体に変更はなく、コードに整形がかかってたり、いなかったりしている様子。
そういえばマージリクエストを出してくれてるのは今週から入ったメンバーだな、と思い問い合わせてみると・・・

# なにが起きたか
開発者によって`VSCode`の拡張機能や設定が異なり、特に`Prettier`等のコードフォーマッター周りの設定が異なると、各自が修正したかった箇所以外にも整形がかかる(もしくはかからない)状態となっていました。
結果的にマージ時に、意図しない差分が発生してなかなかに手間になっていました。

実例として、自分が遭遇したのは下記の例です。

## `format on save`が有効/無効になっている
`format on save`は`Ctrl + S`で保存した際にコードフォーマットをする/しないの設定です。
これが開発チーム内で統一されていれば良かったのですが、今回はされていませんでした。

`format on save`の確認方法は`VSCode`の【設定】から検索するか、`Settings.json`に下記の記載があるかで参照できます。

```json
{
    "editor.formatOnSave": true
}
```

# まとめ
すぐに原因が分かったため、チーム内であらためて`format on save`をはじめとする`VSCode`の設定について共有しました。
余談ですが、複数プロジェクトにまたがってアサインしている場合は、プロジェクト毎に開発規約が異なり、整形ルールも変わってくると思うので`format on save`等はワークスペースの設定に持っていくことをお勧めします。
そのあたりは下記記事が詳しいです。

- [プロジェクトごとにVSCodeの色とテーマを変えて気持ちを切り替える](https://qiita.com/mottox2/items/a5813feeaf653ef3e2c3)

# 備考
個人ブログの方にも同様の記事を掲載してあります。

- [VSCodeでチーム開発するなら設定は統一すべし!](https://nekoniki.com/20200804_vscode_setting_unification)
マイクラのScriptingAPIって何？

# はじめに
導入の方法とかは他にも書いている人がいるので、省きます
[Minecraft BE ScriptingAPI 第1回講座 By @Button](https://qiita.com/Button/items/c0c0ed7c4d8b59d085f4)
[MinecraftBEでscriptingAPI！part1.棒で叩いたブロックをダイヤブロックに By @mcjixif](https://qiita.com/mcjixif/items/205e2555ae705e591bff)

#質問形式で
## Win10版じゃないと使えないってホント？
クライアント側でしかできないことをしようとすると、クライアントもWin10版である必要がありますが、サーバー側のスクリプトだけ使う場合は、ホストがWin10版であれば、参加者はどんな環境でも参加できます

## Realmsって使える？
「試験的なゲームプレイで遊ぶ」をオンにする必要があるため、Realmsでは使えないようです

## 「試験的なゲームプレイで遊ぶ」って必要？
1.16.10の段階ではまだ必要です

## nodejsなの？
違います、たぶん

## 非同期処理とかってどうなってるの？
setTimeoutやsetIntervalとかは基本使えません
executeCommandはコールバックがありますが、そういうのは多分稀で、基本は同期処理で書いていくことになりそうです

## エラーが起きたのかどうか知りたい
こんな感じにすれば、簡単なエラーは分かる
ファイルと行数も出るよ

```javascript
ServerSystem.emit = function(identifier, properties) {
    const data = this.createEventData(identifier);
    data.data = Object.assign({}, data.data, properties);

    return this.broadcastEvent(identifier, data);
}

ServerSystem.initialize = function () {
    this.emit("minecraft:script_logger_config", {
        log_errors : true,
        log_warnings : true,
        log_infomation : true,
    });
}
```

## ログ出力したいよ
これで我慢して。（チャットに出る）

```javascript
ServerSystem.log = function(...items) {
    const toString = item => {
        switch(Object.prototype.toString.call(item)) {
            case '[object Undefined]':
                return 'undefined';
            case '[object Null]':
                return 'null';
            case '[object String]':
                return `"${item}"`;
            case '[object Array]':
                const array = item.map(toString);
                return `[${array.join(', ')}]`;
            case '[object Object]':
                const object = Object.keys(item).map(key => `${key}: ${toString(item[key])}`);
                return `{${object.join(', ')}}`;
            case '[object Function]':
                return item.toString();
            default:
                return item;
        }
    }

    this.emit('minecraft:display_chat_event', {message: items.map(toString).join(' ')});
}
```

## チェストの中とかインベントリーの中とかっていじれるの？
現状ではreadonlyなんで、コマンドでやってください
プリンシプルオブプログラミングで大事なことをまとめてみた

# はじめに

あらためて「プリンシプルオブプログラミング　３年目までに身につけたい一生役立つ１０１の原理原則」を読み直してみたら、勉強になったので、自分なりに簡単にまとめたものをアウトプットしようと思い書きました。
記事の構成として、題目に対して、「なぜか」、「どうしたらよいか」、必要ありそうなものに対して、「語彙の説明」の3つに分けて記載してあります。

# シンプルを保つ(KISS)

### なぜか
・複雑なコードは読みにくい、修正しにくい、バグの原因になる
・コードはコミュニケーションの場なので、コミュニケーションのコストの節約
・人に対してよみやすくないといけない

### どうしたらよいか
・本質的な部分が目立つようにして、余計な部分は紛れ込まない
・むやみにコードを複雑化、肥大化せず、単純で小さいままに保つ
・解読に3回以上繰り返さないようにする


# 拡張しやすく、拡張が他に波及しない柔軟なつくりにする

### なぜか
・コードは必ず変更されるから
・ソフトウェアの寿命が長いから

### どうしたらよいか
・シンプルからスタートして、段々と変更に柔軟なつくりにする
・単一代入を心掛けて、値の再代入をなるべく行わず副作用を少なくする
・「保守性」「拡張性」「再構築」「移植性」を意識する

### 語彙の説明
副作用：ある機能がモジュールの状態を変更して、それ以降の処理に影響を与えること
保守性：障害の発生したコードが修正しやすい
拡張性：新しい機能、モジュールの置き換えが容易
再構築：モジュールが異なるサブシステムにしても問題ないように柔軟に配置できる
移植性：ハードウェアに依存せず、どこでも動作する


# 関連のあるソースは1つにまとめる

### なぜか
・修正と確認が容易になり、変更のコストを減らす
・コードの関連要素をカプセル化してモジュールを作成すると、コードが整理され複雑度が下がる

### どうしたらよいか
・関係性が高いコードをまとめる、パッケージ化させる


# 関心の分離

### なぜか
・関心単位で分かれていると、読む範囲も限られ、変更が容易、分担作業が可能

### どうしたらよいか
・関心単位のモジュール化(代表としてMVCパターン)、役割を互いに独立させる


# メカニズムとポリシーの分離

### なぜか
・メカニズムは不安定、ポリシーは不安定

### どうしたらよいか
・安定的な部分と不安定な部分を分けて整理する
　フロントエンドとバックエンドにモジュールを分割

### 語彙の説明
ポリシー：ソフトウェアの前提に依存するビジネスロジック等
メカニズム：ソフトウェアの前提に依存しない、独立したロジック


# ソース1つ1つを小さくする、再利用性

### なぜか
・大きな処理だと解決が難しくなる
・他の開発で再利用できるから、品質の向上
・保守が容易

### どうしたらよいか
・独立して設計できる部分から分割する
・モジュールを設計する時は「責任・責務」の観点でモジュール分割
・ソフトウェアを既存モジュールから組み立てる
・コードを小さく保つ


# 信頼性、安全原理

### なぜか
・ソフトウェアごとに信頼性が異なるので、要件をあらかじめ決めておく
・予期しないエラーで壊れないようにする

### どうしたらよいか
・「冗長化」「フェールソフト」「フェールセーフ」を意識する
・予期しないエラーも考えておく
・不正なデータを早く見つける

### 語彙の説明
冗長化：アーキテクチャを内部的に二重化
フェールソフト：大事な機能のみを提供して、処理継続を優先
フェールセーフ：障害時にその部分を切り離す


# テスト容易性

### なぜか
・テストの本質が本体の本質になる

### どうしたらよいか
・テストをする方法が難しかったりするので、開発時に考える必要がある
・モジュール間の依存関係を排除する


# ボーイスカウトの規則

### なぜか
・コードの腐敗を抑止する
・徐々にシステムの品質を上げる

### どうしたらよいか
・リポジトリから取得した時よりも綺麗にしてからコミットする
・少しづつから始める

# ラバーダッキング

### なぜか
・自己解決を促すため
　説明ができなくなったり、説明とコードが合わなくなって不具合が発見される

### どうしたらよいか
・無機物に問題や、コードを説明する


# 最後に

色々書いていきましたが、なんとなく雰囲気をつかめてもらえたら幸いです。
gasでスクリーンショットのサンプル探し

gas単体ではありませんでした。外部サービスを呼び出しています。

* https://blinky.nemui.org/
* https://s.wordpress.com/mshots/v1/
* https://apiflash.com/

非公開のサイトで使いたいので、別の方法を探します。

## 参考

* [【Google Apps Script】その11　Webサイトのスクリーンショットを定期的にGoogle Driveに保存する](https://qiita.com/rf_p/items/1d9b3e7ac3c63d6dd117)
* [【GAS】WebページのスクリーンショットをSlackに自動で送信する方法](https://risaki-masa.com/how-to-send-screenshot-of-web-page-to-slack/)
* [Google Apps Script(GAS)とAPI FLASHとSlackAPIをClaspとJestとGitHub Actionで調理して定期的にWebページのスクリーンショットを撮る](https://qiita.com/tubone/items/2c2702cf69583faa7203)
ログ分析へのはじめの一歩(Pandasにログデータを整形して入れる方法)

# 経緯
現在私は、SEOライティングツールを開発する株式会社EXIDEAで、インターン生としてアプリのログ分析に携わっています。そこで多くのログデータを jupyternotebook でPandasのデータフレームに入れてきました。
しかしその中で、その手法についてシンプルに書かれている記事がないことに気がつきました。
どんなに分析を行いたくても、ログデータをpandasに入れなければ、何も始まりません。
なので、今回は生のログデータを用いて、実際に説明してみよう思います。
では早速見ていきましょう!!

#方法(2ステップ)
・コマンドで欲しい情報をテキストファイルにまとめる
・pd.read_csv() でテキストファイルをデータフレームに格納する

# 今回使うログデータ
サンプルとして、Nginxのアクセスログを使用します。


```
172.17.x.xxx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 200 5032 "http://example.net/" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/112.0.316532311 Mobile/15E148 Safari/604.1" "203.0.113.195"
172.17.x.xx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 304 0 "http://example.net/" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 YJApp-IOS jp.co.yahoo.ipn.appli/4.16.14" "203.0.113.195"
172.17.x.xxx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 304 0 "http://example.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36" "203.0.113.195"

```

#ステップ1
## コマンドで欲しい情報をテキストファイルにまとめる
この操作では、 主にsed,awkコマンドを使用します。
流れとしては、
1.sed コマンドを使って、ログデータの前処理をする(置換)
2.awk コマンドで欲しいフィールドを抽出する
###sed コマンドの処理
```test.txt
WhiskyWhiskyWhisky
```
```
基本的な文法
$ sed 's/置換元/置換後/g' 
ex)
$sed 's/Whisky/Beer/g'　test.txt
>>>BeerBeerBeer
```
これで必要のない文字を空白文字で置換を行ったりして、ログデータを整形します。
今回だと [], "" はPandasでデータフレームに入れる時に邪魔になるので、前もって処理しておきます。


###awk コマンドの処理
```test.txt
apple orange grape banana
```
```
基本的な文法
$ awk '{print 欲しいフィールド}' 
ex)#1列目と3列目が欲しい
$ awk '{print $1,$3}' test.txt
>>> apple grape 
```

今回は、IPアドレス,時刻,リクエスト,パス,ステータスコード,refererが欲しいので
1,4,6,7,11列目を抽出します。

###実際の今回のコマンド
コマンドの処理をまとめたものが以下のコードです。

```
cat access.log | sed 's/\[//g' -e  's/\]//g' -e 's/"//g' | awk '{print $1,$4,$6,$7,$11}' > test.txt
```
####流れ
・最初にcatコマンドでaccess.logを開きます。
(各コマンドを一回で実行したいときは、| で繋ぎます。)
・その後、sedコマンドで[]と""を除きます。
(sedコマンドは-eと書くことで連続して置換ができます)
・次に、awkコマンドで欲しいフィールドを抽出
・最後はそれらの変形をしたaccess.logをtest.txtに変換

###コマンドの実行結果

```
172.17.x.xxx 23/Jun/2020:06:25:18 GET /xxxxx.js 200 http://example.net/
172.17.x.xx 23/Jun/2020:06:25:18 GET /xxxxx.js 304 http://example.net/
172.17.x.xxx 23/Jun/2020:06:25:18 GET /xxxxx.js 304 http://example.net/
```

#ステップ2
## pd.read_csv() でテキストファイルをデータフレームに格納する
今までの処理で、ログデータが欲しい情報だけが入ったテキストファイルになりました。
ここからは一発で終わります。

```
import pandas as pd
columns=["IP","Datetime","method","URI","status","referer"]
df = pd.read_csv('test.txt',delimiter=' ',names=columns) #区切り文字は空白
```

その結果がこちらです。
<img width="550" alt="スクリーンショット 2020-07-26 17.49.09.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612161/877c75e3-04b1-63c7-301e-ff9ecd76715b.jpeg">

この後、さらに前処理をしていくことで、時系列分析などを行うことができます。


#最後に
今回この記事で紹介した方法は、僕個人が一番やりやすかったやり方です。なので、もしもっと簡単な方法がありましたら、コメント欄の方で教えていただけると幸いです。
rabix-composerインストール時のエラー対処

rabix-composerを入れ直そうとしたらエラーが出まくった

#Node.jsいれる
```
sudo apt install nodejs
sudo npm install
sudo n 8.17.0
```

Node 8対応と書いてあるのでダウングレードしておく

#yarnいれる
```
curl -o- -L https://yarnpkg.com/install.sh | bash
```

#electronいれる
```
npm install electron
```

#rabix-composerをクローン
```
git clone https://github.com/rabix/composer.git
```

#yarn install
```
cd composer
yarn install
```
`'@types/node@9.4.3' is not in the npm registry.`とかエラーが出た。
レジストリのダウンロード先がないっぽい
[このページ](https://medium.com/@martinratinaud/docker-fails-to-build-due-to-not-found-types-node-9-4-2-918d60c2f79e)通りに`composer/package-lock.json`を編集する

#yarn run serve
```
yarn run serve
```
今度はこんなエラーが出る

```
RROR in webpack-internal:///./src/app/layout/action-bar/action-bar.component.scss:1
throw new Error("Module build failed: \n        &:not(\".text-inherit\") {\n             ^\n      Invalid CSS after \"        &:not(\": expected selector, was '\".text-inherit\") {'\n      in /Users/barberc/repos/composer/src/app/layout/action-bar/action-bar.component.scss (line 17, column 15)");//# sourceURL=[module]
^

Error: Module build failed: 
        &:not(".text-inherit") {
             ^
      Invalid CSS after "        &:not(": expected selector, was '".text-inherit") {'
      in /Users/barberc/repos/composer/src/app/layout/action-bar/action-bar.component.scss (line 17, column 15)
    at eval (webpack-internal:///./src/app/layout/action-bar/action-bar.component.scss:1:7)
    at Object../src/app/layout/action-bar/action-bar.component.scss (/Users/barberc/repos/composer/src/app/layout/action-bar/action-bar.component.scss:71:1)
    at __webpack_require__ (/Users/barberc/repos/composer/src/app/layout/action-bar/action-bar.component.scss:20:30)
    at /Users/barberc/repos/composer/src/app/layout/action-bar/action-bar.component.scss:63:18
    at /Users/barberc/repos/composer/src/app/layout/action-bar/action-bar.component.scss:66:10
    at Script.runInContext (vm.js:135:20)
    at Script.runInNewContext (vm.js:141:17)
    at Object.runInNewContext (vm.js:307:38)
    at WebpackResourceLoader._evaluate (/Users/barberc/repos/composer/node_modules/@ngtools/webpack/src/resource_loader.js:110:40)
    at Compilation.compilation.plugin (/Users/barberc/repos/composer/node_modules/@ngtools/webpack/src/resource_loader.js:58:26)
```

正直良く分からんが、エラーになっている`composer/src/app/layout/action-bar/action-bar.component.scss`の17-19行目を削除 or コメントアウトする。

#起動
```
yarn run compile:electron
yarn run start:compile
```

またエラーが出た。`Harfbuzz version too old (1.4.2)`
どうもrabix-composerがElectron v2に対応してないのが原因っぽい
[このページ](https://github.com/rabix/composer/pull/455/files)通りに書き換えると動く。

#アプリケーションメニューに追加
`composer/build/rabix-composer1.0.3.AppImage`を立ち上げてはいを選ぶ。
「応用数学 report」を参考にしました。

(オリジナルポスト)応用数学 report
 	
https://qiita.com/381Pro/items/38cf59b7c6cbe8668c70	
 	
#Wolfram|Alpha 日本語版で実行しました。	
## 第一章 線形代数	
### 連立方程式を行列でとく	
x1 + 4x2=7,2x1+6x2=10	

https://ja.wolframalpha.com/input/?i=x1+%2B+4x2%3D7%2C2x1%2B6x2%3D10	

###逆行列の求め方	
{{1, 4}, {2, 6}} の逆行列	

https://ja.wolframalpha.com/input/?i=%7B%7B1%2C+4%7D%2C+%7B2%2C+6%7D%7D+%E3%81%AE%E9%80%86%E8%A1%8C%E5%88%97	

###逆行列が存在しない条件
{{a, b}, {c, d}} の逆行列	

https://ja.wolframalpha.com/input/?i=%7B%7Ba%2C+b%7D%2C+%7Bc%2C+d%7D%7D+%E3%81%AE%E9%80%86%E8%A1%8C%E5%88%97	

###行列式	
{{a, b}, {c, d}} の行列式	

https://ja.wolframalpha.com/input/?i=%7B%7Ba%2C+b%7D%2C+%7Bc%2C+d%7D%7D+%E3%81%AE%E8%A1%8C%E5%88%97%E5%BC%8F	

###余因子展開	
以下誰か教えて下さい。	
	
	
#online sympyで実行しました。	
製作中
【Twitter・クローンの作成】

◆学習スケジュール
金曜日までにTwitterクローンアプリを完成させる。

◆Qiita
月曜日と金曜日に投稿すると所属するプログラミングスクールで発言するも最初から、予定通りに投稿できず、、、、、
ブログ事態書いたことが無いので、手探りで書いて投稿していきます。

◆今日までの経過
・gem の devise
・アソシエーションの学習。
実際にインストールをしてローカルサーバーを起動して、スクールのカリキュラムにそって学習。
その後にモデル連携のアソシエーションをプログラミングする。
特にエラーはがなかったのでスムーズにカリキュラムを進められた。

◆アプリ完成度
・現在アソシエーションをプログラムしdeviseからインストールした投稿機能も問題なく作動中。

◆理解できなかった時に参考にした記事。

・アソシエーション
https://qiita.com/kazukimatsumoto/items/14bdff681ec5ddac26d1

・devise
Hal_mai/items/350c400e8763ce0487a3
PickerViewの実装までの流れ

# はじめに
pickerviewの実装について記事を書いていこうと思います。
駆け出しエンジニアということもあるのでご指摘などございましたらご教授よろしくお願いします。
(swift5.4.2)
まずPickerの実装をするまでの工程を紹介します。
1.UIPickerViewDelegate UIPickerViewDateSourceの定義と設定
2.UIPickerViewの列と行とデータ要素の数の設定
3.UIPickerViewの標示する配列の設定


#ゴール地点！

![AnyConv.com__画面収録 2020-08-04 22.20.16.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669384/f867e2ac-e941-1296-6274-424200681af7.gif)

#1.UIPickerViewDelegate UIPickerViewDateSourceの定義と設定について

まず
Delegateとは？
移譲や任せるなどという意味らしく、他にはデザインパターンなどという記述がありとても解釈が難しいところ。
なので私の抽象的な解釈を述べますと
**「他のクラスに処理をお任せし、移譲する処理の流れのことをデザインパターンと言いたいのでは？」**
とりあえずPickerの実装にDelegateが必要要素と覚えておきましょう！

Datesourceとは？
「テーブル（ここでいうpicker）の具体的な表示内容を決める」
以上です。ww

```ruby:filename.rb
let datalist = ["item1","item2","item3","item4"]
```
これでpickerのドラムロールに入れたい値をかく！

```ruby:filename.rb
import UIKit
 
class ViewController: UIViewController , UIPickerViewDelegate, UIPickerViewDataSource
```
これでclassにプロトコルであるUIPickerViewDelegate, UIPickerViewDataSource
の定義は完成しました

```ruby:filename.rb
  pickerView.delegate = self　delegateの設定
        pickerView.dataSource = self　datesourceの設定
```
ここでは、delegateやdatesourceは**どれ**を指しているのか？
self=自分自身
つまり、selfの自身とは、ViewControllerのことを指している。

以上
#2.UIPickerViewの列と行とデータ要素の数の設定
```ruby:filename.rb
//列数の設定
 func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
//行とデータ要素数の設定
func pickerView(_ pickerView: UIPickerView,
                    numberOfRowsInComponent component: Int) -> Int {
        return dataList.count
    }
```
このメソッドはpicker実装には必須要素になる。
**列数の設定**
メソッドの処理部分（return n）のnの部分を希望列数にする
**行とデータ要素の数の設定**
複数行にしたい場合、

```ruby:filename.rb

case 0:
            return datelist1.count            
case 1:     return datelist2.count
default:
            return 0 
```
caseN N=行数
countは要素数を表すので要素数の変更したい場合は、datalistの処理を変更してあげるとcountが合わせてくれる！

#3.UIPickerViewの標示する配列の設定


```ruby:filename.rb
func pickerView(_ pickerView: UIPickerView,
                    titleForRow row: Int,
                    forComponent component: Int) -> String? {
        
        return dataList[row]
    }
```
このメソッドが無いとpickerのデータが反映されずに?の値が帰ってきます。
なので必須で書いてください

Rowとは？
おそらく、ViewControllerの行番号を指しますので
**datalistの行番号を表示して！**
という解釈でよろしいかと思います

#終わりに
これでpickerの実装はされたと思います！
**ゴール地点**
では、pickerのデータがlabelに反映されていますが、そちらの方法は
また今度記事で書いていこうかと思います！
【Nginx】エラー「client intended to send too large body:」の対処法

Unityから1.2MB程のWebCam画像をサーバーに転送した際に以下のエラーログを吐いていたのでその対処法備忘録です。

>client intended to send too large body: 1215447 bytes

## Nginxのデフォルトファイルサイズを超えていた

Nginxの転送ファイル容量はデフォルト1MBまでとのことで、それを増やすことで解決します。

`nginx.conf`に**client_max_body_size**を指定します。
今回は2MBまで送信できるようにしてこの問題を対処しました。

```nginx.conf
http {
    client_max_body_size 2000000;
~~~~略~~~~
```


## 参考

- https://qiita.com/notakaos/items/4816ad71b90a9967fa18
GitのcommitにVerifiedをつける方法

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139673/144722c6-b042-1a49-a449-37780851836c.png)

gitのコミットには、コミットした人を証明するための署名をつけることができますが
GitHubでは署名のついたコミットは上のスクリーンショットのように `Verified` という表示がつきます。

今回はこれを出す方法を説明します。

## 0. ツールのインストール
```shell
brew install gnupg pinentry-mac
echo "pinentry-program /usr/local/bin/pinentry-mac" > ~/.gnupg/gpg-agent.conf
gpgconf --kill gpg-agent
```

## 1. キーを生成
```shell
gpg --full-gen-key
```

※注意: `Email address`は`git config`に指定しているものと同じものを指定しなければなりません。

## 2. キーのID確認
```shell
gpg --list-secret-keys --keyid-format LONG
```

下記のような行が出力される。`<キーID>`のキーID

```shell-session
ssb   rsa4096/<キーID> 2020-04-08 [E]
```

## 3. 公開鍵を表示
```console
gpg --armor --export <キーID>
```

## 4. 公開鍵をGitHubに登録
[ここ](https://github.com/settings/keys)から`New GPG Key`で貼り付ける

## 5. コミットが生成したGPGキーで署名されるようにgitを設定
```shell
git config --global gpg.program gpg
git config --global user.signingkey <キーID>
git config --global commit.gpgsign true
```

## 6. コミットに "Verified" が付加されることを確認

## 7. キーを別のマシンでも利用できるように工夫する
keybaseというソフトウェアがとても便利なのですが、そちらを使った方法は別で書きます
3つの代表値

# 基本統計量
基本統計量とは、**標本の分布の状態や特徴**を代表的に表す数値です。要約統計量や記述統計量とも言われます。
平均値・中央値・最頻値の3つの代表値や範囲、分散、標準偏差、四分位点、歪度、尖度などが該当します。

# 3つの代表値
* 平均値（mean）▶︎全てのデータを足し合わせてその個数で割った値
* 中央値（median）▶︎データを小さい方から大きい方へ並び替えた時に中央に位置する値
* 最頻値（mode）▶︎データの中で最も多く存在する値

### 平均値と中央値
* 平均値▶︎全てのデータを使用するため情報が有効に使える・外れ値の影響を強く受ける
* 中央値▶︎多くのデータが未使用のままになる・外れ値の影響を受けない（**抵抗性**がある）

### 3つの代表値の分布
データが単峰性の分布をする時、平均値・中央値・最頻値の大小関係を整理すると以下のようになります。
![statistic1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663460/9c4a7587-df9c-8187-efd4-31c31d32902e.gif)
> 画像引用：[グラフと算術平均、中央値、最頻値: 統計学ーその基本と応用ー](http://statistic-life.seesaa.net/article/401437301.html)

①**右に裾が長い分布**では「平均値>中央値>最頻値」
②**左右対称な分布**では「平均値=中央値=最頻値」
③**左に裾が長い分布**では「平均値<中央値<最頻値」となります。

※右に歪んだ分布は**「所得・貯蓄・体重」**、左右対称な分布は**「身長・自然現象・社会現象」**、左に歪んだ分布は**「簡単なテストの採点結果」**などが具体例として挙げられます。

# 平均値の種類

平均値には、算術平均（相加平均）、幾何平均（相乗平均）、調和平均、加重平均、トリム平均、移動平均などの様々な種類の平均が存在します。

### 算術平均（相加平均）


```math
\bar{x}=\frac{x_1+x_2+…+x_n}{n}=\frac{1}{n}\sum_{i=1}^{n}x_i
```

### 幾何平均（相乗平均）
幾何平均とは、**n個のデータを掛け合わせてn乗根をとった値**のことであり、**時系列データの成長率**といった指数関数的に増減する平均として利用されます。


```math
x_g=\sqrt[n]{x_1 \times x_2 \times …\times x_n}
```

### 調和平均
調和平均とは、**「逆数の算術平均の逆数」**であり、**速度の平均**といった反比例的に増減する平均として利用されます。


```math
x_h=\frac{n}{\sum_{i=1}^{n} \frac{1}{x_i}}
```

### 加重平均
加重平均とは、**データのそれぞれの重要度に応じてウエイト（重み）を掛け、平均する**方法です。
（例. スーツの種類別の価格と販売数を元に全スーツ1着当たりの平均価格を求める）


```math
x_w=\frac{w_1x_1+w_2x_2+…+w_nx_n}{w_1+w_2+…+w_n}=\frac{\sum_{i=1}^{n}w_ix_i}{\sum_{i=1}^{n}w_i}
```

### トリム平均
トリム平均とは、データを小さい方から順番に並べ、小さい方からと大きい方からの**両端の5%、10%、20%などの指定された部分を削除して、残りの算術平均を求める**方法です。トリム平均で指定された部分を削除することで、**外れ値の影響を取り除く**ことができます。刈り込み平均、調整平均とも言われます。

### 移動平均
移動平均とは、**株価や気温、売り上げといった時系列データ**について、**前後のデータの平均を求める**ことで、偶然変動や季節変動を取り除き、そのデータの長期間にわたる変動の傾向を知るために用いる方法です。
<img width="429" alt="スクリーンショット 2020-08-05 2.16.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663460/950c6e46-04b4-0818-f4b5-c4ac79915cf8.png">
> 画像引用：[移動平均の計算方法 | ブログ | 統計WEB](https://bellcurve.jp/statistics/blog/15528.html)

移動平均の計算は奇数項が簡単であり、3項移動平均と5項移動平均の定義は次のようになります。


```math
3項移動平均=\frac{x_{t-1}+x_t+x_{t+1}}{3}
```

```math
5項移動平均=\frac{x_{t-2}+x_{t-1}+x_t+x_{t+1}+x_{t+2}}{5}
```


偶数項である四半期データの場合は、まず4項移動平均を2つ求め、再度その算術平均を求めるという方法を採ります。これを移動平均の中心化と言い、中心化4項移動平均を定義すると、次のようになります。


```math
中心化4項移動平均=\frac{\frac{x_{t-2}+x_{t-1}+x_t+x_{t+1}}{4}+\frac{x_{t-1}+x_t+x_{t+1}+x_{t+2}}{4}}{2}
```

```math
=\frac{x_{t-2}+2x_{t-1}+2x_t+2x_{t+1}+x_{t+2}}{8}
```

```math
=\frac{0.5x_{t-2}+x_{t-1}+x_t+x_{t+1}+0.5x_{t+2}}{4}
```

# 参考文献
* [例題で学ぶ初歩からの統計学 第2版](https://www.amazon.co.jp/%E4%BE%8B%E9%A1%8C%E3%81%A7%E5%AD%A6%E3%81%B6%E5%88%9D%E6%AD%A9%E3%81%8B%E3%82%89%E3%81%AE%E7%B5%B1%E8%A8%88%E5%AD%A6-%E7%AC%AC2%E7%89%88-%E7%99%BD%E7%A0%82-%E5%A0%A4%E6%B4%A5%E8%80%B6/dp/453555790X)
【備忘録】Salesforceで他ユーザ所有のファイル（ContentDocument）の一括削除

# Salesforceでのファイル（ContentDocument）の削除
　自分以外のユーザが所有しているファイル（ContentDocument）の削除にコツが必要だったので、備忘録として残しておきます。
# 結論
　プロファイルで「すべてのファイルをクエリ」をオンにすれば、他ユーザ所有のファイルを含めて開発者コンソールなどから参照できる。
# 経緯
　DevSandBoxやDevProSandBoxで組織のファイルストレージが一杯になり、レコードの作成が出来なくなりました。動作検証で様々なユーザでファイルをアップロードしており、各ユーザで削除するのは手間なのでシステム管理者で一気に削除しようと思いました。
<img width="945" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394418/eea413b9-4665-e284-10c5-61d4f9c1fa8d.png">
<img width="945" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394418/e3273ef0-a00f-6051-cfb6-55e8d96d1a28.png">
<img width="945" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394418/fcef6976-31ac-f1db-aa72-89dc4b68ddcb.png">



開発者コンソールでシステム管理者（システム管理太郎）でファイルをクエリしてみたところ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394418/a69e6fd8-74d5-1f5f-9958-4b03131f0782.png)

手動共有されていない他ユーザ所有のファイルが表示されない？？？:dizzy_face:

ただ、ファイルのIdからファイルの詳細ページにアクセスすると表示されるため、アクセス権限はあるみたい。
（標準システム管理者プロファイルなので、すべてのレコード参照の権限がある）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394418/cce9f5ae-9350-8ae4-5509-19d8f717f155.png)

どうやら直接共有されていないファイルは、「すべてのレコードを参照」権限があっても開発者コンソールなどからのSOQLでは、参照することが出来ないという仕様があるそうです。
https://developer.salesforce.com/docs/atlas.ja-jp.object_reference.meta/object_reference/sforce_api_objects_contentversion.htm

# 解決策
　上記の解決策として、「すべてのファイルをクエリ」という権限があります。設定手順は下記の通り。
　1.標準のシステム管理者プロファイルをコピーしたカスタムプロファイルを作成する。
　2.上記プロファイルで「すべてのファイルをクエリ」をオンにする
　（システム管理者権限セクションにあります。）
　3.Salesforceユーザのプロファイルを上記のプロファイルに変更する
　（他ユーザでないとプロフィルの変更ができない）
　4.開発者コンソールなどから削除する
　
　このプロファイルを設定することで、すべてのファイルを参照することが出来ました。
<img width="724" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394418/4d5b8dbd-f118-1498-24eb-327bfbb0d328.png">
<img width="749" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394418/62e6dcec-ca0c-3630-9f13-7297892adfd4.png">

<img width="950" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394418/6ab24ca1-41c8-ca9d-4236-f07bfe3e76e9.png">

# まとめ
　コミュニティユーザのアップロードしたファイルで不要になったファイルを削除するときなどは、この方法でないとなかなか手間がかかると思います。ただし、消してはならないファイルを消してしまうことのないように、「すべてのファイルをクエリ」権限は慎重に扱って（普段はオフにしておくなどして）ください。
ExcelでVBAは使わずに「常に一個右（左）のシートを相対参照する数式」を作る。（マクロ関数）

・Excelで、常に一個右（左）のシートを相対参照する数式が組みたい
・でもVBAのユーザー定義関数は使いたくない
という縛りを数式で実現できるか？という話ですが、
結論、
VBA無しでもできるけど、マクロ関数というものを使う。拡張子はxlsmになる。
という感じのようです。（2020年8月現在）
イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100646/d2947065-602c-6c89-db52-196e29269269.png)

参考にさせていただいたURLはこちら
https://teratail.com/questions/149450

手順
１．特殊な関数を使えるようにするため、「名前の定義」をする
２．数式　→　名前の定義　→　新規 で以下の名前を定義する
名前：book 参照範囲：=get.workbook(1)
こんな感じにできたらOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100646/df33e9e9-d72d-a2a5-33b8-f6760a89a45d.png)

３．シートのA1セルに、以下の数式を入れてみる

```vb
=INDIRECT("'"&INDEX(book,SHEET()+1)&"'!"&CELL("address",A1))
```
すると、常に１個右のシートを参照するようになる。
２個右なら

```vb
=INDIRECT("'"&INDEX(book,SHEET()+2)&"'!"&CELL("address",A1))
```
とSHEET()+ の後の数字を増やせばOK。
また左のシートを参照するなら、SHEET() - 数字　とすればOKです。

```vb
=INDIRECT("'"&INDEX(book,SHEET()-1)&"'!"&CELL("address",A1))
```

イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100646/d2947065-602c-6c89-db52-196e29269269.png)

４．保存する。xlsmで保存してください。

【応用】
これを使って、シートを時間遷移と考えて、VBAを使わずに物理演算してみました。
特に意味はないです。
https://youtu.be/GPBcTKYgcrU
pyenvで入れたjupyter notebookのフォント幅を等幅にする方法

jupyter使っててだんだんイライラしてくるのがフォント幅だと思います。

頑張って等幅にすることができたのでメモっておきます。
OSはMacです。

## ~/.jupyter/custom/custom.cssを編集する

ぐぐったらまず最初にここを編集しろって言われたんですよ。
でもだめだったんですよ。

で考えたんですよ。
「pyenvで入れてるからここじゃないんじゃね？」
って。

で、そこからハマったわけです。

色々試してみたんですけどね。。。

その結果。

最終的にいじるのは`~/.jupyter/custom/custom.css`でした！！

ただここに行き着くまでに僕は、

```
pip install jupyterthemes
pip install --upgrade jupyterthemes
jt -t onedork -f inconsolata -T -N -cellw 90% -tfs 11
```

とか叩いてたんです。（ググったらこれでいい感じなるって書いてあったんだもん）

これだけでいけると思ったんです。

実際テーマも変わって見た目めっちゃかっこよくなって、
「うお！これ絶対フォントも・・・治ってないんかーい！！」

はい。

で、ここでもう一度
`~/.jupyter/custom/custom.css`
を眺めてみたんですよ。

そしたらさっきまでは空っぽだったのになんかすっごい書かれてる！！
多分さっきの`jtコマンド`叩いたことでテーマが適用されてできたんだと思います。

そう、ここでpyenvで入れてようがここのcssが読み込まれてるってことに気づきました。

で、色々調べてたら、
・div.CodeMirrorがコードを書く部分らしい。
・monospaceってやつを入れると等幅になるらしい。
とか書いてあったので、
`~/.jupyter/custom/custom.css`
の中を、
div.CodeMirror
で検索かけてみたら、、、

```custom.css
div.CodeMirror pre {
 font-family: "Inconsolata-g", monospace, monospace;
 font-size: 11pt;
 line-height: 170%;
 color: #b5c2d9;
}
```

あった！！！

っていうかmonospaceついてんじゃん！しかも二個！
※フロントの開発をほとんどしたことがないため二個ついている意味はわかりません。

なんでだろうと思ってfirefox（chromeじゃなくてすみません）で要素の検証をしてみたら、たしかにこの属性は取り消し線がついている・・・。

で色々調べた結果。

```custom.css
div.CodeMirror pre {
 font-family: "Inconsolata-g", monospace, monospace !important;
 font-size: 11pt !important;
 line-height: 170% !important;
 color: #b5c2d9 !important;
}
```

って感じで`!important`つけたらいけました！！！

めでたしめでたし。

試してないですが、おそらくテーマの適用をするたびcustom.cssは上書きされていくので注意が必要です。


あと、テーマとかいれたくないんだけどって方は、これも試してないのでわかりませんが、上記のcssに、（なければ作って）


```custom.css
div.CodeMirror pre {
 font-family: "Inconsolata-g", monospace, monospace !important;
 font-size: 11pt !important;
 line-height: 170% !important;
 color: #b5c2d9 !important;
}
```

を書けばいけると思います。
"Inconsolata-g"の部分はもしかしたら好きなフォントでもいけるのかな・・・。

## 以上です
Webページの背景透明度と文字透明度を変える方法

#Webページの背景透明度と文字透明度を変える方法　CSS

###はじめに
CSSにてopacityプロパティではなくrgbaを使って透明度を分離する方法を書いていきます。
特にHTML,CSSを学び初めの時はopacityプロパティを学んで背景を透明にできると学び実装してしまいます。
しかし、opacityプロパティを使うと文字まで同じ透明度になってしまいます。
背景は少し薄くしたいけど文字は見えるようにしたい、、、ちょうど良くどちらもバランス良い透明度を試してみるしかないか。と思いがちですが今回記載するrgbaを使えば背景の薄さと文字の薄さを分離する事ができ、どちらも自分が思った透明度で表現する事ができます。
さっそくみていきましょう。



####目次
[はじめに](#はじめに)
[1. opacity](#1-opacity)
[2. rgba](#2-rgba)
[3. おわりに](#3-おわりに)



######1. opacity
HTML記述

```HTML: 
HTML

<div class="job-me">
                <p class="job-comment">ABABABABABABABABABABABABABAB</p>
                <p class="job-comment">ABABABABABABABABABABABABABAB</p>
              </div>

```
CSS記述

```css: 
CSS
.job-me {
  height: 150px;
  width: 1000px;
  margin-left: 50px;
  background-color: white;
  opacity: 0.2;
  color: black;
}

```
このようにbackground-color:とopacity:で書くとこのようにどちらも薄くなってしまいます。
↓
![スクリーンショット 2020-08-05 2.27.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677293/afe6f63f-9c68-2d99-de39-fee9f12e1c4f.png)






それではrgbaで書いてみましょう。HTMLは全く一緒ですね。

######2. rgba
HTML記述

```html
 
HTML

<div class="job-me">
                <p class="job-comment">ABABABABABABABABABABABABABAB</p>
                <p class="job-comment">ABABABABABABABABABABABABABAB</p>
              </div>

```
CSS記述

```css: 

CSS

.job-me {
  height: 150px;
  width: 1000px;
  margin-left: 50px;
  background-color: rgba($color: white, $alpha: 0.2);
  color: black;
}

```

![スクリーンショット 2020-08-05 2.16.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677293/211b805c-b0bc-1d5a-5a41-350788254f43.png)

はっきりと文字を出すことができ、
綺麗に背景と文字の透明度を調整することができましたね。

######3. おわりに
これでわざわざopacityプロパティを使わなくても背景を薄くして文字をはっきり表示する事ができましたね。
ちなみにrgbaを使うと背景の薄さだけではなく文字自体の濃さも調整する事もできます。
R(赤)が、204/255 ( 80％)
G(緑)が、255/255 (100％)
B(青)が、204/255 ( 80％)
というように文字によって色が決まっているので例のように％を自分で決めて文字の透明度も調整することが可能です。
初心者の覚書　Python 「isdigit」の動き

# Python isdigitの動き

先生に教えてもらった内容が面白かったので、覚書です。
やり方だけ覚えて自分で検証した内容なので、「ここ間違ってる」と気づいた方はぜひご一報をば。

##isdigitは「str型」の「整数」をTrue ,Falsで返す。

特徴
・str型の数字（整数）のみであればTrue。(0もTrue。ただし、0始まりの数字はエラー)
・str型の数字でも、負の数はFalse。（マイナスが文字とみなされている？）
・str型の数字でも、少数はFalse。（小数点以下が0でもFalse）
・str型の数字でも、文字や記号が混ざるとFalse。（演算記号もFalse）
・str型、int型共に、0始まりの数字はSyntaxError。
・’’はFalse。
・文字はFalse。
・int型の数字はSyntaxError。（計算結果含む）
・0以外の、0始まりの数字は、型によらずAttributeError。

’’’
print('1'.isdigit()) #True
print('100'.isdigit()) #True
print('0'.isdigit()) #True

print('a'.isdigit()) #False
print('10.0'.isdigit()) #False
print('2*3'.isdigit()) #False
print(''.isdigit()) #False
print('11a'.isdigit()) #False
print('-1'.isdigit()) #False

print(1.isdigit()) # SyntaxError: invalid syntax
print(5%3.isdigit()) # SyntaxError: invalid syntax
print(3+4.isdigit()) #SyntaxError: invalid syntax

print（01.isdigit()) #SyntaxError: invalid character in identifier
print（'01'.isdigit()) #SyntaxError: invalid character in identifier

print('0.1'.isdigit()) # AttributeError: 'float' object has no attribute 'isdigit'
print(0.1.isdigit()) # AttributeError: 'float' object has no attribute 'isdigit'
’’’

以上。
haml ヘッダーロゴの挿入　【備忘録】

# hamlでのマークアップにおいて、画像の挿入方法について、備忘録として記述する。

### 画像ファイルをimagesファイル下に追加

### halmにimage_タグメソッドを記述

```haml
.header__left
   = link_to "#", class: "クラス名" do
     = image_tag 'image以下のパス', alt: '', height: , width: , class:
```
GASで超初歩的ミスしたので戒めに

```js
  //A列を最終行まで読み込む
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('SpreadSheet');
  const lastRow = sheet.getLastRow();
  const values = sheet.getRange(1, 1, lastRow).getValues();//(行, 列)
```

こんなのが出来上がる


```js

values = [
  [1],
  [2],
  [3]
]

```

そして、事前に準備しておいたMapオブジェクトがここにあります。

```js
const listMap = new Map();
```

んで、foreachぶん回したんですけど、

```js
values.includes(key)
```
これが一向にtrueにならない。
困った。

そうなんです。
valuesで返ってくるのは２次元配列なんです。
なので・・・
[【GAS】スプレッドシートのセル範囲（二次元配列）を検索する｜もりさんのプログラミング手帳](https://moripro.net/gas-spreadsheet-search-array/)
上の記事よろしく、

```js
const flattedValues = values.flat()
```


```js
  listMap.forEach(function(value, key) {
    if(flattedValues.includes(key-0)){
      console.log(key + " が見つかったよ。");      
    }else{
      console.log(key + " は見つからなかったよ。");      
    }
  })
```

これで無事に動いた！
さり気なくkey-0して型合わせてるのは、
MapのKeyが文字列で、
取得したValuesが数字扱いで、
そこでもずっとTrueにならなくてハマった結果です。

スプレッドシートのセルの中はすべて文字列って扱いじゃないって思い知りました。
(´・ω・｀)
Google ColabでRubyを使う


[Google Colab で Rubyを動かしてみた](https://qiita.com/kojix2/items/64f14e3487e3d957d4e5) が2020年7月現在そのままでは動かなくなっていたので、Juliaの例を参考に試行錯誤してやってみたら上手くいったので紹介します。

#簡単実行編

##1. ファイルのダウンロード

[このファイル](https://gist.githubusercontent.com/ngoto/61459a11652826416d8f3ff9360f27c2/raw/b66ea92bb9d86fbe2dee1fac48b080f5adbe9156/google-colab-ruby-251.ipynb)を右クリックして「リンク先を保存」するなどして、パソコンにダウンロードします。

##2. ノートブックのアップロード

https://colab.research.google.com/ を開き、上記からダウンロードしたファイルを「アップロード」（初めてGoogle Collaboratoryを開いた場合は「ファイル」→「ノートブックをアップロード」）します。

##3. Rubyと必要ソフトのインストール

あらかじめコードが入力されたセルが2つあるノートブックが開きます。いちばん上のセルをクリックして、そのままShift+Enter（または右三角印のボタン）を押して実行します。すこし時間がかかります。
下のほうに`ランタイム「ruby」は認識されていません。デフォルトの「python3」に接続します`というメッセージが出ますが無視します。

##4. 追加のgemのインストール

2個めのセルに移って、インストールしたいgemの行だけを残す編集を行った後で、Shift+Enter（または右三角印のボタン）を押して実行します。

##5. ランタイムをrubyに切り替える

「ランタイム」→「ランタイムのタイプを変更」を押します。すると、「ランタイムのタイプ」として「ruby 2.5.1」が選択された状態になった「ノートブックの設定」ウインドウが出ます。「ランタイムのタイプ」として「ruby 2.5.1」が選択されていることを確認して「保存」を押します。（もし選択されていなかったら、一覧から「ruby 2.5.1」を選んでから保存。）

##6. Rubyコードを実行

これで、Rubyコードを実行する環境が整いました。
たとえば`RUBY_VERSION`と入力してShift+Enterを押すと、`"2.5.1"`と表示されるはずです。

----------

#手動操作編

上記を手動で行う方法です。Google側の環境が変わった場合に備えて記述します。

##1. Google Colaboratoryで新規ノートブックを作成

https://colab.research.google.com/ を開き、「ノートブックを新規作成」（初めてGoogle Collaboratoryを開いた場合は「ファイル」→「ノートブックを新規作成」）を押して新規のノートブックを作成します。

##2. そのままipynb形式でダウンロード

何も入力していないまっさらな状態のノートブックを、「ファイル」→「ipynbをダウンロード」でダウンロードします。

##3. ダウンロードしたファイルをパソコン上で編集する

この項はパソコン上のテキストエディタで行います。
ファイル内の`"kernelspec"`から始まる以下の部分を探します。

~~~json
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
~~~

上記の`"python3"`および`"Python 3"`の所を、以下のようにRuby用に書き換えます。

~~~json
    "kernelspec": {
      "name": "ruby",
      "display_name": "ruby 2.5.1"
    }
~~~

書き換えたら、保存します。

##4. 書き換えたノートブックをアップロード

ウェブブラウザのGoogle Colaboratoryの「ファイル」→「ノートブックをアップロード」から、先ほど書き換えたファイルをアップロードします。

##5. Rubyと必要ソフトのインストール

以下をGoogle Collaboratoryのセル（入力する所）にそのままコピーペーストします。

~~~
!apt install libtool libffi-dev ruby-full make
!apt install libzmq3-dev libczmq-dev
!gem install ffi-rzmq
!gem install specific_install
!gem specific_install https://github.com/SciRuby/iruby
!iruby register
~~~

その後、Shift+Enterを押して、実行します。すこし時間がかかります。
下のほうに`ランタイム「ruby」は認識されていません。デフォルトの「python3」に接続します`というメッセージが出ますが無視します。

##6. 追加のgemのインストール

必要に応じて、追加のgemをインストールします。以下をコピーペーストしてから、インストールしたいgemの行だけ残します。その後、Shift+Enterを押して実行します。

~~~
!gem install awesome_print
!gem install pry
!gem specific_install https://github.com/SciRuby/daru
!gem specific_install https://github.com/SciRuby/daru-view
!gem install numo-narray
!gem install rumale
!gem install bio
~~~

##7. ランタイムをrubyに切り替える

簡単実行編の「5. ランタイムをrubyに切り替える」と同じ操作を行います。

##8. Rubyコードを実行

これで、Rubyコードを実行する環境が整いました。

#参考資料

1. [Google Colab で Rubyを動かしてみた](https://qiita.com/kojix2/items/64f14e3487e3d957d4e5) -- この記事が無ければ本記事は実現できませんでした。aptのインストールパッケージやirubyのインストール方法はこの記事をベースにして一部変更しました。

2. [Google ColabでJuliaを使う：元々あるノートブックを使う](https://qiita.com/cometscome_phys/items/1ba6ec181bb0fe1b35d5) -- ipynbのjsonを書き換えアップロード後に言語をインストールしてランタイムを切り替える手法を参考にしました。
[Xcode] Xcodeのディレクトリ構成と実際のプロジェクト構成の乖離を修正する

# 概要

あんまりないケースですが実務上、Xcodeで指定のディレクトリ上でファイルを新規追加したつもりがFinderで確認すると、全然違う箇所に作成されていた・・・というケースがあり困りました :sob:  

(新規作成時に表示されるウィンドウ内のFinder上でどこに配置されるかをちゃんと見れば、問題は回避できますが初期表示で出ているディレクトリが全然違う場所を指している現象がよくわかっていません・・・)

# 前提

* Xcode11.5
* Xcodeのディレクトリ構成が正
* Finder上の実際のディレクトリ構成が誤

とします

Xcodeのディレクトリ構成自体が間違いの場合は以下の記事を書いた人のが参考になります↓ 
[【Xcode】開発途中に手動でディレクトリ構成を変更する](https://qiita.com/naipaka/items/b73ec1fe4c7b52bcb24d)

Xcodeのディレクトリ構成は↓
![スクリーンショット 2020-08-05 0.56.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80912/dcace0f1-1ad4-a6d2-bf20-4cfd46d44f08.png)

実際のディレクトリ構成は↓
<img width="588" alt="スクリーンショット 2020-08-05 0.57.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80912/9be0e708-7bbd-dc3a-1b3c-96e61f156186.png">
という例とします

本来、Xcodeのディレクトリ構成のようにSampleAに`SampleA.swift`ファイルが配置されてるのが想定であるのに、実際のディレクトリ構成はSampleBに`SampleA.swift`ファイルが配置されているのは想定していないだったとします

# 修正方法

1. 実際に配置したい箇所にファイルを移動する(コマンド打ってもFinderでドラッグアンドドロップしてもやり方お任せ)
2. Xcodeのボタンで再配置
赤くなったファイルを消して、Finderからドラッグアンドドロップでもいいのですが
下スクショ内にあるボタンタップでも大丈夫です
修正したいファイルをタップ > Identity and Typeタップ > Location?のボタンタップ

![スクリーンショット 2020-08-05 1.19.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80912/2416c7c8-57b3-94c6-828f-958def8c5563.png)

↓
それで１で移動したファイルを選択してあげれば修正できます
![スクリーンショット 2020-08-05 1.22.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80912/1afd2382-43e1-8d02-6975-0bc99c6b06de.png)

参考になれば幸いです :pray: 

# 備考
Locationの項目にあるボタン名の名称知っている方教えてください :upside_down:
JavaScriptでカレンダーを作ってみた

JavaScriptの勉強でカレンダーを作ってみました。
機能的にしょぼいですが自分的には理解が深まっていい勉強になったと思います。

まず自分で考えてわからない部分はこちらの記事を参考にさせていただきました。
https://qiita.com/kan_dai/items/b1850750b883f83b9bee

##学んだこと
・if文の文法理解
・for分の文法理解
・Dateオブジェクトの使い方
・jsのメソッド

他にもあるかもしれませんが自分の中ではこの辺の理解はかなり深まりました。
何より自分で考えてうまく動いた時の快感はマスターベーションと同等ですね。


##機能
・今月から前月、来月をボタンで表示できるようにした。
・現在日時は青く表示。
・カレンダーの空欄部分が出ないようにした。



<p class="codepen" data-height="265" data-theme-id="light" data-default-tab="js,result" data-user="taikitatata" data-slug-hash="qBZBWmJ" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="qBZBWmJ">
  <span>See the Pen <a href="https://codepen.io/taikitatata/pen/qBZBWmJ">
  qBZBWmJ</a> by taikitatata (<a href="https://codepen.io/taikitatata">@taikitatata</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

```ruby:qiita.rb
carender = ""
/ここにカレンダーの中身を記述していく
```
後はひたすらに `<td>`を使って中身を作って行くだけですね。
for分、if分の連発でしっかり理解できました。


うーん、もっと勉強していろんな機能増やせれるようにこれからも勉強頑張ります！！
Javascript_プロトタイプチェーン初心者覚書

Javascript_プロトタイプチェーンとObject.keys
初心者が理解するためweb記事などからメモを取っています。


### プロトタイプチェーンとは？
[継承とプロトタイプチェーン](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain)

> JavaScript は動的で、 class の実装それ自体を提供しないことから、 Java や C++ のようなクラスベースの言語を経験した開発者にとって、やや紛らわしいものです（class キーワードは ES6 で導入されましたが、シンタックスシュガーであり、JavaScript は引き続きプロトタイプベースです）。

> JavaScript には1つだけ、継承が発生する要素があります。オブジェクトです。どのオブジェクトもプロトタイプと呼ばれる、他のオブジェクトへの内部的な繋がりを持っています。そのプロトタイプオブジェクトも自身のプロトタイプを持っており、あるオブジェクトのプロトタイプが null に到達するまでそれが続きます。 null は、定義によれば、プロトタイプを持たず、プロトタイプチェーンの最終リンクとなります。



### [Object.keys()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)

- Object.keys() メソッドは、指定されたオブジェクトが持つプロパティの 名前の配列を、通常のループで取得するのと同じ順序で返します。

```js
const object1 = {
  a: 'somestring',
  b: 42,
  c: false
};

console.log(Object.keys(object1));
// expected output: Array ["a", "b", "c"]

```

> あるオブジェクトにプロパティをセットすると、自身のプロパティが作られます。この取得と設定の動作の規則の唯一の例外は、 getter または setter とのプロパティの継承が起こるときです。

> JavaScript はすべてが動的で、すべてが実行時であり、一切クラスを持たないことから、 Java や C++から来た開発者にとっていささか紛らわしいものです。すべてはインスタンス（オブジェクト）です。私たちが「クラス」を装っているのは、関数オブジェクトです。
pytest-xdistの実行ホストは上書きできる

pytest-xdistの実行ホストは既存のホストを想定しているようだが、--txオプションを(pytest-xdistがパースする前に)フックすることで動的にワーカー起動が可能となる。

```py
def pytest_sessionstart(session):
    tx = session.config.getoption('--tx')
    if tx == ['hook']:
        ### start worker
        tx[:] = ['ssh=worker']
```
【Rails】数値のvalidationで不正なカンマや全角をチェックする方法

## やりたいこと
カラムを更新する時、数値(整数と少数)のみ許可したい。
たとえば、以下のようなUserモデルを作成したとする。

```
$ rails g model User name:string age:integer height: float
```

| カラム | 型 |
|:-----------------:|:------------------:|
| id | integer | 
| name | string | 
| age | integer |
| height | float |

この時、浮動小数点型のheightカラムに不正な数値が入らないようにする。
(例)
カンマが不正 >> 160..1
全角数字 >> １６０.３
文字列 >> hoge

## 実装方法
Userモデルで以下のようにvalidationを記述する。
デフォルトでは、整数と浮動小数点にマッチし、nil値は許容されない。

```ruby:user.rb
class User < ApplicationRecord
  # デフォルト
  validates :height, numericality: true
  # nil値を許可するオプションをつけた場合
  validates :height, numericality: { allow_nil: true }
end
```

```ruby:terminal
user = User.new(name: 'hoge', age: 26, height: 162..1)
user.valid?
user.erros.full_message
# => height is not a number
```

## 参考
様々なオプションがあるのでRailsガイドを参照する。
[Active Record バリデーション \- Railsガイド](https://railsguides.jp/active_record_validations.html#numericality)
Microsoft製UIライブラリ FAST について

![FAST_top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207520/edd53a96-bbb0-e5b7-d47d-1141a913384f.png)

https://www.fast.design/

Microsoft製のUIライブラリ `FAST` の紹介

# 特徴

`FAST` は2つのデザインシステムがあります。

`FAST Components`
`FAST Element`

また、Web標準であるWebComponentsを使用しているため、ReactやVue.jsなどの様々なUIフレームワークで使用できます。

## FAST Components

`FAST Components` はWebComponentsのUIライブラリです。

https://www.fast.design/docs/components/getting-started

導入に関しては、他のUIライブラリと比べて大差はないように思います。
スタイルのカスタマイズなどに関しては少し癖がありそうです。

```ts
import { customElement } from "@microsoft/fast-element";
import { Button, ButtonTemplate as template } from "@microsoft/fast-foundation";
import { ButtonStyles as styles } from "./button.styles";

@customElement({
  name: "fast-button",
  template,
  styles,
  shadowOptions: {
    delegatesFocus: true
  }
})
export class FASTButton extends Button {}
```

また、UIデザインはMicrosoftが提唱する [Fluent Design System](https://docs.microsoft.com/ja-jp/windows/apps/fluent-design-system) を表現しているようです。


## FAST Element

`FAST Element` は 軽量で、メモリ効率の高いWebComponentsです。

https://www.fast.design/docs/fast-element/getting-started

下記、スタイルを含めた `CustomElement` の例として、 `<MyButton>` を実装してみました。

```ts
import { html, css, customElement, observable, FASTElement } from "@microsoft/fast-element";

const template = html<MyButton>`
  <button @click="${() => { alert("Hi") }}">
    ${({ text }) => text}
  </button>
`;

const styles = css`
  button {
    width: 240px;
    height: 180px;
    background-color: skyblue;
    color: white;
  }
`;

@customElement({
  name: "my-button",
  template,
  styles,
})
export class MyButton extends FASTElement {
  @observable text: string = "My Button";
}

```

また、 `webcomponents.dev` でも `FAST Element` のサンプルが用意されているので、
すぐにかんたんに試してみたい方はこちらです。

https://webcomponents.dev/create/fast


# 最後に

サービスによってUIライブラリはどれを使うか、または使わないかは悩みどころの一つになります。
冒頭でも述べたように `FAST` はWeｂ標準である `WebComponents` であるため、ほとんどのフレームワークで動作します。
もちろんフレームワークなしでも動作します。
複数サービスがあり、異なったフレームワークやライブラリを使っているチームは汎用的なコンポーネントを `FAST` で作ってみても良いかもしれません。
GitHubでアプリケーションを管理する手順

アプリケーションを開発する上で、GitHubで内容を管理し作業を進めていきます。
自身の備忘を踏まえ、GitHub Desktopを使ったアプリケーション管理の手順を記載していきます。

#１.アプリケーションを立ち上げよう
今回は、「myappli」というアプリケーションを題材に進めていきます。

```java:ターミナル
$ cd ~/projects
$ rails new myappli　-d mysql
$ cd myappli
$ rails db:create
```

これでアプリケーションのベースは完成です。


#２．ローカルリポジトリを作成してコミットしよう
次に作成した、myappliをGitで管理できるようにして、ローカルリポジトリとします。

myappli をローカルリポジトリにしましょう

```java:手順１
1. GitHub Desktop から myappli のローカルリポジトリを作成。
2. 「Current Repository」→「Add」→「Add ExistingRepository」を選択。
3. Choose...をクリック→projects の myappli を選択→「Add Repository」をクリック。
```

 ※「Add Repository」がクリックできない場合、以下の作業を行なった後、再度、「ローカルリポジトリを作成」の作業を行いましょう。

```java:ターミナル
$ cd ~/projects/myappli
$ git init
```

rails のバージョンによっては rails new 時に git init がされないケースがあるからです。


```java:手順2
②コミットをしましょう
```
ローカルリポジトリにある全てのファイルを選択してコミットしましょう。
コミットメッセージは、「Initial commit」としておきましょう。


#３.リモートリポジトリを作成しよう
リモートリポジトリを作成します。今回は、GitHub Desktopで作成したローカルリポジトリをプッシュする方法でリモートリポジトリを作成していきます。
先ほど、「Initial commit」とコミットしたので、これをリモートリポジトリに反映させましょう。
現状まだリモートリポジトリを作っていないのですが、GitHub Desktop では、リモートリポジトリが作られていない場合に自動的にリモートリポジトリも作ってくれます。便利ですね。

```java:GitHubDesktop

①右上のPublish repository ボタンをクリック
②Name(リポジトリ名) myappli（そのまま）
　リポジトリを非公開にしたい→[Keep this code private]にチェックがあるまま、
　リポジトリを非公開にしなくていい→[Keep this code private]のチェックは外す。
③[Publish repository]ボタンをクリック
```
GitHub のリモートリポジトリが作成できます。

これで完成です。

確認
GitHub のマイページ、トップページに移動。
GitHub の Your repositories の欄に myappli があれば上手く行っています。

以上でGitHubでアプリケーションが管理できます。
MacにhomebrewでインストールしたMySQLを停止する

homebrewでインストールした mysqldサービスは、 KeepAlive = true となってるため、何度消しても起動されるため、停止できるようにしたいときは、以下のように更新する

```
vim ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
```

```:~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist 
<key>KeepAlive</key>
<false/>
```

再読み込みする

```
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist 
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist 
```

で、`mysql.server stop` をする
【Unity】UnityWebRequestで画像ファイルを送信してPHPで受け取る最小実装

UnityWebRequestで画像ファイルを送信しPHPで受け取る最小の実装を備忘録として残します。

## Unity側

前提条件として画像ファイルはバイト配列として取得している状態を作ります。

以前執筆したコチラの記事でTextureをPNGにエンコードしたバイト配列作成までを紹介しているので、参考になるかもしれません。
[【Unity】RawImageのTextureをPNGにエンコードする方法](https://qiita.com/ohbashunsuke/items/5d9b9771e33d3027fb9c)

```cs
IEnumerator Send(byte[] bytes)
{
    var form = new WWWForm();
    // "file"はPHP側で$_FILESから取得するキー ex)$_FILES["file"]
    form.AddBinaryData("file", bytes, "image.png", "image/png");
    var req = UnityWebRequest.Post("http://localhost:8080/api.php", form);
    yield return req.SendWebRequest();
}
```

## PHP側

```api.php
$fileName = $_FILES["file"]["name"];
// api.phpと同じディレクトリに保存されます
move_uploaded_file($_FILES["file"]["tmp_name"], $fileName);
```

## 最後に

エラーハンドリングを考慮するとUnityもPHPも記述することはまだまだありますが、本記事では肝となる部分の実装のみを紹介しました。


## 環境

- Unity2019.4.4f1
- PHP 7.2.16
GitHubで依存関係のセキュリティの脆弱性を指摘された

#プログラミングの勉強日記
2020年8月5日　Progate Lv.226
RailsのアプリをGitHubにプッシュしたら「One of your dependencies has a security vulnerability」というメールがたくさんきて、GitHubを見てみたら警告が出ていた。この対処法をまとめる。

#セキュリティアラートの確認

<img width="530" alt="0805.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/642821/71dc8b14-8775-9a21-30fa-c074891ecda5.png">

「We found potential security vulnerabilities in your dependencies.
Only the owner of this repository can see this message.」

という警告が出ている。
（メールにもセキュリティ警告のメールがたくさん届いた。）


「See Dependabout alerts」をクリックすると詳細がわかる。（スクショを取り忘れてしまった、、）

私の場合は「Gemfile.lock」を書きかえるよう言われていた。Gemfile.lockなんていじったことないのに、なんで…？という感じだったのでいろいろ調べてみた。


#対処法
　ネットで調べてみた結果、コマンドで`bundle update`を実行すれば解決するらしい。

```:ターミナル
bundle update
```
　いくつかの警告は減ったが、それでも警告が残ってしまっていた。

　警告内容を詳しく見てみると、railsとpumaを最新のバージョンにアップデートすればいいみたいだったので、Gemfileを書きかえた。（バージョンを指定しないと最新のgemがインストールされる）

```:Gemfile
#gem 'rails', '5.0.3' 
#以下に書きかえる
gem 'rails'

#gem 'puma', '3.6.2'
#以下に書きかえる
gem 'puma'
```
　Gemfileを書きかえたあとに`bundle update`を実行する。

```:ターミナル
bundle update
```
　実行したら、`Gemfile`と`Gemfile.lock`をプッシュする。
　警告が消えた！！

以上が解決方法である。
Gemfileは[こちらの記事](https://qiita.com/mzmz__02/items/dca13582996b8b59adc1)で触れているので、なんとなく理解しているが、Gemfile.lockがよくわからないので調べてみた。

#GemfileとGemfile.lockの違い

##Gemfileとは
　インストールしたいgemを記述するファイル。
　`gem 'gemの名前' `と記述する。`rails new`コマンドで生成されたGemfileにはすでにいくつかのgemが書かれてインストールされている。
　`gem 'gemの名前', 'gemのバージョン' `　とすると、そのバージョンがインストールされる。バージョンを指定しないと、最新のgemがインストールされる。

##Gemfile.lockとは
　`bundle install`した時に作られるもの。Gemfileと似ているが、Gemfileに書いていたgemが必要としている別のgemも含め、動作に必要な全てのgemが展開される。つまり、Gemfile.lockはGemfile には書いてなくても，依存している gem は書かれている。
　　gem 自体がインストールされたかされていないかに関わらず、`bundle install`したときに「Gemfile」に書かれたgemについてのバージョンや名前は「Gemfile.lock」に書かれている。

###Bundlerについて
　Bundlerはgemを管理するためのgemのこと。`bundle install`や`bundle update`などを使用することができる。
　Bundlerは「Gemifile」に書かれてあるgemの他に必要なgemもあり、それらを自動でインストールして「Gemifile.lock」に記述する。


##違い
- Gemfileは、インストールするgemを指定するファイル。
- Gemfile.lockは、実際にインストールされたものを記載したファイル（全部のgemが書かれている）。Bundlerでインストールされるgemパッケージの依存関係の解決結果とバージョンを固定する役割がある。単にgemだけ書いてあるGemfileと違って、バージョンまで書いてある。


#gem updateとbundle updateの違い
　gem コマンドは「Gemfile」や「Gemfile.lock」とは無関係である。gem update はシステムにインストールされている gem について、それより新しいバージョンがあればその最新版をインストールする。

　bundleコマンドは「Gemfile」と「Gemfile.lock」と関係している。「Gemfile.lock」は、bundle installすることで書き込まれる。（インストールを行った後に更新されている）

##bundle install と bundle updateについて

bundle install：「Gemfile.lock」を元にgemのインストールを行う。新しい環境や、gemfileに新しくgemを記述したときに使う。

bundle update：「Gemfile」を元にgemのインストールを行う。

#参考文献
[GitHubでセキュリティ脆弱性のアラートが来てビビりながら対応した話](https://qiita.com/Nash-BETA/items/0d4e876cf9460778b985)
[Githubから脆弱性を指摘されたのでメモ](https://qiita.com/simp338/items/8ae5089fe2c1108defb1)
[Gemfile.lock が更新されるタイミングはいつなのか？](https://github.com/yochiyochirb/meetups/issues/18)
[bundle installとupdateの使い方について](http://saj-kz.hatenablog.com/entry/2014/04/21/005845)
SaaSとPaaSとIaaSの違い

クラウドのサービスは多様化が進んでいるが、大きく分けると**SaaS**と**PaaS**と**IaaS**の３つに分類できる。

以下にてそれぞれを解説する。

#SaaSとは

- **S**oftware **a**s **a** **S**erviceの略で、主に業務で使用するソフトウェアの機能をインターネットなどのネットワークを介して必要な分だけサービスとして利用できるようにした形態のこと。

- 1つのサーバーを複数の企業で共有することを前提とした**マルチテナント方式**でのサービス提供となる。

- 代表的なSaaSのサービスは、マイクロソフトの「Office365」、グーグルの「G Suite」などがある。

#PaaSとは

- **P**latform **a**s **a** **S**erviceの略で、企業のアプリケーション実行環境やアプリケーション開発環境をサービスとして提供する形態のこと。

- SaaSが決まったソフトウェアをサービスとして提供することに比べて、PaaSは自社で開発したアプリケーションを稼働させることができるので、アプリケーションの活用の自由度が高いことが特徴である。

- 代表的なサービスは、サイボウズの「kintone」や、オープンソースのPaaSの基盤ソフトウェアの「Cloud Foundry」、「OpenShift」などがある。

#IaaSとは

- **I**nfrastructure **a**s **a** **S**erviceの略で、CPUやハードウェアといったコンピューティングリソースをネットワークを経由してサービスとして提供する形態である。以前はHaaS(**H**ardware **a**s **a** **S**ervice) とも呼ばれていた。

- 仮想サーバーやオンラインストレージがこれに該当する。

- 代表的なサービスは、Amazonの「EC2(Elastic Computer Cloud)」などがある。
64ビット整数の最大値は計算の限界ではない

## はじめに
最近競技プログラミングを始めました。
普段の仕事で64ビットでは扱えないような天文学的な値や細かすぎる浮動小数点数に触れることって滅多に無いのですが、競技プログラミングではそのような機会がちょくちょくあります。
うまく回避する方法を検討するのも醍醐味ですが、初心者は巨大な値に慣れるところから勝負です。
今回は競プロ初心者として得た知見をメモします。

## 数値型における64ビットの最大値は変数の限界であって計算の限界ではない

まずは下記のコードをご覧ください。

```go
package main

import (
	"fmt"
)

func main() {
	num := int64(9223372036854775808)
	fmt.Println(num)
}
```
最近は仕事でGoを書いているので競プロもGoで解いています。
これを実行すると下記のようなエラーが出力されます

```
./main.go:8:14: constant 9223372036854775808 overflows int64
```

64ビット符号付き整数配列の最大値は9,223,372,036,854,775,807なので整数オーバーフローが発生します。

では下記の場合は...?

```go
package main

import (
	"fmt"
)

func main() {
	num := int64(9223372036854775808 / 9223372036854775808)
	fmt.Println(num)
}
```

```
1
```

64ビットの最大値を超えた値同士の計算ですが問題なく１が出力されます。
これはどこまで値が大きくなっても最終的な計算結果が9223372036854775807以下であれば変わりません。
(常軌を逸した値同士を計算したら何か起こるかもしれませんが)
> ※2020/08/05追記: Goの実装を漁ってみて確認しました13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095
(512ビットで表現できる値の最大値)まで対応しているようです。

念のためC++でも書いてみましたが同様の結果でした
なおC++は9999999999999999999まで耐えましたが桁が増えるとエラーが発生しました...
>※2020/8/5追記: 嘘ですね、こちらも64ビット符号なしで表現できる限界である18446744073709551615まで計算可能です。
大きな値が扱えても2のN乗が閾値になる辺りからコンピュータがビットの塊である事が伺えます、面白いですね。

```c++
#include <iostream>
using namespace std;
int main(void){
    long long x = 9223372036854775808LL / 9223372036854775808LL;
    std::cout << x << std::endl;
}

```

## 結論
仮にbit値をbyteに変換して表示する下記のようなコードが64ビットの限界を超えて動かなくなったとします。(具体例としては少々苦しいですが)

```go 
package main

import (
	"fmt"
)

func main() {
	bit := int64(9223372036854775808)
	byte := bit / 1024
	fmt.Println(byte)
}
```

途中結果がオーバーフローするような巨大な値でも、変数に格納する前に必要な計算を実行するだけで動かせる場合があるという事です。

```go
package main

import (
	"fmt"
)

func main() {
	byte := int64(9223372036854775808 / 1024)
	fmt.Println(byte)
}

```

## 追記

Goはconstであれば64ビット以上の値も格納できるそうです。
@Nabetani さん、ご指摘いただきありがとうございます。
試してみたらconstも512ビットまで使えるみたいです。

```go
package main

import (
    "fmt"
)

const huge0 = (1 << 127) - 1
const huge1 = 0x987654321abcdef0

func main() {
    v0 := huge0 / (1 << 64)
    v1 := huge1 / (1 << 16)
    fmt.Printf("v0=%x  v1=%x\n", v0, v1) //=> v0:7fffffffffffffff  v1=987654321abc
}
```