OmniAICreator/Qiita-1.07M huggingface dataset:
php-master-changes 2019-05-12

今日はテスト用ファイルの改行コードの変更、ドキュメントの統廃合、不要コードの削除、net_get_interfaces() への 'up' の追加、テストで小文字の pdo が使われていた箇所の大文字への変更、fpm で SIGUSR2 が正常動作していなかった問題の修正、一部ライブラリ検出の pkg-config への移行があった！

# 2019-05-12
## petk: Convert CRLF to LF in *.wsdl files
- https://github.com/php/php-src/commit/b15bfb9129eb7941b3643209243caba891e4d25d
- [7.2~]
- ext/sopa で、テストの *.wsdl の改行コードを LF に変更

## petk: Integrate libmbfl docs to README.md and LICENSE
- https://github.com/php/php-src/commit/ab257ed3201b8be0680b21cd9e3fc2c3e0c96ea2
- [7.4~]
- ext/mbstring で、libmbfl のドキュメントの統廃合

## petk: Simplify ext/mbstring/libmbfl/config.h creation
- https://github.com/php/php-src/commit/3a4df957937575eb4c8d0ae30f0126c4ed30055c
- [7.4~]
- ext/mbstring で、ext/mbstring/libmbfl/config.h の生成を単純化

## petk: Remove redundant memory.h file
- https://github.com/php/php-src/commit/9219e56063433c752397b09407c809e04ff2cc7c
- 不要な memory.h の include を削除

## petk: Remove unused symbol definition
- https://github.com/php/php-src/commit/f7cdac6c97f4b2678a693666dc143992b6c126bc
- [7.4~]
- ext/mbstring で、不要な `#define HAVE_MEMORY_H 1` の削除

## petk: Remove dead DEBUG_CFLAGS setting
- https://github.com/php/php-src/commit/836bbb4e2cb1b77bb109e140753399356ed7c159
- [7.4~]
- Zend/zend.m4 で、不要な DEBUG_CFLAGS の設定の削除

