OmniAICreator/Qiita-1.07M huggingface dataset:
SQL*Plusのページの行数を設定する方法

- 環境
    - SQL*Plus: Release 12.2.0.1.0 Production
    - (AWSのRDS)Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production

タイトル行からタイトル行までの間の行数(タイトル行とかハイフン行含む)は**ページサイズ**というらしい。

# ページサイズを設定する方法
```sql
set pagesize {ページサイズ};
-- ページサイズを確認する
show pagesize;
```

# 増やしてみた

```sql
-- 16行ぐらいで改ページしないでほしい
SQL> select * from cell_info;

CELL         CONTENTS
------------ ------------------------------------
B1           apple
B11          orange
B25          strawberry
B2           persimmon
AA1          cherry
AA11         pomegranate
AA25         kumquat
AA2          loquat
AC1          turnip
AC11         banana
AC25         melon

CELL         CONTENTS
------------ ------------------------------------
AC2          grape
A1           peach
A11          mandarin
A25          plum
A2           pumpkin

16行が選択されました。

-- デフォルトの値を確認する
SQL> show pagesize
pagesize 14
-- ページサイズを増やす
SQL> set pagesize 30
-- 確認する
SQL> show pagesize
pagesize 30
-- もう一度検索してみると見やすくなった
SQL> select * from cell_info;

CELL         CONTENTS
------------ ------------------------------------
B1           apple
B11          orange
B25          strawberry
B2           persimmon
AA1          cherry
AA11         pomegranate
AA25         kumquat
AA2          loquat
AC1          turnip
AC11         banana
AC25         melon
AC2          grape
A1           peach
A11          mandarin
A25          plum
A2           pumpkin

16行が選択されました。
```
[Flutter]TextFieldタップでA RenderFlex overflowed by <xxx> pixels on the bottom. が出るときの対処法

`TextField` や `TextFormField` をタップすると、キーボードが立ち上がる関係で、次のようなエラーが出ることがあります。

```dart
Widget build(BuildContext context) {
    return Form(
        key: _formKey,
        child: Column(
          children: <Widget>[
            TextFormField(),
          ],
        ),
      );
}
```

```
════════ Exception caught by rendering library ═════════════════════════════════════════════════════
The following assertion was thrown during layout:
A RenderFlex overflowed by 198 pixels on the bottom.
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309048/9c72d904-14e8-5d5f-cb4b-4862128b833a.png)

## 回避方法

`SingleChildScrollView` でウィジェットを囲むことで、画面が適切にスクロールし、エラーを回避できます。

```dart
Widget build(BuildContext context) {
    return SingleChildScrollView(
        child:Form(
          key: _formKey,
          child: Column(
            children: <Widget>[
              TextFormField(),
            ],
          ),
        ),
    );
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309048/403a399b-5ce0-88dc-402c-1e1b828419ba.png)

