OmniAICreator/Qiita-1.07M huggingface dataset:
ゼロから始めるLeetCode Day18 「53. Maximum Subarray」

#概要
海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。

その対策としてLeetCodeなるサイトで対策を行うようだ。

早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイト。

せっかくだし人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。

[Leetcode](https://leetcode.com/)

[ゼロから始めるLeetCode 目次](https://qiita.com/KueharX/items/6ee2502c3b620c795b70)

前回
[ゼロから始めるLeetCode Day17「169. Majority Element」](https://qiita.com/KueharX/items/fac33d3e067cccfed148)

基本的にeasyのacceptanceが高い順から解いていこうかと思います。


# 問題
[53. Maximum Subarray](https://leetcode.com/problems/maximum-subarray/)

難易度はeasy。
Top 100 Liked Questionsの一つです。

整数のみの配列`nums`が与えられます。
その配列から少なくとも1つの数値を含むような合計値が最大値となるようなサブ配列を見つけ、その合計を返す、という問題です。

>Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6

例えば、`nums[3]`から`nums[6]`の連続した要素をすべて足すと、4+(-1)+2+1=6となり、配列の中で最大値になるため、このような計算となります。

# 解法
動的計画法についてはズブの素人ですが、偶然読んでいた
[データ構造とアルゴリズム (新・情報 通信システム工学) (日本語) ](https://www.amazon.co.jp/%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0%E3%81%A8%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-%E6%96%B0%E3%83%BB%E6%83%85%E5%A0%B1-%E9%80%9A%E4%BF%A1%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%B7%A5%E5%AD%A6-%E4%BA%94%E5%8D%81%E5%B5%90-%E5%81%A5%E5%A4%AB/dp/4901683497)と
[典型的な DP (動的計画法) のパターンを整理 Part 1 ～ ナップサック DP 編 ～](https://qiita.com/drken/items/a5e6fe22863b7992efdb#3-%E9%83%A8%E5%88%86%E5%92%8C%E5%95%8F%E9%A1%8C%E3%81%A8%E3%81%9D%E3%81%AE%E5%BF%9C%E7%94%A8%E3%81%9F%E3%81%A1)
であっ、こうしたら解けそうじゃない！？と思ったので参考にしながら考えてみました。

まず、最大値`max_num`と一時的な変数`temp`を用意します。
配列の要素を最初から舐めるように代入していき、仮に`temp`が0以上であれば`max_num`と`temp`と比較し、大きい方が`max_num`に代入され、そうでなければ`temp`に0を代入されます。このような流れを書いてみると以下のようになります。

```Python
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        temp = 0
        max_num = max(nums)
        for i in range(len(nums)):
            temp += nums[i]
            if temp >= 0:
                max_num = max(max_num,temp)
            else:
                temp = 0
        return max_num
# Runtime: 60 ms, faster than 93.50% of Python3 online submissions for Maximum Subarray.
# Memory Usage: 14.5 MB, less than 5.69% of Python3 online submissions for Maximum Subarray.
```

動的計画法ってとっつきにくいイメージがあったのであまり読み込んでいなかったのですが、書いてみたらメモリが効率化できて速くなるっぽいのでしっかりと勉強しなおした方が良さそうですね。

良さげな回答があれば追記します。
見やすいウェブコンテンツのためのコントラスト確認ツールを作った

## 動機
ウェブコンテンツのパフォーマンス測定をLighthouseで行うと「Accessibility」の項目がある。

![診断結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567173/2f5ac4db-401f-3f64-8094-4c3c4edcf67e.png)

頻繁に注意される項目が「Contrast」。これは背景と文字の色のコントラストが低すぎて見にくいことを言及されている。

何をもって見やすい・見やすくないコントラストと判断しているのか？

その答えは、W3Cが定めたWebアクセシビリティの基準(WCAG2.1)に適合しているかどうかだ。

[WCAG2.1](https://waic.jp/docs/WCAG21/)によれば

> 1.4.3 コントラスト (最低限) : テキスト及び文字画像の視覚的提示に、少なくとも 4.5:1 のコントラスト比がある。ただし、次の場合は除く: (レベル AA)
大きな文字: サイズの大きなテキスト及びサイズの大きな文字画像に、少なくとも 3:1 のコントラスト比がある。
...

> 1.4.6 コントラスト (高度) : テキスト及び文字画像の視覚的提示には、少なくとも 7:1 のコントラスト比がある。ただし、次の場合は除く: (レベル AAA)
大きな文字: サイズの大きなテキスト及びサイズの大きな文字画像には、少なくとも 4.5:1 のコントラスト比がある。
...

とのことである。
なるほど、ではコントラスト比を求めてみよう。

ということで、コントラスト確認ツールを探してみるといろいろ見つかるが、カラーコードがHEXにしか対応していないなど今一つなものが多かった。

## コントラスト確認ツールを作った
実際に作ったものがこちらの[コントラストチェッカー](https://my-tools-9df7d.web.app/contrast-check)。
![contrast-checker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567173/ef727ec9-6232-d3e2-74fb-11d9ee2e5f55.png)


### カラーコードはHEX, RGB(A)、HSL(A)、キーワードに対応

色を探すときに色相を固定して彩度や輝度を調整する方法が私にはしっくりきているので対応させた。

### 入力した形式以外のカラーコードも表示

デザインサイトなどでHEXしか提供されていない場合も、とりあえず入力欄にコピペすればRGBやHSL形式の値が手に入るようにした。

これでわざわざ形式変換サイトを訪れなくて良くなる。

### 長めのサンプル文章でみやすさを確認可能

コントラスト確認ツールにはサンプル文章が用意されているが、文章が短い気がする。

本ツールではWCAGの説明を含めた長いサンプルを用意した。

## おわりに
取り急ぎ作ったので、こういう機能もつけてほしいなどの要望があったらコメントにてお知らせください。
JQueryのクマっ対策備忘録


##コンソールログをどうにかしたい
Javascriptのデバッグでconsole.logは強力な主力武器ですが、本番環境でたまたま残ってしまっていたコンソールログが動くのは避けたいところ。
そこでとったのが、コンソールログのメソッドを無名関数で代入して上書きするという最終手段。
logメソッド自体を無くしてしまうと、今度はエラーが出るようになってしまうのでメソッドは残す必要があります。

    <script type="text/javascript">
        console.log = function () {}
    </script>

##スタイルのないクラスを作っても動く
グルーピングして一部だけ一括取得できるようにしたい、みたいなときにスタイルのないクラスを付与して、そのクラス名でJQueryにて要素を取得できます。
下記の例ではテーブルの特定の列にclickイベント設定をしています。

    <script type="text/javascript">
        $(".sortable").on('click', function (e) {
            /* ...中略... */
        });
    </script>
    
    <!-- ...中略... -->
    
    <th class="sortable" data-column="columnA">カラム１</th>
    <th>カラム２</th>
    <th class="sortable" data-column="columnB">カラム３</th>

##独自のカスタムイベントが動かない
Ajaxで動的に要素を書きだした場合などによくみます。
最初にクラス指定をして一括で要素に独自のカスタムイベントを登録していても、Javascriptで後からそのクラス名を持った要素を追加すると、その要素ではカスタムイベントが動きません。
追加した要素にイベントをつけてあげる必要があります。
再度クラス全体に再登録をすると既存の要素に多重登録されるため、一旦カスタムイベントを破棄して付け直すとうまく動きます。
同じロジックを方々にちりばめるとカオス旋風が巻き起こりますので、外部切り出しておくとよいかもしれません。

    <script type="text/javascript">
        function defSortEvents () {
            $(".sortable").off('click').on('click', function () {
                /* ...中略... */
            });
        }
        $(function(){
            defSortEvents ();
            /* ...中略... */
            $("#table").append("<th class="sortable" data-column="columnC">カラム４</th>");
            //このままだとカラム４でソートイベントが起きないので再設定をする
            defSortEvents ();
        });
    </script>

##イベントをグループ分けしたい
イベント名の名前空間という仕様を使うといいかんじです。

    <script type="text/javascript">
        $(function(){
            $(".alert").off('click.alert').on('click.alert', function () {
                alert("実はリンクなんです");
            });
            $(".link").off('click.link').on('click.link', function () {
                location.href = $(this).data("url");
            });
        });
    </script>
    
    <!-- ...中略... -->
    
    <span data-url="/sample/method/" class="alert link">実はリンク機能があるSPANタグ</span>
【CSS】要素内の文字を全選択する

CSSの `user-select: all` を利用すればワンクリックするだけで要素内の文字を全選択できます。
ユーザに文字をコピーさせたい時に便利です。

# 実装(CSS)

```css
p {
    user-select: all;
}
```

これでpタグ内の文字がどれだけ長かろうとも全選択できます。

# 実装(HTML)

```html
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
```

# 補足
逆に `user-select: none` を利用すれば要素内の文字が一切、選択できなくなります。

# 参考
[MDN](https://developer.mozilla.org/ja/docs/Web/CSS/user-select)
naru: インデックス

このエントリは [naru](https://github.com/unvt/naru) の解説シリーズへのインデックスです。

まだシリーズは書きかけです。書き足すたびに、このエントリにリンクを書き足していくことにします。

# 日本語シリーズ
- [OSM ベクトルタイルを LDC, LLDC, SIDS とともに](https://qiita.com/hfu/items/fd0a6716d75e03eb16cc)
- [naru Pt. 1: 最初の導入とコードの全体像](https://qiita.com/hfu/items/2d9d6288f7b8bf7bb217)
- [naru Pt. 2: inet:download (OSM データダウンロード)](https://qiita.com/hfu/items/13fe74140ad9970e2a2d)
- naru Pt. 3: tiles (ベクトルタイル生産)
- naru Pt. 4: style (スタイルファイルのコンパイル)
- naru Pt. 5: host (サイトのホスト)

# 英語シリーズ
- [OSM Vector Tiles together with LDC, LLDC, and SIDS](https://dev.to/hfu/osm-vector-tiles-together-with-ldc-lldc-and-sids-3lnf)
- naru Pt. 1: Installation and material overview
- naru Pt. 2: inet:download (downloading OSM data)
- naru Pt. 3: tiles (producing vector tiles)
- naru Pt. 4: style (compiling a style file)
- naru Pt. 5: host (hosting a web site)
初心者によるプログラミング学習ログ 308日目

#100日チャレンジの308日目
twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。
100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。
308日目は、
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">おはようございます<br>308日目　8～10h<br>・自作ポートフォリオ書き直し　7ｈ<br>・架空LP模写 3日目3h（<a href="https://twitter.com/ririru_123?ref_src=twsrc%5Etfw">@ririru_123</a>）<br>・ヘッダー、ハンバーガーメニュー作成<a href="https://twitter.com/hashtag/%E6%97%A9%E8%B5%B7%E3%81%8D%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8?src=hash&amp;ref_src=twsrc%5Etfw">#早起きチャレンジ</a><a href="https://twitter.com/hashtag/%E9%A7%86%E3%81%91%E5%87%BA%E3%81%97%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%A8%E7%B9%8B%E3%81%8C%E3%82%8A%E3%81%9F%E3%81%84?src=hash&amp;ref_src=twsrc%5Etfw">#駆け出しエンジニアと繋がりたい</a><a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;ref_src=twsrc%5Etfw">#100DaysOfCode</a></p>&mdash; ぱぺまぺ@webエンジニアを目指したい社畜 (@yudapinokio) <a href="https://twitter.com/yudapinokio/status/1258127321682206720?ref_src=twsrc%5Etfw">May 6, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Ubuntu 20.04 LTS 備忘録

長くなるのでキーワードだけ。
何が起きたか
・Windowsが入っているNVMeSSDの方にGrubが入ってしまう
インストール時には他のドライブを抜くことが一番ではあるが....
GpartedでEFI内のubuntuフォルダを、ubuntuが入っているドライブのEFIパーティションに移動。
その後windows側で管理者権限でbcdedit使ってubuntuのエントリーポイント削除でOK。
EFIパーティションはフラグさえちゃんとついていればドライブの先頭でなくてもいいはずだが、一応気になるのでubunruパーティションを100Mbほど後ろに下げてEFIパーティションを自作した。

・起動して数分で必ずフリーズする
グラフィックドライバのせい
nomodesetで起動してからNvidiaのドライバを拾うことで対処。

・WiFiを拾わない
アダプターのチップに対応したドライバを導入
公式のドライバはカーネルのバージョンが未対応な可能性があります。
自分はTP-Linkの821Nを使っており、チップはrtl8192euだったので
https://github.com/Mange/rtl8192eu-linux-driver を参照。

・ログインするとフリーズする
ディスプレイサーバーのWaylandを無効化。

・repoが動かない
shebangにちゃんと自身の環境に合わせたpython3のパスを入れる。

・マウスホイールのスクロール量が少ない
imwheelでbutton4と5の量を変える。
自動起動アプリケーションの指定時、imwheel -b "4 5"にしないと戻る進むボタンが効かなくなる。

・windowsとubuntuで時間がずれる
ubuntuでRTCをローカルタイムに設定。
#Python基礎（#Numpy 2/2）

前回の記事の続きです。 [#Python基礎（#Numpy 1/2）](https://qiita.com/hiwasawa/items/8907980293acc90c82ca)
環境は以前の記事で作った環境を使用しています。 → [Windows10でAnaconda python環境構築](https://qiita.com/hiwasawa/items/2d802b3471d4be1da341)

# 1.Numpy 形状変換 reshape
1行6列の配列を2行3列に変換

```python
import numpy as np

a = np.array([0,1,2,3,4,5])
b = a.reshape(2,3)
print(b)
```
```:実行結果
[[0 1 2]
 [3 4 5]]
```

reshapeの引数を-1にすることで、どのような形状の配列でも1次元配列に変換することができます。

```python
import numpy as np

c = np.array([[[0, 1, 2],
                   [3, 4, 5]],
                  
                  [[5, 4, 3],
                   [2, 1, 0]]])  # 3重のリストからNumPyの3次元配列を作る

print(c)
print("--------------------------")
d = c.reshape(-1)
print(d)
```
```:実行結果
[[[0 1 2]
  [3 4 5]]

 [[5 4 3]
  [2 1 0]]]
--------------------------
[0 1 2 3 4 5 5 4 3 2 1 0]

```
#2.要素へのアクセス
`ndarray`の各要素へのアクセスは`list`と同様にインデックスを指定します。

```python:1次元配列
import numpy as np

a = np.array([0, 1, 2, 3, 4, 5])
print(a[2])
# 2
```

```python:多次元配列
b = np.array([[0, 1, 2],
              [3, 4, 5]])

print(b[1, 2])  # b[1][2]と同じ
print(b[1][2])
# 5
# 5
```
+ 引数として配列を受け取り、返り値として配列を返す

```python
import numpy as np

def func_a(x):
    y = x * 2 + 1
    return y

a = np.array([[0, 1, 2],
              [3, 4, 5]])  # 2次元配列
b = func_a(a)  # 引数として配列を渡す

print(b)
```
```:実行結果
[[ 1  3  5]
 [ 7  9 11]]
```

#3.sum, average, max, min

```python
import numpy as np

a = np.array([[0, 1, 2],
              [3, 4, 5]])  # 2次元配列

print("sum : ",np.sum(a))
print("average : ",np.average(a))
print("max : ",np.max(a))
print("min : ",np.min(a))

```
```:実行結果
sum :  15
average :  2.5
max :  5
min :  0
```

#4.axis 方向を指定して演算
```python
import numpy as np

b = np.array([[0, 1, 2],
              [3, 4, 5]])  # 2次元配列

print('axis=0 : ',np.sum(b, axis=0))  # 縦方向で合計
print('axis=1 : ',np.sum(b, axis=1))  # 横方向で合計
```
```:実行結果
axis=0 :  [3 5 7]
axis=1 :  [ 3 12]
```
【資格】Java Silver SE11 合格体験記

#はじめに
2020年の2月にJava Silver SE11に合格したので、受験動機や勉強期間、勉強方法など合格までの流れを書いていこうと思います。

###受験概要
|受験日|合格ライン|正答率|結果|
|:-:|:-:|:-:|:-:|
|2020年2月27日|63%|85%|合格|


#目次

1. 筆者のレベル感
2. 受験動機
3. 勉強期間と勉強方法
4. 受験当日
5. まとめ


#1.私のレベル感
某専門学校卒の2年目プログラマー（受験当時）
1年半ほど業務でC#の開発案件を経験

#2.受験動機
私の所属する部署の上長に「年度内にせめてJava Silverを取得してね」と言われ、
基礎を勉強する良い機会だと思い受験を決めました。
<font color="grey">~~資格取得の一時金目当てじゃないよ（小声）~~</font>

#3.勉強期間と勉強方法

期間は2ヶ月間、勉強方法は主に黒本の問題をひたすら解き、
問題のコードを読んだだけで実行結果のイメージがしづらいコードについては実際にコードを書いて動かしてみるという流れで行いました。

使用した黒本↓（Amazonの販売ページです）
[徹底攻略Java SE 11 Silver問題集[1Z0-815]対応 (日本語) 単行本（ソフトカバー）](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Java-SE-11-Silver%E5%95%8F%E9%A1%8C%E9%9B%86-1Z0-815/dp/4295007625)
Kindle版もありますが、理解度をチェックするためのチェックボックスが各問題ごとに用意されていて便利なので__単行本__の方をオススメします。


##黒本は最低3周やるべき

実際に受験して感じたことですが、上にも書いたとおり__黒本は最低3周__をオススメします。
本番試験では黒本そのままの問題や、類題が出題される傾向があるため、黒本の解説が理解できていれば十分合格できると思います。


私が黒本を使用した際に行った流れは以下の通りです。

 * 1周目：出題範囲と苦手分野の把握
 * 2周目：苦手分野の理解度チェック
 * 3周目：2周目でなお間違えた問題のみ解く

また全ての周において以下の__2ステップ__で勉強をしていきます。

 1. 問題を解く
 2. 解説を読む（答え合わせ）


###1周目：出題範囲と苦手分野の把握
そもそもどんな内容が出題されるのかがわからないと話にならないのでまずは一通り解いてみる。

解説と答え合わせを行い、__正解かつ自身の理解と解説の内容が一致しているもの__には問題文のチェックボックスにチェックを付けます。

###2周目：苦手分野の理解度チェック

1周目で不正解だった問題が解説を読んで理解できたかを確認します。
解説を理解した上で正解であれば1周目と同様に問題文のチェックボックスにチェックを付けます。


###3周目：2周目でなお間違えた問題のみ解く

2周目までで間違えた問題（＝チェックボックスにチェックが付いていない問題）を解きます。

3周目終了時点の総仕上げ問題（模擬試験）で正答率が80％未満であれば4周目、5周目...と正答率が80％以上になるまで行います。

#4.受験当日
試験会場にもよるかもしれないですが、私が受験した会場はモニターの解像度が低く、画面をスクロールしないとコードの全体を確認することができませんでした。

その為、黒本見開きでコード全体が確認できる時とは異なり、コードを読むのに時間が掛かると思います。

心に余裕を持って試験に挑むには黒本での__総仕上げ問題で正答率が80%以上__取れるようになっていること、__試験時間180分のうち120分で解き、残りの60分で見直し__のペース配分ができるようになっていることがベストだなと感じました。

#5.まとめ
長々と書いてきましたが以下の3点ができるようになっていれば受験の申込みをしてしまいましょう。

 * 黒本は最低3周
 * 総仕上げ問題の正答率80%以上取れるようになる
 * 試験時間180分のうち120分で解き、残り60分で見直しを行う

この記事がこれから受験される方のお役に立てていれば幸いです。


#参考URL
黒本の著者 志賀先生のYou Tubeチャンネル
[黒本先生の やさしくない!? Java](https://www.youtube.com/channel/UC42DlV-0RDb6fJ8A3IbAang)
PHP7.4でもマルチスレッド！！

以前「[PHP7.4からのマルチスレッド](https://qiita.com/WhiteGrouse/items/6fb906386b8fbabd6405)」という記事を書きましたが、内容が薄すぎたのでもう少し紹介していきたいと思います。コードは全く載せていないのでサンプルはParallelのテストコードを見てください。

~~なお、 PHPにおけるマルチスレッドはCLI限定となります。~~(CLI限定なのはpthreadsだけでした) マルチプロセスを実現するpcntlではwebサーバで使用することを非推奨としていますが、pthreadsやparallelではコンパイルから拒否されます。

# 拡張モジュール
krakjoe氏が開発しているParallelを使用します。
https://github.com/krakjoe/parallel

# マルチスレッドモデル
ParallelはGo言語のgoroutineに大きく影響を受けています。
https://www.php.net/manual/ja/philosophy.parallel.php

# parallel\Runtime
RuntimeはpthreadsのWorkerにかなり近いです。
インスタンスが生成されたときにスレッドが起動し、破棄されるときまたはclose()やkill()が呼ばれたときにスレッドをシャットダウンします。run()を呼ぶと引数で指定したクロージャが__スケジュール__され、即座にFutureを返します。スケジュールされたクロージャは順次実行されます。

# parallel\Future
何の変哲もないFutureパターンの実装です。
cancel()によりスケジュールされたタスクを中断させることができます。

# parallel\Channel
仕様はgoroutineのチャンネルとほぼ同じです。Parallelではチャンネルに文字列で名前を設定することができます。匿名でも勝手に名前が付きます。open()によって好きな場所からチャンネル名を指定して特定のチャンネルを得ることができます。また、バッファのサイズを無制限にできます。PHPっぽさが感じられますね。

# parallel\Events
複数のFutureやChannelを束ねてデータの受信をイベントとするイベントストリームを提供します。また、poll()でイベントを受け取れますが、データの送信元となったFutureやChannelはイベントストリームから削除されます。継続して同じChannelからのイベントを受け取りたい場合、Event\Type::ReadであろうとEvent\Type::WriteであろうとaddChannel()によって再登録が必要です。

# parallel\Events\Input
複数のチャンネルにそれぞれ指定したデータを送信する操作を定義することができます。1つのチャンネルに複数のデータを送信することはできません。Eventsにセットすることで、ストリームが動き始めたタイミングで各チャンネルにデータを送信され、Event\Type::Writeのイベントが発生します。また、Inputに設定した項目は送信されたものから削除されていきます。

# parallel\Sync
昔ながらの低レベルの実装をしたければこれを使いましょう。ほとんどのケースではChannelの方が優れているとのこと。

# ParallelではCLIは要求されないらしい
pthreadsでもParallelでもコンパイル時にZTSは要求されます。
pthreads: https://github.com/krakjoe/pthreads/blob/master/config.m4#L11-L16
Parallel: https://github.com/krakjoe/parallel/blob/develop/config.m4#L14-L19

pthreadsでは実行時(PHP_MINIT_FUNCTION)にcli, phpdbg, homegearのいずれかであることをチェックします。
https://github.com/krakjoe/pthreads/blob/master/php_pthreads.c#L93-L113
https://github.com/krakjoe/pthreads/blob/master/php_pthreads.c#L251-L255

Parallelではそういった制限がありません。
AWS Cli の初期設定

# はじめに
Macをクリーンインストールしたこともあって、再インストールすることになった。よく使うコマンド類を調べるんのはめんどいから、まとめておく。

# 下準備
・`credentials.csv`ファイル
・リージョン

# 実践

自分はデフォルトのユーザーを設定したくないから以下のように設定していく。

```
# user1 というので設定したい場合
$ aws configure --profile user1

AWS Access Key ID [None]: ********************
AWS Secret Access Key [None]: ******************
Default region name [None]: us-east-1
Default output format [None]: json
```

### 確認法

以下のコマンドでおk

```
$ cat ~/.aws/credentials

[user1]
aws_access_key_id = *************
aws_secret_access_key = *****************
```

### 使い方

```
$ export AWS_PROFILE=user1
```

うまくいっているかの確認。

```
$ aws configure list
```

# まとめ
デフォルト入れちゃうと、色々と使いにくいから設定しないほうが楽ね。

# 参考

・[名前付きプロファイル](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-profiles.html)
Xcodeは画像データを最適化する

アプリビルド時、pngファイルなどの画像データはそのままコピーされるのではなく最適化されるみたいです。
これはxcassetsなどの管理下のファイルだけかと思っていたのですが、どうも直接プロジェクトのツリーに入れているファイルも適用されるようです。

MacのFinderでは16,511バイトのpngファイルをiOS実機の実装時に下記コードでサイズを測ってみると次のようになりました。

```swift

let url = Bundle.main.url(forResource: "Image", withExtension: "png")!
let data = try! Data(contentsOf: url)
print(data.count) // 94727
```

拡張子をpngから適当な拡張子（datとかbin）にすれば回避出来ました。

（xcassetsに入れていないと言うことは生ファイルをバンドルしたいのだから勝手に最適化しないで欲しい。）

## 追記

Build Settingsで最適化を無効化したり、Folder Referenceにいれて回避することもできそうです。

https://twitter.com/k_katsumi/status/1258117207290073088?s=21

https://twitter.com/omochimetaru/status/1258116275634442240?s=21
【laravel】データベースの設定（SQLiteの例）

# 概要
laravelではMySQL 5.6+、PostgreSQL 9.4+、SQLite 3.8.8+、SQLServer 2017+の使用環境が標準で用意されています。
そのため、どのデータベースを使用するかを設定するだけで、そのデータベースが使用できるようになります。
ここではSQLiteを使用する例を作成します。


# DB利用の準備
データベースの設定は`\config\database.php`による設定と`.env`による環境変数を編集して使用できるようにしていきます。
作業が完了してもエラーが出る場合は、サーバーを再起動したら使用できることが度々ありました。


# 設定の編集
`'default' => env('DB_CONNECTION', 'mysql'),`のmysqlをsqluteへ編集します。
ここで使用するデータベースを指定します。

```php:database.php
return[
 'default' => env('DB_CONNECTION', 'mysql'), //使用するデータベース
 'connections' => [
  'sqlite' => [SQLiteの設定],
  'mysql' => [MySqlの設定],
  'pgsql' => [PostgreSQLの設定],
  'sqlsrv' => [SQL Serverの設定],
 ],
 // 中略
]
```


# 使用するデータベースの指定
` 'default' => env('DB_CONNECTION', 'mysql'), `で使用するデータベースを指定しています。
ここをsqliteと編集します。

```php:database.php
return[
 'default' => env('DB_CONNECTION', 'mysql'),  // ここの'mysql'を使用するSQLに変更
]
```


# 環境変数の編集
SQLiteを使用する場合`DB_CONNECTION`をmysqlからsqliteへ編集します。
また、DB_○○の項目はSQLiteには不要な設定なため削除します。

```php:
DB_CONNECTION=mysql

// 以下を削除
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
```
【Windows】Google日本語入力の設定でCaps Lockキーを「全角・半角切り替え」キーと同じ割り当てに変更する

# TL;DR

- Caps Lockのキー割り当てはGoogle日本語入力から変更できる
- 全角・半角切り替えキーと同じ割り当てに変更する

# 作業環境

- Windows10

# Caps Lockのキー割り当てをGoogle日本語入力から変更する

※Google日本語入力の設定からCtrlキーやShiftキーなどと同等の役割の割り当てに変更することは不可

## 1：Google日本語入力のプロパティを開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188888/dcc3e656-84b4-4d3d-74a4-6cdb2ee1a9ae.png)

## 2：キー設定 > キー設定の選択 > 編集

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188888/3f758b3d-fd41-f0e3-cf53-0de9a118aaa5.png)

## 3：「入力キー」内【Eisu】に割り当てられている「コマンド」を【Hankaku／Zenkaku】と揃える

**例**

|モード|入力キー|コマンド|
|:--|:--|:--|
|直接入力|Hankaku／Zenkaku|IMEを有効化|
|直接入力|Eisu|IMEを有効化|
|入力文字なし|Hankaku／Zenkaku|IMEを無効化|
|入力文字なし|Eisu|IMEを無効化|

こんな感じで、他のモードに関しても【Hankaku／Zenkaku】と【Eisu】の「コマンド」を揃える

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188888/5efdb08c-3169-23fa-5f96-bb1a25dbc5ea.png)

※筆者の環境では「入力キー」は先述の名称になっていますが、これが統一のものなのかわからないので、各自で確認していただく必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188888/d84c74aa-197f-1cc1-b057-1134ccc186c4.png)

「エントリーを追加」後に空白の「入力キー」の箇所をダブルクリックし、Caps Lockキーを押す

---

設定はこれで終了です。
これで、Caps Lockキーが全角・半角キーと同じ動作をしてくれるようになれば設定完了になります。
python挑戦日記①

<img width="1516" alt="スクリーンショット 2020-05-07 3.44.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/aa586441-c378-a61f-723a-4b9fb2a1f8b4.png">
<img width="1522" alt="スクリーンショット 2020-05-07 3.44.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/9eb5ab42-3c97-9944-8838-3c067377c020.png">
<img width="1517" alt="スクリーンショット 2020-05-07 3.44.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/2dee993a-f8c2-8cfb-4b72-811c357fc2c3.png">
<img width="1518" alt="スクリーンショット 2020-05-07 3.45.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/c891b733-8ab7-b84e-eead-e6796cbe5fb3.png">
<img width="1522" alt="スクリーンショット 2020-05-07 3.45.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/c25558f3-c59a-b1a8-d323-b18e4645e581.png">
<img width="1522" alt="スクリーンショット 2020-05-07 3.45.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/8b5e08af-4764-c853-2cca-e46cbbaec110.png">
<img width="1520" alt="スクリーンショット 2020-05-07 3.45.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/a38ccc6c-8e58-76c6-409a-9727a24c4a65.png">
初心者でもAWSプロダクトをさわってみたい！（スピンアウト：Jupyter Notebook編）

<img width="1515" alt="スクリーンショット 2020-05-07 3.08.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/03b93820-82f4-89e1-0f5b-399f8942d6e1.png">
<img width="1513" alt="スクリーンショット 2020-05-07 3.08.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/172a2714-9050-b838-e98c-055caaec47de.png">
<img width="1518" alt="スクリーンショット 2020-05-07 3.08.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/ef34f863-0115-32c2-6b9a-4d1238b827ca.png">
<img width="1520" alt="スクリーンショット 2020-05-07 3.08.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/0385e448-cc4e-e10a-337e-6db6fc18a088.png">
<img width="1518" alt="スクリーンショット 2020-05-07 3.08.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/238b2275-8bc3-4d05-04c3-6edb3a2d85ee.png">
<img width="1519" alt="スクリーンショット 2020-05-07 3.08.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/29bbbfcd-aa83-8f74-274b-59bd6fc2b163.png">
<img width="1521" alt="スクリーンショット 2020-05-07 3.08.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/a17f5c70-6457-82a2-72ff-3265df63b6f7.png">
<img width="1517" alt="スクリーンショット 2020-05-07 3.08.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/d3b124c0-945f-28f8-9220-36e9dd7d3b15.png">
<img width="1518" alt="スクリーンショット 2020-05-07 3.09.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/3112618d-748f-0801-b6c2-8649de9fdd35.png">
<img width="1519" alt="スクリーンショット 2020-05-07 3.09.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/f2f82908-666a-8ada-71d9-c0cf9d7c4e2a.png">
<img width="1522" alt="スクリーンショット 2020-05-07 3.09.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/f8e2e529-a646-a11a-f0d7-e343ac96b4d0.png">
<img width="1518" alt="スクリーンショット 2020-05-07 3.09.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/54bfe28f-b9be-989d-f7b4-94248bd15612.png">
<img width="1516" alt="スクリーンショット 2020-05-07 3.09.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/95a94c0f-c51c-526d-b509-fe77d6c5a0d4.png">
##まだまだこれからですが、せっかくなのでQiitaでもマークダウンの知識を身につけるべく活用したいです！
初心者でもAWSプロダクトをさわってみたい！（AmazonSageMaker編：前半）

<img width="1648" alt="スクリーンショット 2020-05-07 3.02.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/668cfe82-2e2f-7ea3-957e-6ee3ebfd853b.png">
<img width="1643" alt="スクリーンショット 2020-05-07 3.03.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/bde314c8-e2e8-a8df-fbc9-011957e373a3.png">
<img width="1644" alt="スクリーンショット 2020-05-07 3.03.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/98f72ed9-062f-f220-0f15-1f96a1d0c773.png">
<img width="1641" alt="スクリーンショット 2020-05-07 3.03.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/afcee271-c8b6-37e2-06ae-85873b845739.png">
<img width="1641" alt="スクリーンショット 2020-05-07 3.04.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/6ccdc13b-bea6-2565-5215-449a1085d5db.png">
<img width="1642" alt="スクリーンショット 2020-05-07 3.04.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/a40d5594-8e59-1759-4990-f0e05f15d2c1.png">
<img width="1644" alt="スクリーンショット 2020-05-07 3.04.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/8a825943-9a9a-f944-ce68-ea62788cb5df.png">
<img width="1644" alt="スクリーンショット 2020-05-07 3.04.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/1a26195e-0956-1113-2ca3-98621abbc44f.png">
<img width="1648" alt="スクリーンショット 2020-05-07 3.04.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/56b92751-64ef-c521-b9e8-661fd27eec78.png">
<img width="1648" alt="スクリーンショット 2020-05-07 3.05.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/5afe619a-1493-2ac7-a7b9-faf165f01c4e.png">
<img width="1649" alt="スクリーンショット 2020-05-07 3.05.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630283/ef61c434-8fb9-7d72-f100-fdcad053102f.png">

## 具体的な学習のコードに関しては現在悪戦苦闘しながら確認中。。。
formタグの配下にbuttonを入れないようにしたいとき


#解決したいこと

- formタグがたくさんあるから、HTMLファイルの下の方にまとめてしまいたい。
- liタグの中にformタグを入れるとレイアウトが崩れるから、liタグの外に出したい。
- formタグとボタンを関連付けしたい。



#よく見るformタグ
formタグの中にbuttonタグを入れて、送信を押すとformタグ内のinputの内容がサーバー側に送られる、
というのが一般的な作りだと思います。

↓こんな感じの

```php

  <form action="{{ route('hoge') }}" method="post">
    @csrf
    <div class="md-form">
      <label for="name">名前</label>
      <input  class="form-control" type="text" id="name" name="name" value="{{ old('name') }}" required>
    </div>
 
    <button class="btn btn-block" type="submit">送信</button>
  </form>

```

※コードは**php（laravel）**です。bladeを使って書いています。

#解決したいことを叶えるには
formタグのidに「buttonタグのform属性と同じ名前」を、
buttonタグのform属性に「formタグのidと同じ名前」を入れることで
formタグとbuttonタグを関連付けることができます。

解決したいことを叶えることができます。

↓こんな感じ

```php
<form id="buttonタグのform属性と同じ名前" action="{{ route('hoge') }}" method="post">
    @csrf
    <div class="md-form">
      <label for="name">名前</label>
      <input  class="form-control" type="text" id="name" name="name" value="{{ old('name') }}" required>
    </div>
</form>

    <button form="formタグのidと同じ名前" class="btn btn-block" type="submit">送信</button>
  

```


#参考
https://www.tagindex.com/html5/form/button.html




こんなんいつ使うの？と思われるかもしれませんが
結構使います。

いくつもの情報を送る画面を作成するとき、
formタグを一部に固めて書くことで可読性がアップする！というのを味わった現場がありました。


砂漠の砂の中から自分の使いたい知識をつなぎ合わせるような知識でした。
はじめてのGMT6「九州を描く」

手軽に地図を作成できるツールとして、GMT(The Generic Mapping Tools)があります。
筆者はこれまでGMT5を使っていましたが、昨年2019年の11月にver6.0.0が出たようですので、GMT6に挑戦してみることにしました。
すぐ忘れてしまう筆者の備忘録も兼ねて、ここにGMT6の使い方を記録していきたいと思います。

# 地図描画の基本を押さえていく
### basemap
`gmt basemap`を使って、地図を描くのに必要な基本情報を与えていきます。
早速
①**地図の投影法**
②**縮尺**
③**描画範囲**
④**目盛りの取り方**
⑤**その他の装飾**
を決めていきます。

①メルカトル図法や正距方位図法など様々な地図の投影法が存在しますが、その詳細については割愛します。
そして今回はよく目にする**メルカトル図法**を採用します。
②縮尺(地図の大きさ)は5万分の1(1:50000)のようにも指定できますし、図の幅(例えば15cm)のようにも指定できます。今回は**15cm**にしましょう。
③描画範囲は「九州を描く」ことを目的にしていますので、ざっくりと**東経128度〜東経133度、北緯30度〜北緯35度**の範囲にします。
④目盛りの取り方は、**GMTに丸投げ**しました(笑)
⑤最後に、**軸のラベルは東西南北全方向に**つけることとし、**図のタイトルとして「Kyushu」**を描くようにします。

上記のような条件で地図を描く準備をします。

```GMT:kyushu.sh
#!/bin/bash
gmt begin kyushu png
    gmt basemap -JM15 -R128/133/30/35 -Bafg -BWSNE+t"Kyushu"
gmt end
```

`-J`オプションで投影法と図のサイズを決めます。`M15`で**図の幅が15cmの地図をメルカトル図法で描く**という意味です。
`-R`オプションで描画範囲を決めます。`128/133/30/35`で**東経128度〜東経133度、北緯30度〜北緯35度の範囲**という意味です。
`-B`オプションで図の目盛りなどの調整をします。`a`は基本となる目盛り(目盛のケバの間隔)、`f`は細かい目盛り(枠のケバの間隔)、`g`でグリッドの幅(格子線の間隔)が決まるようです。`a2f1`のようにすれば、2度ずつの目盛りと1度ずつの小さな目盛りをつけられることになります。さらに`WSNE`で**東西南北に軸ラベルをつける**こと、`+t"Kyushu"`で**「Kyushu」というタイトルをつける**ことを指定しています。

さてこれを実行すると、次のような図が出力されます。
![kyushu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621109/78ce1809-140e-7c7b-7ea1-727ca10ab273.png)

思い通りの枠と九州(概念)が描かれました！

### coast
ここからは九州(概念)を顕在化させていきます。
`gmt coast`を使って、陸地の情報を加えます。

```GMT:kyushu.sh
#!/bin/bash
gmt begin kyushu png
    gmt basemap -JM15 -R128/133/30/35 -Bafg -BWSNE+t"Kyushu"
    gmt coast -Df -W0.05
gmt end
```

`-D`オプションで地図の精度を決めます。**f**ull, **h**igh, **i**ntermediate, **l**ow, **c**rudeの5種類で、`f`が一番精細になります。`c`でもやってみてください。ひどいですよ。
`-W`オプションで線の幅を決めます。`0.05`では0.05ポイントの幅の線となります。

すると、どうでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621109/6593deca-6020-47d5-1e79-045e91bce01a.png)


見事に九州周辺を描くことができました！

### 陸地や海に色もつけたい
このままでは味気ないので色もつけてみましょう。ついでにスケール(縮尺)も付けておきます。
`gmt coast`でいけます。

```GMT:kyushu.sh
#!/bin/bash
gmt begin kyushu png
    gmt basemap -JM15 -R128/133/30/35 -BWSNE+t"Kyushu"
    gmt coast -Df -W0.05 -G103/202/77 -S186/223/229 -Lg130.5/29.5+c32+w300+f+l"km" -Bafg 
gmt end
```
`-G`オプションで**陸地(乾いた領域)の色**を、`-S`オプションで**海(湿った領域：水域)の色**を指定することができます。今回はRGBで指定しました。
`-L`オプションでスケールを書き加えます。`-Lg130.5/29/7`は地図上の座標で**スケールの中心位置**を決めています。`-Lx`で紙面における位置でも指定できます。`+c32`は**北緯32度における距離**を用いる意味です。地球は球体ですので、指定する緯度によって経度方向の距離が変わってきます。`+w300`は**300kmのスケールを描画する**こと、`+f`は**白黒の棒で表現**すること、`+l"km"`は**kmのラベルをつける**ことを意味しています。
また、基本的に後から加えたコマンドは上書きされていくため、グリッド線が隠れないように`gmt coast`で`-Bafg`を使っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621109/1cba01d8-15c0-623c-e33a-285e8d6c25f6.png)
これでだいぶ地図らしくなったと思います！

# 次回予告
今回はここまでにします。
参考にしたのは以下のdocumentationです。英語ですが…
[basemap](http://gmt.soest.hawaii.edu/doc/latest/basemap.html)
[coast](http://gmt.soest.hawaii.edu/doc/latest/coast.html)

次回で、DEM(数値標高モデル)を使った陰影段彩図が描けるようにしたいと思います。
ありがとうございました！
#Python基礎（#Numpy 1/2）

#1.Numpy
Numpy : Pythonの拡張モジュールで多次元配列を扱う際に便利

人より記憶メモリが少ない私はいつも、あれ？これどうだっけ？という状態に
陥ってその度に同じ検索ワードで検索をしてしまうのでこの機にメモしておこうと思います。

環境は以前の記事で作った環境を使用しています。 → [Windows10でpython開発準備](https://qiita.com/hiwasawa/items/2d802b3471d4be1da341)

#2.list to Numpy

pythonのリストからNumpy配列に変換する方法

```
import numpy as np

a = np.array([0, 1, 2, 3, 4, 5])  # PythonのリストからNumPyの配列を作る
print(a) 
```
```:実行結果
[0 1 2 3 4 5]
<class 'numpy.ndarray'>
```

###オブジェクトの型を取得・確認：type()関数
```
print(type(a))
```

```:実行結果

<class 'numpy.ndarray'>
```

#3.lit to Numpy 多次元配列

```
import numpy as np

b = np.array([[0, 1, 2], [3, 4, 5]])  # 2重のリストからNumPyの2次元配列を作る
print(b)
```
```:実行結果
[[0 1 2]
 [3 4 5]]
```

###ndarrayの形状：shape
```
print(b.shape) # shapeで形状をタプルとして取得（行数、列数）
```
```:実行結果
(2, 3)
```

#4.配列の演算1

```
import numpy as np

a = np.array([[0, 1, 2], [3, 4, 5]])  # 2次元配列

print(a)

#[[0 1 2]
# [3 4 5]]
```
```
print(a + 10) # 各要素に10を足す

# [[10 11 12]
#  [13 14 15]]
```
```
print(a * 10) # 各要素に10をかける

#[[ 0 10 20]
# [30 40 50]]
```

#5.配列の演算2
配列同士の演算

```
b = np.array([[0, 1, 2], [3, 4, 5]])  # 2次元配列
c = np.array([[2, 0, 1], [5, 3, 4]])  # 2次元配列

print(b)
print("--------------")
print(c)
print("--------------")
print(b + c)
print("--------------")
print(b * c)
```
```:実行結果
[[0 1 2]
 [3 4 5]]
--------------
[[2 0 1]
 [5 3 4]]
--------------
[[2 1 3]
 [8 7 9]]
--------------
[[ 0  0  2]
 [15 12 20]]
```

※厳密には 2次元配列と1次元配列同士の足し算等も出来る等、少し複雑なルールもあるようだが個人的に良く使うものだけメモ
Laravelでファイルダウンロード機能を実装する

# 目次
Laravelの記事一覧は下記
[PHPフレームワークLaravelの使い方](https://qiita.com/toontoon/items/c4d0371e504c37f6576e)

# Laravelバージョン
動作確認はLaravel Framework 7.19.1で行っています

# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

# Controllerにメソッド追加
(1) /sample/app/Http/Controllers/SampleController.phpに下記を追記
`use Illuminate\Http\Response;`

(2) /sample/app/Http/Controllers/SampleController.phpにdownload1メソッド、download2メソッド、sendHeaderメソッド、sendContentBodyメソッド、sendContentEndメソッドを追記

```

    public function download1()
    {
        return view('sample.download');
    }

    public function download2(Request $request, Response $response)
    {
        $this->sendHeader($response, 'sample.txt', 'text/plain');

        for ($row = 0; $row < 100; $row++) {

            $line = '';
            for ($col = 0; $col < 10; $col++) {
                $line .= $col;
                $line .= "\t";
            }
            $line .= "\n";

            $this->sendContentBody($line);

        }

        $this->sendContentEnd();

        return $response;
    }

    private function sendHeader($response, $fileName, $mimeType){

        $response->setProtocolVersion('1.1');
        $response->headers->replace([
            'Content-Type' => $mimeType,
            'Content-Disposition' => 'attachment; filename="' . $fileName . '"',
            'Transfer-Encoding' => 'chunked'
        ]);
        $response->sendHeaders();

        ob_flush();
        flush();

    }

    private function sendContentBody($line){

        echo dechex(strlen($line));
        echo "\r\n";
        echo $line;
        echo "\r\n";

        ob_flush();
        flush();
    }

    private function sendContentEnd(){

        echo '0';
        echo "\r\n";
        echo "\r\n";

        ob_flush();
        flush();

    }

```


(3) /sample/routes/web.phpに下記を追記
`Route::get('sample/download1', 'SampleController@download1');
Route::post('sample/download2', 'SampleController@download2');`


# viewの作成
/sample/resources/views/sample/download.blade.phpファイル作成

```download.blade.php
<html>
    <head>
        <title>sample</title>
    </head>
    <body>

        <form action="{{ url('sample/download2') }}" method="post"  >
            @csrf
            <input type="submit" >
        </form>

    </body>
</html>

```

# 動作確認
`http://localhost/laravelSample/sample/download1`

送信ボタンクリック

100行のタブ区切りファイルがダウンロードされました
【Docker】 Docker for Windows導入時のエラー対応

# 背景

新しいWindowsOSのPCを新調して、「Docker for Windows導入するか」と思っている最中にエラーに遭遇したので記述させていただきます。（Macが欲しかったけど、そこは置いておいて・・・）
※導入方法などは以下の参考などたくさん記事が存在するので省いています。

Docker for Windows を導入する際に、以下のような参考記事で導入するかと思います。
（参考：https://qiita.com/fkooo/items/d2fddef9091b906675ca）

その際に、「An error occurred Hardware assisted virtualization and data execution protection must be enabled in the BIOS.」などと出て、いろいろ「ん？」っとなったときの話です。

# 内容

## 問題
Docker for WindowsでHyper-Vも有効にしたし、インストールなども行って、windows10 proであることも確認した。
しかし、なぜかエラー背景で紹介しているエラーが出る。

## 解決

いろいろ探してみると、以下の記事で解決方法を乗せてくださっているのを発見。

（参考：https://algorithm.joho.info/programming/docker-for-windows-hardware-assisted-virtualization-and-data-execution-protection-must-be-enabled-in-the-bios/）

```text:解決方法
1. BIOS設定の確認
　　BIOSのCPU関連設定で「Intel VT-x」「Intel Virtualization Technology」が無効になっていないか確認
　　　→　各種CPUによって異なるが、起動時にF1やF2を連打して、BIOS設定に移動して設定します。
2. Hyper-VをコマンドプロンプトでON
　　・コマンドプロンプトやPoserShellを管理者権限で起動（なんでもいいのでターミナル）
　　・「$ bcdedit」を打ち、「hypervisorlaunchtype」がautoになっていることを確認
　　・「hypervisorlaunchtype」がautoになっていなければ、「$ bcdedit /set hypervisorlaunchtype auto」を実行
　　・PC再起動
3. CPUがHyper-Vに対応しているか確認
　　・ Microsoftのサイト（http://download.sysinternals.com/files/Coreinfo.zip）からCPUの各機能や情報を確認
　　　→　「Coreinfo.zip」を解凍
　　・「Coreinfo.exe」をコマンドプロンプトなどにドロップしてCoreinfoを実行
　　・「HYPERVISOR」項目が「*」になっていることを確認
　　　→　しかし、参考の記事でもあるが「-」となっていても動作するらしく結果が正しいとは言えないようです。
```

がどうやら解決方法らしい。


## 解決の解決

解決部分で初めに「2」や「3」から実行した。（BIOSはどうせ大丈夫だろう、再度起動するの面倒だしと思って後回し）
それでも解決せず、

```text
An error occurred Hardware assisted virtualization and data execution protection must be enabled in the BIOS.
```
が出続ける。そこで、「1」が問題なんだろうということで、実行することに。

よし、やるかーと思いきや、「自分IntelのCPUじゃないじゃん・・・」ということに気づき、
マザーボードが**ASRock系統でAMDのRyzen**だということに気づく。

んー、どうやってVirtualizationを有効化するのだ？笑となった。

そこで探していると、救世主が現れてくれました。

（参考：https://pera-lab.com/archives/2087）

```text:解決の解決方法
1. PC起動し、URFIを起動
　　F2を連打すると、IntelのBIOSよりかっこいい画面が出現（笑）
2. 「Advanced」タブを選択し、「CPU Configuration」を開く
3. 「SVN Mode」項目がAMD-vになるので、「Enabled」に変更
4. 「Exit」タブを選択し、「Save Changes and Exit」を選択
5. Windowsを起動し、再度Docker for Windowsを立ち上げる
```

上記を実行すると見事にDocker for Windowsが起動しました～。
参考記事お陰でした。ありがとうございます。
RDP接続先が英語OSの場合にJISキーボード入力を行うための方法

#1.概要
タイトル通りです。備忘録です。
#2.手順
###1.レジストリのバックアップ
①[Start menue]を右クリックし、[Run]をクリック
②「regedit」と入力し、[OK]をクリック
③[Computer]を選択し、[File]-[Export]をクリック
④保存先を選択し、[Save]をクリック
**確実に実施**

###2.レジストリ変更ファイルの作成
①下記内容が記載された、拡張子regのファイルを作成

```
Windows Registry Editor Version 5.00'

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411]
"Layout Display Name"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,\
  52,00,6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,\
  00,32,00,5c,00,69,00,6e,00,70,00,75,00,74,00,2e,00,64,00,6c,00,6c,00,2c,00,\
  2d,00,35,00,30,00,36,00,31,00,00,00
"Layout File"="kbd106.dll"
"Layout Text"="Japanese"
```

###3.再起動
①[Start menue]-[Power]-[Restart]をクリック


出典：猫好きが猫以外のことも書く
https://bitto.jp/posts/%E6%8A%80%E8%A1%93/%E3%83%8A%E3%83%AC%E3%83%83%E3%82%B8/rdp-keyboard/
ERROR! The server quit without updating PID file (/usr/local/var/mysql/mba.pid).の解決策

# バージョン

- Ruby 2.6.3
- Rails 6.0.2.2
- Homebrew 2.2.14
- MySQL 8.0.19

# mysql.server startをするとエラーが出る！

```
$ mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/mba.pid).
```

PIDファイル？がねえよ！
と怒られた。

↓の記事を参考に進めてみる
https://qiita.com/_natsu_no_yuki_/items/ae4c94187093e4ab3cdc

PIDファイルをチェック↓
mbaのところは自分のパソコンの名前が入るよ
（僕はMacBookAirを使ってるので略してmbaにしてます。）

```
$ ls -la /usr/local/var/mysql/mba.local.pid
ls: /usr/local/var/mysql/mba.local.pid: No such file or directory
```

ファイルがねえよ！って言われてるみたい。

#解決策

うーん、解決しなかったので他の記事に。↓
https://qiita.com/kazu_wsx/items/bb787e9e4e919da03705

この記事のおかげでできました！ありがとう！


##【注意！！】
**そのまま下の解決手順を実行するとmysqlのデータが削除されてしまいます！**
**必ずバックアップを行ってください！**

僕はアプリ作成段階だったので消えるデータがなくスキップ。
以下、上の記事から拝借。

>
```
$ brew services stop mysql 
でmysqlを一旦停止
$ cp -pr /usr/local/Cellar/mysql /適当な場所/mysql_backup
により、mysqlのデータバックアップを行ってください。
```

##local配下のmysqlを全て削除

brew uninstall mysqldaだと残っちゃうものがあるみたいです。
local配下のmysqlを全て削除する。

>
```
$ rm -rf /usr/local/mysql
$ rm -rf /Library/StartupItems/MYSQL
$ rm -rf /Library/PreferencePanes/MySQL.prefPane
$ rm -rf /Library/Receipts/mysql-.pkg
$ rm -rf /usr/local/Cellar/mysql*
$ rm -rf /usr/local/bin/mysql*
$ rm -rf /usr/local/var/mysql*
$ rm -rf /usr/local/etc/my.cnf
$ rm -rf /usr/local/share/mysql*
$ rm -rf /usr/local/opt/mysql
```

##再度MySQLをインストール！

```
brew install mysql
```

```
$ brew install mysql
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
contentful-cli         kops                   lmdb                   mupdf-tools

==> Downloading https://homebrew.bintray.com/bottles/mysql-8.0.19.catalina.bottle.2.tar.gz
Already downloaded: /Users/asatokensei/Library/Caches/Homebrew/downloads/16119cce36310b0d4f34d54a3a0dd701d068e946c1d4bd4c7bb409b9f9899760--mysql-8.0.19.catalina.bottle.2.tar.gz
==> Pouring mysql-8.0.19.catalina.bottle.2.tar.gz
Warning: This keg was marked linked already, continuing anyway
==> /usr/local/Cellar/mysql/8.0.19/bin/mysqld --initialize-insecure --user=asatokensei --b
==> Caveats
We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:
    mysql -uroot

To have launchd start mysql now and restart at login:
  brew services start mysql
Or, if you don't want/need a background service you can just run:
  mysql.server start
==> Summary
🍺  /usr/local/Cellar/mysql/8.0.19: 286 files, 289.2MB
```

んー、、Warning: This keg was marked linked already, continuing anywayって出てるけどとりあえずスルー。

##パスを通す

```
$ echo 'export PATH="/usr/local/opt/mysql/bin:$PATH"' >> ~/.bash_profile
```

中身を見たい時はこのコマンド↓

```
$ vi ~/.bash_profile
```

##サーバーを立ち上げる

```
mysql.server start
```

ついにサーバー立ち上げ！！

```
$ mysql.server start
Starting MySQL
. SUCCESS! 
```

成功ーーー！！！！
やったね！

# 参考記事
- https://qiita.com/_natsu_no_yuki_/items/ae4c94187093e4ab3cdc
- https://qiita.com/kazu_wsx/items/bb787e9e4e919da03705
iPadの整備品をスクレイピングで取得し，Slackに通知

# はじめに
政府からの給付金も支給されるので，持ってなかったiPadを整備品で安く買いたい！と思いました．
整備品についてはこちら→https://www.apple.com/jp/shop/refurbished

僕が欲しかったのはiPad Air（第3世代）だったのですが，この記事を書いた時はなかなかの争奪で，新たに上げられてもすぐに瞬殺するほどです．
なので，他の人に先を越されないように定期的にスクレイピングして，Slackで通知することで，購入できるようにしようと思い，Pythonのプログラムを簡単に作成して，無事にiPad Airの整備品を買えたので，今回ご紹介します．

※今回はサイト一覧から販売されているリストを条件に応じて通知しているってだけなので，販売され続けていると定期実行されるたびに通知されるものなので，それが嫌な方はCSV駆使するなりして新たに上がったものだけを通知するようにしてください．

# 今回やったこと
## 用いたもの
・Python
・BeautifulSoup
・Slack API
・Windowsのタイムスケジューラ

### スクレイピング環境のインストール

```
pip install requests
pip install beautifulsoup4
pip install lxml
```

## Slack APIのTokenの取得
僕は自分だけが入ってるSlackを作って，リンク先（https://qiita.com/ik-fib/items/b4a502d173a22b3947a0 ）にあるような形で，APIをポストするだけで通知の投稿をしてくれるIncoming Webhooksを取得・連携しました．

## Pythonコード
Beautiful SoupとPython3を用いてスクレイピングしています．
今回はiPad Airの販売一覧を取得したかったので，"Air"と"Wi-Fi"の文字列が含まれているときに通知するようにしています．（Airだけだとメニューバーが通知されるため，Wi-Fiの文字列も含めています）
もし，iPad Proが欲しければ"Pro"を，iPad miniであれば"mini"をすればいいと思います（無印のだとどうすればいいのかは分かりませんが．．．）

```python:apple.py
# coding:utf-8
from bs4 import BeautifulSoup
import json
import requests

if(__name__ == "__main__"):
    url="https://www.apple.com/jp/shop/refurbished/ipad"#iPadの整備済み製品一覧
    headers = {"User-Agent": "Mozilla/5.0"}
    soup2 = BeautifulSoup(requests.get(url, headers=headers).content, 'html.parser')#htmlの取得
    a_tags=soup2.select("a")#<a>タグの取得
    for entry in a_tags:#取得した各<a>タグについて
        if 'Air' in entry.text and 'Wi-Fi' in entry.text:#iPad Airがあるとき
            slackapi="投稿したいSlackのワークスペースのAPI"
            text = '<!channel> '+entry.text
            #Slackに通知
            requests.post(slackapi, data = json.dumps({
                "text": text
            }))
```

## 定期実行
今回は常に電源ONにしてるWindowsデスクトップがあったので，それをWindowsのタスクスケジューラを用いることでPythonを定期実行するようにしました．
（AWSのLambdaを使うのもいいと思います）

タスクスケジューラの設定方法についてはこちらを参照（ https://qiita.com/kawa-Kotaro/items/4005a43eb686eae41448 ）しました．
ちなみに僕は5分ごとのトリガーを2つ作って，2分半ごとに実行するようにしました．

短いスパンで頻繁にスクレイピングさせると，Webサーバーに負荷をかけてることになり，クロールされる側の迷惑になったり，DoS攻撃（サーバーに過剰な負荷をかけてサービスを妨害する攻撃）とみなされるので注意しましょう．

# 実行結果
もし諸々が上手くいけば，以下のような感じでSlackに通知できます．
場合によっては，TwitterのBotである整備済み商品の投稿をするBotより早かったりします．
<img width="567" alt="スクリーンショット 2020-05-07 01.44.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626852/685c162f-110b-362e-7b12-bb62a1b2a881.png">
Cloud9でaws-cli実行環境を構築

## はじめに
JAWS-UG CLI専門支部にてCloud9の入門があったので受講してきました。
私が受講して受けた内容を再度フィードバックすることをしたいと思います。
(そうすることで私自身の学習となるため)

## Cloud9とは
AWS Cloud9とは、ブラウザ上でほとんどすべての開発環境を整えられるとても便利なサービスです。

プログラミング初学者にとって最初に立ちはだかる壁は「開発環境を整えること」で、ここでつまずいてプログラミングをやめてしまう人も多いと思いますが、Cloud9を使えばそんな壁を難なく乗り越えられるらしいです。

私はプログラミングはあまりよくわからないので、
とりあえず、AWS CLIを使うためにCloud9環境を用意しました。

## なぜCloud9を使うのか
上記で記載しましたが、開発環境を簡単に整えられるということと、
UnixベースでそのままLinuxのコマンドも打てて非常に便利
(Windowsユーザ目線)

また、AWS Cloud9を使えばブラウザ上で開発を行うことができるので、異なるデバイスでも全く同じように開発ができます。
そこそこエンジニアの経験がある人でも、あるデバイスで開発をしていて別のデバイスで開発しなければならない状況になったとき、微妙に開発環境が異なるためにつまずくことはよくあります。
そういった時間的コストを削減できるという意味でも、とてもありがたいサービスです。

## セキュリティ上もいいらいしい
AWS-CLIを使用するうえでEC-2上で初期設定を行う際には
クレデンシャル情報を入力すると思いますが、この情報を抜き取る
攻撃が最近は多いらしく、一度抜かれてしまうと大変なことは
安易に想像できると思います。

Cloud9でAWSCLI実行する際にはクレデンシャル情報を使用しないで
できるらしいので、セキュリティ上いいらしいです。
(具体的にはあまり詳しくない笑)

## 参考手順
ハンズオンで実際にセキュリティを意識したAWS-CLIを実行するための
環境を作りました。
以下にURLを記載しておきましたので、興味がある方はやってみてください。
(講師の方はまだ当分消さないといっていたのですが、いつか消されるかも)

[JAWS-UG CLI専門支部 #150R AWS CLI環境構築(Cloud9)入門](http://prototype-handson-cli.s3-website-ap-northeast-1.amazonaws.com/handson_light_web-aws_service/handson_light_web-aws_service-cloud9/index.html)
【Rails 忘備録】devise_viewを編集しても反映されない問題

#はじめに
「Ruby on Rails」の「devise」を使ってユーザー新規登録/ログイン機能を実装する際、viewを編集しても一向に反映されない問題が発生しました。表示はされることからエラーでもなさそうなため追う術もありません。これを回避するために小技や、devise特有の注意点があることがわかったため、備忘録として残します。

#現象
deviseをインストールし、ビューを「rails g devise:views Model」で作成すると、以下のデフォルトのビューが表示されます。
私の場合は Model = devise で作成しました。
この状態からビューの編集を始めたのですが、どれだけ編集して、どれだけ対策を打ってもデフォルトのビューが表示されるというループにハマりました。

![d9640d67d8f66a838477e89051d5f715.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/516379/93dc63f5-36e0-27ee-1b22-0f1a22e858fa.png)


#今回の解決策
今回、ルーティングやビューファイルに問題は無く、ただHaml（new.html.haml）で作成していた筈なのに、ターミナルの表示からHtml(new.html.erb)を読み込みに行ってることが判明（下図参照）。
これはdeviseの特性で、本来読み込みたいビューファイルが見つからない場合、隠しファイルとして持ってるデフォルトのビューファイル(new.html.erb)が読み込まれるようになってるようです。
<img width="1188" alt="e0ac1aa37373aed792a5c3aa1693d2e5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/516379/fd09de35-dbb5-f050-c878-ec7eb6a8b5c1.png">

つまり、今回読み込みたいビューファイル（new.html.haml）を探しに行ったら見つからなかったということ。
となると、「ファイル名かディレクトリ名が違うのでは」と考えられたので調べてみると、本来「devise」であるはずのビューのディイレクトリが「devises」になってることが判明。
「devise」に修正することで、無事に反映されました。

#学んだこと
・本来読み込みたいビューファイルが見つからない場合、隠しファイルとして持ってるデフォルトのビューファイル(new.html.erb)が読み込まれるという特性を「devise」は有しているということ。開発中はエラーが出ないことが難儀ですが、本番環境で運用を始めるとエラー画面を出る方が困るという観点から、用意されているそうです（ここは人伝てに聞いたので確証を持ってお伝えできないですが）。

・deviseのビュー編集が反映されない時は、ルーティングやコントローラーの確認はもちろんですが、ターミナルから読み込み先のファイル名、ディレクトリ名を確認する。

・別の注意点としては以下を「faile」から「true」に編集すること、ビューの編集が可能になるようです。[参照：Railsにdeviseをサクッと導入！認証機能の使い方も解説【日本語化】](https://kitsune.blog/rails-devise)

```config/initializers/devise.rb
config.scoped_views = true
```

以上です。
３つ目に記載した対応は、調べるとよく見られるものですが、1つ目に記載した内容はあまり記事も見当たらないので、参考になれば幸いです。
deviseはじめ、Railsは容易に開発を進められる反面、ブラックボックスになってる部分も多く、奥が深い。
#Python基礎（クラス）

#1.クラス

```__init__```  : コンストラクタ 
```self```      : インスタンス

※selfはpythonの設計仕様で欠かすことはできません。なお、名前を"self"以外のキーワード(例えば、myselfなど)にすることは可能ですが、慣例としてselfを使用しています。
[参考ぺージ](https://www.sejuku.net/blog/64106)

```
class Calc:
    def __init__(self, a): # コンストラクタ
        self.a = a
   
    def add(self, b):
        print(self.a + b)
        
    def multiply(self, b):
        print(self.a * b)
```

```
calc = Calc(10)
calc.add(10)
calc.multiply(10)
```

```:実行結果
20
100
```

#2.継承

+ 親クラス

```
class Calc:
    def __init__(self, a): # コンストラクタ
        self.a = a
   
    def add(self, b):
        print(self.a + b)
        
    def multiply(self, b):
        print(self.a * b)
```

+ 子クラス

Calcクラスを継承したクラスCalcExtends
### class 子クラス名(親クラス)

```
class CalcExtends(Calc):     # Calcを継承
    def subtract(self, b):
        print(self.a - b)
        
    def divide(self, b):
        print(self.a / b)
```
```
calc_extends = CalcExtends(3)
calc_extends.add(4)
calc_extends.multiply(4)
calc_extends.subtract(4)
calc_extends.divide(4)
```
```:実行結果
7
12
-1
0.75
```
Reactアプリケーションをherokuにデプロイする方法

Reactアプリケーションをherokuにデプロイする際に自分が詰まったことを書きます。(2020/5/7)

今回は、``npx create-react-app my-app``作成した後にすぐにherokuにデプロイしています。

ここまでの手順は以下の記事を参考にさせて頂きました。
https://qiita.com/kuniken/items/70c2b5cd77d7c9301bcf

`git push heroku master`
を打ち込んでherokuにデプロイした後、Application errorが出ていました。
![error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243749/3b535130-ed1f-0281-57ce-dbfc2c9bb4c4.png)

`heroku logs --tail`でログを出してみると以下のエラーが出ていました。

`2020-05-06T15:16:46.732551+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=create-react-app-test.herokuapp.com request_id=c337d6d8-bfa9-4699-aed2-e0f912e5cafb fwd="116.0.149.123" dyno= connect= service= status=503 bytes= protocol=https`

```2020-05-06T15:16:47.083742+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=create-react-app-test.herokuapp.com request_id=b1d5a22c-a125-48a1-8f64-98abf4724b81 fwd="116.0.149.123" dyno= connect= service= status=503 bytes= protocol=https```


Herokuのdashboard > settings > buildpacks > add buildpacks > 以下のurlを追加。
https://github.com/mars/create-react-app-buildpack
<img width="1440" alt="スクリーンショット 2020-05-11 22.46.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243749/7dd56e98-bdd7-e648-efea-5e145cd62e0e.png">


この記事のコメント欄を参考にさせていただきました。
https://dev.to/smithmanny/deploy-your-react-app-to-heroku-2b6f

この後に`git push heroku master`再度デプロイしたらちゃんとブラウザに表示されました。
<img width="1160" alt="スクリーンショット 2020-05-07 1.13.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243749/f1b7e9a4-bb0d-e905-307e-da665989b8c4.png">
レジストラでのドメイン取得から利用まで

# 概要
レジストラ（ムームードメイン）でドメインを取得し、利用するまでの手順です。

# 前提
AWSのRoute53をネームサーバとして利用する場合の手順となります。

# 手順
1. ムームードメインにログインして、取得したいドメイン名を入力し、カートに追加します。
https://muumuu-domain.com/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/f7141bdf-40b4-3301-fbfa-5c61f2966536.png)

2. 「お申し込みへ」をクリックします。

3. ドメイン設定確認画面では、「ネームサーバは今はまだ使用しない」で進めます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/8f213442-cabe-0852-f4e6-c9aff4347c4a.png" width=70%>)

4. 支払い方法としてクレジットカード等の任意の方法を選択してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/3979b02a-a27e-cc92-4eae-c93e9bfbd0f3.png" width=70%>)

5. 申請を行うとドメイン取得を開始します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/2186a783-abba-fc12-db0b-b002aafa4528.png" width=50%>)
しばらくすると取得完了します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/4899d88a-e4a4-db94-8844-d75b53eceaa1.png" width=60%>

6. ムームードメインから登録完了メールが届きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/f42b19df-23c1-0a31-7ea0-c9976b8627d8.png)

7. 最大で24時間は「未認証一覧」に表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/ab1e7ca7-8ad0-f05b-b445-9e71a0ca1730.png" width=60%>

8. 反映されたら、AWSのRoute53にドメインを登録します。自動生成されるネームサーバの値をムームードメイン側に登録して完了します。また、whoisの情報を更新します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/8954f6cf-ddf2-0484-58da-33217188d81c.png" width=60%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252317/847eec8a-72cd-15f8-24f8-05ec885d9af1.png" width=60%>

9. digコマンドで登録したドメインの情報が返ってくるか確認します。また、whoisで登録した情報が表示されることを確認します。

続きとして、[取得したドメインをGsutieに登録します。]
(https://qiita.com/ryosuk/items/fd6d676a509e28591af1)
Could not open input file: artisanの解決方法

#はじめに
マイグレーションしようと思って以下のコマンドを打ったら
エラーは出たので解決方法を載せておきます

````
[vagrant@localhost]$php artisan migrate
Could not open input file: artisan
````

#解決方法
arisanファイルのあるディレクトリにいないことが原因です
artisanファイルがどこのディレクトリにあるか確認しましょう
単純ですが以外にハマりますwww