OmniAICreator/Qiita-1.07M huggingface dataset:
gonumでopenblasを使うメモ

goやdepは適当に入れておくとする

# blas

macの場合は以下。OpenBLAS以外でも、MKL、Atlasでも良さそう。試してはいない。

```
brew install openblas
```

これで、`/usr/local/opt/openblas/`以下にヘッダとライブラリが入る


# ビルドするとき

gonumの取得は普通に`dep ensure`とかすれば良い。depなどを使わない場合は、gonumを入れた上で、ドキュメントの通り、gonum/netlibパッケージをCGO_LDFLAGを指定して`go install`する。

```
CGO_LDFLAGS="-L/usr/local/opt/openblas/lib -lopenblas" go install gonum.org/v1/netlib/blas/netlib
CGO_LDFLAGS="-L/usr/local/opt/openblas/lib -lopenblas" go install gonum.org/v1/netlib/lapack/netlib
```

gonumの行列・ベクトル計算をOpenBLASを利用するようにする場合は、以下のような設定が必要

```
import(
	"gonum.org/v1/gonum/blas/blas64"
	"gonum.org/v1/netlib/blas/netlib"
)

func init(){
	blas64.Use(netlib.Implementation{})
}
```

ここではinitに書いているが、プログラムの初期化時に一度呼び出されるように書いておけばどこでも良さそう。

`go install`した場合はいらないと思うが、depに入れた場合は、`go build`や`go test`をする場合には`CGO_LDFLAGS`にblasのパスを指定して実行しなければリンクエラーになる。direnvなどに書いておこう。

# 適当なベンチマークコード

10万*100の行列と100次元のベクトルの行列ベクトル積をスッと計算してみる。基本行列を作るほうが重いので、`init`でfillしている。

```
package main

import (
	"math/rand"
	"testing"

	"gonum.org/v1/gonum/blas/blas64"
	"gonum.org/v1/gonum/mat"
	"gonum.org/v1/netlib/blas/netlib"
)

var (
	m *mat.Dense
	v *mat.VecDense
)

func init() {
	blas64.Use(netlib.Implementation{})
	m = makeRandMat(100000, 100)
	v = makeRandVec(100)
}

func makeRandMat(row, col int) *mat.Dense {
	data := make([]float64, row*col)
	for i := range data {
		data[i] = rand.NormFloat64()
	}
	return mat.NewDense(row, col, data)
}

func makeRandVec(num int) *mat.VecDense {
	data := make([]float64, num)
	for i := range data {
		data[i] = rand.NormFloat64()
	}
	return mat.NewVecDense(num, data)
}

func BenchmarkMatVecDot(b *testing.B) {
	res := mat.NewVecDense(100000, nil)
	for i := 0; i < b.N; i++ {
		res.MulVec(m, v)
	}

}
```

`blas64.Use(netlib.Implementation{})` をコメントアウトした場合としなかった場合でだいたい50%弱高速化している。まぁbrewで適当に入れたOpenBLASとの比較ならこんなものな気はする。というかgonumのデフォルトgo実装もそれなりに早いのね。

```実行環境
MacBook Pro (13-inch, 2017, Four Thunderbolt 3 Ports)
プロセッサ: 3.5GHz Intel Corei7
```

```blas64.Use(netlib.Implementation{})あるとき
goos: darwin
goarch: amd64
pkg: hoge
BenchmarkMatVecDot-4   	     300	   4018419 ns/op
PASS
```

```blas64.Use(netlib.Implementation{})ないとき
goos: darwin
goarch: amd64
pkg: hoge
BenchmarkMatVecDot-4   	     200	   7239200 ns/op
PASS
```
# alpineで使う

Dockerfileはこんな感じ

```Dockerfile
FROM golang:1.12.9-alpine3.10 as builder
ENV CGO_ENABLED=0
ENV GOOS=linux
ENV GOARCH=amd64
RUN apk add --no-cache ca-certificates git build-base openblas-dev
WORKDIR /go/src/{PACKAGE_PATH}
ENV GO111MODULE=on
ENV CGO_ENABLED=1
ENV CGO_LDFLAGS="-L/usr/lib -lopenblas"
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
RUN mkdir -p bin
RUN go build -o bin/{EXECUTABLE} ./{PATH_TO_COMMAND}/main.go

# runtime image
FROM alpine
RUN apk add --no-cache ca-certificates openblas
WORKDIR /var/app
COPY --from=builder /go/src/{PACKAGE_PATH}/bin/{EXECUTABLE} /var/app/{EXECUTABLE}
ENTRYPOINT ["./{EXECUTABLE}"]
```
CSSでbodyを90°回転させた擬似フルスクリーンページを作りたい時のメモ

# そもそも90°回転させる理由とは
- Android ChromeはFullscreenAPIがある
- iOSは(現状)非対応
    - 端末を横向きにするとフルスクリーンっぽくできる
    - 回転ロックした状態でフルスクリーンにする方法がない
    - 回転ロックしてても中身を90°回転させたら擬似フルスクじゃね？

# 90°回転させるとどうなるか
- 要素が90°回転する
    - 当たり前
- スクロール操作は90°回転しない
- iPhone X対応に使うセーフエリア指定は90°回転しない
- media queryの指定はwidthからheightになる

# 各種解決法
## スクロール操作は90°回転しない
- 見た目上90°回転していてもスクロール可能方向は変わらない
- あべこべな操作感になる
- 解決するにはJSでスクロール方向を調整する必要がある

```js
const rotateElement = document.getElementById('rotate_element');
let touchPositionX = null;
let touchPositionY = null;

// scrollを止める
rotateElement.addEventListner('scroll', (event) => {
	event.preventDefault();
});
rotateElement.addEventListner('touchstart', (event) => {
	touchPositionX = event.touches[0].clientX;
	touchPositionY = event.touches[0].clientY;
});
rotateElement.addEventListner('touchmove', (event) => {
	event.preventDefault();
	const x = event.touches[0].clientX;
	const y = event.touches[0].clientY;
	if (touchPositionX === null) {
 		touchPositionX = x;
	}
	if (touchPositionY === null) {
  		touchPositionY = y;
	}
	const element = event.currentTarget;
	// x,yそれぞれの指の移動量の差分をスクロール状態に反映させる
	element.scrollTop += x - touchPositionX;
	element.scrollLeft += y - touchPositionY;

	touchPositionX = x;
	touchPositionY = y;
});
```

## iPhone X対応に使うセーフエリア指定は90°回転しない
- iPhone Xなどの端末にはノッチがあるため、セーフエリア指定を行うことがある
- その際に使用する値は回転しないため、付与する値をズラす必要がある

```css
/* 以下のように指定されている場合 */
#element {
	padding-top: env(safe-area-inset-top);
	padding-right: env(safe-area-inset-right);
	padding-bottom: env(safe-area-inset-bottom);
	padding-left: env(safe-area-inset-left);
}
/**
	90°回転した場合はこのようにズレる
	top	-> right
	right	-> bottom
	bottom	-> left
	left	-> top
**/
#rotate_element {
	padding-top: env(safe-area-inset-right);
	padding-right: env(safe-area-inset-bottom);
	padding-bottom: env(safe-area-inset-left);
	padding-left: env(safe-area-inset-top);
}

/* 今回の説明の意図とは異なるため、constant指定は省略しています */
```

## media queryの指定はwidthからheightになる
- media queryの値も90°回転したからといって変わることはない
- 縦と横が入れ替わっているのでwidthとheightの指定を入れ替える必要がある

```css
/* 以下のように指定されている場合 */
@media (min-width: 640px) {
	#element {
		width: 160px;
		height: 90px;
	}
}
/* 90°回転した場合はwidthがheightになる */
@media (min-height: 640px) {
	#rotate_element {
		width: 160px;
		height: 90px;
	}
}
```
Nuxt.js の Vuetify v1.5.x を v2.0.x にアップデートしてみる

## nuxt.config.js

``` diff
  css: [
-    '@/assets/style/app.styl',
    '@/assets/css/style.css'
  ],
```
``` diff
-    loaders: {
-      stylus: {
-        import: ['~assets/style/variables.styl']
-      }
-    },  
```
``` diff
+  devModules: ['@nuxtjs/vuetify'],
```
``` diff
  plugins: [
-    '@/plugins/vuetify.client.js'
  ]
```

## npm パッケージ

アップデート・インストール・削除

```
$ npm install vuetify@2.0.1 vuetify-loader@1.3.0
$ npm install -D sass@1.22.7
$ npm uninstall -D stylus stylus-loader
```

## その他

画面を表示してコンソールに `error [Vuetify] [BREAKING] ` が出ている個所などを地道に潰していく。


## 参考

- https://github.com/vuetifyjs/vuetify
- https://github.com/nuxt-community/vuetify-module
関数・引数その１（PHP）