## devnexen: list interfaces/adding just "binary" state status.
- https://github.com/php/php-src/commit/1f3f54f58625d9a72671f6293ae6f0cb758161a1
- [7.4~]
- [7.3 で追加された net_get_interfaces()](https://github.com/php/php-src/pull/2935) で、'up' というキーの真偽値でネットワークインターフェースの up か down かとれるよう修正
- なおパッと見マニュアル見つからなかったけど[こんなんが出る](https://twitter.com/SaraMG/status/933821878510211072)やつ、unicast と並んで up が付く

## peter279k: Using PDO instead because of consistency
- https://github.com/php/php-src/commit/d0ac3a6a86ed6ef989303047117f00f470c593c6
- [7.4~]
- ext/pdo_sqlite で、テストに小文字の pdo でなく PDO を使うよう修正

## bukka: Fix bug [#77934](https://bugs.php.net/bug.php?id=77934) (php-fpm kill -USR2 not working)
- https://github.com/php/php-src/commit/cc5c51e7f0732067f105d13c6d355fcab5965c2f
- [7.2~]
- sapi/fpm で、USR2 シグナル（graceful reload）投げても効かず process_control_timeout の間待たされる問題の修正

## hughmcmaster: Use PKG_CHECK_MODULES to detect the systemd library
- https://github.com/php/php-src/commit/755f6f6ede96d123ff660d4fe560a39b4f82a292
- [7.4~]
- sapi/fpm で、systemd ライブラリの検出を pkg-config へ移行

## hughmcmaster: Use PKG_CHECK_MODULES to detect the iODBC library
- https://github.com/php/php-src/commit/3ece7df9cf82d77ba96d6cfeee0404abf953b656
- [7.4~]
- ext/odbc で、iODBC ライブラリの検出を pkg-config へ移行

## CViniciusSDias: Remove duplicate variables
- https://github.com/php/php-src/commit/188ece856d9300ef68adb73604b5de848b1276bb
- [7.4~]
- ext/date のテストで、不要変数の削除

## petk: Remove unused variable
- https://github.com/php/php-src/commit/f1552c864f8b89d59be3a51929bd3411e8947c54
- [7.4~]
- ext/odbc で、不要変数の削除
DockerでApacheとPHPをとりあえず動かす


ディレクトリ構造

```
app
├── Dockerfile
└── html
    └── index.php

```

# Dockerfile

EXPOSE をしないと``You don't have permission to access / on this server.``のエラーによりサイトにアクセスできません。

```Dockerfile
FROM php:7.2.7-apache
EXPOSE 80
```

# index.php

```index.php
<form method="POST" action="index.php">
    <label for="name">名前:</label>
    <input type="text" name="name" size="15" />
    <input type="submit" name="submit" value="送信" />
</form>

<?php
if ($_REQUEST['submit'] !== null) {
    print('こんにちは、'. htmlspecialchars($_POST['name'], ENT_QUOTES | ENT_HTML5, 'UTF-8').'さん!');
}
?>
```

# 1. ビルド

```shell:appディレクトリ上
docker build ./ -t php_apache_image:ver001
```

# 2. 実行

```sell:appディレクトリ上
docker run -d -p 80:80 -v {htmlディレクトリまでのabsolute path}:/var/www/html --name php_apache_container php_apache_image:ver001
```

### 例

```shell
docker run -d -p 80:80 -v /Users/cassin/MyProjects/app/html:/var/www/html --name php_apache_container php_apache_image:ver001
```

# 3. サイトにアクセス

http://localhost

# 参考
[Dockerの開発環境構築 (Mac + Docker + PHP + Apache)](https://qiita.com/Ryooota/items/65ff0c32a5d93f225d7a)
[山田祥寛　改訂版JavaScript本格入門](https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E6%96%B0%E7%89%88JavaScript%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80-%E3%83%A2%E3%83%80%E3%83%B3%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E7%8F%BE%E5%A0%B4%E3%81%A7%E3%81%AE%E5%BF%9C%E7%94%A8%E3%81%BE%E3%81%A7-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/477418411X/ref=sr_1_fkmr0_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=javascript+%E6%9C%AC%E6%A0%BC%E3%81%AB%E3%82%85%E3%81%86%E3%82%AA%E3%83%8E%E3%83%B3&qid=1557722473&s=gateway&sr=8-1-fkmr0)
#django モデルの null / blank オプションは両方 True もしくは 両方 False のどちらかで良さげ

[Djangoモデルフィールドのnullとblankの違いを理解する - Django2の実力をつけるチュートリアルサイトDjangoBrothers](https://www.djangobrothers.com/blogs/django_null_blank/)


# blank=False, null=Falseのパターン(デフォルト)

# blank=True, null=Trueのパターン

>こちらもよく利用されるパターンです。

# blank=True, null=Falseのパターン(blank=Trueのみの指定)

>そのため、文字列を扱うフィールドに限っては、blank=Trueのみの指定を許すことができるのです。

あまり使わなそう。

# blank=False, null=Trueのパターン(null=Trueのみの指定)

>最後のパターンです。こちらは正直まず利用することはありません。




# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1799








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
フロントエンド作成時注意事項メモ

# バリデーション

全てについて：不正な文字はエスケープ 
--------------------

 - ログイン
    -  ID  
         - 最小桁チェック
         - 最大桁チェック
    - パスワード  
	 - 最小桁チェック  
	 - 最大桁チェック
	 - 形式チェック（正規表現）
    - パスワードリセットリクエスト
		- メールアドレス
			- メールアドレスの形式チェック（正規表現）
			- 存在チェック
			- 必須チェック（空欄にしない）
    - パスワードリセットフォーム
		- ログインID
			- 重複チェック
			- 正規表現チェック
		- パスワード
			- 最小桁チェック
			- 最大桁チェック
			- 形式チェックチェック（正規表現）
		- 確認用パスワード
			- パスワードと合致しているかチェック

	
- URL遷移
     - 非認証ユーザーが認証ページにアクセス時
         - ログインページへリダイレクト
     - 認証ユーザーがログインページにアクセス時
         - 認証ページトップへリダイレクト
ns3でns3RandomWalk2dMobilityModelのエラーを解決

#ns3とは
ns3とはネットワークの実験を手軽にするためのものである。

##エラーについて
無線通信の実験をする際に起こったエラーである。
しっかりとリファレンス読めばこんな簡単な問題にはぶつからなかったのかもしれないが...英語が苦手のため読み間違えたみたい...
みなさんは気をつけてください。

```c++:プログラム一部抜粋
  uint32_t size;
  size = 100
  nodes.Create (size);
  MobilityHelper mobility;
  mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
                                 "MinX", DoubleValue (0.0),
                                 "MinY", DoubleValue (0.0),
                                 "DeltaX", DoubleValue (50),
                                 "DeltaY", DoubleValue (50),
                                 "GridWidth", UintegerValue (10),
                                 "LayoutType", StringValue ("RowFirst"));
  mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
                             "Bounds", RectangleValue (Rectangle (0, 50, 0, 50)));
  mobility.Install (nodes);
```

```bash:エラー内容
assert failed. cond="m_bounds.IsInside (position)", file=../src/mobility/model/random-walk-2d-mobility-model.cc, line=168
terminate called without an active exception
```
上記のプログラムを簡単に説明すると
SetPositonAllocatorによる格子状10×10に50m間隔に均等に並べる処理を行っている。
SetMoblityModelによる移動方法を記載しそれに応じた処理を行う。
問題なのがSetMoblityModelで使ったns3::RandomWalk2dMobilityModelである
このエラーが起きた原因は、ノードの初期配置の範囲と移動の範囲のズレによるものである。
初期値の設定では、

|パラメータ| 値 |
|:-:|:-:|
|ノード数|100|
|一列のノードの数|10|
|ノードの間隔(x軸)|50|
|ノードの間隔(y軸)|50|
上記のパラメータでは
x軸の最大=ノードの間隔(x軸)＊一列のノードの数=50*10=500
y軸の最大=ノードの間隔(y軸)＊一列のノードの数=50*10=500
最大値をこの値以上にすればエラーは出ないはず


##修正
```c++:修正案
mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
                             "Bounds", RectangleValue (Rectangle (0, 50, 0, 50)));
/*
mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
                             "Bounds", RectangleValue (Rectangle (x軸最小値,x軸最大値,y軸最小値,y軸最大値)));
修正↓
*/
mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
                             "Bounds", RectangleValue (Rectangle (0, 500, 0, 500)));
```

変更すると動くと思うのでやってみてください
Julia その5 関数関連の続き

## do 記法
無名関数を使った様々なタスクを書きやすくする記法が用意されている。基本的には

```
第一引数を除いた関数呼び出し do 引数リスト
   関数定義ボディ
end
```
と書くと引数リストと関数定義から無名関数を作って、1行目の関数の第一引数に渡してくれる、というもの。例えば整数のリスト中の値をすべてインクリメントするには、`map`を使うと次のようになる。

```julia
map(x -> x + 1, [1,2,3])
```

do 記法を用いると次のようになる。

```julia
map([1,2,3]) do x
    x = x + 1
end 
```

このサンプルだとなんにも嬉しくない。。しかしこの構文を用いると、Javaのtry-with-resourceのようなことが書ける。何かを行う前に`lock`し、行った後で`unlock`するには、

```julia
function with_lock(f, args...)
    lock(args...)
    try 
        f()
    finally
        unlock(args...)
    end
end
```
のように定義しておいて、

```julia 
withlock(args...) do
    BODY
end
```
のように呼び出せば良い。Juliaではsmalltalk やRubyのようにコードブロックをファーストオーダオブジェクトにして扱うことは（たぶん）できないのだけど、この記法では無名関数という形でコードブロックを切り出せるので、いろいろ便利な使い方がありそう。

### |> 演算子

似たような関数と引数の入れ替えを、パイプ演算子でも書くことができる。

```julia
引数 |> 関数
```
は

```julia
関数(引数)
```
と等価だ。関数がひとつだとあまり意味があるようには思えないが、いくつもの関数を連鎖させる場合に、関数呼び出しのネストで書くよりはパイプでつないだ方が見通しがいい。

例えば、1から10までの数字を2倍して合計する、というのは次のように書ける。

```julia
julia> [1:10;] |> x->2x |>sum
110
```


## ドット記法
Pythonのnumpyでは配列に対する一括演算がいろいろと整備されている。例えば、配列の全てに対して同じスカラーとの演算を行う事ができる。下のコードは1000, 100, 100 のすべてがゼロの配列を作り、その全てに1を加えている。

```python
import numpy as np
np.zeros((1000, 100, 100)) + 1
```

Juliaではこの機能が一般化されていて、任意の関数による配列に対する一括操作を容易に記述できる。それがこのドット記法だ。関数名の後ろにドット（ピリオド）`.`をつけると、その関数を配列に対して一括して適用するようになる。

```julia
# 1を足すだけの関数
julia> addone(x::Float64) = x + 1.0

# スカラに対して実行
julia> addone(2.0)
3.0

# 配列に対して実行
julia> addone.(zeros((1000,100,100)))
```

この記法は`broadcast`という組み込みメソッドを呼び出しているのと等価だ。

```julia
julia> broadcast(addone, zeros((1000,100,100)))
```

### numpy のvectorize
pythonのnumpyでも実は同じようなことが`vectorize`というnumpy関数を用いるとできる。この関数は、スカラを対象とした関数を引数として、配列を対象とする関数を返す。

``` python
> vaddone = np.vectorize(lambda x: x + 1)  
> vaddone(np.zeros((100,100,100)))
```

ただ、`vectorize`で作った関数はめちゃめちゃ遅い。numpyの組み込み関数と比較してみよう。次のような経時関数を用意して計測する。

```python
def timer(f):                                    
    before = time.time()
    f()
    print(time.time() - before)
```

``` python
> timer(lambda : np.zeros((1000,100,100)) + 1.0)
0.02180790901184082

> timer(lambda : vaddone(np.zeros((1000,100,100))))
2.071074962615967
```
二桁違う。これは、numpyの組み込み関数はCで書かれているのに対して、vectorizeで作った関数はPythonレイヤでループを回すためだ。

### Juliaのbroadcastの速度

Juliaの方でも同じようなことをしてみよう。まずは組み込みの配列処理関数`.+`を使う。`@time`は 時間計測をしてくれる。便利。JuliaはJITコンパイルするので1度目はちょっと遅い。下に示したのは2回め

```julia
julia> @time .+(zeros((1000,100,100)), 1)
  0.035817 seconds (11 allocations: 152.588 MiB, 38.95% gc time)
```

次にドット記法による実行。

```julia
julia> @time addone.(zeros((1000,100,100)))
  0.037969 seconds (11 allocations: 152.588 MiB, 35.68% gc time)
```

Juliaの場合これら2つの結果はほとんど変わらない。こうしてみるとnumpyのネイティブがやはり速くてすごいのだけど、ユーザが定義した関数を実行するならJuliaの方が高速になりそう。

### @. マクロ

いちいち`.`をつけて回るのは面倒だ、ということで、`@.`というマクロが用意されている。後続の式のすべての関数呼び出し、演算子に`.`が自動的につく。

```julia
julia> a = zeros((1000,100,100))
julia> @. addone(a)
julia> @. a + 1.0
```
こうすると、見通しがいい。

## 関数合成

複数の関数を複合した合成関数を、演算子`∘`で作成することができる。この`∘`は`\circ + tab`で入力できる。`f`と`g`をそれぞれ1入力の関数とすると、`(f∘ｇ)(x)`は、`f(g(x))`に等しい。

```julia
julia> map(x->f(g(x)), [1,2,3])
```

と書くのではなく、下のように書ける。2つぐらいだとあまりありがたみがない？

```julia
julia> map(f∘g, [1,2,3])
```
Amazon Kindle Unlimited 読み放題対象のIT関連の本の探し方

Amazon Kindle Unlimited 読み放題対象のIT関連の本の探し方の覚書です。

#対象
Amazon公式サイト

#手順
1. Amazon公式サイトのTOPページにアクセスします。<br>
https://www.amazon.co.jp/
2. 検索ボックス左のプルダウン（デフォルト：「すべて」 ）から「Kindleストア」を選択します。
3. 何も入力せずに、「検索ボタン」（虫眼鏡マーク）をクリックします。
4. ページ左側のカテゴリ欄のKindle Unlimited読み放題 「読み放題対象タイトル」にチェックを入れます。
5. 「カテゴリ」 > 「Kindleストア」配下に表示されている「Kindle本」をクリックします。
6. 「コンピュータ・IT」をクリックします。
7. 必要に応じて、その配下の小カテゴリやカスタマーレビューなどにもチェックを入れると<br>より詳細な検索ができます。

#備考
ブログ関連の本は、上記手順5, 6で、
 「Kindle本」 > 「ビジネス・経済」 > 「e-コマース」
を選択すると出てきます。
Asana と Trello の比較（無課金）

#はじめに
非エンジニアの方から、簡単にプロジェクトを管理できるサービスとかツール知ってます？となり、Redmineとかは簡単ではないし、非エンジニアが触るものでもないなぁ。あんまり知らない。。。となったので、少し調べてみると「[Asana](https://asana.com/ja)」と「[Trello](https://trello.com/ja)」ってのが良さそう。

プロジェクト管理ツール6選！上手に管理するコツと無料ツールを解説
https://liskul.com/project-management-tool-21418

まだAsanaはあまり触れていないのですが、勉強ついでにそれぞれについて気付いた特徴や違いをまとめていく。（基本的にはとりあえずお金かけないで使っていく前提としての調査なので、課金後の機能などについては深入りしていない）

#それぞれ特徴など
##Asana
- リスト形式・カンバン方式のどちらかを選択してプロジェクトを管理できる
- プロジェクトの数には制限がなさそう
- チケットを複数のプロジェクトにまたがるように設定することもできる
- チームメンバーが15人までは無料
- 会話という機能がありプロジェクトごとに、いろいろスレ建てしてやりとりできる
 - わざわざ提案とか質問はここみたいなチケットを立てておく必要がない
- 「いいね！」がある
 - ユニコーンが飛び出たりなど、エクスペリエンスがTrelloに比べるとポップ
- 日本語対応していない旨の記事が多いが、しっかり日本語になっている（最近対応したのかな？）
 - まだ日本での浸透度は低いのか、日本語の情報はそんなに多くない印象
- ところどころに有料機能へのリンクが仕込まれており、ついついお金を払ってしまいそうになる
- スマホアプリ版とPC版の操作感に少し乖離があるように思う

プロジェクト管理ツールAsanaのメリットと無料で使える機能の紹介
https://artandtravel.jp/asana/

これ1つで完結するかも。プロジェクト管理ツール・Asana（アサナ）の使い方
https://www.lifehacker.jp/2016/04/160417asana_bake.html

##Trello
- 基本、カンバン方式のプロジェクト管理
- チームのプロジェクトの数が10まで
- チームメンバーに制限はなさそう
- プラグイン的なのを利用しないとカレンダー上でのチケットを確認・変更ができない
 - 無料だとプラグイン的なのは一つだけしか使えない
- ラベルという付箋みたいなものでカラーリング＆タグ付けできる
- わりと目立つスタンプを押すことができる（ちょっと微妙

トレロ（Trello）を無料版で使う方法！初心者にもわかりやすい始め方
https://businesschatmaster.com/tool/trello-beginner-free

みんなのトレロ（Trello日本語コミュニティ)
https://trello.com/b/iuVU7Osk/%E3%81%BF%E3%82%93%E3%81%AA%E3%81%AE%E3%83%88%E3%83%AC%E3%83%AD%EF%BC%88trello%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3

#まとめ
##で、どっちをすすめるか？

今のところは、Asana推しかな～。

やっぱり非エンジニア勢なので、カンバン方式が必須でないというのはアドバンテージかなと。どちらもあるというのは、できることが増えて覚えることが多いとも考えられるが、まずはリスト形式だけ使ってみて慣れたらカンバンにしてみるという選択肢があるのはいいと思うし、カンバン使うまでもないようなプロジェクトもポコポコ立てられるのも、ニーズに合っていると思う。

チーム人数も、15人はちょっとぎりぎり感があるけど、ちゃんと〇〇チーム、××チームなどやることに合わせて最適化していけば、プロジェクト規模的にはいけると考えている。（今後どんなプロジェクトを立てていくか全部を把握しているわけではないのでなんともいえないが。。。）

課金誘導がそれほどうるさくなく、シンプルにまとまっていて、情報も多いように思えるTrelloに好感を持てる部分もあるが、どちらかというとそれほどビジネス感を出さなくてもいい要件だと考えているのでAsanaを提案してみよう。

逆に、よりビジネスライクに、多人数でカンバン使っていこうとしているエンジニア勢はTrelloでいいよねってことになるんだろうなと思います。

##ツールはツール、結局はどう使うかだよね

誰がどう使っていくかってところがミソですよね。
カンバン方式も物理的な頃のノウハウだけでやっていくのではなくて、いろいろやってみてチームに合うようにトライアンドエラーして、うまくはまった時に有益なんだと思う。そんなことが書いてある記事を下にまとめてみた。

タスク管理ツール 「Trello（トレロ）」 を3年間使い倒してみた！～導入時に大切な3つのこと～
https://www.workersresort.com/jp/technology/using_trello/

タスク管理ツール｢Trello｣の使い方をTrello社の社員たちに聞いてみた
https://www.lifehacker.jp/2017/01/170117_trellotrello.html

Trelloでカンバン管理のススメ
https://qiita.com/punchdrunker/items/32780f147a8fe03802f6

これをそのまま真似すると上手くいくよね、ではなくて自分のチームに、自分の利用シーンに、どう合わせていけるかって考えるのが大事。とはいえ、まずは使ってみて「こうしたらいいかも」ってなっていくといいと思います。

最後に下の記事にあるようにTrelloは公開設定しているのがわりと簡単に見られるみたいなので、どんな感じでみんなが使っているのか参考にしてみるのもいいかもしれないですね。

うわっ…私のtrello、丸見え…？（簡易チェックツール付き）
https://qiita.com/srai0628/items/e3fb0d2fa59a85248ce6
報連相　再考。仮説（40）

プログラマの「日報、週報、月報、年報」考
https://qiita.com/kaizen_nagoya/items/97ad8ac9217c12c3bb69

で報連相について少し書いた。（以下、再掲し、すこしづつ手直し。）
 
 <この項は書きかけです。順次追記します。>
# 報連相
報連相というのが流行った時代があった。

報連相は、報告、連絡、相談の略。

報告も、連絡も、相談も、その費やした労力に見合う成果があればよい。
どんどん報連相が進む。

報連相がうまくいかないのは、ほとんどが、報告しても、連絡しても、相談しても、その労力に見合う成果がない場合。
報連相が、管理者が仕事をしているという振りをするための余分で無駄な作業になっている時。

ていうか、報告、連絡、相談したために無駄な作業が増える場合があちこちで散見。

# 日常の作業自体が報連相
電子的に作業をしていて、その作業内容が閲覧できれば、そこで報告と連絡は済んでいる。

gitでソースコードあげていれば、作業量もわかる。

コンパイルエラーなど、issueで必ず上げて入れば課題もわかる。

issueであがったものが相談だと思えばいい。
issueもcloseできない人に、相談しても仕方がない。

大事なのは、例えばコンパイルエラーがあったら必ずissueに記録すること。
それだけで、すごい量の報告になる。
報告でもあり、連絡でもあり、相談でもある。

自分で解決してもよい。すぐに思いついても、自分でissueをあげて自分でcloseすればよい。

対面だけが報連相じゃない。

報連相をしろって言っている人で、まともに相談に応じる人は１割も知らない。

## 報告
プログラマが苦手な「人との口頭のやりとり」面談技術(interview technique)７つの要点
https://qiita.com/kaizen_nagoya/items/f322df6978853c708c99

それでも、翌日自分が休んだ時の引き継ぎや、自分が困っていることを誰かが助けてくれる可能性や、給料を貰っている場合には、評価の資料として、なんらかの記録があるとよい。

コンパイルしているなら、コンパイルのlogで十分。
というか、コンパイルしてエラーがでたlogを保存しない人たちがいるのは不思議で仕方がない。

どのソースをコンパイルしてどういうエラーが出て、それをどう修正したらどういうエラーが取れたかは、
記録しておいて、今後の参考にするとよい。

最新の設計環境ではそれらのlogに基づいて、修正候補を提示する機能をつけようという動きもあるやに風の便りに聞いている。

日報、週報、月報、年報の例は

プログラマの「日報、週報、月報、年報」考
https://qiita.com/kaizen_nagoya/items/97ad8ac9217c12c3bb69

p.s.
報連相をうたっていた会社が倒産したことを忘れてはいけない。
報連相していて、仕事をしていなければ意味がない。
仕事をしている上で、より効率的に解決するための道具の一つ。

GitHub > docker > その他の電子記録 > 報連相

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 20190513 午前
ver. 0.02 追記 20190513 昼
ver. 0.03 追記 20190503 午後
ver. 0.04 表題追記 20190514
ver. 0.05 ありがとう追記 20230311

### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.

<a href="http://b.hatena.ne.jp/entry/s/qiita.com/kaizen_nagoya/items/013f2779bd2beba720b7" class="hatena-bookmark-button" data-hatena-bookmark-layout="basic-label-counter" data-hatena-bookmark-lang="ja" title="このエントリーをはてなブックマークに追加"><img src="https://b.st-hatena.com/images/v4/public/entry-button/button-only@2x.png" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a><script type="text/javascript" src="https://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
http://b.hatena.ne.jp/guide/bbutton
RedashのデータソースにGoogle系の選択肢が出ないときの対処法

## アップデート後に起きた問題
Redashを1系から7系に劇的に上げてGoogle SpreadSheetやAnalyticsをデータソースに追加しようとしたら表示されていないので調査。

## データソース対応表
本来ならデータソース追加画面でこの対応しているものがすべて表示され選択できるはず。
[Supported Data Sources](https://redash.io/help/data-sources/setup/supported-data-sources)

## 対処法
Google関連で使用するパッケージがRedashの求めるバージョンじゃないと起きる現象なのでパッケージをバージョン指定してインストール。

### 依存バージョンが明記してあるファイルを確認
requirements_all_ds.txtにバージョンが書いてあるのでそのバーションをpipでインストール
`/opt/redash/redash.7.0.0.xxxxx/requirements_all_ds.txt`


いっぱいあるが、このあたりがおそらくGoogle関連のパッケージっぽいのでバージョン指定してインストール
`sudo pip install -U google-api-python-client==1.5.1gspread==0.6.2oauth2client==3.0.0`

`sudo pip install requirements_all_ds.txt` で一括インストールもいけるっぽい。

```
google-api-python-client==1.5.1
gspread==0.6.2
oauth2client==3.0.0
```

※ はじめバージョン指定せず最新をインストールしたが、表示されなかったのでこのバージョンじゃないといけない。

## Redashリスタート
sudo /etc/init.d/redash_supervisord restart

これでブラウザリロードで表示される。

## 参考
- [[SOLVED] Some Data Source Options Missing - Support / Self Hosted Redash Support - Redash Discourse](https://discuss.redash.io/t/solved-some-data-source-options-missing/2661)
msvcでテンプレートテンプレートのバグ

備忘録も兼ねて

## Visual Studioさんいつも変なバグありません？

テンプレートテンプレートを使った次のコード

```c++
#include <type_traits>

template <template <class...>class Temp, class Ins>
struct is_template_instance : std::false_type {};

template <template <class...>class Temp, class ...Args>
struct is_template_instance<Temp, Temp<Args...>> : std::true_type {};

template <template <class...>class Temp, class Ins>
inline constexpr bool is_template_instance_v = is_template_instance<Temp, Ins>::value;

template <class T>
struct Foo {
	template <class U>
	static constexpr bool is_foo = is_template_instance<Foo, U>::value;
};

template <class T>
struct Bar {
	template <class U>
	static constexpr bool is_bar = is_template_instance_v<Bar, U>;
};

static_assert(Foo<int>::is_foo<Foo<double>>);

static_assert(Bar<int>::is_bar<Bar<double>>);
```

visual studio 2019 ではコンパイルできない

Fooの方はstatic_assertで失敗していて
Barの方は`is_template_instance_v<Bar, U>`のBarが引数を省略したクラスとして扱わてしまっているみたい

コミュニティに回避策が上がってた
https://developercommunity.visualstudio.com/content/problem/558979/c-template-template-not-recognized-as-class-templa.html

呼び出し側をちょっといじるとコンパイル通るみたい

```c++
is_template_instance_v<::Foo, U>;
```

なんでこれでFooもBarもコンパイル通るようになるんだ...?(どういうバグなんだ...)

ただ、名前空間内にあると(その場合の方が多いような気がするけど)

```c++
is_template_instance_v<ns::Foo, U>;
```

みたいに長くなってしまう。MSさんはよ直して...

### 余談？

投稿直後にQiitaのタグフィード見てみたら投稿時刻が負にになってた
![rapture_20190513124501.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68544/30912f22-65d0-b56f-f696-cbdadd9be435.png)
【非推奨】ライブラリとフレームワークの違いをハンターハンターでイメージを掴んだ

## 概要
- ライブラリとフレームワークの違いの自分なりの覚え方を記載します。
- 怒られたら、この記事は抹殺します

## 背景
- ReactJSは「フレームワーク」です。とか「ライブラリ」です。とか世の中には色々な情報があふれています
- 情弱であるぼくにとってはどちらでも良かったのですが、じゃあフレームワークとライブラリの違いって何だろうと思いました
- 同じように記事にしてくれている方がいらっしゃって拝読しました
- 情弱な自分はわかった気になっていましたが、結局よくわかっていませんでした。
- ハンターハンター好きなので無理やり紐つけて覚えてやろうと思いました

　

![ハンターハンター.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247053/6cf6a447-a1e0-1a85-ee77-2ca9c9935c04.png)

　
## フレームワーク

### 念能力

![nen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247053/e45aa695-9c96-ccb8-8539-38b07849dd74.png)

> 体から溢れ出す生命エネルギー「オーラ」を自在に使いこなす力のこと。 
あらゆる生物がオーラを持っているが、それを使いこなせる念能力者はごくわずかに限られる。

### 覚えるイメージ
- 四大行の修行を積むことで、念能力が使えるようになったり・人によってはならなかったり
- 基礎修行、「纏」「絶」「練」「発」を積むことで、色々な能力を使うことができる
- フレームワークも決まった方法を使ってプログラムを書くことで、色々なアプリを作ることができる
- ただし、方法は同じだけど、「使い手によって力の差」がかなり変わってくる

## ライブラリ


![クロロ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247053/0a177a3d-fdba-935e-1e2a-5fb49853e0b1.png)

- ハンターハンターのクロロ（利用可能な画像がこれしかなくて）
- 盗賊の極意(スキルハンター)

>具現化した本に他人の能力を封じ込め、自在に引き出し使える能力。盗まれた側はその能力を使えなくなる。
盗んだ能力を使う時は本を具現化して右手に持ち、その能力のページを開いた状態にする。なお盗んだ能力は盗まれた相手が死亡すると本から削除され使えなくなる。

### 覚えるイメージ

- 具現化した本にいろんなスキルを封じ込め、自由に引き出して使うことが出来る
- ※色々な制約はあるけど、↑だけ覚えておくイメージ
- 色々なスキル（メソッド）を「必要な時」だけ呼び出して使える
- 呼び出す側の力量に関係なく「同じ能力が発動できる」
- 呼び出し先のメンテナンスがされていないと、バグる（死亡すると使えなくなる）


## 【おまけ】フレームワークもライブラリも使わなくていいのでは？

- 結論いいと思います。ただ使わない場合は以下に例えられるかと思います。

- （例）壁を壊す作業があったとする・・・
    - 普通の人：壁を殴ったら、ちょっとは傷つく程度。ただ殴り続ければいつか壊れる
    - ゴン： 念能力「ジャンケングー」で壁を殴ったら、一発で壊れる
    - クロロ：念能力「ビックバンインパクト」をライブラリから使用して壁を殴ったら、色々壊れる

- 「壁を壊す」という結果は変わりませんが、フレームワークもライブラリも使わない場合、素手で壁を殴り続けるのと同等です。せっかく念能力使えるなら使いましょう。


## 参考
- [（初学者向け）フレームワークとライブラリの違い](https://qiita.com/ryosuke071111/items/63e7c3f06fae14d86b38)
- [ライブラリとフレームワークの違い](https://qiita.com/heroyct/items/779cd66100a051056332)
- [JSフレームワークとライブラリがごっちゃになっている話](http://webnohito.me/tips/js-framework-library/)
yuicompressorでCSSアニメーションをMinifyするとインスペクションでエラーが出る話

フロントエンドに求められる内容が多くなるにつれ長いCSSにならざるを得ない昨今、皆様いかがお過ごしでしょうか。CSSのみで出来ることが多くなった反面CSSファイルが数千行になることも珍しくなくなってきていますが、その際に活躍してくれるyuicompressor。Macで人気があるらしいCodeKitなんかもCSS/JS圧縮エンジンにはyuicompressorが使用されているそうです。

```css
/* 圧縮前 */
.some-class {
   width: 100px;
   color:#333;
}
.other-class {
   width: 100px;
   color:#aaa;
}
/* 圧縮後 */
.some-class{width:100px;color:#333}.other-class{width:100px;color:#aaa}
```
このように可読性の高いメンテナンスしやすいCSSファイルから、スペース・改行や不要なセミコロンなどを取り除いて容量を減らしてくれるスグレモノです。（導入記事は他の方へお任せします）

0rem、0%などの不要な単位も取り除き文字数を減らすことで圧縮をしてくれるのですが、
CSSでキーフレームアニメーションを使用するときにちょっとだけ不便が。

```css
@keyframes custom-ease-in {
	0% {
		margin-left: 100vw;
		opacity: 0;
	}
	1% {
		margin-left: 10vw;
		opacity: 0;
	}
	100% {
		margin-left: 12vw;
		opacity: 1;
	}
}
```
よくあるイーズインの処理ですね。これをyuicompressorで圧縮すると・・・

```css
@keyframes custom-ease-in {0{margin-left: 100vw;opacity: 0}1%{margin-left: 10vw;opacity:0}100%{margin-left: 12vw;opacity:1}}
```
問題なくCSSとして動作してくれるのですが、コードインスペクションで`0`がエラー表示になります。（少なくともPHPStormではなる。）`git commit`する度に出てくる「エラーあるけど確認しとく？」的なダイアログが作業意欲をマッハで削ぎます。

この問題はGitHubの公式レポジトリでも何年も前から度々話題に登っており既にコードは修正されているのですが、コントリビューターが修正バイナリを配布していないため実質未解決になっています。自前でJavaをコンパイルしてもいいですが、`0%`を`from`へ置き換えることでエラー回避できます。

```CSS

@keyframes custom-ease-in {
    from {
        margin-left: 100vw;
        opacity: 0;
.....
```
これで気持ちよくコミットできますね！

ちなみにこの問題は`10.0%`などの小数点＋単位での数値指定の場合も起こる問題のようです。根本的解決にはソースからビルドするしかない現状。
コントリビューター、早く来てくれ！
Your Ruby version is 2.3.7, but your Gemfile specified 2.6.3

###rbenvを使用してRubyをインストールする
参考サイト
https://qiita.com/Alex_mht_code/items/d2db2eba17830e36a5f1

###bash_profileを編集してRubyのバージョンを切り替える
参考サイト
https://qiita.com/opiyo_taku/items/3312a75d5916f6cd32b1

###それでも解決しない場合(ボクはこれで解決した)

```
bundle exec rails db:create    ///データベースを作成

bundle exec rails db:migrate   ///データベースにテーブルを作成

bundle exec rails s            ///webサーバーを起動
```
discord.jsでBOTのニックネームを設定する(個人的なメモ)

久しぶりです、2回目の投稿です

友人が｢botのニックネーム変えられないの?｣って言ってきたので変えるコードを書いてみました。

discord.jsとかのインストール方法は前回の記事を参考にしていただければ幸いです。

#コード
```javaScript:index.js
const Discord = require('discord.js');
const client = new Discord.Client({autoReconnect:true});

client.on("ready", () => {
   console.log(`${client.user.tag}(${client.user.id})でログインしました。`);//ログインに成功したら｢Botの名前#タグ(ID)でログインしました。｣をコンソールに送るやつ
});

const prefix = "!"//プレフィックス

client.on("message", async message => {
    if(message.author.bot) return;//botに反応しなくなるやつ
    if(message.content.indexOf(prefix) !== 0) return;//プレフィックスのやつ

    const args = message.content.slice(prefix.length).trim().split(/ +/g);//arguments系
    const command = args.shift().toLowerCase();//arguments系

    if (command === "setnick") {
       if (!message.author.id == 貴方のID) return;
        const nickname = args.join(" ");//prefixを除いた文字列を｢nickname｣というのに送る(?)
             message.guild.members.get(client.user.id).setNickname(nickname);//botを指定する処理+ニックネームを設定する処理
             message.channel.send("ニックネームを変更しました。\n新しいニックネーム: ``" + nickname + "``");//設定が完了したら送るやつ
             return;
    }

});

client.login("ここにbotのトークンを置く");
```

#終わりに
コード内にコメントアウトしているので若干わかりやすくなっていると思います、それでは
Kindleでの改善されたタイプセットへの対応につきましてのご質問です。

Kindle Previewer 3 では、**改善されたタイプセット**で提供される最新のタイポグラフィおよびレイアウト機能を使用して本をプレビューできるとあるのですが、epubデータを**改善されたタイプセット**に対応させるために必要なコーディングの方法というものがあるのでしょうか？
（以前から自分で制作しているepubデータでは**改善されたタイプセット**には対応できていないようです。。。）
パスワードを設定していないデータベースファイルをFileMakerServer17で開けない

## 問題
以下がevent.logに記録され、パスワードを設定していないデータベースファイルをFileMakerServerで開けない（ホストできない）。

> 2019-05-13 11:40:38.257 +0900	エラー	1017	hostname	セキュリティ: データベース「dbname」は保護されていないため開くことができません。[パスワードで保護されたデータベースを要求] が有効です。

## 原因

ログに表示されている通り、[パスワードで保護されたデータベースを要求] が有効になっている。

FileMaker Server 17より、Admin Consoleではセキュリティオプションを変更できない。

 https://fmhelp.filemaker.com/help/17/fms/ja/index.html#page/FMS_Help/about-whats-new.html
 
>次の設定が Admin Console から取り除かれました。ただし、CLI コマンド fmsadmin set serverconfig を使用して設定することができます。コマンドラインインターフェースの使用を参照してください。
>
>•パスワードで保護されたデータベースのみをホストする
>•FileMaker Pro クライアント接続の最大数
>•ホストする最大のファイル数
>•スクリプト同時セッション最大数
>•データベースキャッシュに予約されている RAM
>•使用状況の収集間隔
>•プログレッシブバックアップの保存間隔
>•ログファイルのサイズの制限

## 対策

CLIより、以下のコマンドでセキュリティオプションを変更


```
fmsadmin set serverconfig securefilesonly=false
```
JS ワンライナー

# JS one-liner

メモ感覚で...更新します...

## forEach&map
とりあえずまずは、かけ算九九表...

```javascript:one-liner
[..."123456789"].forEach((x) => console.log( [..."123456789"].map(y => x*y)))
> (9) [1, 2, 3, 4, 5, 6, 7, 8, 9]
> (9) [2, 4, 6, 8, 10, 12, 14, 16, 18]
> (9) [3, 6, 9, 12, 15, 18, 21, 24, 27]
> (9) [4, 8, 12, 16, 20, 24, 28, 32, 36]
> (9) [5, 10, 15, 20, 25, 30, 35, 40, 45]
> (9) [6, 12, 18, 24, 30, 36, 42, 48, 54]
> (9) [7, 14, 21, 28, 35, 42, 49, 56, 63]
> (9) [8, 16, 24, 32, 40, 48, 56, 64, 72]
> (9) [9, 18, 27, 36, 45, 54, 63, 72, 81]
```

## inputのtype:text tagのみを一括でクリアにする

```javascript:one-liner
for(let item of Object.values(document.getElementsByTagName('input'))){if (item.type == "text") item.value=""}

```



次の更新を待たれよ...
暗号理論ノート: XOR

#どのような攻撃があるのかを知る。

暗号理論を勉強する上で念頭においておきたいこと。
既存の暗号化ではどのような攻撃があって、それに対してどのような処置を取っているのかというのを知るのが大事。

## XORを使って暗号化・復号化
###ワンタイムパッド
アリスがメッセージMをボブに送りたいとする。
アリスとボブ二人がなんらかの処置をとって共通の数値Pを手に入れた場合
アリスは$M \oplus P = C$をして、Cをボブに送る。
この時、Cは誰からでも観測できるものとする。
ボブはCを受け取り、
 $C\oplus P = M$
の処理をして、Mの内容を知ることができる。

ただし、問題はどのようにしてアリスとボブは共通の数値Pを手に入れたかということ。

### Diffie-Hellman(DH)共通鍵交換
アリスは秘密鍵aを持っていて、ボブは秘密鍵bを持っている
二人とも互いの秘密鍵をしらない。
アリスが素数pを生成して、プリミティブルートgを見つける。
プリミティブルートとは、素数pに対して
$\{1,2,3,4,... p-1\} = \{g^1, g^2, g^3, .... g^\{p-1\}\}mod\ p$
gの累乗がpまでの整数とおなじ集合をもつ数字のことを言う。

このpとgは公開され、
アリスは$A \equiv g^a(mod\ p)$を計算し、ボブは$B\equiv g^b(mod\ p)$を計算する。
それぞれAとBを公開。
アリスはボブの公開鍵Bを入手して$B^a=K_b(mod\ p)$を算出
ボブはアリスの公開鍵Aを入手して$A^b=K_a(mod\ p)$を算出
これらの共通鍵は$K_a = K_b$のような性質を持っている。

一つ前のワンタイムパッドのようにして使用すればメッセージのやりとりが完全に秘密に行うことができる。

#### XORの落とし穴
もしも$C_1, C_2$ともに同じ鍵Pを使っていた場合以下が成り立つ
$C_1 \oplus C_2 = M_1 \oplus M_2$
攻撃者は直接メッセージを得ることはできないが、片方のメッセージがわかった場合もう片方も一瞬でわかってしまう。
それこそ、ずっと同じワンタイムパッドを使っていた場合すべてのメッセージが解読されてしまう。
CircleCIの課金がわかりにくい

# 問題
- 組織でGitHub連携して使っていて、各自がフォークしているブランチが制限に引っかかった
  - この場合は誰がどのように課金すればよいのか？

# 結論
- GitHub Marketplaceで課金すればいい

# 手順
こんな感じで制限に引っかかる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50056/c34b2dfa-e1de-b2c3-0442-4d7acf0f0abc.png)

リンクをたどる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50056/c48f8cc8-cb6a-1fa0-e26a-59c498984f60.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50056/c5243f29-4d3c-b054-9a9c-71e4a65a2f33.png)

画面の下の方で課金。チームメンバー全員がフォークしたリポジトリでもビルドできるようになった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50056/fc034c65-4964-3436-962b-0c63092ecc68.png)
Progateのコードをテンプレートとして使ってみた件

#はじめに
私は、現在、大学4回生です。
未来電子テクノロジーで、プログラミン開発コースとしてインターンを行なっています。
学びの１つで、自分の逆求人サイトを作りました。
その時に起こった謎についてお話しします。

プログラミング初心者であるため、内容に誤りがあるかもしれません。
もし、誤りがあれば修正するのでどんどん指摘してください。

開発環境：cyberduck(mac)

#progateでできる簡易サイト
progateでは、htmlコースでprogateを紹介するようなサイトを作ります。
そこでは、htmlの基本から実際のサイトに必要なことを実際に手を動かして、学びます。
コード内容は、省略させていただきます。

#テンプレートとして使った結果
コースを完了し、これをアレンジしてサイトを作りにかかりました。（学びのため）
すると、body部分の画像がprogateのものから変わりませんでした。
css部分も変えましたが、変化しませんでした。
原因は、正直不明です。
考える理由の１つは、転用されないように作られているのかなと個人的に考えました。

と、様々な困難がありましたが、４日ほどで完成することができました。
http://morisita.pg-bootcamp.com/intro/index.html


#まとめ
Prtogateは、プログラミングを勉強するための1歩目として、とてもオススメです。
これからもプログラミングを勉強していく所存です。
git メモ

# git global初期設定
```
$ git config --global user.name "<名前>"
$ git config --global user.email <メールアドレス>
$ git config --global core.autocrlf false
$ git config --global core.quotepath false
$ git config --global gui.encoding utf-8
$ mkdir -p ~/.config/git
$ cat <<EOF >~/.config/git/
>*~
>EOF
```

#初期設定確認
```console
$ cat ~/.gitconfig
[user]
name = your name
email = your-mail-address
[core]
autocrlf = false
quotepath = false
[gui]
encoding = utf-8
```
window bash環境構築(msys2)

#install

1. download from http://www.msys2.org/
2. installerでインストール
3. install_dir(以降: indir)/msys2.iniを記述(後述)
4. msys2.exeのショートカットをデスクトップに追加(任意)
6. msys2.exeを起動
7. pacman -Syuコマンドを叩く
8. msys2を再起動
9. pacman -Suコマンドを叩く
10. pacman -S vim
11. indir/etc/fstabの最後にマウントを記述(後述)
MS Wordが暴走した日

 # 利用環境
Microsoft® Word for Mac 2011
version 14.7.3(17035)
macOS High Sierra バージョン10.13.6
プロセッサ 2.6GB Intel Core i5
メモリ 16GB 1600MHz DDR3

# 直前にしていた作業
MS WORDで途中から段数を変更する
https://qiita.com/kaizen_nagoya/items/ae929ea77f5cbbad5b25

MS Wordの表の調整
https://qiita.com/kaizen_nagoya/items/d16ff52dfea3b81d072c

# MS Wordが暴走
Macの本体が唸り始めた。

マウスアイコンがくるくるまわり、MS Wordが保存できなくなった。

MS Wordのアイコンを右クリックし強制終了した。
他のアプリも全部終了して、MS Wordを再起動した。

<img width="1280" alt="うなり.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/941ca362-4704-ca84-322f-d2136d0b5e4c.png">

５つファイルを開いていただけなのに、同じ名前のファイルの復元ファイルをたくさんつくってくれた。全部で４０以上。
確認しながら閉じた。
作業前の状態のものから、作業途中のものから、作業の最後らへんのものまでいろいろ。

うなりはじめた原因が、これらの作業ファイルをどんどん作り始めたからかもしれないと推測。

真偽のほどを調査するために記録

#ps -ax
うなった時は、まずpsすればよかったのに、今日は締め切り間際で気が動転してpsとり忘れ。

```shell-session:bash
$ ps -ax
...
91044 ??         0:00.08 /System/Library/CoreServices/iconservicesd
92107 ??         0:00.19 /System/Library/Frameworks/CoreServices.framework/V
92246 ??         0:10.16 /System/Library/PrivateFrameworks/AssetCacheService
92967 ??         0:00.43 /usr/libexec/secd
95070 ??         0:00.19 /usr/libexec/SafariNotificationAgent
62566 ttys003    0:00.01 ps -ax
```

暴走しているときは、
同じアプリが複数動いたり、いろいろ。

強制終了する前にps しなかったことを悔やむ。

今回のようにファイルの保存操作ができない状態では、バックアップを取る時間を待って強制終了するしかない。

今回のようにバックアップを取る処理が暴走しているような感じだ。悲しむ。


#文書履歴(document history)
ver. 0.01 初稿 20190513 午前
ver. 0.02 ps 追記 20190513 昼
ver. 0.03 悲しむ 20190513 午後
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
<a href="http://b.hatena.ne.jp/entry/s/qiita.com/kaizen_nagoya/items/46373111bdc8e667952c" class="hatena-bookmark-button" data-hatena-bookmark-layout="basic-label-counter" data-hatena-bookmark-lang="ja" title="このエントリーをはてなブックマークに追加"><img src="https://b.st-hatena.com/images/v4/public/entry-button/button-only@2x.png" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a><script type="text/javascript" src="https://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
http://b.hatena.ne.jp/guide/bbutton
AcrobatProでJSを書いて、PDFをExcelに再帰的に一括変換するツールを作った話

【ツールの概要】
PDFが入ったフォルダを再帰的にめぐり、同じ階層にエクセル置換した同名ファイルを作成する。
一回一回書き出しをやるのがめんどくさい人向け。

一般的なJSとはちょっと異なるAcrobatJSを使う必要があり、文献的に苦労したため備忘的に投稿。

参考：
↓公式リファレンス↓
https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/js_api_reference.pdf




下準備編　　「ツールを作成できる環境にする。」

１．「編集」→「環境設定」→「JavaScript」

![下準備１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415594/9c89c139-01f5-4a81-9491-bf785145d337.png)

![下準備２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415594/d306549b-85da-4bb6-0f04-3bf2d838e89f.png)



ソース入力編　　「JavaScriptを入力して保存する。」
※再帰的な処理の方法の記述が公式になかったため、代わりにアクションウィザードにその部分を担ってもらってます。
※それゆえに記述は単回処理用です。for文ぐるぐるはアクションウィザードがやってくれます。

１．「ツール」→「アクションウィザード」→「追加(もしくは開く)」
![JS作成編.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415594/9f2a71d9-46f7-2396-413b-f080d4e3911b.png)

２．「新規アクション」をクリック。
![JS入力編２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415594/e211fb20-667c-4b14-22c1-4c33d0b66f4c.png)

３．「その他のツール」→「JavaScriptを実行」
![JS入力編３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415594/532c8687-570b-a981-c9d9-655b1d2b6e62.png)

４．「（真ん中あたりの）＋→ボタン」で右側に追加（「ユーザーに確認」はチェック外すのをおすすめ）
![JS入力編４.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415594/58568d05-7325-bcc1-2f41-0fa123149749.png)

５．設定を指定を押す。

６．入力欄にソースを流し込み、「OK」を押し、保存を押す。
![JS入力編５.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415594/fce925cf-46da-c678-fabc-b403258970b1.png)

＜ソース＞

```js
/*---------------------------------------------*/
/*パスまわりを取得*/
var fullPath = this.path;
var fileName = this.documentFileName;
var naturalFileName = fileName.substring(0,fileName.length-4);
var tmpFolderPath = fullPath.substring(1,fullPath.length-fileName.length).replace("\\","\\\\"); 

/*Cドライブ以外だと動作しないためアラートを設定*/
if(tmpFolderPath.substring(0,1)!="C"){
    app.alert("Cドライブのみ対象");
}

/*「：」の文字が取得できなかったため、人為的に付与。*/
var folderPath = tmpFolderPath.substring(0,1) + ":" + tmpFolderPath.substring(1,tmpFolderPath.length);
    
/* Excelファイルに変換して保存、閉じる*/
   saveAs(folderPath + naturalFileName +".xlsx", "com.adobe.acrobat.xlsx");



/*---------------------------------------------*/
```

７．好きなアクション名を付ける。私はここではテストと名付けています。
![JSソース入力後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415594/b141b6b4-fa59-1bb6-d144-b66bcf6207e0.png)


実行編　　「実際に動かす。」

１．右側のアクションリストから「テスト(自分の名付けたアクション名)」をクリック。
![実行編.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415594/9b038b63-d848-3845-239a-de6fc7bc1f4d.png)

２．一括変換したいPDFファイルがあるフォルダを選択して、対象のファイルがリストアップされたら開始を押下
![実行編２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415594/70ee1bb2-6e2d-0527-9078-30e0664b5a8d.png)
WKWebView iOS11 以下の場合

iOS11以下では WKWebView に load する HTML が 画面サイズより小さい場合に、ナビゲーションバーがあるとその分HTMLの開始位置と高さがずれてしまう。（HTML画面は小さいのにNavigationBarの高さ分スクロールできてしまう）
contentInset, contentOffset を調整してもうまくいかず以下で対応したのもメモ。

```Swift
self.webView = WKWebView(frame: CGRect.zero, configuration: WKWebViewConfiguration())

if #available(iOS 11.0, *) {
} else {
    // レイアウトのバグ
    // ナビゲーションバーがあるときコンテンツの開始位置が調整されるが、HTML の高さが端末より小さい場合
    // 開始位置が調整された分コンテンツの高さが多くなりスクロールしてしまう。
    // コンテンツの高さが調整できないため、問題があるiOS11未満では潜りこみを回避する方法としている。
    // また、上記の際、実機でおかしな表示になるため、ナビゲーションバーを非透明とする。
    self.navigationController?.navigationBar.isTranslucent = false
    self.edgesForExtendedLayout = []
}

self.view.addSubview(self.webView)

self.webView.translatesAutoresizingMaskIntoConstraints = false
self.webView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0).isActive = true
self.webView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: 0).isActive = true
self.webView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 0).isActive = true
self.webView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: 0).isActive = true

self.webView.loadHTMLString("""
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>title</title>
</head>
<body bgcolor="blue">
<div style="font-size:32px; word-wrap: break-word; color: red;">
test
</body>
</html>
""", baseURL: nil)
```

stackoverflow にもあった内容
[UIWebView contentInset without extra height at bottom](https://stackoverflow.com/questions/17358950/uiwebview-contentinset-without-extra-height-at-bottom)
構造体の中の構造体



構造体がネストしている場合の書き方は下記のように書いてましたが、

構造体が複雑になればなるほど分割され、ややこしくなってしまったので

もう少しまとめられない物だろうかとやってたメモ

```aidl
	sampleA struct {
		Header sampleB
	}
	sampleB struct {
		Code string
	}
```

勘違いしていた書き方

```aidl
	sampleA struct {
		Header struct {
			sampleB struct {
				Code string
			}
		}
	}
```

Headerという要素の中は構造体でsampleBがもともと入ってたのだから入れましたがIDEでエラーが出る。
構造体にどんな違いがあるのかを確認するため元の構造体と変更後の構造体の違いを見てみた。

元の構造体

```aidl
 {Header:{Code:}}
```

変更後の構造体

```aidl
 {Header:{sampleB:{Code:}}}
```

sampleResponseHeaderはいらなかったですね。
なので修正するとしたらこうなるのですね。

```aidl
	sampleA struct {
		Header struct {
			Code string
		}
	}
```

今回みたいな2個程度なら別に分けてあっても、まとめてもさほど違いを感じませんが、

どうしても複雑な構造体を扱う必要が出た場合はまとめたほうが見やすそう。

複雑にならないのがベストですけどね。

上記のようにした場合、値を入れる時がこんな感じにしなければならずややこしく見える。

```
	SampleA{
		Header: struct {
			Code string
		}{
			"test",
		},
	}

```

できればこんな感じでいれたいと思うので、なんでもかんでもまとめて書くのは良く無さそう。

```
	SampleA{
		Header: struct {
			Code: "test"
		},
	}
```

※上記書き方をした場合「 missing type in composite literal 」エラーが出た。

シンプルな場合はやっぱり分けて構造体定義したほうが可読性は上がりそうなので使い分けが必要ですかね。

## 参考
https://qiita.com/uwork/items/553f2ab8b8d5c7a88080
TypeScriptでCSS modulesを扱う

既存のJavaScript（React）のTypeScript化を進めていて、ハマったのでメモ。

## 事象

CSS modules部分でfailしてしまう :thinking: 

```ts:Foo/index.tsx
import React from 'react'
import styles from './index.css'

...
```

```js
app/javascript/components/Foo/index.tsx:2:20 - error TS2307: モジュール './index.css' が見つかりません。
```

## 解決策
[typed\-css\-modules](https://github.com/Quramy/typed-css-modules) や [typings\-for\-css\-modules\-loader](https://github.com/Jimdo/typings-for-css-modules-loader) などのpackageを使う手もあったけど、グローバルな定義ファイルを用意してササッと対応することにした。

```ts
declare module '*.css' {
  interface IClassNames {
    [className: string]: string
  }
  const classNames: IClassNames;
  export = classNames;
}
```

以上っ :hugging: 

## 参考
- [reactjs \- How to import CSS modules with Typescript, React and Webpack \- Stack Overflow](https://stackoverflow.com/questions/41336858/how-to-import-css-modules-with-typescript-react-and-webpack)
- [How to use CSS Modules with TypeScript and webpack – Artem Sapegin – Medium](https://medium.com/@sapegin/css-modules-with-typescript-and-webpack-6b221ebe5f10)
- [Quramy/typed\-css\-modules: Creates \.d\.ts files from css\-modules \.css files](https://github.com/Quramy/typed-css-modules)
- [Module build failed error · Issue \#89 · Jimdo/typings\-for\-css\-modules\-loader](https://github.com/Jimdo/typings-for-css-modules-loader/issues/89)
docker-composeのmysqlコンテナでsqlファイルを実行する方法

コンテナ内に入ります。

```:コマンド
docker-compose exec mysql bash
```

接続して、そのあとでファイルを実行するのですが、ローカルとmysqlの同期ディレクトリ内にsqlファイルを置く必要があります。
例えば、docker-compose.ymlのmysqlのvolumesが ./db:/var/lib/mysqlだったら、ローカルのdbディレクトリ内に置きます。

```:コマンド
cd /var/lib/mysql
mysql -u root -p DB名 < ○○.sql
```

でパスワード入力すれば動きます。
Visual Studio Codeで「The .NET CLI tools cannot be located.」エラーが出続ける件の対処法

# 起動時に毎回出るエラー
Windows環境でUnityプロジェクトをいじる際、スクリプトエディタとしてVisual Studio Codeを使い始めました。

VSCodeのインストール時に、Unity関連で必要な拡張機能等は大体入れたのですが、プロジェクトフォルダを開く際に「The .NET CLI tools cannot be located. .NET Core debugging will not be enabled. Make sure .NET CLI tools are installed and are on the path. 」というエラーが出続けていました。
![スクリーンショット 2019-05-09 19.50.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6380/4568ed02-56be-2e69-4e63-97dd654cb7d5.png)
直訳すると以下のとおりです。

> .NET CLI toolsが見つかりません。 .NET Coreのデバッグは有効になりません。 .NET CLI toolsがインストールされており、パス上にあることを確認してください。

設定で無効にすることもできるようですが、せっかくなので.NET CLI toolsをインストールすることにしました。

# .NET CLI toolsをインストールする

エラーに表示されている「Get .NET CLI tools」ボタンをクリックすると、.NETのチュートリアルページに飛ばされます。
[.NET Tutorial | Hello World in 10 minutes](https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/intro)

こちらの「Download and install」から、.Net SDKをダウンロード。
![スクリーンショット 2019-05-09 19.50.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6380/e0b3b007-a11e-26e6-9b53-6cb6a23969b1.png)
ウィザードに従ってインストールします。
![スクリーンショット 2019-05-09 19.51.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6380/8cc84b1b-03dd-1803-1045-3d0bcad5c47f.png)
インストール完了後`dotnet` コマンドが動くことを確認。
![スクリーンショット 2019-05-09 19.52.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6380/c6d253ae-3714-5b36-b1ae-eb246c9179db.png)
マシンの再起動後に環境変数が反映され、VSCodeのエラーが出なくなりました。

やったぜ。
DenoにおけるPURLサービスの提案

Denoの特徴の一つとして、依存するライブラリの指定にURIを直接指定できるというものがあります。
これは、依存関係解決の複雑さや名前空間の切り分けの点で非常に有効です。実際Deno以外にもGoなどの処理系でも此の方法が採用されています。

# モチベーション

ところで、Denoのライブラリに関わらずURIが使用される場面では一つの問題があります。
それは作成したURIの変更が難しいということです。作成したURIが使用されるのは、二つの場合が考えらます。ひとつは、自分が管理するプロジェクトで使用される場合です。この場合は作成済のURIを変更してもプロジェクト全体にたいしてURIの置換を適用すればよいので問題にはなりません。
もうひとつは、自分が管理していないプロジェクトが自分のプロジェクト内のリソースを指定する場合です。自分のプロジェクト内のリソースのURIが変更された場合、その変更をURIを使用しているしているプロジェクトの管理者に連絡し、URIを更新してもらう必要があります。

![fig1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41724/669d32c1-191d-6e26-5f27-314715ba6df3.png)

# PURLサービスとは?

この問題を解決するのがPURL (Persistent uniform resource locator) です。これは、URL転送サービスの一種で、PURLによって割り当てられたURIに問合せが来た際に事前に登録しておいた別のURIを30xのステータスコードとともに応答します。

このサービスにより外部プロジェクトの管理者にはPURLによって割り当てられたURIを教えておき、URIを変更する際はPURLが応答すべきURIを更新することで対応するといった対応ができます。

![fig1 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41724/3057f3cd-8380-a38a-e7c5-a0e6a79a6611.png)


実際、いくつかの国際規格などの重要なプロジェクトでは、その仕様を公開するにあたってPURLを経由したURIで公開しているものがあります。(RSS1.0など)

```xml
<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
  xml:lang="ja">
```

# もしDenoがPURLを使用しなかったら?

今後ライブラリ作成者のURI変更により知らぬまに自分のソフトウェアが動作しなくなるなどの障害が考えられます。そうした場合、利用者自らが新しいURIを探し更新する必要があります。しかし、マイナーなライブラリの場合,代替のURLを見つけるのは一般に困難です。
実際Goでは過去に何度か有名なライブラリにアクセスできなくなったことで大量のソフトウェアに影響がでた事例があります。


# 有名なPURLサービス

1. Internet Archive (旧 purl.org) <br> RSS1.0などの国際規格でも採用実績があるPURLサービス
2. deno.land <br> 厳密にはPURLサービスではないが、URLを転送している。

# まとめ

依存しているライブラリがPURLを経由しないURIを指定している場合でも前述のようなトラブルが発生する可能性があります。少数の人間がPURLを利用しても意味がありません。コミュニティ全体でPURLの利用を促進する必要があると考えています。!
優しいPython独裁者が「やめた！」宣言するとどうなるのか　オープンソース・コミュニティの課題

2018年7月のある日、世界のPythonコミュニティに衝撃が走ったのは記憶に新しいところ。

Pythonの生みの親であり、30年間育ててきたGuido van Rossum氏が、自ら名付けたBenevolent Dictator for Life (BDFL）を辞任すると発表したからですね。独裁者（Dictator）は人々から嫌われることが多いけれど、この場合はBenevolent（民衆のことを考え、そのためになるようなことをする）。決める人が多数いると決断できなかったり、泥沼に陥ったりするから、自分はあえて「独裁者」として、Pythonをどう進化させていくかについての決定を下す、そしてFor Life（生涯）その役割を果たすーーーはずだったのに。

Pythonがここまで広く使われる言語に成長し、初めてプログラミングに触れる人からも技術者からも愛されるようになったのはVan Rossum氏の貢献によるところが大きく、関係者たちにとっても、突然の「辞めます」宣言は晴天の霹靂だったそうです。

この辺りの事情はポッドキャストTalk Python to me（エピソード#170　2018年7月20日放送）で詳しく語られています。
https://talkpython.fm/episodes/show/170/guido-van-rossum-steps-down

ここにゲストとして登場するPythonコア・デベロッパーの人たちによると、直接の引き金となったのはPEP572問題。

https://qiita.com/fumitoh/items/1e9548ecd21fb620a1a6
https://www.python.org/dev/peps/pep-0572/

Van Rossum氏は自分が責任者（「独裁者」）として下す決断に対する否定的なコメントの数々に嫌気がさしていたようなのです。そして、中でもこのPEP572は評判が悪く、議論が荒れ模様に…。たかがソフトウェア、されどソフトウェア。時にはこうした非難のコメントはプロフェッショナルとしての節度を欠き、悪意に満ちていたーー、という話を聞いて、改めてオープンソース・コミュニティの課題について考えさせられました。

会社や学校とは違って、「優しい」「独裁者」がいないと、成り立ちにくいオープンソース・コミュニティ。でも、独裁者一人だけでは何もできないので、コミュニティ・メンバーの貢献が必須なわけですが、その際の関わり方、協働のし方などに初めから決まったルールはありません。何か仕事をしながら少しずつ身の丈にあった「働き方」を見つけることになります。

ポッドキャストの最後にコア・デベロッパーの2人は、
「Pythonは今もこれからもオープン・コミュニティだから、誰でも発言できる。でも、何か気に入らないことがあったら、すぐ言葉にするのではなく、ちょっと考えて。相手は人間だということを考えて発言してほしい」という趣旨のことを言ってました。

これが昨年の夏。それから9か月近くが経過し、Van Rossum氏のいないPythonコミュニティはどうなっているのかーー、これについてはまた後日ということで。
Xcode10.2とSwift5対応

## 1.Xcode10.2をインストールする
まずは、[ダウンロードページ](https://developer.apple.com/download/more/)から、Xcode_10.2.xipをダウンロードしてインストールします。（macOSは10.14.3以降である必要があります）

## 2.Swift Language VersionをSwift5に変更

Xcode10.2がインストールできたら、Build Settingsの**Swift Language Version**を**Swift5**に変更します。

<img width="655" alt="Swift_Version.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361214/2796e2e9-bd71-a211-86d0-81e6e6890d67.png">

## 3.警告対応

ビルドしたところ、いくつか警告が出たので対応していきます。

### 1) Localizations非推奨の警告

__＜警告＞__

![スクリーンショット 2019-05-07 12.33.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361214/db85b1a4-072e-baf4-558c-8e83b59332af.png)

Localizations非推奨の警告が出ていました。Xcode 10.2 Release Notesの[Localization](https://developer.apple.com/documentation/xcode_release_notes/xcode_10_2_release_notes/)に記載されていましたが、廃止予定のローカライゼーション識別子を使用していると警告が出るようになりました。移行する必要があるので、警告をクリックして、Migrateボタンで移行します。（※下記イメージを参照）

![スクリーンショット 2019-05-07 12.32.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361214/46eea677-8945-9cad-2cfa-083d6328724d.png)

マイグレーション前にあったdeprecatedになったLacalizationsの設定が解消されます。

|マイグレーション|画面イメージ|
|-----|-----|
|実行前|![スクリーンショット 2019-05-07 12.35.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361214/c05c165d-a9ca-39f2-efb7-dd4cf0c74e1f.png)|
|実行後|![スクリーンショット 2019-05-07 12.33.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361214/c34e82e1-67bc-6eaf-b485-93bf5dd15813.png)|

### 2) public修飾子が付いたextensionの警告

__＜警告＞__

```
'public' modifier is redundant for instance method declared in a public extension
```

この警告はpublic修飾子がついているextension内で、拡張したメソッドにもpublic修飾子が付いていたため、それが冗長だと警告しているものです。
例えば以下のようなコードで警告が表示されていました。


<img width="974" alt="スクリーンショット 2019-04-26 11.27.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361214/215e9d6d-85cc-ef7b-ff3b-83852ae5c739.png">

```public extension```でUIScreenの拡張メソッドを作成しているのですが、```originalSize(scaledSize:)```メソッドにもpublicが付いているため、以下のようにメソッドのpublic修飾子を削除すれば警告は消えます。

__＜対応後＞__

```swift
public extension UIScreen {

    func originalSize(scaledSize: CGFloat) -> CGFloat {
        return scaledSize / UIScreen.main.scale
    }
}
```

私の関わっているプロジェクトでのXcode10.2とSwift5対応は以上でした。
他の方々の対応する際のご参考になればと思います。
MS Wordの表の調整

# 利用環境
Microsoft® Word for Mac 2011
version 14.7.3(17035)
macOS High Sierra バージョン10.13.6
プロセッサ 2.6GB Intel Core i5
メモリ 16GB 1600MHz DDR3

#MS Wordの表の調整

MS Excelから MS Wordに表を貼り付けると、Wordの枠からはみ出ることがある。

原因と対策はよくわかっていない。

MS WORDで途中から段数を変更する
https://qiita.com/kaizen_nagoya/items/ae929ea77f5cbbad5b25

を書いた勢いで、今度は自分でWORDをしらべて記録する。

貼り付けた表を選んで、右クリックすると

一番下に「表のプロパティ」というのが現れる。

選ぶと

<img width="529" alt="表.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/ba3e1d30-f99a-019d-0460-53a9e9b35ec9.png">

「サイズ」のmmで、MS Wordに収まる幅を指定する。

<img width="529" alt="表行.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/b95b7784-141f-6a98-8ca5-0d3c1eceed08.png">

行の高さを指定したければ、「サイズ」のmmで指定する。
複数行同時に指定したいか、１行づつ指定したいかによって、先に範囲指定すればよい。

<img width="529" alt="表列.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/c4770813-ea54-4852-7d95-a81a0f20d832.png">

列の幅を指定したければ、「サイズ」のmmで指定する。
複数列同時に指定したいか、１列づつ指定したいかによって、先に範囲指定すればよい。
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
artisanコマンド実行時にエラーになる

とある改修を行った際に、Artisanコマンドを実行時に以下エラーが出ていた。
```PHP Fatal error:  Uncaught ReflectionException: Class log does not exist ```

こちらを参考にしたが、事例に当てはまらず。
[PHP7 で Laravel5 を試して出てきたエラー（その１）](http://watouch.hatenablog.com/entry/2016/05/29/202621)

githubのissueに近しい事例を発見。

原因はconfigファイル内でurlヘルパー関数を使用していたからだった。
configファイル内では動的な記述ではなく、プレーンテキスト推奨でした。

```config.php

return [
    'url'           => [
        'admin'  => url('app/admin'),
    ]
];

```
[参考にしたissue](https://github.com/laravel/framework/issues/7671)