## 参考
[How to fix bottom overflowed when keyboard shows error in Flutter - Programming Addict - YouTube](https://www.youtube.com/watch?v=2E9iZgg5TOY)
Pythonのコードを書く前に

#そもそもPythonとは
Pythonは1991年にオランダ人のグイドヴァンロッサムによって開発されたプログラミング言語である。一般的にプログラムの規模が大きくなるにつれてコードは見づらくなるが、Pythonはそのような不便を解消することを目的とし、初心者にとって扱いやすい言語である。また、Googleなどの有名企業も導入しており、近年注目されている言語だといえる。Pythonはオブジェクト指向型のプログラミング言語と一般的に言われる。オブジェクト指向には様々な定義があるが、コードの再利用を積極的に行い、システムの開発などにかかるトータル時間を短縮することを目的とした手法だと私は解釈する。
#Pythonでなにができるのか
・機械学習
・データ分析

Pythonでできることは多岐にわたるがここでは機械学習とデータ解析を取り上げる。
####機械学習
機械学習とは大量のデータからそれらの特性を明らかにし、出来事の結果を予測することである。機械学習の学習方は教師あり学習、教師なし学習、強化学習の三つに分類される。教師あり学習とは目的となる結果があらかじめ準備されておりそれに対してコンピュータがどれほど近い結果を予測することができるかという趣旨の機械学習である。一方で正解となるデータが準備されていない学習方式を教師なし学習という。教師なし学習を用いて二つの事象の相関関係を調べたりすることができる。強化学習とは無限通りの行動パターンがある状況下で得られる報酬を最大化することを目的にした学習方式である。例えばコンピュータに将棋や囲碁などのルールをあらかじめインプットしておき、より勝ちにつながる選択をした時にそれに応じた報酬を与え、学習させていくという手法をとる。
####データ解析
データ分析とは何らかの目的のもとデータを収集、整理し価値のある意味を見出すことをいう。基本的なデータ分析の流れとしては
１．課題設定
２．データの収集
３．データの前処理
４．データの可視化
となる。
######１．課題設定
　先述したようにデータ分析は価値のある意味を見出すことが目的なので、どういう結果が得られれば成功なのか定義する必要がある。

######２．データの収集
　データの収集は大まかに分けて三つの方法がある。一番簡単なのは公的機関が発表しているデータセットを利用する方法で、すでに他人がデータ収集してくれているので手間が省ける。二つ目は社内のデータベースからデータを抽出する方法。これを行うにはSQLの知識が必要。最後はWeb API(Application Programming Interface),Webスクレイピングでデータを収集する方法。Web APIとはHTTPプロトコルを用いてネットワーク越しに呼び出すサーバーとクライアント間のインターフェースのこと。Webスクレイピングはwebサイトから必要なデータを取得しダウンロードする技術のことで、それを行うプログラムのことをスクレイパと呼ぶ。

######３．データの前処理
　データを収集することに成功しても、ある項目に対する回答が欠損しているデータは全体の結果に悪影響を与えかねないのでデータを加工しなければならない。また、文字列（カテゴリカルデータ）を統計解析が可能なように連続データに変換する必要がある。

######４．データの可視化
　Pythonでデータを可視化するには次のようなモジュールを利用すると実現できる。Pythonで長いコードを書くとなった時に予期せぬエラーを減らすためにファイルを分割する必要が出てくる。この時に分割したファイルのことをモジュールという。
　・Matplotlib
　・Pandas
　・Seaborn　など


#Pythonの強み
　・コードがシンプルゆえ初心者向き
　・ライブラリやフレームワークが豊富
####コードがシンプルゆえ初心者向き
Pythonの特徴にコードがシンプルという特徴がある。確かに私も初心者ながらプログラミングを勉強してきたが、例えばJavascriptなどと比べてコードがシンプルで機能を簡単に実装できると感じている。Javascriptでは定数や変数を定義する際に独自の文字を利用するが、Pythonではそのような文字を用いる必要はなく、変数にいきなり値を代入するだけで定義される。Pythonのコードのシンプルさを強調するために引き続きJavascriptを引き合いに出す。

```Javascript:script.js
const score = 60;
if(score >= 80){
  console.log('good');
}else{
  console.log('so so....');
}
```

```python:script.py
score = 60
if score >= 80:
    print('good')
else:
    print('so so...')
```

このようにpythonでは条件分岐を利用する際はインデントを必ず行わなければいけないものの、ほかの言語に比べてシンプルであることが分かる。

####フレームワークが豊富
フレームワークとは頻繁に利用されるプログラムをあらかじめまとめたものである。フレームワークを利用すると一から開発する必要がないので素早く開発することができ、生産性が向上するという点がPythonの強みといえる。例えばPythonのフレームワークにはDjango、Flask、Bottleなどの便利なフレームワークが存在する。

#参考
[どちらを学ぶべき？PythonとJavaScriptを比較]
(https://se.miyabikno-jobs.com/comparison-python-js/)
[【保存版】今話題のPythonでできることを、プログラミング未経験者でもわかるようにまとめてみた]
(https://dividable.net/python/how-python-is-useful/)
[Pythonとは？言語の特徴から学習法まで初心者向けにわかりやすく解説]
(https://www.sejuku.net/blog/7720)
[【Python】オブジェクト指向プログラミングの概念と書き方]
(https://www.headboost.jp/python-objective-paradigm/#4)
【RSpec】rack-attack gemをテスト環境では動作しないように設定する方法

## 概要
* rack-attack gemをテスト環境では動作しないように設定した方法です。

## 背景
* rack-attack gemを使ってDoS攻撃対策を設定したところ、HTTPリクエスト関連でfailするようにRSpecを解消するのに詰まったので、こちらに解消法を共有します。

## 解消法

### Gemfileの設定
まずは`production` と `staging` 環境でのみ、rack-attackを導入するように修正します。

```ruby
group :production, :staging do
  gem 'rails_12factor'

  # DoS攻撃対策
  gem 'rack-attack'
end
```

### configの設定
次にconfigで、どの環境ではrack-attackを使用するかを設定します。

```ruby
# config/application.rb
（省略）
module Sample
  class Application < Rails::Application
    （省略）
    config.middleware.use Rack::Attack  # こちらを削除
  end
end
```

```ruby
# config/environments/production.rb
Rails.application.configure do
　（省略）
  config.middleware.use Rack::Attack  # こちらを追記
end
```

```ruby
# config/environments/staging.rb
Rails.application.configure do
　（省略）
  config.middleware.use Rack::Attack  # こちらを追記
end
```

### config/initializers/rack-attack.rb の設定
最後にRailsの環境ごとに、`config/initializers`に設定している`rack-attack.rb`を読み込むかどうかを設定します。

```ruby
# config/initializers/rack-attack.rb
if Rails.env.production? || Rails.env.staging?  # こちらのif文を追記
  class Rack::Attack
    throttle('req/ip', limit: 60, period: 1.minutes) do |req|
      req.ip unless req.path.start_with?('/assets')
    end
  end
end
```

これでテスト環境では`rack-attack gem`が動作しないように設定ができました。


## 振り返り
* `config/initiazilers`配下にファイルを作成したことがなかったので、こちらの配下ファイルでも`環境ごとに読み込むかどうかの設定が必要`だと気づくのに丸1日要しました。

* 初めて触ったディレクトリの周りはエラーになったら真っ先に調べる必要がありますね。
（振り返ってみると当たり前だけど、僕の場合は実際に調べていた時に調べたくなくて後回しにしてしまいがちだった :sweat_smile:  ）
Power BIでサクっとデータを視覚化する

#はじめに
短時間でサクっとデータを視覚化して、探索的に分析したいことがあります。
時系列データを例に、Power BIでサクっと視覚化する事例をご紹介します。

#ExcelとPower BIの違い
手元のデータを視覚化するとき、Excelが用いられることも多いかと思います。
Excelの場合、シート上でセルの計算などを行い、グラフを表示させていました。
Power BIの場合、データの加工や前処理が整えば、そこから先の視覚化と分析がサクっと行えます。

#サンプルデータ
ここでは、[東洋経済Online 新型コロナウイルス国内感染の状況サイト](https://toyokeizai.net/sp/visual/tko/covid19/)の感染者データを使用します。
下記、GitHubにオープンソースとして公開されています。
（※サイトに引用元やライセンスについての記載があります。）
https://github.com/kaz-ogiwara/covid19/
公開されている[data.csv](https://raw.githubusercontent.com/kaz-ogiwara/covid19/master/data/individuals.csv)を使用します。

#データの読み込みと前処理
1. ホーム>データを取得>webから、httpアドレスを指定し、csvファイルを読み込みます。
https://raw.githubusercontent.com/kaz-ogiwara/covid19/master/data/individuals.csv
（csvファイルをローカルにダウンロードして、「テキスト/csv」から読み込むこともできますが、Webコネクタを使用することで、「最新の情報に更新」で、すぐにデータ更新ができます。）

2. ホーム>クエリーを編集より、Power Queryエディタを開きます。

3. Power Queryエディタより、確定年、確定月、確定日の列を選択し、変換>列のマージをクリック、区切り記号をカスタムの"/"に設定し、列を結合します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/4e9c6fa9-316a-8f51-c136-88ff588ed880.png)

4. 結合した列名を確定日にリネームし、データ型を日付に変更し、ホーム>閉じて適用をクリックすると、データの前処理が完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/f90fabfe-d697-2303-64d0-745214d83909.png)

#ダッシュボードの作成
1.居住地（県）のように凡例数が多いデータの推移をみるため、リボングラフを使用します。
リボングラフのビジュアルを選択し、軸、凡例、値をフィールドよりドラックアンドドロップで設定します。
※軸の確定日は、日付の階層を選択すると、ドリルアップ・ダウンで日/月/四半期/年単位の集計が切り替えできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/dc041330-89b4-c68f-1c69-bb670d616c30.png)

2.スライサーを配置します。
これにより、フィルタ条件でデータの絞り込みをインターラクティブに行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/b29ffc66-3222-3656-4fe4-a83e656ec5d1.png)

3.上記ダッシュボードでもデータの概要がつかめますが、さらに、リボングラフの凡例の色を分かりやすくするために円グラフを追加したり、地理的な拡散状況を視覚化するマップ、更新日と累計数のカードを追加してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329764/45581e6d-ba41-29c2-974c-7b305032c40b.png)

#さいごに
今注目のデータで、サクっとダッシュボードを作ってみました。
coc.nvimのphpls拡張の代わりにintelephenseを入れた

# 概要
coc.nvimの拡張機能 phplsが想定の動きをしなくなったので、intelephenseを入れた。

## 手順
1 coc.nvimから phplsのアンインストール

```vimscript
" vimでの操作
:CocUninstall coc-phpls
```

2 intelephenseのインストール

```bash
# ターミナルでの操作
npm i intelephense -g
```

3 intelephenseの設定

```vimscript
" vimで下記コマンドを実行
:CocConfig
```

4 下記を記載する

```json
{
    "languageserver": {
        "intelephense": {
            "command": "intelephense",
            "args": ["--stdio"],
            "filetypes": ["php"],
            "initializationOptions": {
                "storagePath": "/tmp/intelephense"
            }
        }
    }
}
```


## 参考
- [coc.nvim/wiki/Language-servers](https://github.com/neoclide/coc.nvim/wiki/Language-servers)
- [bmewburn/intelephense-docs](https://github.com/bmewburn/intelephense-docs)
apache + php-fpm な環境での504 Gateway Timeout Errorの対応

# はじめに

CentOS8でphp-fpmがデフォルトとなりデーモンとして動きます。

先日、構築したサーバでアプリケーションのテストをしていると、504 Gateway Timeout Errorが発生したため、一部設定変更した際の備忘録です。

## 環境

CentOS8
apache2.4系
php7.2系

## apache

apacheのタイムアウトはデフォルトで60秒なので、ここを180秒に変更。
httpd.confに追記します。

```httpd.conf
Timeout 180
```

https://httpd.apache.org/docs/2.4/ja/mod/core.html#timeout

## php

PHPでもスクリプトがパーサに強制終了される時間の設定箇所があり、デフォルトでは30秒となっているのでここを180秒に変更。
            
```php.ini
max_execution_time = 180
```
https://www.php.net/manual/ja/info.configuration.php#ini.max-execution-time

その他、単一のリクエストを処理する際のタイムアウト値も設定できるので、ここも180にした。
デフォルト値は0
 
```/etc/php-fpm.d/www.conf
request_terminate_timeout 180
```

## 反映

apache、php-fpmともにリロードして設定値を反映させよう。

```
# systemctl reload httpd.service
# systemctl reload php-fpm.service
```

## その他

バックエンドのDBにMySQLやPostgreSQLを利用している場合は、そいつらのタイムアウト時間も確認する。

```my.cnf
wait_timeout = 180
```
※デフォルトでは8時間なので大丈夫であろう。
https://dev.mysql.com/doc/refman/5.6/ja/server-system-variables.html#sysvar_wait_timeout


```postgresql.conf
statement_timeout 180
```
※こちらもデフォルトは0なので大丈夫であろう。
https://www.postgresql.jp/document/10/html/runtime-config-client.html
【phpbb】templateについて

##phpbbのtemplateの構造
phpbb3.2を使っています。
phpbbをカスタマイズして掲示板サイトを作ったのですが、開発当初は構造を把握するのが大変だったししばらく触っていないと忘れそうなので、ここに残しておこうと思います。

##どのテンプレートファイルを使っているのか

以下のようにテンプレートファイル名を指定してるところがあると思います。

```index.php
$template->set_filenames(array(
	'body' => 'index_body.html')
);
```

`index_body.html`はどこかというと、`./styles/prosilver/template/index_body.html`ここにあります。
※`prosilver`はデフォルトのスタイルです。


```index_body.html
<!-- INCLUDE overall_header.html -->
```
いきなりこういうのがあるのですが、こういう系の記述は他にもあって簡単にまとめるとこんな感じです。

|記述             |意味               |
|:----------------|:-----------------|
|<!-- INCLUDE something.html -->|'something.html'を読み込む|
|<!-- EVENT something -->|拡張機能でここに入れたいテンプレートを読み込む|
|<!-- IF something -->|if文書くとき|
|<!-- BEGIN something -->|loop書くとき|

他にもありますが、上記がよく見るやつ。
詳しく知りたい方は以下のリンクなど参照してください。
[Template_syntax](https://wiki.phpbb.com/Tutorial.Template_syntax)

##補足
###EVENTに関して
拡張機能は、`./ext/`配下に配置するのですが、`./ext/steve/postreactions/styles/prosilver/template/event/`って感じで`template`フォルダの下の`event`フォルダにある、`<!-- EVENT something -->`に記述されているのと同様のファイル名のテンプレートが読み込まれます。
例えば、`<!-- EVENT overall_header_navigation_append -->`だったら、`./ext/steve/postreactions/styles/prosilver/template/event/overall_header_navigation_append.html`がそこに読み込まれます。
拡張機能に関してはまた別で記事書こうかなと思います。多分。

###テンプレート内で使う変数に関して
これ最初知らなくて引っかかったので書いておきます。
テンプレート内で使う変数は大文字じゃないといけないんですね。

```index.php
// Assign index specific vars
$template->assign_vars(array(
	'TOTAL_POSTS'	=> $user->lang('TOTAL_POSTS_COUNT', (int) $config['num_posts']),
	'TOTAL_TOPICS'	=> $user->lang('TOTAL_TOPICS', (int) $config['num_topics']),
	'TOTAL_USERS'	=> $user->lang('TOTAL_USERS', (int) $config['num_users']),
```

って感じで。
ここ[Template_System](https://wiki.phpbb.com/Using_the_phpBB3.0_Template_System)に `template variable names are always all-uppercase`って書いてあります。
テンプレート内では`{L_SOME_VARIABLE}`こう使います。
ドキュメント見ないでやっていたので、これに気づくまでに無駄な時間を費やしました...。

##終わりに
phpbbのカスタマイズしていて思ったのが、日本語の検索結果がとても少ないことです。
なので今まで知ったことを備忘録的な役割も含め書いていこうと思います。
Microsoft Power BI Community のGallery に投稿してみました。

#Microsoft Power BI Community のGallery について
Microsoft Power BI Community には、いくつかのカテゴリーがありますが、その中にあるGallery というサンプルレポートが紹介されているコーナーがあります。
こちらに投稿してみましたので、ご紹介します。

Galleryにも7つ種類があり、Data Stories Gallery に投稿しました。

今回は、東京都福祉保健局に公開されている　だれでもトイレのバリアフリー情報（平成31年1月時点）を利用したトイレマップになっています。
http://opendata-catalogue.metro.tokyo.jp/dataset/t000010d0000000062

<img width="668" alt="だれでもトイレのバリアフリートイレ情報.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600844/5aedbdf0-87a5-4c45-515e-b42bbbb02d39.png">

https://community.powerbi.com/t5/Data-Stories-Gallery/Barrier-free-information-for-anyone-Bureau-of-Social-Welfare-and/td-p/968214
Angularでcsvライブラリを扱うのための初期手順

# はじめに

Angular上でCSVファイルをややり取りするために [csv](https://csv.js.org/)ライブラリを使用するための手順がいささか面倒だったので、手順をまとめました。

## 確認環境

以下の環境で動作確認を行いました。

* angular 9.0.5
* csv 5.3.2
* buffer-browserify 0.2.5
* next-tick 1.1.0

## 手順

以下、ファイルパスはAngularプロジェクト直下をカレントとします。

### コマンドライン

```bash
npm i -S csv next-tick buffer-browserify
npm i -D @types/next-tick
```

### ソースの変更

```json:tsconfig.app.json（修正部分のみ）
{
（略）
  "compilerOptions": {
    "types": ["node"]
（略）
  "paths": {
    "buffer/*": ["node_modules/buffer-browserify/*"]
  }
（略）
}
```

```ts:src/polyfills.ts（追加のみ）
（前略）
// for 'csv'
(window as any).global = window;
global.Buffer = global.Buffer || require('buffer').Buffer;
(window as any).process = {
  env: { DEBUG: undefined },
  nextTick: require('next-tick'),
  version: ''
};
```

## なにをしているのか

Angular(6+)ではglobal変数が存在しないようなので、コード上で作成しています。processプロパティなども同様です。

そして[csv](https://csv.js.org/)ライブラリがもともとnode.js用のライブラリであり、ウェブブラウザでは存在しないオブジェクト(具体的にはBuffer)を使用していました。tsconfigのpathsでbrowserifyライブラリを参照するようにして対応しています。
IBM Cloud (IaaS)にSSL VPN接続する場合

　久しぶりにSSL-VPNで接続する必要があったので書いておきました。

#SSL VPNに接続する為に必要なもの
-SSL VPNソフト
-SSL VPN認証情報
-SSL VPNアクセスポイント情報

それぞれみていきましょう。
## SSL VPNソフト
https://support.arraynetworks.net/prx/001/http/supportportal.arraynetworks.net/downloads/downloads.html
からダウンロードしてください。Windows, Mac, Linux版があります。
WindowsだとWindows standalone client msi 、MacだとMac OS standalone client(UI) が無難でしょうか。

## SSL VPN認証情報
　vpnユーザー名とvpnパスワードが必要になります。
ポータル画面から管理--> アクセスを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/e3af3235-d111-3afe-925e-6d6a60645ff0.png)
ユーザーをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/209c0e14-4f18-3335-85c8-3294b4d641b2.png)
ユーザー名を選択、スクロールダウンするとvpnユーザー名とvpnパスワードが見えてきます。

＊SSL VPNアクセスが有効になっているかも確認しましょう！
確認方法は　したのVPNサブネットをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/72e601f4-9800-df18-cb3a-ab3fd54005ef.png)
下のようにチェックがついていれば大丈夫です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/69f715bd-ed0e-80df-b307-6b1e02545942.png)


## SSL VPNアクセスポイント情報
アジアのでは以下のデータセンターにアクセスポイントがあります。
データセンター : アクセスポイントURL
東京 : vpn.tok02.softlayer.com
シンガポール : vpn.sng01.softlayer.com
ソウル : vpn.seo01.softlayer.com
香港 : vpn.hkg02.softlayer.com
チェンナイ（インド） : vpn.che01.softlayer.com
メルボルン : vpn.mel01.softlayer.com

# 設定例
 ダウンロードしたソフトを起動してください。
サイトを追加（右上）をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/fc53cea3-3351-20b1-de66-3dbdf49add37.png)

サイト名：任意です。
ホスト名：接続したい先のアクセスポイントURLを入れてください。
　　　　（通常は東京かと思いますが繋がらなかったら他のデータセンターに接続してみましょう）
ユーザー名：　ポータルのvpnユーザー名
パスワード：　ポータルのvpnパシワード

#接続
 入力した項目上で右クリックして接続を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/be3874f4-fbe8-b0a6-7e61-55e141a3a5c3.png)

しばらくすると接続されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/af7860df-8d20-0309-fa53-64ba72794b6e.png)

仮想サーバーのPrivateアドレスにpingでも打ってみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/03ca8896-ffd8-7ad8-711a-f4821adf4a3c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/a223c36a-6033-45ca-f20c-768a2e6d2f30.png)