####関数とは
与えられたデータに対し定められた処理を行って結果を返す機能
関数を利用するには、予め関数の本体を定義しておき必要に応じて呼び出して利用する。
※関数を呼び出す際、必要に応じてデータを渡すこともでき、また、必要に応じてデータを返すことも出来る。

####関数の種類
ユーザー定義関数（ユーザーが作成する関数）と、組込関数（PHPで予め定義されている関数）がある。

####関数定義には４パターンある。
まずデフォルトの形の例として下記となる。

```php:php
function 関数名(引数名){
     処理;
     return 値； //戻り値
}

//呼び出し方法
$result = 関数名（10）;

```

**１.引数があり、戻り値がある**

擬人化表現)  関数(パティシエ)に引数（ケーキ作りの素材）を渡すとケーキを作ってくれて戻り値（ケーキ）を頂きました。

書き方）関数名をAI、引数をxと仮定

```PHP:php
<?php
function patissier($x){
    $result = 2 * $x; //引数に設定された変数xの値を２倍にし、変数resultに格納せよ。
    return $result;　　//変数resultの値を返す
}
//↑ここまでが関数の定義

//呼び出し方法
$result = patissier(20);　//上で定義した関数を呼び出す。20という値を変数xに渡す。上の処理が実行される。
echo $result;　//変数resultに40が表示される。

?>
```

**2.引数がなく、戻り値がある**

擬人化表現)関数（パティシエ）に引数（ケーキの食材）を渡さなくてもパティシエ自身でケーキ作りの素材を調達し、
ケーキを作ってくれて戻り値（ケーキ）を頂きました。

書き方）引数が無く、戻り値がある関数

```php:php
function patissier(){
    $x = 10;
    $result = 2 * $x;
    return $result;
}

//呼び出し方法
$result = kansu();
echo $result;

```


**3.引数があり、戻り値がない**

擬人化表現）関数（パティシエ）に引数（ケーキの食材）を渡すと、美味しいケーキを作ってパティシエ自身でケーキを食べた。

書き方）引数があり、戻り値がない関数

```php:php
function patissier($x){
     $result = 2 * $x;
     echo $result;
}

//呼び出し方法
patissier(10);
```


**4.引数がなく、戻り値がない**

擬人化表現）関数（パティシエ）は、パティシエ自身でケーキ作りの材料を調達し、ケーキを作ってパティシエ自身で食べた。

書き方）引数が無く、戻り値がない関数

```php:php
function patissier(){
      $x = 10;
      $result = 2 * $x;
     echo $result;
}

//呼び出し方法
patissier();
```


とりあえず今回はここまで。
CIでredisサーバーがいなくて落ちる-> Redis::CannotConnectError:   Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)

## 解決策
```yml
version: 2
jobs:
  build:
    docker:
      # specify the version you desire here
      - image: circleci/ruby:2.6.2-node-browsers
        environment:
          RAILS_ENV: test
      - image: mysql:5.6
        environment:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          ONLY_FULL_GROUP_BY: no
      - image: redis  # ここ追加
```
Rspecでgrapeのヘルパーメソッドのスタブを定義する方法

# この記事で書いていること
Railsでgrapeを使用してAPIを作成している人に向けて、grapeのヘルパーメソッドのスタブをRspecで作成する方法をまとめています。

よって、grapeについての説明や導入方法などは割愛しています。

# 環境
Ruby:2.3
Rails:4.2.6
ちょっと古いです。すみません。

# ディレクトリ構成
```
|-app
|  |-api
|     |-v1
|     |  |-test.rb
|     |  |-helper.rb
|     |  |-root.rb
|     |-api.rb
|-spec
   |-api
      |-v1
         |-test_spec.rb
```
上記以外にもファイルがありますが、必要なもののみ記載しています。

# APIの内容
こちらも必要な部分のみ記載しています。

```ruby:app/api/api.rb
module API
class Root < Grape::API
    prefix 'api'
    mount V1::Root
  end
end
```

```ruby:app/api/v1/root.rb
module V1
  class Root < Grape::API
    version 'v1'
    format :json
    content_type :json, 'application/json;charset=UTF-8'

    helpers Helper

    mount V1::Test
  end
end
```

```ruby:app/api/v1/helper.rb
module V1
  module Helper
    def success?
      # 何かしらの処理（戻り値はtrue or false）
    end
  end
end
```

```ruby:app/api/v1/test.rb
module V1
  class Test < Grape::API
    resource :test do
      # GET /api/v1/test
      desc 'テストAPI'
      get '/' do
        # 何かしらの処理
      end
    end
  end
end
```

# Rspecの内容
```ruby:spec/api/v1/test_spec.rb
require 'rails_helper'

describe Test, type: :request do
  
  describe 'TestAPI' do
    context '実行' do
      before do
        # ヘルパーメソッドのスタブ作成
        Grape::Endpoint.before_each do |endpoint|
          allow(endpoint).to receive(:success?).and_return(true)
        end
      end

      after do
        # ヘルパーメソッドのスタブ削除
        Grape::Endpoint.before_each nil
      end

      # 以降、APIのテストを記述
    end
  end
end
```
beforeでスタブを作成しています。
Grape::Endpoint.before_eachメソッドを使用することでヘルパーメソッドの動作を定義できます。
ここではsuccessメソッドの結果がtrueになるようにしています。

注意しなければならないのは、**定義したスタブは以降のdescribeやcontext、exampleに引き継がれる**ということです。

この例ではsuccessメソッドは以降trueを返すようになるので、テストの内容によっては想定外の結果になる可能性があります。

よってスタブが不要になった時点で削除してあげる必要があります。
削除するには**Grape::Endpoint.before_each nil**と定義します。

# 参考
https://github.com/ruby-grape/grape#stubbing-helpers
質問：ARkitについて

unityでARkitを使おうとしているのですが、ビルドがうまくいかず質問させて頂きます。


https://www.atmarkit.co.jp/ait/articles/1801/10/news011_3.html

上記のサイトを参考にしながら、UnityのARKitサンプルアプリを動かすため、ビルドをしようとしているのですが、以下のようなエラーコードがかえってきてしまいます。

UnityEditor.BuildPlayerWindow+BuildMethodException: Error building Player because scripts have compile errors in the editor
  at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (UnityEditor.BuildPlayerOptions options) [0x00242] in /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:194 
  at UnityEditor.BuildPlayerWindow.CallBuildMethods (System.Boolean askForBuildLocation, UnityEditor.BuildOptions defaultBuildOptions) [0x0007f] in /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPlayerWindowBuildMethods.cs:97 
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

言語経験が浅く、unityに触るのも初めてで知識がないので、皆様の知恵をお借りできれば幸いです。

使用しているバージョン
unity: 2019.1.10f1 
Xcode:Version 11.0 beta 4 
Visual Studio:8.2.0.1105

おそらく全て最新になっているかと思います。

なぜビルドできないのか、どなたかお分かりになる方いらっしゃいましたらご教授お願い致します。
atomic repoのインストール(2019/07/26)

従来の

```
curl -s https://www.atomicorp.com/installers/atomic | sh
```

だと

```
sh: 行 1: html: そのようなファイルやディレクトリはありません
sh: 行 2: 予期しないトークン `<' 周辺に構文エラーがあります
sh: 行 2: `<head><title>301 Moved Permanently</title></head>
```

とかいわれるのでブラウザでURLを直叩きすると
https://updates.atomicorp.com/installers/atomic
に飛んでいたので

```
curl -s https://updates.atomicorp.com/installers/atomic | sh
```
で成功。
Laravelでエクセルを生成してS3に送信する方法

# 環境
Laravel 5.1
"maatwebsite/excel": "~2.1.0"
PHP7.0

maatwebsiteのエクセルライブラリを使ってエクセルを作成して**stringに変換して**putする
ファイルのオブジェクトそのままは渡せないので注意

```createExcelAndSendS3.php
    $fileName = $date . '.xls';

    $fileContent = Excel::create($fileName , function($excel) use ($licencies) {
        $excel->sheet('Excel', function($sheet) use ($licencies) {
            $sheet->fromArray($licencies);
        });
    })->string('xls');

    Storage::disk('s3')->put($fileName, $fileContent);
```

ちなみにmaatwebsite/excelのバージョンが3.0以上ならこういう書き方ができる（3.1ならオプションを色々使える）

```storeExcelToS3.php
public function storeExcel() 
{
    // Store on a different disk (e.g. s3)
    Excel::store(new InvoicesExport(2018), 'invoices.xlsx', 's3');
    
    // Store on a different disk with a defined writer type. 
    Excel::store(new InvoicesExport(2018), 'invoices.xlsx', 's3', Excel::XLSX);
}
```

外部とのアクセスはFWの中まで読まないと仕様がわからない時があるなぁ
そもそもExcelのライブラリのバージョンあげられればワンライナーで書けたんだけど・・・
with sharing、without sharing、および inherited sharing キーワードの使用

