OmniAICreator/Qiita-1.07M huggingface dataset:
Ubuntuを入れた際に画面の色がやたらとおかしいときの対処方法

Ubuntu18.04をいれたらやたらと色がおかしかった。
やたらとビビッドで、隣に置いているノートPCの色と比べると一目瞭然で色が変。
その時の対処方法を備忘録的に記載しておく。

##PC構成
- OS : Ubuntu18.04
- GPU : GeForce RTX 2070 Super
- ディスプレイ : BENQ GW2760HS
- ディスプレイとPCの接続 : HDMI

##結論：単純にディスプレイ側の設定の問題

何かしらの理由から、自動で色の範囲が変わってしまうことがあるようだ。
ディスプレイ側のボタンを画像の用に操作して、`HDMI RGB PC範囲`を`RGB(0〜255)`にすることで解消

![IMG_4369.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293892/3428d18a-2657-a8ea-02cf-133fb4525b0b.jpeg)

OS側のガンマ値とか、設定を色々調べたのが馬鹿みたいだった。
Javaプログラミングの全て

## 1.Javaプログラミングの全て
```java:superHello.HelloJava.java
/** @author Ryome */
/** Javaプログラミングの全て（カプセル化・継承・ポリモーフィズム・インターフェース・オーバーロード・オーバーライド・
 *  List・try-catch・例外・Javadoc）*/
package superHello;

import java.util.Arrays;
class HelloException extends Exception{private static final long serialVersionUID=1L;HelloException(String m){super(m);}}
interface SuperHelloWorld {public abstract String SuperHello() throws HelloException;}
abstract class Hello implements SuperHelloWorld{final String HELLO="Helloworld";private String hello;
Hello(){this.hello=HELLO;}Hello(String hello){this.hello=hello;}public abstract String SuperHello() throws HelloException;
public String getHello(){return hello;}}
class HelloWorld extends Hello {HelloWorld(){super();}@Override public String SuperHello() throws HelloException{return getHello();}}
public class HelloJava{
    /** mainメソッド @param args 使用しない */
	public static void main(String[] args){
		try {Arrays.asList(new HelloWorld().SuperHello()).forEach(System.out::println);}catch(HelloException e){}finally{}
	}
}
```

- 上記の文をコピーして、文字コードは `S-JIS` を指定し、フォルダ名を `superHello` ファイル名を `HelloJava.java` で保存し、実行するとこうなります。↓↓　　　　　　
![Javaの全ての結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/7a0a8f0e-2044-b34c-6526-ec04bd689359.png)

## 2.GitHub
GitHubにソースコードを公開しています。

https://github.com/ryomeblog/qiita/tree/master/Java%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%85%A8%E3%81%A6