ぜひご参考に
apple gitからhomebrewで最新版のgitを使いたい

# apple gitとか言うやつ
新しいMacを頂いたので初期設定をすべく作業していたところ、git --versionを打って存在しないことを確認してからhomebrewでgitをインストールしようとしたところ

```terminal
$ git --version
git version 2.21.1 (Apple Git-122.3)
```

なんかデフォルトでapple版？のgitが入っておるのですな。使っているパッケージはbrewで全て管理したいところなので、変更します。

## homebrewとは
Mac専用ツールパッケージマネージャーです。インストールする際には[公式](https://brew.sh/index_ja)から簡単に可能です。ただその際、Xcodeが入っている必要があります。

因みにパスで問題があった場合の対処法。

```terminal
Warning: /opt/homebrew/bin is not in your PATH.
  Instructions on how to configure your shell for Homebrew
  can be found in the 'Next steps' section below.
```

上記のようなWarningが出た場合、その後に出てくるNext stepsを読んで対処できます。下記コマンド、パス名はきちんと自分のユーザー名にしてください。

```terminal
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/ユーザー名/.zprofile
$ eval "$(/opt/homebrew/bin/brew shellenv)"
```

下記はhomebrewを利用するにあたっての基本コマンドになります。また何か知ったら追記します。

```terminal
パッケージをインストールする
$ brew install パッケージ名

パッケージをアンインストールする
$ brew uninstall　パッケージ名

homebrewのアップデート
$ brew update

homebrewとインストールしたパッケージのアップデート
$ brew upgrade

インストールしたパッケージのリスト表示
$ brew list

インストールしたパッケージの保存先パス表示
$ brew --prefix　パッケージ名
```

## gitをインストールしてパス指定

```terminal
$ brew install git

$ brew --prefix git
/usr/local/opt/git

# brewでインストールしたパッケージの自動起動化
$ brew services restart 自動起動させたいパッケージ
ex.) brew services restart mysql

# 自動起動しているサービスの一覧
$ brew services list

# サービスの自動起動を止める時
$ brew services stop 止めたいパッケージ
ex.) brew services stop mysql

# サービスを停止させる
$ brew services kill サービス停止させたいパッケージ
ex.) brew services kill mysql

# 自動起動しているサービスのステータス詳細
$ brew services info サービス名
ex.) brew services info mysql

```

他の記事だと、brewのインストール先がデフォルトは/usr/local/だったり、/usr/local/etcだったりまちまちなんですよね、なんでバラバラなのか理由は分かりません。もし知ってる方いらっしゃいましたら教えてください。ただ、どんなインストール場所だろうが--prefix使えばどこに保存されてるか分かりますね。自分の場合は、/usr/local/optになっていました。

```terminal
$ echo 'export PATH="/usr/local/opt/git/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc
```

こうしてあげれば

```terminal
$ git version 2.25.1
```

はい、gitをbrewの管理下に置きました。お疲れ様でした。
複数ドメインのSSL証明書をLet's Encryptで作る

#まえがき
サービスを作った後、ドメインを購入した場合、
もともとのVPSのURL（例えばさくらのVPSだと`www******.sakura.ne.jp`）と購入したドメインの2つのドメインに対応したSSL証明書を作ると便利です。



#準備
先にHTTPサーバーを停止します。

```bash
# Apacheの場合
sudo systemctl stop httpd.service
# nginxの場合
sudo systemctl stop nginx
```

Let's Encryptをインストールします。

```bash
sudo apt install letsencrypt
```

#証明書作成

```bash
sudo certbot certonly --standalone -d <ドメインA>,<ドメインB> -m <Eメールアドレス> --agree-tos
```

`-d`オプションでは複数ドメインを`,`区切りで複数指定できます。
FlutterでJSONをシリアル化するときにbuild_runnerがファイルを生成しない時

日本語で書かれた記事がないので備忘録として記述しておきます。

`json_annotation`と`json_serializable`のコードジェネレーターライブラリを使ってJSONのデコード（エンコード）を行っている時に出るエラーの対処法

```
[SEVERE] Conflicting outputs were detected and the build is unable to prompt for permission to remove them. These outputs must be removed manually or the build can be run with `--delete-conflicting-outputs`. 
The outputs are: lib/××××/my_api_service.g.dart
lib/××××/api_service.g.dart
lib/××××/test_api_service.g.dart
```
上記の様な「コンフリクトしてて生成できないよ！」と言うエラーがたまに（結構な頻度で）出ますが、書いてある通りに`--delete-conflicting-outputs`のオプションをつけてコマンドを叩けば、一度、`〇〇〇〇.g.dart`を削除して再生成してくれます。

うまくいかない時は一度削除するとすんなり生成されるっぽい。
ファイル自体を物理的に削除しても生成されますが、色々とややこしくなると怖いのでコマンドでやった方が安全だと思います。
コマンドはこちら

```
flutter packages pub run build_runner build --delete-conflicting-outputs
```

## 参考文献
- [Why doesn't build_runner generate files when serializing JSON in dart/flutter
](https://stackoverflow.com/questions/59668548/why-doesnt-build-runner-generate-files-when-serializing-json-in-dart-flutter)
- JSONのデコード（エンコードについてはこちら）→[【Flutter】JSONをデコードする](https://qiita.com/rkowase/items/f397513f2149a41b6dd2)
他言語から乗り換えるPython

Pythonを始めたので、他言語から乗り換える時に躓くポイントなんかをまとめました。
他言語と言っても、C++とかC#とかを想定してます。

#割り算

/ は常に浮動小数点として計算されます。
整数がほしければ//を使います。

```Python
print(5/2) # 2.5
print(5//2) #2
```

#if文
or/and はまんまor/and です。
余談ですが、passとかくとブロック部分を何もなしに出来ます。

```
if a == 0 and b == 0:
   pass
if a == 0 or b == 0:
   pass
```

#三項演算子
すごく馴染みのない書式です。

```Python
int min =  a < b ? a : b; // Cの場合
min = a if a < b else b #Pythonの書き方
```

#for文

##普通のやつ

```Python
for i in range(10):
    print(i)  # 0,1, ... ,9
```

配列

```Python
array = [10, 20, 30, 40, 50]

for value in array:
    print(value)

#indexの値もほしい

for i, value in enumerate(array):
    print(i, value)
```

##連想配列


```Python
dic = {'k1': 100, 'k2' : 200}

#キーの取得
for key in dic:
    print(key)  # k1, k2 

#値の取得
for value in dic.values():
    print(value)  # 100, 200 

#キー、値の同時取得
for key, value in dic.items():
```

#LINQ っぽいやつ

```Python
#LINQで言うSelect

# 100で割ったあまりの配列がほしい
[(p % 100) for p in list]

#LINQで言うWhere

# 偶数だけの配列がほしい
[i for i in list if i % 2 == 0]
```
ReactNativeのエラー「null is not an object ( evaluating 'NativeUnimoduleProxy.viewMnagersNames')」の対処（iOSのみ）

# ReactNativeでtensorflowを動かそうとした時のエラー対処のメモ
ReactNativeでクラス分類のアプリを作りたかったので、tensorflowを[ここ](https://github.com/tensorflow/tfjs/tree/master/tfjs-react-native)のREADME通りにnpmインストールをして、簡単にtensorflowを起動しようとしたが、
`null is not an object ( evaluating 'NativeUnimoduleProxy.viewMnagersNames')`
上記のエラーが発生したので、解決方法をメモしようと思う。iOSのみです。


# 解決方法
react-native-unimodulesのnode moduleに関するエラーで、解決方法は[README](https://github.com/unimodules/react-native-unimodules)のConfigure iOSに書いてある通りに直せば、解決しました。

1. pod fileの修正
2. 再 pod install
3. AppDelegate.h と AppDelegate.mの修正

1は`react-native`のバージョンが0.60以上なら[ここ](https://gist.github.com/brentvatne/d093e440698404803bd9c29d962949b0/revisions#diff-4a25b996826623c4a3a4910f47f10c30)、`react-native`のバージョンが0.59以下なら[ここ](https://gist.github.com/sjchmiela/6c079f2173938a9a61a7c6f053c45000)を参考に修正してください。
2は再インストールしてください。
3はxcodeで2つのファイルを[参考](https://gist.github.com/brentvatne/1ece8c32a3c5c9d0ac3a470460c65603)にして修正してください。
それぞれの2つのファイルをコピペして変更すれば、動くようになると思います。`AppDelegate.m`の`__YOUR_APP_NAME_HERE__`部分には自分のアプリ名を忘れずに入力する必要があります。
Amazon Transcribe で会議の音声ファイルを起こしてみた


## 概要
おっさんになると開発よりも会議に出るのが多いのだが、とある会社の議事録は、議論のポイントを簡略化して、大切なものを書け漏らすことが多い。
音声がそのまま議事録になれば、議論内容も課題や決定事項も漏れることがないのではないか？
と考え、Amazon Transcribeってサービスの可能性を簡単に試してみる。

## 今回、試すのが、Amazon Transcribe 
AWSの概要には、「使用すると、開発者は音声をテキストに変換する機能をアプリケーションに簡単に追加できる」とある。

## 試す！
### テスト用のMP3ファイルを準備。本物の会議の音声ファイルを。
※　16kHz と 8kHz 両方のオーディオストリーム、WAV、MP3、MP4、FLAC を含む複数のオーディオエンコーディングに対応しているとのこと
![スクリーンショット 2020-03-11 15.48.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600761/fb6ad3bb-4642-e45b-ab66-ddd970730579.png)

### S3バケット作成し、MP3を格納
![スクリーンショット 2020-03-11 15.55.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600761/6e8dbb83-bcaf-ea77-ec16-9a5881ed9722.png)

## Transcribe のJobを作成してみる
AWS Transcrbeへ移動
![スクリーンショット 2020-03-11 15.57.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600761/abdf05ea-12e9-729d-f587-77c8c54445cc.png)

[Create Transcription Job]をクリック

![スクリーンショット 2020-03-11 16.56.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600761/a0daa01b-37bb-c113-baad-b6eb66a6c2d8.png)

Jobの設定で、Job名をテスト用に設定し、インプットの言語は、[日本語]を選択。
次にS3より音声ファイルを読み込むので、[s3://bucket-name/mp3ファイル名]を入力。
アウトプットもS3に出力するように選択し、[next]をクリック

![スクリーンショット 2020-03-11 16.05.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600761/18dc0a83-6522-a7fe-c2b1-c38ef06e7c0a.png)

optional画面が出るが、そのまま何もせずに[create]をクリック

![スクリーンショット 2020-03-11 16.09.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600761/e3ef909e-b547-b68c-8000-f4cd33280862.png)

[in progress]と表示されるので待つ。
![スクリーンショット 2020-03-11 16.09.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600761/7b4cb180-c0fc-8b71-af79-d7d4268ed2f7.png)

おっ！Completeになった。

![スクリーンショット 2020-03-11 17.18.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600761/f5386e1d-3879-3906-7a83-de3eaa111d1e.png)

結果を見てみる。

なんとなく言いたい事がわかるところもあります…
参加者の発音が悪いのか、やっぱりよくわからないところもありますね。

`ネットワーク だ よ って 話 に しか ない と 思っ た けど も によって は ま データー フレンチ の レイビー です よ と か です よ と か は ちゃんと 書い て あっ た ん です ね `

元の言葉を音声から探そうと思ったんですが、どこなんだろう？！って感じで見つけられませんでした。

## 結論
さらっと使った範囲ですが、公演用にゆっくり話したりする場合の文字起こしは使えるなって感じです。
話者を認識させたりもできるようなので、今後、もっと試してみて最終、人が議事録とかを造る必要のないことも実現できれば
って感じですね。

面白いサービスなので、もっと色々使ってみたいですね。
渾身の丁寧さで「PHPの変数」を解説する

# 変数
## 目標
```
ルールを守ったわかりやすい変数の名前を付けることができ、それに値を入れて使うことができること
```
## 学習キーワード
```
変数
$（ドル）
エラーメッセージ
```

## 1：変数とは
変数とは、扱うデータを記憶しておくためのものです。
下記のように $(変数名) と書きます。

```
$fruits
```

## 2：変数を使う理由
文字や数字などの値は、それ自体では、読み手に意味が伝わりにくいです。
変数を使うことで、読み手にわかりやすく、自分でも扱いやすくなります。

```php
// 意図がよくわからない
echo 75 / (1.7 * 1.7);
```

```php
// 体重と身長を用いて、 BMIを計算し表示したことがわかる
$weight = 75;
$height = 1.7;
$bmi = $weight / ($height * $height);
echo $bmi;
```

## 3：変数に値を代入する
変数には、文字列や数字などの様々な値を入れることができます。

```php
$king_of_beasts = "lion";
echo $king_of_beasts;
```

```shell
lion
```

```php
$my_age = 32;
echo $my_age;
```

```shell
32
```

## 4：変数の命名ルール
変数に名前をつける際には、いくつかのルールがあります。押さえておきましょう。

### 1. $から始める <br>
変数は必ず$（ドル）から始めます。

```php
$capital_of_japan = "Tokyo";
```

下記のように$を書き忘れるとエラーになります。

```php
capital_of_japan = "Tokyo";
```

```shell
PHP Parse error:  syntax error, unexpected '=' in /workspace/Main.php on line 3
```

#### エラーメッセージの解説

日本語訳すると、「構文エラー：文法エラー、予期せぬ’='が、/workspace/Main.php の 3行目にあります。」です。エラーメッセージが出てしまうのは、=の前の、「capital_of_japan」が変数として認識されないためです。

##### 補足
皆さんのエラーメッセージでは、「/workspace/Main.php on line 3」の部分が違って表示されたかもしれません。この部分は、編集しているファイル名や行数によって異なるので、違っていて問題ありません。


### 2. $のすぐ後ろの数字は不可
$のすぐ後ろには、数字を使用することはできません。

```php
$4fruits = "apple";
```

```shell
PHP Parse error:  syntax error, unexpected '4' (T_LNUMBER), expecting variable (T_VARIABLE) or '{' or '$' in /workspace/Main.php on line 2
```
#### エラーメッセージの解説
日本語訳すると、「PHP解析エラー：構文エラー、予期しない '4'（T_LNUMBER）、変数（T_VARIABLE）または2行目の/workspace/Main.phpの '{'または '$'が必要です」です。エラーメッセージが出てしまうのは、$のすぐ後に数字があることで、変数として認識できないからです。

#### 補足
なお、$のすぐ後ろで無ければ、数字を使うことができます。

```php
$fruits4 = "apple";
```

## 5：あらかじめ定義された変数
変数は、基本的には自分で定義し、値を代入して使います。しかし下記のような、あらかじめ定義された変数も存在します。学習を進めていった際に、また改めて学びましょう。

```
$GLOBALS
$_GET
$_POST
```
お名前.comでとったドメインをさくらのVPSに紐付けるまで

#色々やる前に
お名前.comのメールアドレス確認メールをチェックしましょう
そこにあるリンクを踏まないとメールアドレスが確認され有効化されます
これをしないと買ったドメインが2周間で無効になります（僕もそうなりました）
もしそうなってもメールにあるリンクを踏めば元に戻りますが、
僕は原因がわからなくてパニックになりました。

#ドメイン購入
ここは割愛します
とりあえず購入が完了した状態から始めます

#紐付け
##お名前.comでの設定
ドメインNaviの[「ドメイン設定」タブ](https://www.onamae.com/domain/navi/menu/domain?btn_id=navi_top_domain_menutab_2_)を開きます。
「ネームサーバーの設定」の「ネームサーバーの変更」をクリックします。
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/422638c7-b848-c7cc-5fc1-9dad1255824e.jpeg)

購入したドメインを選択し、
![1.5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/6387adc1-88b9-de8c-b638-dbea2bb55c3d.jpeg)


「他のネームサーバーを利用」タブの、
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/df3d2cff-7fe1-6e4b-9ed3-b2cb560035da.jpeg)
「ネームサーバー情報を入力」に以下のように入力してください。
1プライマリネームサーバー(必須) : ns1.dns.ne.jp
2セカンダリネームサーバー(必須) : ns2.dns.ne.jp
後は空白で大丈夫です。
![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/2724420f-fb19-47ac-f9e6-cd8f1daa50cc.jpeg)

「確認画面へ進む」ボタンを押し、「設定する」ボタンを押してください。
次に、さくらでの設定です。

##さくらでの設定
[会員メニュー](https://secure.sakura.ad.jp/menu/top/)の「契約情報」→「契約ドメインの確認」を押します
![4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/b75815c2-e1dc-0ae4-2e33-126a685c8171.jpeg)

「ドメインメニュー」ボタンを押します
![5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/2f7f44e0-f58e-acc8-3727-04ca22c48827.jpeg)

「ネームサーバー新規登録」を押し、
![6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244946/2ccd94aa-48f0-c678-cd1b-a0104f9efadd.jpeg)

「新しいネームサーバの登録」に購入したドメインを入力します。

#注意
自分で作業が終了しても、すぐに反映されるわけではないです。
僕は1時間位で反映されました。

#言い訳タイム
僕も1日経ってこの記事を書いてるので、間違ったことがあるかもしれません
一応、昨日参考にしたサイトです
https://tekito-style.me/columns/domain-sakura-server
WordPressでblogを作るまで-準備編

#はじめに
フリーランスやるならやっぱりブログやらないとな！と格好つけてwordpressで開設しようっていう記事です。
wordpressは学生時代に3.1を触った以来なのでなんか色々変わってるはず…
ちなみにそのときお世話になった本はこちらでした。
[WordPressデザインブック 3.x対応](https://www.socym.co.jp/book/783)

今はなんとVre.5.3.2！:joy:
過去の情報は使えないかもしれませんが少しずつ勉強しながら記事をまとめていこうと思います。

#1. ローカル環境を作る
XAMPPとかめんどくさいなって思ってたら「Local by Flywheel」というソフトが超便利！
ぽちぽち設定していくだけでローカル環境あっという間なのでデザイナーさんとかにも優しいかも。
詳しくは以下のサイトを参考。
https://bazubu.com/local-by-flywheel-33920.html

作成したサイトはwindowsのサービスのように開始/停止が選べるようになっているので
開始後、[ADMIN]ボタンから管理画面を呼び出しておきます。

#2. ブログの外観の設定
今回はお試しなので無料で探してきました。
…って無料なのに高機能すぎないですかこれ？
[Luxeritas](https://thk.kanzae.net/wp/)

上記サイトからで本体と子テーマをダウンロードし、ダウンロードページ内の「使い方」に従って設定。
テーマをzipのまま読み込むのは変わってないですね。ちょっと安心。

#3. プラグイン設定
ここは後々実行環境に移したときに別途追加検証等が必要な項目なので
追々記事を別で立てたいところですが、一先ず最低限のプラグインは入れておいたのでメモ程度に。

　**1. Akismet Anti-Spam**
　　スパムコメント対策のため必須かと。これも10年前と変わってない…！
　**2. WP Multibyte Patch**
　　日本語対応が不足しているところを補うプラグイン。
　**3. SiteGuard WP Plugin**
　　管理画面のセキュリティ強化プラグイン。

今回SEO対策済みのテーマを無料で導入できたので、SEO系のプラグインは入れてません。
プラグインでSNSアイコン並べたりもできるみたいですけど、
コーディングしたほうがぜったい後々管理しやすいのでいれません(笑)。

#次回
子テーマが十分洗練されているので手を入れるところがあるのか…？というところですが
今回は勉強も兼ねているのでもりもりいじっていこうと思います！
golangでAWSのS3でPre-Signed URLを作成するコード


```go
package main

import (
	"fmt"
	"time"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3"
)

func main() {
    accessKey := "your accessKey"
    privateKey := "your privateKey"
    region := "ap-northeast-1"
    bucketName := "your bucketName"
    fileName := "gazou.png"

	creds := credentials.NewStaticCredentials(accessKey, privateKey, "")
	sess := session.Must(session.NewSession(&aws.Config{
		Credentials: creds,
		Region:      aws.String(region),
	}))
	s3Client := s3.New(sess)

	req, _ := s3Client.PutObjectRequest(&s3.PutObjectInput{
		Bucket: aws.String(bucketName),
		Key:    aws.String("/test/" + fileName),
	})
	u, err := req.Presign(3 * time.Minute) // 有効期限3分
	if err != nil {
		fmt.Println("error presigning request", err)
		return
	}
	fmt.Println(u)
}
```

出来上がったURLは、postmanとかのGUIクライアント使うとリクエストしやすいです。

[postman download](https://www.postman.com/product/api-client)

また、下記でcurlできます。file部分がWindowsパス名なので、MacとかLinuxユーザは適宜変えてください。

```bash
curl --location --request PUT 'Created Pre-SignedURL' \
--header 'Content-Type: image/png' \
--data-binary '@/C:/test.png'
```
Laravel-ElixirのBrowserifyでSourceMapがなんか変

いにしえのソースをメンテすることになったので

こんな古い情報必要なさそうと思いつつも備忘を兼ねて

- gulp 3.9.1
- laravel-elixir 6.0.0-18
- laravel-elixir-browserify-official 0.1.3
- laravel-elixir-vueify 1.0.6

# SourceMapが変

gulpでタスク実行するとSourceMapは出力されるものの、どうも中身が圧縮ファイルと同一で、ブラウザの開発者ツールで追うのが苦痛

だいたいこんな感じ

```js:gulpfile.js
var elixir = require('laravel-elixir');

require('laravel-elixir-browserify-official');
require('laravel-elixir-vueify');

elixir(function(mix) {
    mix.browserify('app.js');
    mix.sass('app.scss').version("public/css");
});
```

# 回避方法

```js
elixir.config.js.browserify.options.debug = true;
```

を追加

あとブラウザの開発者ツールから適宜ファイルをマッピング

# それにしても

ソース必死に読みまくって答えに行き着いたものの、答えで検索すると普通に数件ヒットするのは勘弁して欲しい
検索キーワードのチョイスがそこまで悪かったんだろうか
Pythonで毎日AtCoder #2

### はじめに
[前回](https://qiita.com/taxfree_python/items/aa31ec4933491b67c15b)
二日目です。

### #2
[問題](https://atcoder.jp/contests/arc023/tasks/arc023_1)

**考えたこと**
問題の公式どおりに実装しました。
注意する点は、1、2月は前年の13、14月として計算する点です。
また、ガウス記号はPythonでmath.floor関数を使って実装できます。
(追記)math.floor使わなくても、//でできるので変更しました。

```python

#import math #floor関数を使う
y = int(input())
m = int(input())
d = int(input())

seed = 735369
def cal(y,m,d):
    return 365 * y + y//4 - y//100 + y//400 + 306*(m+1)//10 + d - 429
    #return 365 * y + math.floor(y/4) - math.floor(y/100) + math.floor(y/400) + math.floor(306*(m+1)/10) + d - 429
if m <= 2:
    y -= 1
    m += 12
    ans = cal(y,m,d)
    print(seed - ans)
else:
    ans = cal(y,m,d)
    print(seed - ans)
```


### まとめ
昔の問題は今の問題と傾向が違うので、解くのが楽しい。では次回へ
Railsで作ったアプリをAWSでデプロイ⑤　〜MySQL作成〜


前回までにRuby等パッケージをインストールしました

Railsで作ったアプリをAWSでデプロイ④　〜EC2インスタンスの環境構築〜
https://qiita.com/shunsuke284052/items/af6957d575179bf5b11a
Railsで作ったアプリをAWSでデプロイ③　〜Elastic IP,ポート開放,EC2インスタンスログイン〜
https://qiita.com/shunsuke284052/items/fee7caf4a2ecbb49a7c7
Railsで作ったアプリをAWSでデプロイ②　〜EC2インスタンス〜
https://qiita.com/shunsuke284052/items/6de92b0f832d6240f0bb
Railsで作ったアプリをAWSでデプロイ①　〜アカウント作成編〜
https://qiita.com/shunsuke284052/items/39bf73d1996251083c72

MySQLをダウンロードします

```terminal:EC2インスタンス
sudo yum -y install mysql56-server mysql56-devel mysql56

```
MySQLを起動します

```terminal:EC2インスタンス
sudo service mysqld start
```

MySQLのパスワードが未設定なので設定します

```terminal:EC2インスタンス
sudo /usr/libexec/mysql56/mysqladmin -u root password 'ここを設定したいパスワードに変更してからコマンドを実行してください'
```
実行すると

```terminal
Warning: Using a password on the command line interface can be insecure.
```
とでますがちゃんとできています

ログインされているか確認します

```terminal:EC2インスタンス
mysql -u root -p
```

パスワードを求められますので先ほど設定したパスワードを入力して問題なければ大丈夫です
GinのBindJSONでデータが取れない問題

# 結論
BindJSONしようとしているstructのfield(?)はpublicにしておかなければならないようです。
struct宣言とリクエストハンドラ宣言が同じpackage内だったとしても！

```go
type User struct {
//	name    string	-> ダメ
	Name    string
}

// Post POST method
func Post(ctx *gin.Context) {
	var user User
	ctx.BindJSON(&user)
	fmt.Println("name:", user.Name)
}

```

# 考察

もしかしたらstructがBindJSON()に渡されるとき、fieldがpublicじゃないとgin側から見えないのかな(??)
みたいな？

# あとがき

この問題について、参考に貼ったissueくらいで、日本語のものが見つからなかったので書きました。
くだらない記事ですが、初心者同志の手助けになれば幸いです。

# 参考
[解決のきっかけとなったissue](https://github.com/gin-gonic/gin/issues/424)
javascript「Uncaught TypeError: 〜〜 is not a function」エラー解決時、意外な敵の暗躍に苦しんだ話

ミナミ([@minami_nakasato](https://twitter.com/MinamiNakasato))です。

エラーに苦しんだので記録します。

# エラー内容

アプリ開発中、「hoge.js」ファイルを用意し、その中で関数を定義。

そして「application.js」で読み込む。

しかし、関数が動かないエラーが発生。

javascriptのエラーとしてはポピュラーな

***<font color="red">「Uncaught TypeError: オブジェクト.メソッド名 is not a function」</font>***

***<font color="red">「Uncaught TypeError: Cannot read property ‘プロパティ名’ of undefined」</font>***

の登場だ。

# step１

「hoge.js」ファイル内に

```javascript
console.log("fuga");
```

を記述し、chrome検証ツールの**console**タブで確認。

ちゃんと「fuga」が表示されている。

という事はjsファイル自体は読み込まれている。

該当の関数だけが読み込まれない状況のようだ。

# step２

引き続き、検証ツールで

**Sourcesタブ**　→　**Pageタブ**

をクリック。

読み込まれているファイルの一覧が表示されるので、問題のjsファイルAを確認。

すると、

**ファイル名はA**なのに、読み込まれた時点では中身のコードが全く関係ない**ファイルBの内容**になっている。

そのため適切な関数が読み込まれずに今回のエラーになった。

**<font color="blue">「パッケージは日清カップヌードルなのに、中身はぺヤングカップ焼きそばでビックリ」**</font>

という状態だ。

こんなエラー初めて見た。

# step3

日清カップヌードルの中身を追い出しコッソリ侵入した強盗ぺヤングこと「ファイルB」で検索をかけてみた。

```
$ git grep [ファイルB]
```

当然、該当のファイルはヒットした。

しかしエラーの原因を突き止める手がかりは無し。

# step4

「プレーンなgrepコマンドを使って、git管理下にないファイルも検索してみよう」

```
$ grep -r [ファイルB]
```

「-r」オプションで再帰的に処理。

すると

「**<font color="red">tmp</font>**/cache/assets/sprockets/v3.0/~hoge~<font color="red">**.cache**</font>」

なるファイルがヒット。こいつの仕業か。。?

# step5

不要なログファイル、一時ファイルは削除するに限る
(汚物は消毒だ！)

以下のコマンドを実行した。

```ruby
rails cache:clear
```

それから

```ruby
rails tmp:clear
```

も実行。

すると無事に解決！

ファイル名も中身もAの内容が反映され、無事にjsの関数を動かす事ができました。

*※ブラウザのキャッシュクリアも試す価値あり。*
*chromeであれば*

*設定 > プライバシーとセキュリティ > 閲覧履歴データの削除 > キャッシュされた画像とファイル　（他はチェックしない）*

*※また、シークレットモードではうまく動作しないかも確認する*

# 教訓
①検索時に「git grep」だけやるクセがあったが、git管理下にないファイルがエラーの原因になることもあるので、「grep」での検索も怠らない

②tmpファイルがエラーの温床になる例があると分かった。
今後は定期的に削除する。意味不明なエラー発生時は、それらに原因がないか疑う。

======================================
ミナミ([@minami_nakasato](https://twitter.com/MinamiNakasato))です。都内のベンチャー企業でwebデザイン／プログラミング／動画撮影や編集などをやっています。
【Laravel】Herokuでベーシック認証をかける

# 環境
- Laravel Framework 6.14.0

# 結論
アプリケーションに`.htaccessファイル`と`.htpasswdファイル`を含めてgit pushします。
.htaccessファイルについては既に存在しているため、ベーシック認証の設定を追記します。
.htpasswdのパスですが、Herokuではアプリケーションディレクトリが/appとなるため、アプリケーション直下にファイルを作った場合、`/app/.htpasswd`で参照できます。

```apache:/public/.htaccess

AuthUserFile /app/.htpasswd
AuthType Basic
AuthName "Restricted Access"
Require valid-user

略
```

```apache:/.htpasswd

# test:test
test:NcOjoYwcay98.
```

# ルートディレクトリの根拠
```shell

$ heroku run bash
~ $ pwd
/app
~ $ ls
Procfile   artisan	  composer.lock  package.json  resources   storage  webpack.mix.js
README.md  bootstrap	  config	 phpunit.xml   routes	   tests
app	   composer.json  database	 public        server.php  vendor
```

# 関連記事
【Laravel】HerokuでHTTPSを強制しつつベーシック認証をかける
https://qiita.com/hiro-chika/items/004eecf6f2ebae94e709
TCP/IP

##プロトコル群

####HTTP　
*Hypertext Transfer Protocol*
ブラウザとWebサーバー間でのデータ通信のことです。
ブラウザからWebサーバーにリクエストを投げ、Webサーバーから返ってきたレスポンスを表示します。
ホームページの閲覧などが挙げられます。

####SSL/TLS
*Secure Sockets Layer/Transport Layer Security*
送受信するデータを暗号化する通信プロトコルです。
データの盗聴・改ざん・なりすましを防ぎます。
httpsから始まるホームページはSSL化されています。

####POP3/SMTP
*Post Office Protocol/Simple Mail Transfer Protocol*
POP3はメール受信用プロトコル。
SMTPはメール送信用プロトコルです。

####FTP
*File Transfer Protocol*
ファイル転送を行うための通信プロトコルです。
ファイルをWebサーバーにアップロードしたり、ダウンロードすることができます。

####SMB
*Server Message Block*
LAN上のWindowsコンピュータ間ファイル共有やプリンタ共有などを行うためのプロトコルです。

####DHCP
*Dynamic Host Configuration Protocol*
ネットワークに一時的に接続するコンピュータに、IPアドレスなど必要な情報を自動的に割り当てるプロトコルです。

####NTP
*Network Time Protocol*
ネットワークに接続された機器の時計を正しい時刻へ同期するための通信プロトコルです。

####TCP/UDP
*Transmission Control Protocol/User Datagram Protocol*
インターネットにて標準的に利用されている通信プロトコルです。
TCPではデータが届いたことを確認し、もし届いていなかったら送り直す安全重視な方式で、UDPは届いたことは確認せず次々データを送る速度重視な方式です。


####IP
*Internet Protocol*
インターネットで通信相手を特定するための「IPアドレス」に基づいて、パケットを宛先ネットワークやホストまで届けるためのプロトコル。

####IPsec
*Security Architecture for Internet Protocol*
インターネットなどのTCP/IPネットワークで暗号通信を行うための通信プロトコルです。
仮想プライベートネットワーク（VPN）の通信プロトコルなどとして採用されています。

####Ethernet
主に室内や建物内でコンピュータや電子機器をケーブルで繋いで通信する有線LAN（構内ネットワーク）の標準の一つで、最も普及している規格です。

####PPPoE
*Point-to-Point Protocol over Ethernet*
PPPの機能をEthernet上で利用するためのプロトコルです。
家庭内LANに接続されたパソコンやルータ（ブロードバンドルータ）などの機器と、インターネットサービスプロバイダ（ISP）の施設に設置された通信機器の間で接続を確立する手段としてよく利用されるています。

##プロトコル階層
####1.アプリケーション層
アプリケーション間のやり取り
該当プロトコル：HTTP、POP3、SMTP、FTP、DHCB


####2.トランスポート層
プログラム間の通信、通信の制御
該当プロトコル：TCP、UDP

####3.インターネット層
ネットワークでの通信
該当プロトコル：IP

####4.ネットワークインターフェース層
同一ネットワーク上での通信、ハードウェア仕様など
該当プロトコル：Ethernet、PPP
Tips: Ansibleのtask name:に時刻を入れる


# Ansibleのtask実行時刻をログに残す方法例

## 例1: task name:に時刻を入れる

```yaml:tasks
- name: '{{ lookup(''pipe'', ''date "+%Y/%m/%d %H:%M:%S"'') }}  debug: { msg: hello world! }'
  debug:
     msg: hello world!

```

```:output
TASK [2020/03/11 15:43:39  debug: { msg: hello world! }] ***************************
ok: [localhost] => {
    "msg": "hello world!"
}
```


- 出力がコンパクトで済ませれられる
- ansible コントローラーにおける日時
- フォーマットは自由
- ansible-playbookコマンドの\--start-at-taskオプションが実質使用できない

## 例2: ansible.cfgにてcallbackプラグインとしてprofile_tasksを指定する

```ini:ansible.cfg
[defaults]
callback_whitelist = profile_tasks
```

```yaml:tasks
- name: 'debug: { msg: hello world! }'
  debug:
    msg: hello world!
```

```:output
...
TASK [debug: { msg: hello world! }] ***********************************************
Wednesday 11 March 2020  16:19:40 +0900 (0:00:00.054)       0:00:00.054 ******* 
ok: [localhost] => {
    "msg": "hello world!"
}
...
Wednesday 11 March 2020  16:19:40 +0900 (0:00:00.033)       0:00:00.087 ******* 
=============================================================================== 
debug: { msg: hello world! } ----------------------------------------------- 0.03s
```

- 設定は容易
- フォーマットが弄れない為、sortなどの加工は困難
- 参照
    - https://docs.ansible.com/ansible/latest/plugins/callback.html
    - https://docs.ansible.com/ansible/latest/plugins/callback/profile_tasks.html


## 例3 debugモジュールで出力

```yaml:tasks
  - debug:
      msg: '{{ lookup(''pipe'', ''date "+%Y/%m/%d %H:%M:%S"'') }}'
```

```:output
TASK [debug] **********************************************************************
ok: [localhost] => {
    "msg": "2020/03/11 16:33:36"
}
```

- オーソドックス
- ansible コントローラーにおける日時
- フォーマットは自由
- 出力がコンパクトでは無い
Terraform エラー "Error creating IAM Role ecs_task_execution: MalformedPolicyDocument: JSON strings must not have leading spaces" 対処法


上記を直訳すると「JSON文字列の先頭にスペースを含めることはできません。」
とのことです。

<<EOFの次の行はエディターを左詰めで書くようにしてください。

```
resource "aws_iam_role" "operation_iam_role" {
  name = "iam_role"

// ここに権限を委譲するポリシーを書く
  assume_role_policy = <<EOF
{ //ここから左詰め（途中のインデントはオッケー）
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
            "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
} 
EOF
}
```
何も知らずにテンプレートをインデントしてしまっていましたが、解決してよかったです。
業務で使用するGitHubコマンド一覧

どうもSATO論外です。
毎回忘れてしまうことが多いのでGitHubを使用するにあたって
業務で実際に使用しそうなコマンド集を備忘録としてまとめてみました。
あくまで一覧表なので細かい説明はありませんが。。。
他にもあれば随時追加していきます。

#基本操作
####Gitリポジトリを新たに作成（git init）
```
git init
```
####ファイルの作成/変更/削除をgitのインデックスに追加する（git add）
```
git add <ファイル名>
```
####変更結果をローカルリポジトリにコミットする（git commit）
```
git commit -m “<コミットコメント>”
```
`オプション：-m`　コメントを入れる
`オプション：-A`　git管理内の変更、新規追加、削除したファイルすべてをaddする
####ワーキング・ツリーの状態を表示(git status)
```
git status
```
####指定した名前にリモートリポジトリのアドレスを関連付ける(git remote add)
```
git remote add <名前> <URL>

例：git remote add origin <URL>
```
####ローカルリポジトリからリモートリポジトリに変更を反映（プッシュ）させる(git push)
※リモートリポジトリのアドレスの関連付けで名前をoriginとして登録したと仮定

```
git push origin <ブランチ名>

例：git push origin master
```
`オプション：-u`　追跡オプション(対象のブランチをリモートリポジトリに追跡させる)
※次回からgit pushのみの指定でOKになる

####Gitでファイル名・フォルダ名を変更する(git mv)
```
git mv <変更対象のファイル名orフォルダ名> <変更後のファイル名orフォルダ名>
```
####前回のステージングから変更の差分表示(git mv)
```
git diff
```
`オプション：`　ファイル名の指定も可
####ローカルリポジトリのコミット履歴を閲覧(git log)
```
git log
```
`オプション-n <表示したい件数>：`　件数を指定して表示
####ローカルの変更を破棄する(git checkout)
```
個別の指定
git checkout <ファイル名>

全て戻す
git checkout .
```
####ローカルリポジトリのコミットを取り消す(git reset)
```
git reset –soft HEAD^
```
※上記は直前の修正の取り消し
詳しい説明については以下を参照
[[git reset (--hard/--soft)]ワーキングツリー、インデックス、HEADを使いこなす方法](https://qiita.com/shuntaro_tamura/items/db1aef9cf9d78db50ffe)

#リモートリポジトリとの共有
####リモートリポジトリの取り込み(git clone)
```
git clone <URL>
```

####リモートリポジトリからローカルリポジトリを取得する(git fetch)
```
git fetch
```
詳しい説明については以下を参照
[共同開発の第一歩!git fetchを正しく理解しよう!](https://www.sejuku.net/blog/71164)


####リモートリポジトリからローカルリポジトリを更新する(git pull)
内部的に`fetch` + `merge`を行ってくれるコマンド

```
git pull origin <ブランチ名>
```
#ブランチ
####ブランチ一覧の確認(git branch)
```
git branch
```
####ブランチの作成(git branch)
```
git branch <ブランチ名>
```
####ブランチの削除(git checkout)
```
git branch -d <ブランチ名>
```
####ブランチの切り替え(git checkout)
```
git checkout <ブランチ名>
```
`オプション：-b`　ブランチの作成と作成したブランチへの切り替え

####ブランチの切り替え(git checkout)
```
git checkout <ブランチ名>
```
`オプション：-b`　ブランチの作成と作成したブランチへの切り替え
####現在のブランチに他のブランチから反映(git checkout)
```
git merge <ブランチ名>
```
最後リモートへの反映はpushすること

#前のバージョンに戻す場合の参考ページ
[Gitで過去のバージョンに戻る方法～Git Bashから～](https://qiita.com/ijm/items/8cec0a5653b5e53f7f60)

#参考にしたサイトとGitHubの基本的な考え方のサイト
[サルでもわかるGit入門](https://backlog.com/ja/git-tutorial/)
[Gitコマンドを使った業務フローを大公開！](https://www.granfairs.com/blog/staff/workflow-with-git)
[今さら聞けない！GitHubの使い方【超初心者向け】](https://techacademy.jp/magazine/6235)
[Chrome] ドロップダウンリストを開いたままにして Chrome のデベロッパツールで要素の検証をしたい

# 問題

[React Select](https://react-select.com/home) というライブラリがある。このライブラリが提供するドロップダウンリストは、リストの外部をクリックすると自動的に閉じる仕組みになっている。そのため、リストの要素を検証したくてもできないというもどかしい事態に陥ってしまう。今回はこの問題を解決したい。他のドロップダウンリストのライブラリにも応用できるはず。

<img width="1366" alt="スクリーンショット_2020-03-11_16_33_25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/6587b28c-2efa-881e-daa3-ec858e993c6e.png">

<img width="1366" alt="スクリーンショット_2020-03-11_16_33_41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/677ab617-75e7-982a-a9fa-55da71b03337.png">

# 解決策 1 (追記)

@takeyuichi さんがもっと気軽な方法を教えてくださりました。感謝！

方法はシンプルで、デベロッパツールの console で次のコマンドを実行し、特定の秒数 (この例なら 3 秒) の間にドロップダウンリストを開く操作をするだけ。この方法なら hover 時にしか表示されない要素を検証したいときなど他の場面にも応用が効く。

```js
setTimeout(() => { debugger }, 3000)
```

# 解決策 2 (もともと紹介していた方法)

ドロップダウンリストの外側の要素を選択する。

<img width="1375" alt="スクリーンショット_2020-03-11_16_34_03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/3fb39edc-40fa-0700-2bae-f047d599737b.png">

右クリックし、Break on » subtree modification を選択する。

<img width="1368" alt="スクリーンショット_2020-03-11_16_34_25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/09859349-919f-20ef-4719-73c6a314b3e4.png">

この状態でドロップダウンリストを開こうとするとデバッガが起動する。再開ボタンをクリックして一旦進める。

<img width="1368" alt="スクリーンショット_2020-03-11_16_35_15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/4872e362-e3ae-3d8a-fc3f-34e8b3608c7a.png">

ドロップダウンリストが開く。この状態でリストの外部をクリックするとリストが閉じる前にデバッガが起動する。リストは開いたままなので要素を検証し放題だ 🎉

<img width="1375" alt="スクリーンショット 2020-03-11 16.36.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/260f3efd-e55f-a558-3003-58fb3fb4ce24.png">
[Homestead]ホストマシンのDBクライアントから仮想マシンのDBへのアクセスする時の注意点(Git Bash,PS Sequel, Sequel Pro)

ホストマシンのデータベースクライアント(Git Bash,PS Sequel, Sequel Pro)から仮想マシンのDBにアクセスする際、
ポート番号を3306(MySQL)か、5432(PostgreSQL)にしてもそれぞれのDBサーバーに接続することはできません。

これはホストマシンから仮想マシンに接続する際のポートフォワードにより、ポート番号の変換が行われてしまうためです。

#結論
以下の通りポート番号を指定してあげる。
33060(MySQL)
54320(PostgreSQL)

このように設定することにより、仮想マシンで正しいポート変換が行われるようになる。

(MySQLの場合の図解)
<img width="946" alt="スクリーンショット 2020-03-11 16.58.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382190/175edac0-8b3c-b4fc-ff81-bf4acec82ebf.png">
Railsで作ったアプリをAWSでデプロイ④　〜EC2インスタンスの環境構築〜

前回までにEC2インスタンスを作成しました

Railsで作ったアプリをAWSでデプロイ①　〜アカウント作成編〜
https://qiita.com/shunsuke284052/items/39bf73d1996251083c72
Railsで作ったアプリをAWSでデプロイ②　〜EC2インスタンス〜
https://qiita.com/shunsuke284052/items/6de92b0f832d6240f0bb
Railsで作ったアプリをAWSでデプロイ③　〜Elastic IP,ポート開放,EC2インスタンスログイン〜
https://qiita.com/shunsuke284052/items/fee7caf4a2ecbb49a7c7

今回は環境構築をしていきます
まずEC2インスタンスにログインしてください

次に下記コマンドを実行します

```terminal:EC2インスタンス
[ec2-user@ip-123-12-12-123 ~]$ sudo yum -y update
[ec2-user@ip-123-12-12-123 ~]$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl

```

これで必要なパッケージ等をインストールしました
yumコマンドでyum管理下のパッケージ等をインストールできます
またオプション-yで質問に対して全てyesと自動的に返事してくれます

次にJavaScriptがサーバーで動くようにします

```terminal:EC2インスタンス
[ec2-user@ip-123-12-12-123 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash -
[ec2-user@ip-123-12-12-123 ~]$ sudo yum -y install nodejs

```

rbenvとrubyをインストールします

```terminal:EC2インスタンス
[ec2-user@ip-1２３-12-12-123 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 
[ec2-user@ip-1２３-12-12-123 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile 
[ec2-user@ip-1２３-12-12-123 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
[ec2-user@ip-1２３-12-12-123 ~]$ source .bash_profile
[ec2-user@ip-1２３-12-12-123 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
[ec2-user@ip-1２３-12-12-123 ~]$ rbenv rehash
```

```terminal:EC2インスタンス
[ec2-user@ip-172-31-25-189 ~]$ rbenv install 2.5.1
[ec2-user@ip-172-31-25-189 ~]$ rbenv global 2.5.1
[ec2-user@ip-172-31-25-189 ~]$ rbenv rehash  #rehashを行う
[ec2-user@ip-172-31-25-189 ~]$ ruby -v # バージョンを確認
```