#1.背景
Apex Class 定義する時は何も指定しないと、Default は「without sharing」で実行します。
例外は、executeAnonymous コールおよび Chatter in Apex はユーザコンテキスト（レコードの共有ルール採用）です。

#2.with sharing
ユーザコンテキスト（レコードの共有ルール採用）

#3.without sharing
システムコンテキスト（レコードの共有ルール無視）


#4.inherited sharing
- Default レコードの共有権限は「with sharing」となります。
- 呼び出し側の権限を継承する

#5.明記的な宣言なし
- Default レコードの共有権限は「without sharing」です。
- 呼び出し側の権限を継承する


#Resource
- [Apex 開発者ガイド：with sharing、without sharing、および inherited sharing キーワードの使用
](https://developer.salesforce.com/docs/atlas.ja-jp.220.0.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm)
- [Salesforce Winter ’19 Release Notes](https://releasenotes.docs.salesforce.com/en-us/winter19/release-notes/rn_apex_inherited_sharing.htm)
MySQLでBulk Update（一括更新）する方法

意外と知らなかった良い方法があったので記録。

## INSERT ... ON DUPLICATE KEY UPDATE 構文:thinking:
https://dev.mysql.com/doc/refman/5.6/ja/insert-on-duplicate.html

これはよく知られてる方法だと思います。
かんたんに言えば「INSERTを試みて、primary keyの重複やunique制約で引っかかった場合にはUPDATEする」構文です。

### 一括UPDATEする際の問題点
- 更新対象のテーブルに`NOT NULL`かつ`DEFAULT VALUE`が設定されていないカラムがあった場合に、それらをすべて指定してあげる必要がある。
- UPDATEとして扱われるSQLについても、内部的な動作は`DELETE`してから`INSERT`しているので、初期値が必要なカラムは値をしていして挙げないといけない
- WHERE句使えない（多分）

### 回避方法
- 特に困ることがなければ`NOT NULL`カラムには`DEFAULT VALUE`を定義してあげて、できるだけSQL側で色々指定しなくて良いようにする
- 一回SELECTして現状のレコードを引っ張ってきた後に、それを使って新しく`INSERT`するためのレコードを生成してSQLに指定する

とはいえ**UPDATE前提の用途だとやっぱ合わない**気がする。あくまでもINSERTするユースケースが前提になる。


## UPDATE・ELT・FIELDの組み合わせ:relaxed:
`INSERT ... ON DUPLICATE KEY UPDATE`で一括更新やろうとしててなんかイケてないなーと思い調べてみて最近始めて知った方法。

### テーブルの例
例えばユーザを管理するテーブルを考える。

|id|username|group_id|
|:--|:--|:--|
|234|hoge|100|
|235|fuga|100|
|234|foo|200|
|235|bar|200|
|238|username|100|

- id: ユーザのid
- username: ユーザ名
- group_id: 所属組織のid
- idとgroup_idの組み合わせがユニーク

### やりたいこと
`group_id = 100`の組織に属する2人のユーザ名を下記のように変更したい。
- hoge→hogehoge
- fuga→fugafuga

### SQL文
こんな感じでシンプルな形で書ける。

```sql
 UPDATE users
 SET name = ELT(FIELD(id, 234, 235), 'hogehoge', 'fugafuga') 
 WHERE id IN (1000, 1001) AND group_id = 100
```
とあるグループの中で一意のIDなどで絞り込みを加えた上で一括UPDATEする場合はとても便利。


### ELT
https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_elt
> ELT() は、文字列リストの N 番目の要素を返します。N = 1 の場合は str1、N = 2 の場合は str2 のように返します。N が 1 よりも小さいか、引数の数よりも大きい場合は、NULL を返します。ELT() は FIELD() の補数です。

### FIELD
https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_field

> str1、str2、str3、... リスト内で str のインデックス (位置) を返します。str が見つからない場合は、0 を返します。

> FIELD() へのすべての引数が文字列の場合は、すべての引数が文字列として比較されます。すべての引数が数値の場合は、数字として比較されます。それ以外の場合は、引数が倍精度として比較されます。

> NULL ではどの値との等価比較にも失敗するため、str が NULL である場合は、戻り値が 0 になります。FIELD() は ELT() の補数です。


### ELT(FIELD(id, 234, 235), 'hogehoge', 'fugafuga')
まず、`FIELD(id, 234, 235)`では、`id = 234`のときは`1`が返ってくるので
`ELT(1, 'hogehoge', 'fugafuga)` となります。

`ELT(1, 'hogehoge', 'fugafuga)`は`hogehoge`と展開されます。

よって、SQL全体としてはid=234に対しては

```sql
 UPDATE users
 SET name = 'hogehoge'
 WHERE id = 1000 AND group_id = 100
```

このように展開されていると解釈できます。




今後も使う場面多そうです。
WordPressのテーマエディタで保存できない

# はじめに
独自テーマを作ってテーマエディタで編集しようと思ったら保存できなかったので困った。

# 環境
WordPress 5.2.2
MacBook Pro Mojave 10.14.5
Docker使用

# やったこと
* 権限全開放<br>
Dockerで立ち上げていたので以下コマンドでサーバに入り権限付与。<br>

```
$ docker exec -it コンテナ名 /bin/bash
$ cd wp-content/themes/[独自テーマディレクトリ名]
$ chmod 777 *
```
効果なし。

# とりあえず保存できるようになった方法
* wp-admin/includes/file.php の修正<br>
望ましくはないけれどとりあえず保存は出来るようになった。<br>
参考にしたサイト：http://takenet.jp/takeblo/2018/12/wordpress.html<br>
バージョン異なっていたので行数が変わってました。<br>
495行目から603行目までをコメントアウト。(差分は確認してないけど内容は変わらなさそう)

# おわりに
誰かセーフティな(正攻法な)方法知っていたらコメントください…
アニメの名言を返すbotを作って、LINEの会話がもっと伝わるようにしてみた件について（DB内に登録されている名言の一覧表示）

#はじめに
[アニメの名言を返すbotを作って、LINEの会話がもっと伝わるようにしてみた件について](https://qiita.com/tiwasa/items/d1254d0c4252ff313771)でLINE botは実装されていたが、DB内に登録されている名言の一覧表示がなかったので実装したお話。

[アニメの名言を返すbotを作って、LINEの会話がもっと伝わるようにしてみた件について](https://qiita.com/tiwasa/items/d1254d0c4252ff313771)を制作した[@tiwasa](https://qiita.com/tiwasa)さんに無理を言って携わらせて頂きました。

[こちら](https://animergen.herokuapp.com/mergen_view)からanimergenに登録されている名言の一覧が見れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/12dc30df-8d4e-8ad8-1967-1cd87dfa3284.png)

#モチベーション
1.DB内に登録されている名言の一覧表示を表示したい（中の人の欲望）
2.予想していたものが出てこない、何が登録されているのか知りたい（ユーザーフィードバック）
需要と供給の一致？
#使ったもの
大まかにはこの三つ
Python, Vue.js, Bootstrap
元々Flaskで実装されていたので、使ったのはほとんどVue.js, Bootstrapだけ。
#作ったもの
[animergenに登録されている名言の一覧](https://animergen.herokuapp.com/mergen_view)
クリックすると登録されている画像が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/7737f566-cd7c-0e20-1c2e-a8a41b37f541.png)

#少しだけ技術的なお話
pyhtonからVue.jsにデータを渡そうとすると、FlaskとVue.jsのdelimiters同じものを使用していて上手く動かない。
今回はVue.js側でdelimitersを変更。

```javascript

var app = new Vue({
  el: "#app",
  delimiters: ["[[", "]]"],
  data: {
    message: "Hello Vue!"
  }
})
```
そのへんのことは[こちら](http://tabilike.hatenablog.com/entry/2018/04/09/130209)の方が分かりやすく書いて頂いている。先人の知恵に感謝。

データを受け取ってしまえばこっちのもの。bootstrap-vueでガシガシ実装。
1.[table](https://bootstrap-vue.js.org/docs/components/table/)
2.[pagination](https://bootstrap-vue.js.org/docs/components/pagination/)
3.[input-group](https://bootstrap-vue.js.org/docs/components/input-group)
4.[modal](https://bootstrap-vue.js.org/docs/components/modal/)

#さいごに
つたない文章に最後までお付き合いいただきありがとうございました。

[アニメの名言を返すbotを作って、LINEの会話がもっと伝わるようにしてみた件について](https://qiita.com/tiwasa/items/d1254d0c4252ff313771)
[animergenに登録されている名言の一覧](https://animergen.herokuapp.com/mergen_view)
Android端末の信号強度を監視してみた

#はじめに
ネットワークの接続状況を監視したり、電池残量や温度、充電状態を監視するのはBroadcastReceiverを使えばできることは調べたらすぐヒットしたのですが、今回のタイトルにもあるように、信号強度を監視する方法はなかなか見つけることができなかったので、メモしておきます。

#Permissionを設定する
端末の情報にアクセスするために、Manifestに下記を追加します。

```AndroidManifest.xml
<manifest ...>
    ...
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    ...
</manifest>
```

#Listenerを登録する
今回は信号強度の監視したいので、イベントには `PhoneStateListener.LISTEN_SIGNAL_STRENGTHS` を指定します。Listenerは後ほど実装します。

```Kotlin
val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
tm.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)
```

#Listenerを実装する
PhoneStateListenerクラスを親クラスとして、オブジェクト式で記述してます。
`SignalStrength#getLevel` はAPIレベル23からなので、注意してください。

```Kotlin
val phoneStateListener = object : PhoneStateListener() {
    override fun onSignalStrengthsChanged(signalStrength: SignalStrength?) {
        super.onSignalStrengthsChanged(signalStrength)
        val level = signalStrength.level
        println("level: $level") // => [level: 4] などと出力される
        // 例)LiveDataなどで変更を通知するのが実用的かと思います。
        liveDataSignalLevel.value = level
    }
}
```

#おわりに
[クイズハッカー](https://thetv.jp/program/0000958396/)ってバラエティ番組みたいな感じで「検索力」を上げていきたい。

#参考
[PhoneStateListener](https://developer.android.com/reference/android/telephony/PhoneStateListener)
[SignalStrength](https://developer.android.com/reference/android/telephony/SignalStrength)
Flutter Web: webdev could not run for this project.

今日、突如として `webdev build` を実行すると `webdev could not run for this project.` とエラー表示され、ビルドできなくなりました。

こういう原因らしいです。

```sh
This version of webdev does not support the `build_daemon` protocol used by your version of `build_runner`.
A newer version of webdev is available which supports your version of the `build_daemon`. Please update.
```

何の事かわかりません(涙目
たぶん、 `pub get` やれと言われ、無意識にやってこうなったのだと思います。

## 対策

`pubspec.yaml` の `dev_dependencies` で

```yaml
build_runner: 1.6.1
build_daemon: 1.1.0
```

にバージョンを戻すよう設定したら `webdev build` に成功するようになりました。

<img width="717" alt="versions.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423506/0bc69aee-3949-79e0-8fef-6182544a9ad1.png">


## くわしい状況

エラーの補足に **Please update.** とあるので、極力アップデートする方向でなんとかならないか調べていたのですが、うまくいきませんでした。

新規プロジェクトでHelloWorld的なやつも作ったのですが、それもビルドに失敗するようになっていました。
（どうやら私のクソコードが原因では無いようです）

その時の `pubspec.yaml` の `dev_dependencies` の内容。
`build_daemon` は特に指定していませんでした。

```yaml
dev_dependencies:
  build_runner: ^1.4.0
  build_web_compilers: ^2.0.0
  pedantic: ^1.0.0
  json_serializable: ^2.0.0
```

この記述だと
`build_runner: 1.6.4`
`build_daemon: 2.0.0`
となってしまうようです。

`pubspec.lock` の内容

```yaml
  build_runner:
    dependency: "direct dev"
    description:
      name: build_runner
      url: "https://pub.dartlang.org"
    source: hosted
    version: "1.6.4"

  build_daemon:
    dependency: transitive
    description:
      name: build_daemon
      url: "https://pub.dartlang.org"
    source: hosted
    version: "2.0.0"
```

バージョンを上げる方向で調べていて埒があかなかったので、輝いていたアノ頃を思い出しながら、ぽちぽちバージョンを戻していきました。

|build_runner|build_daemon|結果|原因|
|:--|:--|:--|:--|
|1.6.4|2.0.0|NG|ビルドエラー|
|1.6.3|2.0.0|NG|ビルドエラー|
|1.6.2|2.0.0|NG|ビルドエラー|
|1.6.1|2.0.0|NG|packageのバージョンが合わない|
|1.6.4|1.1.0|NG|packageのバージョンが合わない|
|1.6.3|1.1.0|NG|packageのバージョンが合わない|
|1.6.2|1.1.0|NG|packageのバージョンが合わない|
|1.6.1|1.1.0|OK| |
中華ロジアナを買った

1.物はお馴染みのあれ。価格は500〜1500円位であちこちででていると思います。
2.今回はAmazonさんで1100円程。因みにPrimeだったので7日程で到着。投函です。
3.内容物は本体＋USBケーブル(A-Mini)＋フラットケーブル10芯にQIコンタクト(両メス)でした。
4.接続PCはLinux Mint 19.1 MATEです。
5.sigrokからPusleViewのLinux(64bit)版をダウンロード。
https://sigrok.org/wiki/Main_Page
6.USBにて本体を接続、dmesgはこんな感じでした。
[41086.612908] usb 3-2.2: new high-speed USB device number 9 using xhci_hcd
[41086.813030] usb 3-2.2: New USB device found, idVendor=0925, idProduct=3881, bcdDevice= 0.00
[41086.813034] usb 3-2.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
7.接続した状態で./PulseView-0.4.1-x86_64.AppImageを実行するだけで自動認識。
8.テストオシレータから1MHzをD0に入力して無事波形を確認。

自分用の備忘録なので特別な事がないですが、何事もなくスムーズに動いてしまったので書くことも無く…。
お粗末な結果ですみません。
Laravel のモデル結合ルートパラメータに文字列を渡すと SQL エラーになるのを直す


## 背景

Laravel で[モデル結合ルート](https://readouble.com/laravel/5.8/ja/routing.html#route-model-binding)パラメータに整数を期待すると、文字列を渡したときにエラーになる。
例として hoges テーブルの１レコードを表示する画面を考えてみます。

```php
Schema::create('hoges', function ($table) {
    $table->increments('id'); // 主キーが連番の整数
    ...
});
```

```php
Route::resource('hoges', 'HogeController');
```

```php
public function show(Hoge $hoge) // モデル結合している
{
    ...
}
```

`GET /hoges/str` にアクセスすると次の SQL エラーになる。

```
SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for integer: "str" (SQL: select * from "hoges" where "id" = str limit 1)
```


さらに `GET /hoges/2147483648` にアクセスすると次の SQL エラーになる。

```
SQLSTATE[22003]: Numeric value out of range: 7 ERROR: value "2147483648" is out of range for type integer (SQL: select * from "hoges" where "id" = 2147483648 limit 1)
```


## 解決策

### 公式な対応

これについて公式のリポジトリに [Issue](https://github.com/laravel/framework/issues/26239) があります。

PR も[１件](https://github.com/laravel/framework/pull/27151)ありますが、"this changes a contract" とのことでマージぜすクローズされています。

PR のクローズを最後に半年以上動きがない状態が続いています。

### 暫定的な対応

モデル結合ルートは[ロジックをカスタマイズできる](https://readouble.com/laravel/5.8/ja/routing.html#explicit-binding)ので、ロジックにバリデーションを追加しました。
トレイトとして実装して、必要なモデルで使えるようにしています。

```php:app/Traits/PrimaryKeyRangeRouteBinding.php
<?php

namespace App\Traits;

trait PrimaryKeyRangeRouteBinding
{
    public function resolveRouteBinding($value)
    {
        if (validator(['value' => $value], ['value' => 'integer|between:1,2147483647']])->fails()) {
            return null;
        }

        return parent::resolveRouteBinding($value);
    }
}
```

#### 使い方

モデルに `use` して使えます。

```php
<?php

namespace App;

use App\Traits\PrimaryKeyRangeRouteBinding;
use Illuminate\Database\Eloquent\Model;

class Hoge extends Model
{
    use PrimaryKeyRangeRouteBinding; // これ
    ...
}
```

これにより `GET /hoges/str` や `GET /hoges/2147483648` は、一致するレコードやルートがないときと同様に `404 Not Found` を返します。

おしまい
アプリのユーザーの操作を阻止する処理

## ユーザーのタップに反応させない方法

色々あります。
各パーツの`enable`を`flase`にしたり
`userInteractionEnabled`を`false`にしたり
見えない`uiview`を`uiwindow`にかぶせたり。などなど。

## もっともシンプルに、画面全体のタップを阻止する方法

``` swift
UIApplication.shared.beginIgnoringInteractionEvents()
```

これで出来ます。

https://developer.apple.com/documentation/uikit/uiapplication/1623047-beginignoringinteractionevents

**戻すには**

``` swift
UIApplication.shared.endIgnoringInteractionEvents()
```

こちらを呼び出します


## ボタンをタップしてから一定時間だけ阻止させたい

``` swift
func beginIgnoringInteractionEvents(duration: TimeInterval,
                                    completed: @escaping()->Void) {
  UIApplication.shared.beginIgnoringInteractionEvents()
  DispatchQueue.main.asyncAfter(deadline: .now() + duration) {
    UIApplication.shared.endIgnoringInteractionEvents()
    completed()
  }
}
```

**呼び出しの例**

``` swift
beginIgnoringInteractionEvents(duration: 10) {
  print("1秒が経ったのでタップが有効になりました")
}
```

通信中や、何かの演出などで利用出来るかと思います！
mysqlrouter8.0.17を使うにははopensslのバージョンアップも必要？

#mysqlrouter 8.0.17を入れたら起動失敗する

```
  plugin 'metadata_cache' failed to load: /usr/lib64/mysqlrouter/metadata_cache.so: symbol X509_check_ip_asc, version libcrypto.so.10 not defined in file libcrypto.so.10 with link time reference
Error: /usr/lib64/mysqlrouter/metadata_cache.so: symbol X509_check_ip_asc, version libcrypto.so.10 not defined in file libcrypto.so.10 with link time reference
```

#これで解決

```
# yum update openssl
略
---> パッケージ openssl.x86_64 1:1.0.1e-60.el7_3.1 を 更新
---> パッケージ openssl.x86_64 1:1.0.2k-12.el7 を アップデート
--> 依存性の処理をしています: openssl-libs(x86-64) = 1:1.0.2k-12.el7 のパッケージ: 1:openssl-1.0.2k-12.el7.x86_64
--> 依存性の処理をしています: libcrypto.so.10(OPENSSL_1.0.2)(64bit) のパッケージ: 1:openssl-1.0.2k-12.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 を 更新
---> パッケージ openssl-libs.x86_64 1:1.0.2k-12.el7 を アップデート
略
```
VBAそのままコピペ「オートフィルタ」

```vb:
Sub AutoFilter1()
'(設定)
 ActiveSheet.Range(Range("A1"), Cells(Rows.Count, "V").End(xlUp)).AutoFilter Field:=〇列目, Criteria1:="フィルタする文字列"
'(設定-不等号を使う場合)
ActiveSheet.Range(Range("A1"), Cells(Rows.Count, "V").End(xlUp)).AutoFilter Field:=〇列目, Criteria1:=">="＆数値
'(操作文)

'(フィルタ解除)
Activesheet.ShowAllData

End Sub

関数化するなら(範囲の行、ﾌｨﾙﾀの列、検索文字)
Sub AutoFilter1(r　as　string,r2　as　Long,w　as　string)
'(設定)
 ActiveSheet.Range(Range("A1"), Cells(Rows.Count, r).End(xlUp)).AutoFilter Field:=r2, Criteria1:=w

End Sub
呼び出し
call　AutoFilter1(”行のアルファベット”,フィルタする行(数字),"フィルタする文字列")

'(結果を選択)
Range(Range("A2"), Cells(Rows.Count, "V").End(xlUp)).select
違うViewControllerやファイルの変数を参照(アクセス)する方法

**・[iOS - ファイル外に作成したクラスの変数を参照したい｜teratail](https://teratail.com/questions/28648)**
→`変数をstatic`,`参照したいファイルをインスタンス化`,`UserDefaultsで変数の値を保持``シングルトン`の4つの方法を解説

※あとで追記
Rake DB:seedでエラーが出ないけど保存されないときの対処法

自分用の備忘録として。

csvファイルを作成し、rake db:seed実行後、処理は通るけどDBには何も保存されない時、
modelファイルのアソシエーションをコメントアウトすると、保存されるようになります。

```Metabolism.rb
class Metabolism < ApplicationRecord
 # belongs_to :user ←コメントアウトする。
end
```

以上です！
shutil.py", line 359, in copytree  raise Error(errors) [Errno 13] 許可がありません

エラーログからのコピペがバレバレなタイトルで申し訳ありません。

管理者権限がないサーバーでgitからcloneしてきた[apex](https://github.com/nvidia/apex)を 
`pip install ./` 
しようとしたら、以下のように怒られてしまった。

~~~
ERROR: Could not install packages due to an EnvironmentError.
Traceback (most recent call last):
  File "/home/user/perl5/lib/python3.6/site-packages/pip/_internal/commands/install.py", line 345, in run
    resolver.resolve(requirement_set)
  File "/home/user/perl5/lib/python3.6/site-packages/pip/_internal/legacy_resolve.py", line 196, in resolve
    self._resolve_one(requirement_set, req)
  File "/home/user/perl5/lib/python3.6/site-packages/pip/_internal/legacy_resolve.py", line 359, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "/home/user/perl5/lib/python3.6/site-packages/pip/_internal/legacy_resolve.py", line 307, in _get_abstract_dist_for
    self.require_hashes
  File "/home/user/perl5/lib/python3.6/site-packages/pip/_internal/operations/prepare.py", line 199, in prepare_linked_requirement
    progress_bar=self.progress_bar
  File "/home/user/perl5/lib/python3.6/site-packages/pip/_internal/download.py", line 1037, in unpack_url
    unpack_file_url(link, location, download_dir, hashes=hashes)
  File "/home/user/perl5/lib/python3.6/site-packages/pip/_internal/download.py", line 942, in unpack_file_url
    shutil.copytree(link_path, location, symlinks=True)
  File "/home/user/perl5/lib/python3.6/shutil.py", line 359, in copytree
    raise Error(errors)
shutil.Error: [('/home/user/other/pkg/apex/.git/objects/pack/pack-80d94cc9a5851617b3ba901c95d3f830e29df171.pack', '/home/user/temp/pip-req-build-jt69r0fb/.git/objects/pack/pack-80d94cc9a5851617b3ba901c95d3f830e29df171.pack', "[Errno 13] 許可がありません: '/home/user/temp/pip-req-build-jt69r0fb/.git/objects/pack/pack-80d94cc9a5851617b3ba901c95d3f830e29df171.pack'"), ('/home/user/other/pkg/apex/.git/objects/pack/pack-80d94cc9a5851617b3ba901c95d3f830e29df171.idx', '/home/user/temp/pip-req-build-jt69r0fb/.git/objects/pack/pack-80d94cc9a5851617b3ba901c95d3f830e29df171.idx', "[Errno 13] 許可がありません: '/home/user/temp/pip-req-build-jt69r0fb/.git/objects/pack/pack-80d94cc9a5851617b3ba901c95d3f830e29df171.idx'")]
~~~

## 解決策
どうやらクローンしてきたファイルのパーミッションがよろしくなかったみたい。 
フォルダ内で

~~~bash
chmod -R 777 .
~~~

して全てのユーザーに権限を与えたあと、`pip install ./`で無事解決できた。  
初めて遭遇するエラーだったので戸惑ってしまった。 
以上。
PHP Constants


# PHP Constants

In this post, you will learn how to use constants to store static values ​​in PHP.

![how to define a constant in PHP](https://lh6.googleusercontent.com/Kbm0Ht4qS4ZTAd3-9XufYpyp30j46HrWATkusr_pVU_P07dqLB10yqRj6Fl9l8JHGPiU0dG4RxUb0tO4bnCsoje0K88ArFzuEG2JDT24CKx01QBfQbpill1-OdNcCPHcsLd40kOX "PHP Constants")

## What is Constant in PHP

A constant is a name or an identifier for a fixed worth. Constants are like variables, actually, once they are defined, they can not be undefined or changed (with the except magic constants).

Constants are very valuable for storing data that doesn't change while the script is running. Common examples of such data include configuration settings for example database username and password, site's base URL, company name, etc.


Constants are defined utilizing PHP's define() function, which accepts two arguments: the name of the constant, and its value. When characterized the constant value can be accessed at any time just by referring to its name. Here is a simple example:

  

Read also: [ASP.NET VS PHP](http://www.traininginindia.co.in/asp-net-vs-php/)

  

Example

  

<?php

// Defining constant

define("SITE_URL", "[http://cbitss.in/php-training-in-chandigarh/](http://cbitss.in/php-training-in-chandigarh/)");

// Using constant

echo 'For more detail about PHP -'. SITE_URL;

?>

The output of the above code will be:

For more detail about PHP - [http://cbitss.in/php-training-in-chandigarh/](http://cbitss.in/php-training-in-chandigarh/)

PHP Echo Statement is often used to display or output data in web browsers.

Tip: By storing the value in a constant rather than a variable, you can ensure that the value won't get changed accidentally when your application runs.

### Naming Conventions for PHP Constants

The name of the constant must follow the same guidelines. The variable name, which means a valid continuous name should start with a letter or underscore, followed by any number of letters, numbers or underscores with an exception:  the $ prefix isn't required for constant names.
require とDir[File.dirname(__FILE__)〜 の違い

オブジェクト指向の理解に苦戦したのでその備忘録で。

違うファイルを読み込むときに `require` だと上手くいったのですが、調子に乗って `Dir[File.dirname(__FILE__)〜` を使おうとしてどハマりしたので（5時間くらい）備忘録に書いておきます。

僕のteratail でのやり取り見ていただくと僕のスキルの低さと徐々に理解していく道のりが分かるのでよかったらご覧ください。
https://teratail.com/questions/202510

# 上手くいったときのスクショ

5つのタブは全て同階層です。
require で各ファイルを呼び出して`main.rb` で出力。スクショ下部の「種類：Honda」などが出ればOK。Paiza.io を使えば簡単にテストできます。

<img width="527" alt="スクリーンショット 2019-07-26 16.05.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256763/830e3b47-5fb6-c45a-d3aa-daa159b858d7.png">


# 上手くいったときのファイルの中身

```ruby:main.rb
# main.rb
require_relative "car" #上から順番に読み込む
require_relative "ferrari"
require_relative "honda"
require_relative "nissan"

def main

cars = [] # cars にデータを追加
  cars << Honda.new("Honda",8, 100, 10) # << は追加するという意味
  cars << Nissan.new("Nissan",5, 50, 10)
  cars << Ferrari.new("Ferrari",2, 2_000, 100)

  cars.each do |car| # car の情報を全て表示
    puts car
  end
end

main # 出力

```

```ruby:car.rb
# car.rb
class Car
  def initialize(type,capacity, price, speed) # この4つは具体例を記入するから initialize
    @type = type
    @capacity = capacity
    @price = price
    @speed = speed
  end

  def accel
    "アクセル"
  end

  def brake
    "ブレーキ"
  end

  def to_s
    " 種類：#{@type}、定員：#{@capacity}人、価格：#{@price}万円、加速：#{@speed}km、装備：#{accel}、#{brake} "
  end
end
```
```ruby:ferrari.rb
class Ferrari < Car
end
```
```ruby:honda.rb
class Honda < Car
end
```
```ruby:nissan.rb
class Nissan < Car
end
```

この状況で ターミナルで `$ ruby main.rb` と打つと1枚目のスクショのように出力されます。

# 詰まる例
`require_relative "car"` を一番最後にするとエラー発生。
読み込む順番を意識しないとダメですね。

<img width="631" alt="スクリーンショット 2019-07-26 16.14.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256763/b250ca84-de8d-2823-bc93-391ed6215349.png">

# 同階層に全てのファイルがある場合（二重に出力される）

`Dir[File.dirname(__FILE__) + '/lib/*.rb'].sort.each {|file| require file }`
を使う場合に`main.rb` が他のファイルと全て同階層だと（libフォルダを作らずに1枚目のスクショのように全て同階層にしてる場合）、
① `Dir[File.dirname(__FILE__) + '/lib/*.rb'].sort.each {|file| require file }` が全てのファイルを読み込む（同階層の5つのファイル、1枚目のスクショ参照）

② さらに main で実行するとき、`main.rb` をもう一度読み込むから二重で出力される。（`main.rb` を2度読み込んでいてる）

下のスクショのように同じ階層にファイルを移して`Dir〜` で読み込んで実行（ターミナルなら `$ ruby main.rb`）すると

<img width="1028" alt="スクリーンショット 2019-07-26 16.47.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256763/36c1b57e-4e69-4e8c-20dc-2017dcdb2582.png">


同じ階層にファイルを移して `Dir〜` で読み込むと下のスクショのように二重に出力されます

<img width="574" alt="スクリーンショット 2019-07-26 16.49.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256763/7f762b07-685f-cbc4-2f84-e73f13242f69.png">

# 【解決策】Dir〜 を使う場合はフォルダを作る
teratailのやり取りで分かるように超絶苦戦しました。
結論は、実行ファイル以外（ここでいう `main.rb` 以外）は新しいフォルダ作ってそこに格納。僕は libフォルダを作りました。
libフォルダに`main.rb`以外のファイルを移してから `$ ruby main.rb` でちゃんと出力されました。
まぁ結論、僕の知識不足ってことでしたのでもっと勉強が必要です。

<img width="1010" alt="スクリーンショット 2019-07-26 16.30.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256763/f4a26676-a93c-4839-05b7-8da7c25b2ca8.png">
LeetCode / Same Tree

（[ブログ記事](https://mhiro216.hatenablog.com/entry/2019/07/26/165138)からの転載）

[https://leetcode.com/problems/same-tree/]

Given two binary trees, write a function to check if they are the same or not.

Two binary trees are considered the same if they are structurally identical and the nodes have the same value.
<img width="218" alt="スクリーンショット 2019-07-26 16.23.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122973/72c09d32-f865-04b7-0695-f50438c63d3b.png">
<img width="234" alt="スクリーンショット 2019-07-26 16.23.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122973/9448321a-89d1-dd4f-723a-b1a4063dcb0d.png">
<img width="221" alt="スクリーンショット 2019-07-26 16.23.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122973/ffdfa825-f2ae-3424-7995-188237717cb0.png">
LeetCodeではバイナリツリー（二分木）を使った問題が頻出しますが、そのうちの1つです。
2つのバイナリツリーが同一のものかどうか判定する問題です。

#### 解答・解説

##### 解法1
recursionを使った、スッキリしたコードは以下のようになります。
isSameTree(p,q)関数を「TreeNodeインスタンスのpとqが両方なければTrue、どちらか一方なければFalse、valが異なっていればFalse」と処理するものとして定義し、
最後にisSameTree(p.right,q.right)でTreeの右側が同一かの判定を、isSameTree(p.left,q.left)でTreeの左側が同一かの判定を行う再帰的な構造にします。

```python
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        if not p and not q:
            return True
        if not q or not p:
            return False
        if p.val != q.val:
            return False
        return self.isSameTree(p.right, q.right) and self.isSameTree(p.left, q.left)
```

##### 解法2
私は知らなかったのですが、pythonにはdequeというデータ型があるんですね。
[こちらの記事](https://qiita.com/keitakurita/items/7f02f600be8a2c9ad227)が詳しいですが、
list型は先頭からデータを削除する際に要素の移動が発生するので$O(n)$のオペレーションであるのに対し、deque型は先頭からも最後尾からも$O(1)$で要素を取り出し、削除することができるとのことです。
さて、このdeque型を使い、Iterationで解く公式の解法が以下の通りです。

```python
from collections import deque
class Solution:
    def isSameTree(self, p, q):
        def check(p, q):
            if not p and not q:
                return True
            if not q or not p:
                return False
            if p.val != q.val:
                return False
            return True
        
        deq = deque([(p, q),])
        while deq:
            p, q = deq.popleft()
            if not check(p, q):
                return False
            
            if p:
                deq.append((p.left, q.left))
                deq.append((p.right, q.right))
                    
        return True
```

list型でも似たようなコードになりますが、popleft関数はdequeならではの処理です。
check関数は、解法1で出てきた処理と全く同一です。
変数dequeに同一かどうかを判定するTreeNodeのペアを格納していき、check関数による判定をiterativeに行うという処理になります。
Ubuntu Apache Jenkins URLの変更

# 概要
* ubuntuにjenkinsをインストールし、デフォルトのURL  
http://ホスト名:8080  
の様な、ポート8080ではなく、  
http://ホスト名/jenkins  
のようにアクセスできるようにする

# jenkins設定ファイルの修正
* jenkinsの設定ファイルは ``` /etc/default/jenkins ```
* 設定ファイルを下記の様に修正
  * ```JENKINS_ARGS```の末尾に **--prefix=/jenkins** を追加

``` :/etc/default/jenkins
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --prefix=/jenkins"
```

  * ポートを変更する必要がある場合は、```HTTP_PORT```を修正
  
``` :/etc/default/jenkins
HTTP_PORT=8080
```

# Apache設定ファイルを追加
* 今回はjenkins用の設定ファイル```/etc/apache2/sites-enabled/jenkins.conf```を新規作成し、下記設定を追加した

``` :/etc/apache2/sites-enabled/jenkins.conf
<Proxy *>
   Allow from all
</Proxy>
ProxyPass /jenkins http://127.0.0.1:8080/jenkins
ProxyPassReverse /jenkins http://127.0.0.1:8080/jenkins
RedirectMatch permanent ^/jenkins$ /jenkins/
```
 
# Apacheのプロキシ利用のため、mod_proxyを有効化する
* 下記コマンドを実行

```
sudo a2enmod proxy
sudo a2enmod proxy_http
```

# jenkinsとApacheを再起動
* 下記コマンド実行

```
sudo service jenkins restart
systemctl restart apache2
```

# http://ホスト名/jenkins にアクセス確認　→　終了
🔵 TypeScript - Default exportに型注釈をつける方法

変数を `Config` という型で export したい。

```ts
type Config = { port: number }
```

named export には型注釈がつけられますが、default export にはこの方法が使えません 🤔

```ts
// named export
export const config: Config = { port: 3000 }

// default export
export default: Config { port: 3000 } // <= エラー
```

これでもいいけどめんどい。

```ts
const config: Config = { port: 3000 }

export default config
```

って考えてたらこんな方法を思いつきました 😎

```ts
const as = <T>(value: T) => value

export default as<Config>({ port: 3000 })
```
VBAそのままコピペ「ブックシートの選択」

```vb:ブックシートの検索

Workbooks("Book1.xls").Worksheets("Sheet1").Range("A1:B10")= "文字"

.value

ブック、シートまたぎの時は2行
Workbooks("Book2.xlsx").Activate
Sheets("Sheet2").Select

コピペ用
Sub Sample()
 
ActiveWorkbook.ActiveSheet.Range("A1").Value = "ActiveWorkbook"
'【選択されているBook】の【選択されているSheet】
 
ThisWorkbook.Worksheets("Sheet1").Range("A2").Value = "ThisWorkbook"
'【マクロの書かれているBook】のSheet1
 
Workbooks(1).Worksheets(1).Range("A3").Value = "Workbooks(1)"
'【最初に開いたBook】の【一番左のSheet】
 
End Sub
```
Eclipseでサーバーの始動に失敗するとき

初投稿です。Javaを始めてぼちぼち4ヶ月が経とうとしています
完全に自分用のメモですが誰かの役に立てばいいな思います。

## 急に実行できなくなった


Eclipseで簡単なWebアプリを作成していて、ちょくちょく起動しながら手直しをしていました。
いくつかファイルを追加して「さて動くかな」とサーバーで実行をすると
<img width="199" alt="キャプチャ.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445860/e0afba98-6c15-992e-4ba8-ad34f54d66c0.png">
このようにサーバーの始動に失敗してしまいました。

**詳細が全然詳細じゃなかったので**モヤモヤしながら以下のことを試しました

1. プロジェクト及びサーバーのクリーン
2. サーバーの作り直し
3. ワークスペースを変更しプロジェクトのインポート
4. とりあえずPC再起動
4. 別プロジェクトを作成し、作成しソースコードをまるまるコピペ
5. Tomcatの再インストール  

等々試してみましたが一向に解決しませんでした。

## 結局何がいけなかったのか
### Servletのアノテーションが重複していました。
正直なんで重複したらダメなのかは今ひとつわかっていないのですが、重複を解消してあげると無事に動きました。
**似たような機能を持ったサーブレットを複数作ろうとファイルのコピペをしたときに重複したのでしょう。**

エラーの詳細が全然詳細じゃなかったり、この手の問題を検索しても意外と引っかからなかったり（検索力が低いのか？？）とだいぶ時間がかかってしまいました。

記事の不備や、なにかご教示いただけることがあればコメント等残していただけると幸いです。
[Angular]ng-forでオブジェクトのkeyとvalueを取得する方法。

AngularのディレクティブであるngForで以下のように、オブジェクトを回そうとすると、エラーになります。

``` html
<ng-container *ngFor="let example of examples">
  {{example}}
</ng-container>
```

```
ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays.
```

Object.keysを使った方がいいかなと思いましたが、
Angularがpipeを用意してくれています。

``` html
<ng-container *ngFor="example error of examples | keyvalue">
  {{example.key}}
  {{example.value}}
</ng-container>
```

バージョン6.1.0からみたいなので、それ以降は使えるはずです。
最近バージョン8も出ましたし、Angularはどんどん便利になっているようです。
波長分割多重（WDM）システムにおける多重化/逆多重化装置（MUX / DEMUX）

波長分割多重（ＷＤＭ）は様々な情報を搬送する異なる波長の一連の光搬送波信号であり、それらは送信端でマルチプレクサを通して結合され、送信のために同じ光ファイバに結合される。 受信端では、さまざまな波長の光信号がデマルチプレクサによって分離されます。 同じファイバ内で２つ以上の異なる波長の光信号を同時に伝送するこの技術は、波長分割多重化、すなわちＷＤＭと呼ばれる。 ＷＤＭ技術は単一の光の伝送容量を２倍にすることができ、それによって既存の光ネットワークの容量を容易に拡大することができる。 送信信号の方向に応じて、WDMは多重化または逆多重化に使用できます。

![30.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463940/8ed978cb-1804-a81f-a481-0c96fb451003.jpeg)
マルチプレクサMUX
コンバイナＭＵＸの主な機能は、送信のために複数の信号波長を１つのファイバに組み合わせることである。 送信端では、Ｎ個の光送信機はそれぞれＮ個の異なる波長で動作し、Ｎ個の波長は適切な間隔で分離され、それぞれλ１、λ２、…λｎとして記録される。 これらＮ個の光波は、搬送波としての信号によってそれぞれ変調されて信号を搬送する。 コンバイナはこれらの異なる波長の光搬送波信号をシングルモードファイバに結合する。 異なる波長の光搬送波信号は（ファイバの非線形性にかかわらず）互いに独立していると見なすことができるので、複数の光信号の多重伝送を１つの光ファイバで実現することができる。 多重化により、通信事業者は複数の回線を維持することを避け、運用コストを効果的に節約できます。

デマルチプレクサDEMUX
スプリッタDEMUXの主な機能は、1本のファイバで伝送される複数の波長信号を分離することです。 異なる波長の光搬送波信号は受信部でスプリッタによって分離され、元の信号を回復するために光受信機によってさらに処理される。 マルチプレクサ（Demux）は、マルチプレクサの処理を逆にする装置です。

性能パラメータ
多重化/逆多重化デバイス（MUX / DEMUX）は、システム全体のパフォーマンスに影響を与えるWDMの主要コンポーネントです。 マルチプレクサ/デマルチプレクサの主な性能パラメータは何ですか？
ワーキングバンド
1550波長などのマルチプレクサ/デマルチプレクサの動作帯域は、3つの帯域を区別します。S帯域（短波長帯域1460〜1528nm）、C帯域（通常帯域1530〜1565nm）、L帯域（長波長帯域1565〜1625nm） 。

2.チャンネル数とチャンネル間隔
チャネル数とは、波長分割多重化／デマルチプレクサが合成または分離できるチャネル数のことで、4から160の範囲で、チャネルを追加することで設計が強化されます。 １６、３２、４０、４８など。 チャネル間隔とは、2つの隣接チャネルの公称搬送周波数の差をいい、チャネル間干渉を防ぐために使用できます。 ＩＴＵ − Ｔ Ｇ．６９２によれば、２００ＧＨｚ（１．６ｎｍ）未満の間隔を有する１００ＧＨｚ（０．８ｎｍ）、５０ＧＨｚ（０．４ｎｍ）および２５ＧＨｚなどが、現在、１００ＧＨｚおよび５０ＧＨｚのチャネル間隔に好ましい。

3. 挿入損失
挿入損失は、光伝送システムに波長分割マルチプレクサ（WDM）を挿入することによって発生する減衰です。 波長分割マルチプレクサ自体による光信号の減衰は、システムの伝送距離に直接影響します。 一般に、挿入損失が低いほど、信号減衰は少なくなります。

4.アイソレーション
アイソレーション値が高いと、信号間のクロストークが効果的に防止され、送信信号に歪みが生じる可能性があります。

5. 偏光依存性損失ＰＤＬ
偏光依存損失ＰＤＬは、一定の温度、波長および帯域における異なる偏光状態によって引き起こされる最大損失と最小損失との間の距離、すなわち、すべての入力偏光状態下での挿入損失の最大偏差である。

上記に加えて、当然のことながら、動作温度、帯域幅など、多重化／逆多重化装置に影響を与える他の性能パラメータがある。 通常、多重化装置と逆多重化装置は、装置が入力信号と出力信号の両方を処理することを可能にする単一の装置に組み合わされる。 または、マルチプレクサのシングルポイント出力をシングルチャネルを介してデマルチプレクサのシングルポイント入力に接続することもできます。 しかし、それ以上に双方向伝送用のデバイスの複雑な組み合わせがあります。

HYC は光通信用の受動基本部品の研究開発において19年の経験を持ち、CWDM、DWDM、CCWDM、FWDMなどの様々な仕様のWDM波長分割多重製品を供給しています。 WDM WDM技術の詳細については、www.hyc-system.comをご覧ください。

![31.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463940/fbd3ca59-834d-1287-44ff-fdaf37c69b74.jpeg)


HYC は、光通信用の受動部品の研究開発、製造、販売およびサービスを専門とする全国的なハイテク企業です。 同社の主力製品は以下のとおりです。光ファイバコネクタ（データセンター高密度光コネクタ）、波長分割マルチプレクサ、光スプリッタ、およびその他の3コア光パッシブ基本コンポーネント。 インターネットデータセンター、防衛通信、その他の分野.
スーパーバッジ日本語解説記事を作ってみた

#記事概要
スーパーバッジは開始前に「ネタバレしないでね」という旨の同意を取らされるのですが、公式のフォーラムや個人ブログでヒントや解答がいくらでも見つかります。
しかし日本語記事がほとんど無いのが寂しかったので、自分の進捗管理と理解度向上のために記録していた記事を載せてみることにしました。
英語環境でやらなければならない制約上、設定の仕方などは英語記事でもほとんど理解できるのですが...
所々モロ答えが書いてある(詰まったとこ)ので、ネタバレを踏まないよう各記事は限定公開のままにしています。

そのうち、知識ではなくTrail特有の問題でチャレンジが通らなかったり設定が紛らわしい部分に絞った記事にリフォームしたいです。

#記事一覧

##Lightning Experience Reports & Dashboards Specialist
[Trailへ](https://trailhead.salesforce.com/ja/content/learn/superbadges/superbadge-lex-rd)
[解説記事](https://qiita.com/takeakiooiwa/private/4ea930b4df496737dad5)

##Apex Specialist
[Trailへ](https://trailhead.salesforce.com/ja/content/learn/superbadges/superbadge_apex)
[解説記事](https://qiita.com/takeakiooiwa/private/c8b8403dac24f21ff92f)

##Security Specialist
[Trailへ]
(https://trailhead.salesforce.com/en/content/learn/superbadges/superbadge_security)
[解説記事]
(https://qiita.com/takeakiooiwa/private/24f5b637123e41654baf)

##Business Administration Specialist
[Trailへ](https://trailhead.salesforce.com/ja/content/learn/superbadges/superbadge_business_specialist)
[解説記事](https://qiita.com/takeakiooiwa/private/682dc97a934462f392ab)


##Lightning Experience Specialist
[Trailへ]
(https://trailhead.salesforce.com/ja/content/learn/superbadges/superbadge_lex)
[解説記事]
(https://qiita.com/takeakiooiwa/private/6a2dc4cf83ba585f7601)


##App Customization Specialist
[Trailへ]
(https://trailhead.salesforce.com/ja/content/learn/superbadges/superbadge_lightning_platform_app_builder)
[解説記事]
(https://qiita.com/takeakiooiwa/private/c55a0aae4ea43511e027)
メソッドの命名

 コンポーネント内のクライアント側アクションとサーバ側アクションには一意の名前を使用しま す。JavaScript 関数 (クライアント側アクション) とApexメソッド (サーバ側アクション) が同じ名前だと、問 題が発生したときにデバッグしにくくなるおそれがあります。デバッグモードでは、フレームワークに よって、クライアント側アクション名とサーバ側アクション名の競合に関するブラウザコンソールの警 告が記録されます。
GridSearchで"timeout or by a memory leak"って言われた...

#　はじめに
　VSCodeでjupyterを使ってGridSerchでCPU割当を設定してやっていたら"timeout or by a memory leak"って言われてちょっと詰まったので備忘録として書いておきます．(分かる人にとっては単純なことなのかも…)
その他，間違っている点や，もっと効率の良いやり方がありましたら教えてください．

# 0. 環境
|||
|:----:|:------:|
|OS|Windows10|
|CPU|6コア|
|メモリ|64GB|
|Python|3.7.1|
|jupyter|4.4.0|

#1.CPU割当とログの掃き出し
sklearnの中にあるGridSearchCVでは，使うCPU割当と，ログの吐き出し頻度，詳細度を指定することができます．
CPU割当は**n_jobs**になります．これを「n_jobs=-1」とするとCPU割当を自動でやってくれます．(MAX使う)
ログの吐き出し等は**verbose**になります．これを「verbose=1」とすると一定間隔でログを吐き，「verbose=2」にすると毎回吐き出します．
これは，整数部の値を大きくするとより詳しいログを吐くようになります．

#2.今回の問題
今回の問題はvscodeでjupyter(Run Cell)を動かしていると，「n_jobs=1」のとき(デフォルト)のときは問題なく動くのですが，「n_jobs=-1」や「n_jobs=3」というようにデフォルト以外で設定すると**"timeout or by a memory leak"**という警告が出てきました．
PCのスペック上は問題なく動くはずなのですが...

#3.解決方法
Run Cellではなく，デバックなしで実行(Ctrl+F5)で動かすと問題ありませんでした．これは，"Run Cell"で動かすとデバック？もしているようで，そこのメモリが2GBまでしか使えないという設定っぽいからでした．

#4.最後に
あやふや，にわかなところがあるので間違っていたらすみません。
Progate 初級編　２

未来電子テクノロジー（https://www.miraidenshi-tech.jp/intern-content/program/）
で、インターンをしているたくみです。
今回は前回に引き続き、取り組んできたProgate HTML/CSSの初級編の一部をまとめてみました。
###HTMLの全体構造
```
<html>
 <head>
 </head>
 <body>
   <h1>~~</h1>
   <p>~~</p>
 </body>
<html>
```
###＜head＞要素の中身
```
<head>
   <meta charset="###">・・・文字コード
　 <title>~~</title>・・・タイトル
   <link rel="stylesheet" href="stylesheet.CSS">・・・CSSの読みこみ
</head>
```

###ヘッダーの枠組み
```
<div class="header">
  <div class="header-logo">　○○○○　</div>
  <div class="header-list">
    <ul>
     :
     :
    </ul>
  </div>
</div>
```

###最後に
プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし誤りがあれば、修正するので、どんどん指摘してください。
VBAそのままコピペ「コピー」

コピペして使う用

```vb:単純コピー
Sub Macro1()
    Range("A1").Select
    Selection.Copy
    Range("C2").Select
    ActiveSheet.Paste
End Sub
```

```vb:短縮
Sub Sample2()
    Range("A1").Copy Range("C2")
End Sub
```

```vb:ｼｰﾄまたぎ
Sub Sample3()
    Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet2").Range("C2")
End Sub
```

https://www.moug.net/tech/exvba/0050104.html
より

```vb:値等コピー
Sub PasteSpacialSample()

    Range("B1").Copy      
    Range("E1").PasteSpecial Paste:=xlPasteValues       
    Range("H1").PasteSpecial Paste:=xlPasteFormats      '-----(3)
    Range("H1").PasteSpecial Paste:=xlPasteColumnWidths '-----(4)
        
    Range("K1").PasteSpecial xlPasteAll, Transpose:=True    '-----(5)
    Range("K1").PasteSpecial xlPasteValues, Transpose:=True '-----(6)
    
    Application.CutCopyMode = False
    
End Sub
```

設定項目

内容

Object Rangeオブジェクト 
Paste 何を貼り付けるかを指定します(下表参照)[省略可能] 
Operation 演算して貼り付けの際の演算方法を指定します(下表参照)[省略可能] 
SkipBlanks 空白セルを無視する(True)、無視しない(False：既定値)[省略可能] 
Transpose 行列を入れ替える(True)、入れ替えない(False：既定値)[省略可能] 


●表A「貼り付け」対象と引数「Paste」に使用する定数との対応表
(xlPasteType クラス)


貼り付け対象

すべて xlPasteAll（既定） -4104  
数式 xlPasteFormulas -4123  
値 xlPasteValues -4163  
書式 xlPasteFormats -4122  
コメント xlPasteComments -4144  
入力規則 xlPasteValidation 6 2002以降(※) 
罫線を除く全て xlPasteAllExceptBorders 7  
列幅 xlPasteColumnWidths 8 2002以降(※) 
数式と数値の書式 xlPasteFormulasAndNumberFormats 11 2002以降 
値と数値の書式 xlPasteValuesAndNumberFormats 12 2002以降 
コピー元のテーマを使用してすべて貼り付け xlPasteAllUsingSourceTheme 13 2007以降 
すべての結合されている条件付き書式 xlPasteAllMergingConditionalFormats 14 2010以降 


●表B「演算」方法と引数「Operation」に使用する定数との対応表
(xlPasteSpecialOperation クラス)

演算

しない xlPasteSpecialOperationNone（既定） -4142 
加算 xlPasteSpecialOperationAdd 2 
減算 xlPasteSpecialOperationSubtract 3 
乗算 xlPasteSpecialOperationMultiply 4 
除算 xlPasteSpecialOperationDivide 5
[調査中] Windows の ListView/TreeView の Visual をカスタマイズするには

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/108c9d39-e0f7-eceb-1790-bc71e7d6eb51.png)

`SetWindowTheme(treeView.Handle, "explorer", null);` を実行すると、コントロールのビジュアルが変化する事が知られています。

`C:\Windows\Resources\Themes\aero\aero.msstyles` というファイルが関係あるらしく `msstyles` で検索すると、いくつかのツールが見つかります。

## msstyleEditor

https://github.com/nptr/msstyleEditor

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/fc511b02-1954-8fa9-aa93-433b06c0f107.png)

## Theme Explorer

https://github.com/mity/theme-explorer

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364126/42b1f2c1-bee3-7d5b-88ca-4397936c9e74.png)

---

[Visual Styles Reference](https://docs.microsoft.com/ja-jp/windows/win32/controls/uxctl-ref)

[UxthemeUndocumented.h](https://github.com/nptr/msstyleEditor/blob/c82db82b960206da74fa0baa98b765a2378c7ac1/msstyleEditor/UxthemeUndocumented.h)