## 3.関連
- [【わかりやすく解説‼】Javaのインスタンスの使い方](https://qiita.com/ryome/items/62ba0d8395af6698053a)
- [【わかりやすく解説‼】Javaのカプセル化の使い方](https://qiita.com/ryome/items/fc44dfad297b35bf7559)
- [【わかりやすく解説‼】Javaの継承の使い方【オーバーライドの解説あり】](https://qiita.com/ryome/items/97b82c5519e39d3f21c1)
- [【わかりやすく解説‼】Javaのポリモーフィズムの使い方](https://qiita.com/ryome/items/a22457797988c548ec62)
- [【わかりやすく解説‼】Javaのオーバーロードの使い方](https://qiita.com/ryome/items/f1ca8cc7538f4c6d26c0)
- [【わかりやすく解説‼】ArrayListの使い方【Java】](https://qiita.com/ryome/items/cc01a7b6914e5b8b1579)
- [【初心者でもできる‼】Javadocの書き方](https://qiita.com/ryome/items/4f2d5928c8aaf195f407)
yukicoder contest 248 参戦記

# yukicoder contest 248 参戦記

## [A 1052 電子機器X](https://yukicoder.me/problems/no/1052)

29分で突破. N=10,11 について K=1～8 まで手で求めたらようやく分かりました(笑). N が偶数のときは、Kが奇数のときは偶数、Kが偶数のときは奇数しかでてこないので、最大が N / 2 になります. N が奇数のときは、偶数奇数両方とも出てくるので最大 N になります.

```python
N, K = map(int, input().split())

if N % 2 == 0:
    print(min(K + 1, N // 2))
else:
    print(min(K + 1, N))
```

## [B 1053 ゲーミング棒](https://yukicoder.me/problems/no/1053)

突破できず. WA 2個まで AC した後、3つに分かれているやつが一つでもあれば無理というのが抜けたまま、他に条件を満たすことが出来るパターンがあるのかと悩んで終了(笑). 条件を満たせることが出来るパターンは以下の2つ.

1. 色が最初から分かれていない (回数は0回)
2. 2つに分かれているのが1つだけあり、それが先頭と末尾 (回数は1回)

```python
N = int(input())
A = list(map(int, input().split()))

d = {}
prev = -1
for a in A:
    if prev != a:
        d.setdefault(a, 0)
        d[a] += 1
    prev = a

if all(v == 1 for v in d.values()):
    print(0)
    exit()

if any(v >= 3 for v in d.values()):
    print(-1)
    exit()

if len([v for v in d.values() if v == 2]) == 1 and A[0] == A[-1]:
    print(1)
else:
    print(-1)
```

## [C 1054 Union add query](https://yukicoder.me/problems/no/1054)

突破できず. [ABC138D - Ki](https://atcoder.jp/contests/abc138/tasks/abc138_d) みたいにまとめて足せるようにするんだろうなあとは思ったが、残り時間的に実装は無理で…….

追記: 解説どおりに Union Find 木を改造して実装. unite するときに、傘下に加わる親の値から、親の値を引くというのが言われてみればなるほどだった. 新しい親の分だけ数字が増えるのどうしようとか悩んでいた自分が間抜けすぎる. 解説では経路圧縮を抜いても大丈夫だと書かれていたが、Python は遅いし、経路圧縮を残すのがそれほど難しいとも思わなかったので、残して実装した. AC はしたが、割と時間ギリギリだったので残して正解だったのではなかろうか.

改造内容であるが find に親情報だけではなく、値の合計の情報を渡すようにした. そして、find は親の番号だけではなく、親にたどり着く途中の親の値の合計も返すようにした. 経路圧縮するときは、この途中の合計を自分の合計に足し込む必要がある. unite 時は前述の通り、傘下に入る親の値の合計から親の値の合計を引いて相殺する. 各ノードの値は、そのノードの値の合計と親の値の合計となる(経路圧縮の効果により).

```python
from sys import setrecursionlimit
from sys import stdin


def find(parent, amount, i):
    t = parent[i]
    if t < 0:
        return i, 0
    t, a = find(parent, amount, t)
    parent[i] = t
    amount[i] += a
    return t, amount[i]


def unite(parent, amount, i, j):
    i, _ = find(parent, amount, i)
    j, _ = find(parent, amount, j)
    if i == j:
        return
    parent[j] += parent[i]
    parent[i] = j
    amount[i] -= amount[j]


setrecursionlimit(10 ** 6)
readline = stdin.readline

N, Q = map(int, readline().split())

parent = [-1] * (N + 1)
amount = [0] * (N + 1)

result = []
for _ in range(Q):
    T, A, B = map(int, readline().split())
    if T == 1:
        unite(parent, amount, A, B)
    elif T == 2:
        j, _ = find(parent, amount, A)
        amount[j] += B
    elif T == 3:
        j, a = find(parent, amount, A)
        result.append(amount[j] + a)
print('\n'.join(str(v) for v in result))
```
EJSで「moment」というライブラリーを使用する方法

ウェブアプリを開発する際にEJSページで時間のフォーマットを指定したい場合はどうすればいいでしょうか？
ネット上で検索してみたが、いろいろな方法が出た。
でも、やってみた後で「moment」ライブラリーの使い方がいいと思う
じゃ、説明いたします

分かりやすいためにSails.jsフレームワークを使う
###最初、「moment」をプロジェックトにインストールする
```
npm install moment
```

###Sails.jsのアクションファイルでmomentを呼び出します
```
  fn: async function () {
    var postId = this.req.param('id');
    var postInfo = await Post.findOne({ id: postId });
    return { post: postInfo, moment: momentInfo };
  }
```
ESJページにmoment変数を渡すために```return { moment: momentInfo };```を使う
そうした後でESJページでmoment変数がある
###最後、moment変数をESJページで呼び出します
```
 作成日 <%= moment(post.createdAt).format('YYYY/MM/DD') %>
```
結果は「```作成日 2020/05/15```」をブラウザで表示される
※「post.createdAt」はデータベースに「1589531502042」を格納する。

以上です
【Swift × UIデザイン】アプリデザインの思考法✏️


#目次
1、UI/UXってそもそも何？
2、「誰に向けて作るの？」を考えてアプリのUIを決める
3、レイアウトは、世の中にあるアプリをパクれ
４、iPhoneならではのUI設計


<h1>１、UI/UXってそもそも何？</h1>
 UI/UXって言葉、よく聞くと思うのですがそもそもの意味、知ってますか？

<h3>UIとは</h3>
![13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547466/9679d22a-3537-796e-411b-684dcf547ad5.jpeg)
　UIとはユーザーと製品やサービスのインターフェース（接点）のことです。
　よって、iPhoneアプリの場合、UIはスマホの画面全体（触れる部分、見る部分を兼ねる）です！XCodeの場合だと、UIの大半はStoryboardで設計できますね🙆‍♀️しかし、他にもiPhoneには振動でFBを返す機能ありますが、これもUIですね、これはコードで設計できます。

<h3>UXとは</h3>
![56.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547466/5ded61b3-4e71-1fd3-dfcc-33a0fe17fb33.jpeg)

 UXとは、ユーザーが製品やサービスを通じて得られる体験のことです。よいUXを生み出すためには、アプリのUIを改善したり、メモリを食わないコードに書き換えたりすることが大事になってきます。


<h1>「誰に向けて作るの？」を考えてアプリのUIを決める</h1>
　UIはアプリの見た目のことをさすので、色だったりレイアウトだったり、アプリ全体の雰囲気だったりが関わってきます。UIデザインを考える際、常に問いかけて欲しいことは、

・あなたの作るアプリ、誰に向けて作ってるの？

　これです。
　
<h3>UI 【色や雰囲気】</h3>
　例えば、「子育てママのためのインスタグラム」だったら、どんな色、雰囲気のアプリにするでしょうか？
![18.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547466/e9bbc020-3a08-04c0-f0f2-e4b881077a7f.jpeg)
　使う人は「小さい子供がいるママ」。「子供」「ママ」というキーワードから、色がもつイメージを結び付けて色を選ぶと左のような色、雰囲気になりました。右の雰囲気はちょっと違和感を感じてもらえるかなと思います。
　
　「自分の作るアプリがどの色・雰囲気が合うか分からない」という人は、自分のアプリに関連するキーワードの画像をググってみましょう。その画像を見れば、世の中の大多数の人が、そのキーワードいついてどんな色や雰囲気の印象を持っているかが分かります。

<h3>UI 【ターゲットに合わせた細かい設計】</h3>
　UIは、使うターゲットユーザーに合わせた細かい設計も必要になってきます。

　例えばこれは、「小学生ぐらいの子供向けのクイズアプリ」の画面の一部なのですが、
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547466/96e74ea9-78b5-57c6-7819-b0da4bf02f29.png)
　このように、「小学生の子供向け」という部分を考慮して、

　・小学生でも読めるように漢字少なめ
　・漢字にはルビをふる
　・子供は手が小さいので、スマホ自体が大きく感じるはず。机などに置いて使うかもしれない、じゃあボタンは大きめにしておこう。（想像力を働かせましょう）
　・色は小学生が好きな色ランキングから引用

　などということを考えてUI設計をしています。

　あなたの作るアプリのターゲットは誰ですか？
　こういった部分も、UI設計には欠かせません！



<h1>3、レイアウトは、世の中にあるアプリをパクれ！</h1>
 　レイアウトは、世の中にあるアプリをパクりましょう🔥自分オリジナルのレイアウトを生み出しすぎてはいけません。

　なぜかというと、人は慣れているものは直感的に操作することができるからです。
　初めて使うアプリにおいて、人はある程度経験的に、「ここにこういう機能があるだろう」と予測しながら使っています。よって、予測もしないところに探している機能があったり、逆になかったりするのはユーザーにとってストレスなのです。これは良いUXとはいえません。
　
　じゃあどうすればいいか、世の中にあるアプリをパクりましょう🔥
　世の中に出ていて、かつ「多くのユーザーに使われている」アプリのレイアウトを参考にしてUI設計するのが、最初のうちはおすすめです！☺️（TwitterやInstagramなど）
　そういったアプリを参考にして、アラートが出るタイミング、ボタンに含まれる選択肢、アプリの階層などを設計していきましょう。

<h1>４、iPhoneならではのUI設計</h1>
　iPhoneならではのUI、それは何といっても「直接指で触れることで操作できるスクリーン」です。これがiPhoneアプリの最大の魅力だと思います！

　しかし、このiPhoneのUIだけに特化して気をつけないといけないことがあります。

<h3>よく使うボタンは指の稼働範囲内に配置する</h3>
 よく使うボタンや、アプリ内容のキーになるようなボタンは指の稼働範囲に配置しましょう。そういったボタンが押しにくい位置においてあったらストレスです。
　一回作ってみたら、実機でシミュレーションして

　・ボタンの位置は大丈夫？
　・ボタンの大きさは大丈夫？

　という点をチェックしてみましょう！自分が実際に使ってみることが大事。

　逆に押しやすすぎると困るもの（画面遷移したり、削除するボタン）は押しにくい場所に配置しましょう！（NavigationBar上に配置されていることが多いですね！）

<h1></h1>

以上がUI/UXアプリデザインの思考のコツでした。
これを1人でアプリを作るときのヒントにしてみてください！
Django コマンド メモ


### 開発環境

#### virtualenv
インストール

```
$ pip3 install virtualenv
```
仮想環境のディレクトリの作成

```
$ mkdir work   #①
$ cd work   #②
$ virtualenv -p python3 venv   #③ 
$ source venv/bin/activate   #④
(venv) $ tiyurinoMacBook-proとなっていれば完了  #⑤ 
```
仮想環境から離脱

`$ deactivate`

仮想環境を削除したい場合はディレクトリごと削除してしまえばOK
`$ rm -rf venv`

***
仮想サーバー起動
`$ python manage.py runserver`
サーバーURL
` http://127.0.0.1:8000/`

お世話になったサイト
https://creepfablic.site/2019/10/25/python-virtualenv/
MacOS Catalinaの標準辞書アプリに英辞郎を入れる

#環境
・MacOS Catallina 10.15.4
・辞書データ（"https://www.tecorin.com" から購入したもの）

#経緯
・MacBook 10.15.4 (Mojaveからのアップデート）では、辞書データは"~/Library/Dictionaries/"にあり。
・新しく調達したMacBook Proに "~/Library/Dictionaries/" がない。
・それらしい箇所にもない。

```sh:terminal
/System/Library/
/System/Library/Assets/
/System/Library/AssetsV2/
```

・New Oxford American Dictionaryが入っているディレクトリにコピーしてみたけどダメ

```sh:terminal
/System/Library/AssetsV2/com_apple_MobileAsset_DictionaryServices_dictionaryOSX/***.asset/AssetData
```

#解決方法
ユーザディレクトリのライブラリ内に"Dictionaries"を作成
・“mkdir ~/Library/Dictionaries" 

```sh:terminal
mkdir ~/Library/Dictionaries
```
・作成したディレクトリに準備した辞書データをコピー


上記でOS標準辞書アプリで英辞郎を選択できるようになった。
LaunchScreenの画像をVector(PDF)画像に置き換えてもアプリ起動時の画像が変わらなかった問題

## 結論
### 方法1
- LaunchScreenに使っているAssetsの画像名を変更する

### 方法2
- cacheを削除するコードを呼び出す([参考元](https://rambo.codes/posts/2019-12-09-clearing-your-apps-launch-screen-cache-on-ios))
  - 試してないので実際に効果あるかは未確認

```swift:filename.swift
import UIKit

public extension UIApplication {
    func clearLaunchScreenCache() {
        do {
            try FileManager.default.removeItem(atPath: NSHomeDirectory()+"/Library/SplashBoard")
        } catch {
            print("Failed to delete launch screen cache: \(error)")
        }
    }
}
```

## ことの始まり
iOSのアプリ起動時に表示されるLaunchScreenだが、多くはアプリやブランド、企業のロゴ画像を表示しているだろう。

このロゴ画像が何かしらの理由で差し替えが必要になった際、単純にAssetsの画像を入れ替えるだけでは上手くいかないことがあった話である。

今回ロゴ画像にノイズが乗っており見栄えが悪かったので、ノイズのない画像をVector画像で用意してもらった。

そして単純にAssetsでファイルを入れ替えを行ったところ、アプリ起動時の画面ではなぜか古い画像が表示されたのである。

## 原因
このLaunchScreenで使用しているロゴ画像は、アプリの別画面でも使用していたので、そちらを確認したがそちらは正しく新しい画像が表示されていた。

結構前にもLaunchScreenの画像の表示が上手くいかないことがあったのを記憶していたこともあって、原因に思い当たる節があった。


それは… **キャッシュ(cache)** である。

## 調査
cacheなら期限とか時間置けば消えるだろうと思って大雑把に日付を進めてはアプリを起動して画像が新旧どちらが表示されるか確認したところ、

- 約30日後 => cacheが残っている
- 約60日後 => cacheが消えている

ロゴ画像を差し替えたいのに、実際にそのipaをリリースしてからcacheが消えるまで悠長に待つ開発者なんているだろうか？あほなの？

<br>
ならば、どうやったら即時反映されるか、弄り回した結果、どうもAssetsの画像名でcacheしているらしく`Assetsの画像名を変更する`がお手軽かつ最速だと判断した。

---

おまけでcacheなら意図的消してしまえばいいのでは？と思い調べたところcacheを消す話を書いているサイト(結論の方法2の参考元)を見つけたが、cacheがあることで高速起動している点もあるだろうことから、コードでcache消すのはあまりいい感じがしなかったので止めた。
MySQLのSELECT結果をtsvに出力してcsvに変換するまで

## はじめに
そんなに頻繁に発生する作業ではないのですが、MySQLのSELECT実行結果をCSVファイルで手元に保存しておく方法について、いざやろうとすると以前はどうやっていたのか忘れがちなのでやり方を残しておくことにしました。今日はそんな話です。

## 手順
`{******}`の部分と、出力先パスはお使いの環境等に合わせて書き換えてください。

### 1. tsv 出力

```sh:サーバー側プロンプト
user@server:~$ echo "{SQL文}" | mysql -u{user} -p{pass} {db} > /path/to/filename.tsv
```

### 2. csv 変換
前項で出力した tsv ファイルに対して下記コマンドを実行してください。

```sh:サーバー側プロンプト
user@server:~$ cat filename.tsv | tr "\\t" "," > filename.csv
```

### 3. 自分の端末にダウンロード
FTPソフト等でサーバーに接続できる方はそれ使ってもらえればOKです。
今回は scp コマンドで実行したので、ついでにそのサンプルも残しておきます。

```sh:ローカル側プロンプト
$ scp {user}@{host}:/serverside/path/to/filename.csv /local/path/to/filename.csv
```

## SQL注意点
SQLで取得したデータの中に改行、タブ、カンマが含まれていると、tsv や csv に変換した際に必要以上に分割が行われてしまいます。その結果、列数が増えてしまいヘッダの項目と合わなくなってしまうことが多々ありました。(ヘッダでは5列しかないのに、中身は6列以上ある、みたいな状態になります。)

csvに変換する前に改行、タブを取り除いておくとこういった事故をある程度防ぐことができます。
ここでは`REPLACE`関数で改行とタブを半角スペースに置換しておく方法を使いました。

なお、面倒ですがこの REPLACE 処理は問題のデータが入ってきそうなカラム全てに適用が必要です。(id など、特定の文字列しか入ってこないカラム等は必要ないです。主に自由入力系のフォームから送信された値を保存するカラムでこの問題が起こりえます)

```sql
SELECT
  --- char(13) => CR, char(10) => LF, char(9) => tab
  REPLACE(
    REPLACE(
      REPLACE(
        REPLACE(columun_name, char(13), ' '),
      char(10), ' '),
    char(9), ' '),
  ',', ' ') AS 'column_name'
FROM table_name
```

## 参考リンク
- [MySQL :: MySQL 5.7 Reference Manual :: 12.7 String Functions and Operators](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace)
- [MySQLで抽出結果をファイルに出力する方法 - Qiita](https://qiita.com/tas6/items/ec7e23278ee2b40aad79)
- [SQLで改行コードやタブコードを削除(置換)する方法 | ホームページ制作のサカエン（墨田区）](https://www.saka-en.com/oracle/sql-crlf-tab-delete-or-replace/)
- [Linuxコマンド【 scp 】リモートマシンにファイルコピー - Linux入門 - Webkaru](https://webkaru.net/linux/scp-command/)
[エラー解析]デバッグして、Gemの中身を確認して、エラーの原因を特定した

## わけのわからんエラーが表示された

Facebookログイン画面の操作中に、以下のOKボタンを押すと、500番エラーが表示されログインができない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576318/622c931c-d217-ef38-3524-0e6e51d4b284.png)

ターミナルのログには`undefined method 'load_from_provider' for #<Class:0x00007ff2e7d32a98>`というエラーメッセージが表示されている。
Facebook固有のページには遷移できているのに、何故ログインできないのか原因を掴めなかった。

## 原因とその解決方法
結論を述べると、Userモデルの`authenticates_with_sorcery!`という、sorceryを使用する上で必要な記述がなぜか抜け漏れていたため(まさかすぎて全然気づけなかった)。
その抜け漏れを発見するまでのデバッグ処理のプロセスが勉強になったので、自分のために以下に記していく。

### 解決手順
`app/controllers/oauths_controller.rb`のcallbackアクション内でデバッグを行い、`if @user = login_from(provider)`の箇所で`next`を実行してみると、そこで例外が発生し、rescueで捕捉されていることが分かった。
<img src="https://runteq3-production.s3.amazonaws.com/uploads/temporary_image/image/33/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2020-05-01_18.05.58.png" width="100%">

→`if @user = login_from(provider)`で何か問題が発生していることが分かったため、その中身を掘り下げていく。

→`next`と`step`を使いながら、原因箇所を特定していく。
<img src="https://runteq3-production.s3.amazonaws.com/uploads/temporary_image/image/34/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2020-05-01_18.10.17.png" width="100%">

ログのエラーで`undefined`として表示されていた`load_from_provider`メソッドが使用されている箇所まで辿り着いた。
→このメソッドは`user_class.load_from_provider`という形で使われている。
→`user_class`がnilになっているせいで、"undefined method load_from_provider"となっているのかも？
→`user_class`をデバッグしたが、ちゃんとUserモデルは入っている(nilじゃない)。
<img src="https://runteq3-production.s3.amazonaws.com/uploads/temporary_image/image/35/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2020-05-01_18.11.45.png" width="100%">
`load_from_provider`自体が使えない状態になっているのかも？
→そういえばsorceryの機能使うための`authenticates_with_sorcery!`て定義があったはず。
→Userモデルを確認すると、削除されていた。この定義を足し戻すとfacebookログインが出来た。

このように問題箇所と思われる範囲を徐々に狭めながら、原因を特定する力を身につけなければと思ったのであります。。
Matrixとしての歴史(関数史観)

# 関数史観入門
Matrixとしての歴史とは、歴史を静的オブジェクトとして捉え、変化を関数で表し、固定物を定数で、資本(C)を変数として表す方法である。
y = f(x)で示されるが、
非営利の行動の場合は、f(x) = THING(x) Cは定数。
営利の行動の場合は、f(x) = THING(x,C')で示される。Cは変数。
戦争の場合はW(x) = E'(x,C')として表すことができる。Eは動的関数。Cは変数。
人口の変化はf(x,y) = f(x,y-1)*(√(MPY/WPY))で示すことができる。
関数史観のメリットとして感情論が入る余地がないことがメリットとしてあげられる。また、関数史観は未来予知としても利用でき、未来予知ができるようになると、全てがわかることができる。
CSS 見出しに横棒

#CSSで見出しに横棒をつける

```html

<h2 class="line">ライン</h2>
```
```css
.line {
        display: flex;
        align-items: center;
      }
.line::before,
.line::after {
             content:"";
             height: 1px;
             width: 10px;
             background-color: #333;
             }
```

ーラインー

↑こんな感じの横棒を付けられる。
widthを消して、 

```
flex-grow: 1;
```
とすると横幅いっぱいの横棒になる。
シンプルなImageEffect　その８。VPOSを使った走査線

Twitterにアップした走査線ImageEffectのシェーダコードを貼っておきます

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">シンプルなImageEffect。VPOSの使用による走査線(ScanLine)表現。<br><br>VPOSを使うので#pragma target 3.0が必要。<br>幅調整できるようにしてみたけど使い途有るかなぁ・・・ <a href="https://t.co/K4giwgRjRd">pic.twitter.com/K4giwgRjRd</a></p>&mdash; MIYAKE (@ScreenPocket) <a href="https://twitter.com/ScreenPocket/status/1260086366362193920?ref_src=twsrc%5Etfw">May 12, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ポイントは

- VPOSを使っているので #pragma target 3.0が必要
- _Sizeの値を調整する事で走査線の太さを変更できる（ただ、そんな機能必要かな？？普通太さ1pxでは？）
- 走査線は固定色で潰すのではなく、colorの２乗で明度を落としつつ彩度を上げるような合成にして滲みを表現してみた

って感じですかね。

```glsl:ScanLine.shader
Shader "ScreenPocket/ImageEffect/ScanLine"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Size ("Size", Float) = 1
    }
    
    SubShader
    {
        // No culling or depth
        Cull Off ZWrite Off ZTest Always

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma target 3.0

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
            };

            v2f vert (appdata v,
            out float4 outpos : SV_POSITION)
            {
                v2f o;
                o.uv.xy = v.uv;
                outpos = UnityObjectToClipPos(v.vertex);
                return o;
            }

            sampler2D _MainTex;
            float _Size;

            fixed4 frag (v2f i,
                UNITY_VPOS_TYPE screenPos : VPOS) : SV_Target
            {
                half4 col = tex2D( _MainTex, i.uv );
                float rate = frac(screenPos.y * ( 1.0 / _Size ));
                col = lerp( col, col*col, round( rate ) );
                return col;
            }
            ENDCG
        }
    }
}

```

線を固定の色（例えば黒）で塗りつぶしたい場合は　col*col　の部分を、fixed4(0,0,0,1)　に置き換えてもらえば対応可能かと。
【Rails tutorial】 リスト 9.25: [remember me] チェックボックスのテストでエラーになる。【9章】

##エラー内容
Rails tutorial９章　リスト9.25を実施時に以下エラーとなりました。

```
 FAIL["test_login_without_remembering", UsersLoginTest, 4.873426502104849]
 test_login_without_remembering#UsersLoginTest (4.87s)
        Expected "I8qYEjEm7MeNLQbqt4YM3A" to be empty.
        test/integration/users_login_test.rb:52:in `block in <class:UsersLoginTest>'
```

チェックボックスのオンオフが効いてないようです。
セッションのコントローラーについて確認してみると・・・


```app/controllers/sessions_controller.rb
  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      log_in user
      params[:session][:remember_me] == '1' ? remember(user) : forget(user)
      remember(user)
      redirect_to user
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end
```
remember(user)を消し忘れていたことが原因のようです。
これだとparams[:session][:remember_me] == '0'の場合でもremember(user)メソッドを実行しちゃいますね。

remember(user)を消してテストを実施。
今度はテスト成功しました！
Dockerコンテナ（Ubuntu）でOpenCVのimshowが表示されないときの対処法

#はじめに
筆者はQiita初投稿である。
Qiitaの書き方について「もっとこうした方がいいよ！」などコメント頂けると幸いである。

#経緯と問題
###経緯
機械学習の勉強として、かめ@米国データサイエンティストさんの記事を参考にし、Dockerコンテナ上（Ubuntu）でJupyter Labを使用できるようにした（参照１）。また、追加でOpenCVをインストール＆インポートを行った（参照２）。

[（参照１）DockerでJupyter Labを使う](https://datawokagaku.com/startjupyternote/)
[（参照２）OpenCVによる画像の読み込みと色空間の変換，表示](https://datawokagaku.com/opencv/)

###問題
OpenCVをいろいろ勉強しようと思い、参照１・参照２で構築したUbuntu上のJupyter LabでOpenCVのimshowで画像を表示しようとすると***Kernel Restarting***となり表示されない。

![ccead6dfde6d928a2da9a8413e5e99eb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544886/73df31e1-f976-badc-cca2-9c3a0ef9641b.png)

その際にTerminal上で表示されたJupyter Labのログ？は以下の通りある。
***cannot connect to X server*** ? なんじゃそりゃ？

```
[I 12:38:37.627 LabApp] Kernel started: a79b264a-3b96-463d-83d6-64904b98938a
: cannot connect to X server
[I 12:38:46.627 LabApp] KernelRestarter: restarting kernel (1/5), keep random ports
kernel a79b264a-3b96-463d-83d6-64904b98938a restarted
```


また、そのとき実行したコードはこちらである。

```
import cv2
import os

img = cv2.imread("src/Berry.jpg")

cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```

#対処法
###XQuartzの導入・起動
***cannot connect to X server***について調べてみると、
UNIX系のOSではGUI環境（画像を表示する）を作るのにX Window Systemを利用する必要があるらしい。
XquartzはmacOS用のX Window Systemでそれを導入・起動する。

```
$ brew cask install xquartz #インストール
$ open -a XQuartz #起動
```

ちなみにX Window Systemはクライアントサーバ型のシステムで、今回は以下の通りである。
・Xクライアント：macOS上のDockerコンテナ（Ubuntu）
・Xサーバ：macOS

###Xサーバへの接続権限を付与
下記のコマンドを実行し、Xサーバへの接続権限を与える。

```
$ ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}') #macOSのIPを取得
$ xhost + $ip #接続権限の付与
```

###DISPLAY環境変数、X Windowをオプションで付けてコンテナをRUN
Dockerイメージをbuildしたら下記を実行する。

```
docker run -p 8888:8888 -e DISPLAY=$ip:0 -e USER=root -v /tmp/.X11-unix:/tmp/.X11-unix -v ~/Desktop/ds_python:/work --name my-lab ｛イメージID｝
```

ちなみに参照１に記載されているRUNコマンドに以下のオプションを追加したものである。
-vオプション(２つ目）は各自好きなように設定すること。
・-eオプション（１つ目）：DISPLAY環境変数の設定、Xサーバへの接続権限を付与したmacOSのIPが入る
・-eオプション（2つ目）：コンテナ内のUbuntuユーザをrootに指定
・-vオプション(1つ目）：X Windowを接続

＃結果
ミッションコンプリート。imshowで画像が表示されるようになりました。
![951f8498a6fb6210e502302a5cc01110.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544886/5d7e7d93-411a-55ab-ca31-d2a34d2107b0.jpeg)


#結論
以下をすることでDockerコンテナ（Ubuntu）でOpenCVのimshowを表示することができた。
・XQuartzの導入・起動
・Xサーバへの接続宣言を付与
・DISPLAY環境変数、X Windowをオプションで付けてコンテナをRUN

#参考ページ
今回の解決にあたって参考となったページは以下の通りである。
・[Dockerコンテナの中でGUIアプリケーションを起動させる](https://unskilled.site/docker%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AE%E4%B8%AD%E3%81%A7gui%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%95%E3%81%9B%E3%82%8B/)
・[Docker for Macで作ったUbuntuコンテナ内のGUIプログラム（spyder）を使う](https://ur.edu-connect.net/archives/29091)
・[Dockerを導入してGUI操作可能なLinux(Ubuntu)コンテナを作成する](https://qiita.com/ryoya-s/items/ee1daf9cab18c100c990)
Windows Subsystem For Linux導入方法

#前提
Windows 10にUbuntuを導入する
(2020/5/15現在、Ubuntu20.04が入る)

# インストール方法
1. Windowsボタンを押して storeと入力し Microsoft storeを起動
2. Ubuntuと入力
3. Installを押す
4. インストールできたら起動する
5. 多分起動できない旨のエラーメッセージが出るので、スタートボタンを押して'windows features'とタイプし、ウィンドウズ機能のオンオフ画面を出す
6. Windows subsystem for Linuxをチェックしてオンにする
7. PC再起動
8. 再起動後、Ubuntuを開く
ゼロから始めるLeetCode Day26「543. Diameter of Binary Tree」

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

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

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

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

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

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

前回
[ゼロから始めるLeetCode Day25「70. Climbing Stairs」](https://qiita.com/KueharX/items/5a8993968c995b074737)

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

[Twitter](https://twitter.com/kueharx)やってます。

# 問題

[543. Diameter of Binary Tree](https://leetcode.com/problems/diameter-of-binary-tree/)
難易度はeasy。
Top 100 Liked Questionsからの抜粋です。

二分木が与えられるので、その木の直径を返します。
なお、ここでの直径とは各ノード間の中で最も長い距離を行き来するような通路のことを指します。

```
Example:

Example:
Given a binary tree
          1
         / \
        2   3
       / \     
      4   5    
Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3].

Note: The length of path between two nodes is represented by the number of edges between them.
```

この場合だと4から3までいく場合と5から3までいくものの二つが最長であり、間にある枝の数が3なので3を返します。

# 解法

深さ優先探索でときました。


```Python
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def diameterOfBinaryTree(self, root: TreeNode) -> int:
        self.ans = 0
        
        def dfs(node):
            if not node:
                return 0
            right = dfs(node.right)
            left = dfs(node.left)
            self.ans = max(self.ans,left+right)
            return max(left,right) + 1
    
        dfs(root)
        return self.ans
# Runtime: 44 ms, faster than 72.73% of Python3 online submissions for Diameter of Binary Tree.
# Memory Usage: 15.9 MB, less than 51.72% of Python3 online submissions for Diameter of Binary Tree.
```

基本的な流れは一般的な深さ優先探索のそれと一緒です。ただ、今回は長さを調べる必要があるので、そのための変数`ans`を用意し、計算を付け加えました。

割と過去の木の問題でも深さ優先探索ばかり書いているのでそろそろ幅優先探索とかも勉強しなきゃなぁと思います。
今日はもう遅いのでこれでお終いです、お疲れ様でした。

良さげな解答が他にあれば追記します。
Test Vuetify display helper

# SSIA

[CSS Display helpers — Vuetify\.js](https://vuetifyjs.com/en/styles/display/)

## Visibility

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

## Printability

<p class="codepen" data-height="265" data-theme-id="default" data-default-tab="result" data-user="5XkaeKVqhJ7V" data-slug-hash="XWmQRBo" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="Vuetify test Printability">
  <span>See the Pen <a href="https://codepen.io/5XkaeKVqhJ7V/pen/XWmQRBo">
  Vuetify test Printability</a> by F88 (<a href="https://codepen.io/5XkaeKVqhJ7V">@5XkaeKVqhJ7V</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
fluentdのsyslogプラグインを使ってsyslogプロトコルでログを受け取る

syslogプロトコルをfluentdで直接待ち受けてログを受信します。

ログの出力先はfluentdの動くホスト上のファイルとします。


# 最小の設定でとりあえずfluentdを起動

設定ファイルは以下のような感じです。

```sample.conf
<source>
  @type syslog
  port 5140
  bind 0.0.0.0
  tag test
  <parse>
    @type none
  </parse>
</source>
<match test.**>
  @type file
  format single_value
  append true
  path output.txt
  <buffer>
    chunk_limit_records 1
  </buffer>
</match>
```

```console
$ fluentd -c sample.conf
```

これでUDPの5140ポートでログを待ち受けます。


# 設定ファイルの説明

syslogで受け取るPriority（syslogにおいてfacilityとseverityを表す`user.info`とか`security.alert`みたいな文字列）はfluentdのタグに連結されます。この設定では `tag test` と書いているので、`user.info`というPriorityのログが来たら、fluentdでのタグは `test.user.info` に変わります。したがって、設定ファイルの`match`ではsyslogから来たログをすべて受け取るにはワイルドカードを使って `test.**` のように書く必要があります。

`chunk_limit_records 1` という記述は、動作検証しやすいように、ログをfluentdがバッファリングせずに1件ずつファイルに書き出してほしかったので書いたものです。


# loggerコマンドで試してみる

`logger`というコマンドでsyslogプロトコルを発することができます。fluentdをローカルで動かしていて5140ポートで待ち受けているので、以下のようにすればfluentdにログを手動で送信できます。

```console
$ logger -n localhost -P 5140 -p user.info -t tagsample1 messagesample1
$ logger -n localhost -P 5140 -p user.info -t tagsample2 messagesample2
```

`-p`オプションはsyslogのPriority、`-t`オプションはsyslogのタグ、その後ろはログ本体です。この`logger`コマンドによりfluentdは次のようにファイルに出力します。

```
$ cat output.txt.20200515.log
1 2020-05-15T17:43:53.083565+09:00 0e495fc17308 tagsample1 - - [timeQuality tzKnown="1" isSynced="1" syncAccuracy="589500"] messagesample1
1 2020-05-15T17:44:42.659572+09:00 0e495fc17308 tagsample2 - - [timeQuality tzKnown="1" isSynced="1" syncAccuracy="614000"] messagesample2
```

# parseの設定

```
  <parse>
    @type none
  </parse>
```

fluentdの設定ファイルのこの`<parse>`の部分がないと、`logger`コマンドからログが届いたときに `invalid input data` というエラーが発生して受け取ることができませんでした。

`<parse>`の部分を以下のようにすると、`logger`コマンドからの場合は日時などのメタ情報がいっさいなくて、ログ本体のみが出力されました。

```
  <parse>
    @type syslog
     message_format auto
  </parse>
```

```console
$ logger -n localhost -P 5140 -p user.info -t tagsample3 messagesample3

$ cat output.txt.20200515.log
messagesample3
```

`<parse>`の`message_format`には`auto`のほかに`rfc3164`または`rfc5424`という値も設定できます。`rfc5424`にすればRFC5424でログをパースしてくれます。

RFC3164とRFC5424の違いを含むsyslogプロトコルの詳細は以下の記事がわかりやすいです。

[syslogプロトコル再入門 ～フォーマット(BSD/IETF形式),Facility/Severity一覧,Ciscoの設定～│SEの道標](https://milestone-of-se.nesuke.com/l7protocol/syslog/syslog-summary/)


# リンク

fluentdのsyslog Inputプラグインのドキュメント
[syslog - Fluentd](https://docs.fluentd.org/input/syslog)

fluentdのsyslog Parserプラグインのドキュメント
[syslog - Fluentd](https://docs.fluentd.org/parser/syslog)

ソースコード
[fluentd/in_syslog.rb at master · fluent/fluentd](https://github.com/fluent/fluentd/blob/master/lib/fluent/plugin/in_syslog.rb)
[fluentd/parser_syslog.rb at master · fluent/fluentd](https://github.com/fluent/fluentd/blob/master/lib/fluent/plugin/parser_syslog.rb)

以上。
【JavaScript】関数、無名関数、即時関数の違い、書き方を覚えるために実施したこと

#【JavaScript】【初学者向け学習法】関数、無名関数、即時関数の違い、書き方を覚えるために実施したこと

私と同じようにこれからJavaScriptを学習する/している方向けの記事です。
タイトルの通り、関数、無名関数、即時関数を理解するために実施した学習方法です。
もし同じレベル感でお悩みの方の参考になれば幸いです。

背景：
プログラミング学習には、手を動かすのが大切と言われます。
動画を見ながらエディタで手を動かすのですが、動画の速度に追いつかず、タイピングもどきで終わることがありました。タイピングに終始していると理解が追いつきません。
そんな自分の学習効率を改善するために考えた方法です。

やったこと：
事前準備：
・事前に解説動画を見る
・一緒に画面の処理をタイピングするが、追いつかない場合は解説の理解に集中する
・正解を複写し、コメントアウトで控えておく

①模写した正解を見ながらエディタに式を書く
②Google Chromeのデベロッパーツールで表示させる
③なぜ表示されたのかを自分に説明する。できないうちは①②の複写を繰り返す
④①の内容を変えて書き、以降繰り返し

①は手を動かすことで記憶する
③は自分への説明で記憶を定着させる
④は変化を与えることで学習効果を高める
ということをしています。

具体例です。

```js

    function hello(name){
        var Hello = "hello " + name;
        return Hello;
    }

    var result = hello("Tom");
    console.log(result);
```
ここで①②を実行し、結果を確かめたうえで、③で自分に説明します。
模写で精いっぱいだと説明できないので①②を繰り返します。

模写を見ないでできるようになると、処理内容を考える余裕が生まれます。
そうすると③の自分への説明に進めます。
この場合だと3つに分けて説明しました。

・hello関数は関数内でローカル変数Hello変数の処理内容を作り、returnで内容を出力する
・result変数はhello関数から処理のバトンを受けとった
・console.logでresult変数を表示した

※声に出した場合は、音声情報として記憶の定着効果が高まります
次に④である変化として無名関数で処理してみました。

```js

    var hello = function(name){
        var Hello = "hello " + name;
        return Hello;
    }

    var result = hello("rachel cook");
    console.log(result);
```

①②で模写ができるようになっているので、改変する余裕があります。
こちらも自分に説明できたら、次は変化の幅を変えて、別の処理内容を書きます。
文字列の表示から四則演算に変えました。

```js
    function add(a,b){
        var Add = a + b;
        return Add;
    }
    var result = add(1,2);
    console.log(result);
```

次の変化は引数の数を増やした無名関数Ver.
ローカル変数名に計算を意味するcalcutlationと命名し、英語学習も兼ねました。

```js
    var add = function(x,y,z){
        var calculation = x + y + z;
        return calculation;
    }
    var result = add(10,11,12);
    console.log(result);
```

次は関数と即時関数の変化を書きました。

```js
    function hello(){
        console.log("hello");
    };
    hello();
```

```js

    (function hello(){
        console.log("hello there.");
    })();
```

ここに至るまでに関数の形を手が覚えているので、()で括る箇所も理解して使うことができました。

そして学習フローをこのように記事にすることで、自分の理解度を確認。
関数以外の学習にも応用できるようにと考えた次第です。
こうした方が効率が良い、という知恵がありましたら、コメントをお寄せ頂けますと幸いです。
タプルについて

```python
num_tuple = (10, 20)
print(num_tuple)

x, y = (10, 20)
print(x, y)

x, y = (10, 20)
print(x, y)

x, y = 10, 20
print(x, y)

a = 100
b = 200
print(a, b)
a, b = b, a
print(a, b)
```
Windows ショートカットキー

自分用


    Alt + Tab
        ウィンドウを切り替える。
        
    Win + ↑↓←→
        ウィンドウを上下左右半分に分割
          
    Alt + F4
        ウィンドウを閉じる

    Win + D
        表示されているウィンドウをすべて最小化し、ディスプレイを表示する
        もう一度押すと元の状態に戻る

<b>
 
    F2 (ファイル/ディレクトリを選択して)
        ファイル/ディレクトリの名前を変更できる

    Win + E
        エクスプローラのウィンドウを開く

<b>
   
    Windows + R

    /cmd
        コマンドプロンプト
    /notepad
        メモ帳
    /wordpad
        ワードパッド
    /mspaint
        ペイント
    /powershell
        PowerShell
    /winword
        Word
    /excel
        Excel
    /powerpnt
        PowerPoint
    firefox
        Firefox
    chrome
        Google Chrome
    documents
        "ドキュメント" ディレクトリ
    pictures
        "ピクチャ" ディレクトリ
    desktop
        "デスクトップ" ディレクトリを開く
   
<b>
外部データのインポートマクロ


```vb:ImportExternalData.bas

Option Explicit

Sub 外部データのインポート()

    Dim ConnectionString As String
    Dim Query As String
    Dim ResultRange As Range

    ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;" + _
                        "Data Source=LocalHost\SQLEXPRESS;Initial Catalog=Test01"
    Query = "SELECT TOP 100 * FROM [sys].[objects] WHERE object_id > ?"

    'クエリの実行結果をアクティブセルにインポートする
    '※Array(10)はクエリパラメータ
    Set ResultRange = ImportDataUsingConnectionString(ActiveCell, ConnectionString, Query, Array(10))

    If Not ResultRange Is Nothing Then
        'インポートしたデータをテーブル化
        Call ResultRange.Parent.ListObjects.Add( _
            SourceType:=xlSrcRange, _
            Source:=ResultRange, _
            XlListObjectHasHeaders:=xlYes _
        )
    End If

End Sub

Function ImportDataUsingConnectionString( _
        Destination As Range, _
        ConnectionString As String, _
        Query As String, _
        Optional Parameters As Variant, _
        Optional HasHeader As Boolean = True _
    ) As Range

    Dim Connection As ADODB.Connection

    Set Connection = New ADODB.Connection
    With Connection
        .ConnectionString = ConnectionString

        Call .Open
        Set ImportDataUsingConnectionString = ImportDataUsingConnection(Destination, Connection, Query, Parameters, HasHeader)
        Call .Close
    End With

End Function

Function ImportDataUsingConnection( _
        Destination As Range, _
        Connection As ADODB.Connection, _
        Query As String, _
        Optional Parameters As Variant, _
        Optional HasHeader As Boolean = True _
    ) As Range

    Dim Command As ADODB.Command
    Dim Recordset As ADODB.Recordset

    Set Command = New ADODB.Command
    With Command
        Set .ActiveConnection = Connection
        .CommandType = adCmdText
        .CommandText = Query

        Set Recordset = .Execute(Parameters:=Parameters)
        Set ImportDataUsingConnection = ImportDataFromRecordset(Destination, Recordset, HasHeader)
        Call Recordset.Close
    End With

End Function

Function ImportDataFromRecordset( _
        Destination As Range, _
        Recordset As ADODB.Recordset, _
        Optional HasHeader As Boolean = True _
    ) As Range

    Dim QueryTable As QueryTable

    Set QueryTable = Destination.Cells(1).Parent.QueryTables.Add( _
                        Connection:=Recordset, Destination:=Destination.Cells(1))

    With QueryTable
        .FieldNames = HasHeader
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = False
        .RefreshPeriod = 0
        .PreserveColumnInfo = False

        Call .Refresh(False)
        Set ImportDataFromRecordset = .ResultRange
        Call .Delete
    End With

End Function

```
【最短】Ruby on Rails環境構築メモ

#はじめに
はじめまして、Rubyを学習しはじめたおにくです！
今回はmacでのruby環境構築について学んだので、自分用にメモを残して行きたいと思います！

**※こちらの環境構築はOSがmojaveの場合の環境構築になります**

#環境構築のフロー
##1、Command Line Toolsのインストール

*コマンドラインツールとは・・・「キーボードでPCを操作する道具」*


ターミナルから以下のコマンドを実行
`※ターミナルはmacに元々インストールされているツールです`

```
xcode-select --install
```

以下のようなポップアップが表示されるのでインストールを行う
![command-line-tools.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638340/63690ac2-b8d2-71ba-677d-f4c21184f72a.png)

##2、Homebrewのインストール
*homebrewとは・・・macでプログラミングに必要なパッケージをインストール、アンインストールするもの*

ターミナルで以下のコマンドを実行する
`※コマンドは以下のhomebrewの公式サイトに記載されています`
[macOS用パッケージマネージャー — Homebrew](https://brew.sh/index_ja)


```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
```
ターミナルで以下のコマンドを実行し、homebrewがインストールできたか確認

```
brew -v
```
##３、rbenvとruby-buildのインストール
*rbenvとは・・・rubyのインストール、アンインストールやバージョン管理を行うもの*
ターミナルで以下のコマンドを実行しインストール

```
brew install rbenv ruby-build
```

rbenvをPCのどこからでも呼び出せるように以下のコマンドをターミナルにて実行

```
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
```

##４、ruby2.5.1のインストール
ターミナルで以下のコマンドを実行

```
rbenv install 2.5.1
rbenv global 2.5.1
rebnv rehash
ruby -v
```
`ここでruby2.5.1が表示されていればrubyがインストールできています`

##５、mysqlのインストール
*mysqlとは・・・データを保存するためのデータベースサーバー*
ターミナルで以下のコマンドを実行

```
brew install mysql
```
mysqlをPCのどこからでも呼び出せるように以下のコマンドをターミナルにて実行

```
echo 'export PATH="/usr/local/opt/mysql/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
```
##６、bundlerのインストール
*bundlerとは・・・gemの依存関係をバージョンを管理するためのツール*
ターミナルで以下のコマンドを実行

```
gem install bundler
```

##７、railsのインストール
ターミナルで以下のコマンドを実行

```
gem install rails --version='5.2.3'
rbenv rehash
rails -v
```
`ここでrails5.2.3が表示されていればrailsがインストールできています`


**※もし、誤りなどありましたらコメントにてご教授いただけますと幸いです**:bow:
編集画面で更新ができない！？

# An invalid form control with name='◯◯[image]' is not focusable. というエラー

編集画面（edit）ではnewの画面をコピーして使用することもあるかと思います。
私は今回コピペで作成し、動作確認をしていました。

通常であれば問題なく動くはず。。。なのですがなぜか更新ボタンを押しても反応しない状態状態でした。
デベロッパーツールを見てみると、
**An invalid form control with name='recipe[image]' is not focusable.**
というエラーが出ていました。

![スクリーンショット 2020-05-15 22.10.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565886/41997106-d1a4-9e1b-76c3-2bfad3bd417e.png)

#name='recipe[image]'のformコントローラーが使えない・・・？

##該当コード

```
= form_with model: @recipe do |f|
  .new__main__upper-half__left#image_input
    = f.label :image, {class: 'new__main__upper-half__left__label'} do
      = f.file_field :image, {class: 'new__main__upper-half__left__label__input',required: "required"}
        %pre
          %i.fas.fa-camera.fa-lg
          クリックして画像を選んでください
```

#解決方法
入力必須のオプションである **required: "required"** を消す、だけ

editで生成される*file_field*は上手く初期値が拾えていないようです。
その結果、入力必須のオプションを使用しているとrails様は
『必須になってるけどそんなんないよ！？』
と戸惑ってしまう分けです。

と言うわけで、file_fieldはrequired: "required"を付けないようにしましょう
Ubuntu 18.04 に mono + llvm をインストールしてみる

Ubuntu 18.04 に mono + llvm をインストールしてみる
#目的
Ubuntu 18.04 Ubuntu 18.04 に mono + llvm を本家のリポジトリからインストールしてみる
#コンパイル用のパッケージを追加する
<pre>
$ sudo apt install gcc
</pre>
##提案パッケージ: を追加
<pre>
$ sudo apt install gcc-7-locales gcc-multilib make autoconf automake libtool flex bison gcc-doc gcc-7-multilib gcc-7-doc libgcc1-dbg libgomp1-dbg
  libitm1-dbg libatomic1-dbg libasan4-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libmpx2-dbg libquadmath0-dbg glibc-doc
</pre>
#MONOをインストールする
<pre>
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys    3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
$ echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
$ sudo apt update
$ sudo apt install mono-complete

$ mono -V
Mono JIT compiler version 6.8.0.123 (tarball Tue May 12 15:11:57 UTC 2020)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  amd64
        Disabled:      none
        Misc:          softdebug
        Interpreter:   yes
        LLVM:          yes(610)
        Suspend:       hybrid
        GC:            sgen (concurrent by default)
</pre>
##テストコード
```c#
using System;

public class HelloWorld
{
    public static void Main(string[] args)
    {
        Console.WriteLine ("Hello World!");
    }
}
```
<pre>
$ csc hello.cs
$ mono hello.exe
Hello World!
</pre>
#参考にしたのは以下のサイト
[How to build WebAssembly C# Apps with the Mono AOT and Windows Subsystem for Linux](https://medium.com/@unoplatform/how-to-build-webassembly-c-apps-with-the-mono-aot-and-windows-subsystem-for-linux-ae1fe813cba3)
[How to Install Mono on Ubuntu 18.04](https://linuxize.com/post/how-to-install-mono-on-ubuntu-18-04/)
現在何しているかの記事

#その後・・・・

こんにちは。ミヤウチと言います。

去年（正確には一昨年）からエンジニア目指して、独学したり、スクールに通ったり、就活したり、いろいろしていましたが、Qiitaをまっっっっっったく更新してこなかったのでいろいろ書いていこうかなと思います。

#過去の記事でどこまで書いてたっけ・・・

私がプログラミングを始めた経緯（３）(https://qiita.com/jlirnv24_ryo/items/6c1227ee764cb6b7a807)

この記事で書いてる内容からすると、
去年の10月から新しい会社で働く予定となっていました。

さらに
>これからは週三回以上は勉強内容とともにポエムも含めて更新していけたらと思います。

と書かれている・・・・・・・
~~年3回の間違いでは？？？~~

#で、現在は何してるん？

現在は、上の記事で書かれていた新しい会社でエンジニアとして働いています。
過去の記事では去年の10月からの予定と書いてありましたが、実際は9月から入社して、3ヶ月研修を受け、運よく12月から開発案件に参加させていただきました。
いわゆるSESで、客先に常駐しています。
某会社のシステムの開発業務で、Springをいじいじしてます。

自分のやりたいこと・目指す方向は変わっていなくて、Javaをまずはしっかりやる。
そこから別の言語やフレームワーク、案件（保守とか）に拡大していく。
そうして少しずつやりたいことに近づけていく。
という方針で頑張っていきます。

#書くことなくなってきたのでJava Silver・Gold取った話

去年の9月から研修を受け、12月から現場に出たわけですが、
会社から「Java Bronzeは取らないとダメだよ〜」って言われてたので、研修と並行してその辺りの資格の勉強をはじめました。

当時の講師の先輩・F氏から、
「ミヤウチ君はSilverから受けるっしょ？」と唆され、まあ近道だしいいかな、ということでSilverから勉強しました。
なんだかんだだらだらやっていたので、Java Silverは10月の下旬に取りました。
それまでにやったことはこちらです。

- やさしいJava 第7版 (「やさしい」シリーズ)   高橋 麻奈 (https://www.amazon.co.jp/dp/4815600848/ref=cm_sw_r_tw_dp_U_x_BjuVEbVMWFR6V)
- スラスラわかるJava 第2版   中垣 健志 (https://www.amazon.co.jp/dp/B07K3YFN2J/ref=cm_sw_r_tw_dp_U_x_eluVEbGTCS60S)

会社の研修室にあったという理由で読みました。各1周ずつ、やさしいJavaの方はすベてコードをEclipseで写経して実行の繰り返しを行いました。会社独自の課題もやりましたが、まあやさしいJavaの方に毛が生えたようなものでした。
正直、やさしいJavaは第６版？だったこともあるかもしれませんが、かなり初歩的な内容だったなあと思っています。
あれ一冊よりもいいコンテンツは他にあるのかなと思いました。（あくまで個人的な感想）
スラスラわかるJavaの方は、スラスラは分からなかったです。ジェネリクスや関数型プログラミングのあたりの記述はかなりわかりづらかったです。SilverやGoldの勉強をしていくうちになんとなくで理解が追いついてきたような気がします。

肝心のJava Silverの勉強についてですが、研修を受けて一ヶ月弱くらい経った時期から
はじめました。（9月末くらい）
黒本2周しただけですが。正直答え覚えちゃってるよな、という物が多くあったので試験自体は難しくはないと思います。
ただ、本当に理解したかという意味では、2周くらいしてよかったなと思いました。

その後11月の頭くらいからJava Goldの勉強をはじめました。
目標では11月中に取り切るつもりだったのですが、~~ポケモンが発売されてしまったので勉強ができず~~、実際は12月の1週目の土曜に取りました。
ここでも黒本で勉強しました。流石にGoldだと理解するのも難しくなってきたので、とにかく解説をしっかり理解しようと、つまずく度にわかるまで読み込んだり調べたり、実際にコードを書いてみたりしました。（これはSilverの時はやらなかった）
Silverの時と違ってGoldは1周しかしていませんが、理解度はSilverの時と同じくらいだったと思います。

これくらいやって、試験はSilver91%、Gold85％くらいの正答率で合格できました。

まあ、五ヶ月経ってかなり抜けちゃったんですが・・・。
もっと独学して知識もスキルも増やしていきたいですね。毎日学習頑張るぞ〜〜〜
（投稿はしたい時にすることにします）
AtCoder Beginners SelectionでRuby学習【Shift only】繰り返し処理と配列の上書き

## はじめに
Ruby学習の一環として「競技プログラミング（競プロ）」に挑戦します。
そのための学習の中で学んだことをアウトプットしていきます。
今回は「AtCoder Beginners Selection」の四問目（Shift only）より。
https://atcoder.jp/contests/abs

自分が使った解法と、他の方の解法を比べながらまとめていきます。


## 問題
N個の正の整数A1,...,ANが与えられます。
この整数が全て偶数である時、次の操作を行います。
・整数全てを2で割ったものに置き換える。
最大何回操作を行えるか求めなさい。

制約
1 ≤ N ≤ 200
1 ≤ Ai ≤ 10**9

入力は以下の形で与えられる。

```ruby
N
A1 A2 ... AN

# 例
3
8 12 40
```
上記の例だと最大2回割ることができるので

```ruby
出力例
# 上記例の場合
=> 2
```

## 解答①
まずは僕が最初に書いたコードです。

```ruby
count = 0
N = gets.to_i
lists = gets.split(" ").map(&:to_i)

while lists.all?(&:even?) do
    lists.map!{ |x| x / 2 }
    count += 1
end

print count
```
第一回の問題で学んだメソッド（gets split map）を使って入力を受け取り、
[AtCoder Beginners SelectionでRuby学習【PracticeA】標準入力](https://qiita.com/jag_507/items/f7f3e181867ed8b6db73)
第二回で学んだメソッド（all? even?）で判定を行いつつ、
[AtCoder Beginners SelectionでRuby学習【Product】様々な解法から学ぶ](https://qiita.com/jag_507/items/a9df2172346a313dabdd)
while文やmap!メソッドを使って解答しました。

まずは、ここで初めて使ったwhile文、map!メソッドについてまとめていきます。

### while文
条件式が真である間は、指定した処理を繰り返します。

```ruby
while 条件式 do
  実行する処理1
  実行する処理2
end
```
今回の解答では、偶数判定を行う「even?メソッド」を「all?メソッド」を使って配列の要素全てにあて、
全て偶数である場合には、指定した処理を行うようにしました。

### map!メソッド
配列の要素を、処理結果で上書きします。

```ruby
配列の入った変数.map! { |変数名| 処理内容 }

#例
lists = [10, 20]
lists.map!{ |x| x / 2 }
print lists
=> [5, 10]
```
ちなみに、
入力の時に使用しているmapメソッドでは、
配列の上書きは行われません。戻り値として配列を生成しています。

```ruby
#例
lists = [10, 20]
print lists.map{ |x| x / 2 }
=> [5, 10]
print lists
=> [10, 20]
```
以下は他の方の解答になります。

## 解答② mapメソッドで操作の回数（解答）を戻り値として戻す
配列の要素を「2で割れる回数」にして配列として戻し、
その要素の中で最も小さい数を「minメソッド」を使って出力しています。

```ruby
gets
puts gets.split(" ").map{|f|
	f=f.to_i
	c=0
	while f%2==0
		f/=2
		c+=1
	end
	c
}.min
```
### minメソッド(Arrayクラス)
配列の最小の要素を戻します。

```ruby
#例
lists = [35, 10, 20]
print lists.min
=> 10
```

## 最後に
以上、AtCoder Beginners SelectionでRuby学習【Shift only】から学んだメソッドをご紹介しました。
他の方の解答も見れるのが便利ですね。かなり勉強になります。

もし間違いなどございましたら、ご指摘いただけると嬉しいです。
[Tips] AWS Amplify で既存のUserPoolを指定してAuthモジュールを使う

# 背景
すでに作ってある Cognito UserPool に OAuthによる認証機能を提供したいという要望があって、App Client と Hosted UIを追加した。

動作を確認するために、AWS Amplify のチュートリアルで Webアプリを作った。
https://docs.amplify.aws/lib/auth/social/q/platform/js#full-react-sample
Amplify が 使う 設定ファイル **aws-exports.js** を作る必要があるので、 
`amplify add auth` コマンドで 一旦 aws-exports.js を作り、すでにある UserPool と IdentityPool の情報で書き換えた。

実行してみると、[Auth](https://aws-amplify.github.io/amplify-js/api/classes/authclass.html) モジュールの中でつくられるはずのセッションが作られてない。
調査してみると、http://cognito-identity.us-east-1.amazonaws.com/ へのリクエストが失敗していることがわかる（添付)

<img width="1406" alt="chrome-debug-cognito-idp-fail.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49986/31af42ef-c6bf-1aa4-5808-be0e16a161de.png">

GitHub にも同じような issue が立っていた。
https://github.com/aws-amplify/amplify-js/issues/4269

# 設定
IdentityProviderの Authorization Provider にも Clientの設定を追加する必要があった。

<img width="1437" alt="screenshot.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49986/a5130c98-5441-ffcd-2c7a-ddd41c2a32cc.png">



### 余談
AmplifyのDocumentには、すでにある UserPool を使う情報が見つけられなかったので、ここに書いておくことにしました。
(前はあった気がしたのだけれど、あったとしてこの話題の記載はなかったような。。）
まあ、解決したのでよしとする。
MacでのLaravel6の環境構築でエラーが起こった件

# Laravelのインストールコマンドでエラーが起こった
Composerの準備を[こちらの記事](https://qiita.com/Kohei1996/items/c6f493315b09bb4621e5)の手順で完了した後、
下記のLaravelのインストールをコマンドを実行。

```
$ composer global require laravel/installer
```
すると、下記のエラーが発生しました。

```
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - laravel/installer v3.0.0 requires ext-zip * -> it is missing from your system. Install or enable PHP's zip extension.
    - laravel/installer v3.0.1 requires ext-zip * -> it is missing from your system. Install or enable PHP's zip extension.
    - Root composer.json requires laravel/installer ^3.0 -> satisfiable by laravel/installer[v3.0.1, v3.0.0].

You are using a snapshot build of Composer 2, which may be the cause of the problem. Run `composer self-update --stable` and then try again. In case it solves the problem, please report an issue mentioning Composer 2.

Installation failed, deleting ./composer.json.
```
<img width="1440" alt="スクリーンショット 2020-05-15 20.44.15.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549752/374bb70d-8e7f-c3cb-0b0c-187d44a6ab89.jpeg">

# 原因
エラー文から「ext-zip」というものが足りていないということがわかった。
試行錯誤して調べるうちに、HomebrewでPHPがインストールできていない可能性が浮上した。

# 試したこと
そこで、下記のコマンドでHomebrewでのPHP7.4のインストールを実行。

```
$ brew install php@7.4
```
このコマンド完了は５分程かかりました。
その後、再度下記のLaravelのインストールをコマンドを実行。

```
$ composer global require laravel/installer
```
すると、以下のようにうまくインストールできました。
この前後の環境構築に関しては[こちらの記事](https://qiita.com/Kohei1996/items/c6f493315b09bb4621e5)をにまとめてあるので是非参考にしてください。

<img width="679" alt="スクリーンショット 2020-05-15 21.28.22.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549752/14e28024-0f22-b59c-9cf5-016e6539b3ea.jpeg">
MacでのLaravel6の環境構築の手順

# 目的
- 学習の記録のため。
- 環境構築で少し苦戦したため。

# 環境構築の手順
1. PHPのパッケージ管理プログラム「Composer」のインストール
2. Laravelをインストールする（ここで少し苦戦した）
3. プロジェクトを作成する

## PHPのパッケージ管理プログラム「Composer」のインストール
Laraveではプログラミングをダウンロードしてインストールするのではなく
PHPのパッケージ管理プログラム「Composer」というものを利用する。

以下のリンクからcomposerのファイルを直接ダウンロードして配置する。
[https://getcomposer.org/download/](https://getcomposer.org/download/)

Latest Snapshot　をクリックすると
「ダウンロード」フォルダに「composer.phar」というファイルがダウンロードされる。

<img width="806" alt="スクリーンショット 2020-05-15 16.07.25.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549752/5d408b70-dc8b-2ef2-2765-1761b454eb1d.jpeg">

<img width="589" alt="スクリーンショット 2020-05-15 16.33.07.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549752/a906e7cf-551d-f104-8af9-724b350065c0.jpeg">

次にターミナルを起動。
ダウンロードフォルダに移動し**/user/local/bin**に配置する。

```
$ cd ~/Downloads
$ sudo mv composer.phar /usr/local/bin/composer
```
パスワードを求められるので入力する。
composer.pharが**/usr/local/bin/**内にcomposerという名前で移動するコマンド。
これでいつでもcomposerが呼び出し可能になる。

最後にcomposerのパーミション（アクセス権）を設定する。

```
$ chmod a+x /usr/local/bin/composer
```
これで、composerが実行できるようになり、composerの準備は完了。

```
$ composer -V
Composer version 2.0-dev
```
上記のようになっていれば正常にインストールできている。

##Laravelをインストールする
ターミナルを起動し以下を実行する。

```
$ composer global require laravel/installer
```

うまくいけばこれでLaravelがインストールされる。
下記エラーが出た場合は[こちらの記事](https://qiita.com/Kohei1996/items/21247478ef2d259c91fe)を参考にしてください。
<img width="1440" alt="スクリーンショット 2020-05-15 20.44.15.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549752/e5330ab6-752e-dbd4-55ff-a8f1dfd59ecc.jpeg">

### 環境変数PATHの設定
環境変数PATHにインストールの場所を追記しないとLaravelのコマンドが使えない。
そこで、以下のコマンドを実行。

```
$ echo "export PATH=~/.composer/vendor/bin:$PATH" >> ~/.bash_profile
$ source ~/.bash_profile
```
すると、Laravelがコマンドとして認識されるようになる。

## プロジェクトを作成する
アプリを作成するディレクトリに移動し以下のコマンドを実行する。

```
$ laravel new プロジェクト名
```
その後、以下のように作成したプロジェクトに移動しサーバーを起動するコマンドを実行。

```
$ cd プロジェクト名/
$ php artisan serve
Laravel development server started: http://127.0.0.1:8000
```
ここまで完了して、
[http://localhost:8000/](http://localhost:8000/)
にアクセスすると以下のようにLaravelのトップページが表示される。

Ctrlキー + 「C」 を押すとサーバーを停止できる。
以上で環境構築は完了です。
<img width="1251" alt="スクリーンショット 2020-05-15 22.02.52.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549752/7783c3f5-3593-a04d-897c-3a821722650b.jpeg">
VSCodeでReact-JSXを保存するとき勝手に改行されちゃう問題

### 問題

VSCodeで下記のようなDOMを書いて

```
ReactDOM.render(
  <React.StrictMode >
  　<App />
  </React.StrictMode>,
  document.getElementById('root')
);
```

保存（⌘＋S）しようとすると、勝手に改行されてしまう問題。
もちろんエラーになります。

```
ReactDOM.render(
  <
React.StrictMode >
  <
  App / >
  <
  /React.StrictMode>,
  document.getElementById('root')
);
```

### 解決策

VSCodeの設定を変更します。
Settings.jsonファイルを開き、下記を追加します。

```
    "files.associations": {
        "*.js": "javascriptreact"
    }
```


以上です。