OmniAICreator/Qiita-1.07M huggingface dataset:
[PHP]X年X月の第N週は、何日から何日？

## やりたいこと
タイトル通り。
例:2018年7月の第3週って何日～何日なの？

## 関数化
```php
/**
 * XXXX年XX月の第N週は、何日から何日までか
 *
 * @param string $ym             対象年月。YYYY-MM形式
 * @param int    $n              取得したい週
 * @param bool   $aroundMonthFlg 前後の月を含めて算出する場合のみtrue
 * @param bool   $startMondayFlg 月曜始まりとしたい場合のみtrue
 * @return array
 */
function getWeekBothEnds($ym, $n, $aroundMonthFlg = false, $startMondayFlg = false) {
	// 第1週最終曜日の計算用(デフォルトは土曜、月曜始まりの場合は日曜)
	$weekEnd = 6;
	if ($startMondayFlg === true) {
		$weekEnd = 7;
	}

	// 月初(1日)の曜日を取得
	$weekNo = date('w', strtotime('first day of ' . $ym));

	// 曜日番号の差から第1週最終曜日の日付を算出する
	$firstEndDay = $weekEnd - $weekNo + 1;
	if ($firstEndDay === 8) {
		// 1日が日曜かつ、月曜始まりの場合のみ8になってしまうので調整
		$firstEndDay = 1;
	}
	$firstEndStamp = strtotime($ym . '-' . sprintf('%02d', $firstEndDay));

	// 第1週最終曜日の日付 - 6 = 第1週の最初の日付
	$firstStartStamp = $firstEndStamp - (6 * 24 * 60 * 60);

	// 第1週の開始日と終了日が分かっているので、これを第N週にスライド
	$startStamp = $firstStartStamp + (($n - 1) * 7 * 24 * 60 * 60);
	$endStamp = $firstEndStamp + (($n - 1) * 7 * 24 * 60 * 60);

	// 前後の月を含まない場合
	if ($aroundMonthFlg === false) {
		// 週初めが先月やんけ！
		if (date('Y-m', $startStamp) !== $ym) {
			// 1日にしといたろ
			$startStamp = strtotime('first day of ' . $ym);
		}
		// 週終わりが来月やんけ！
		if (date('Y-m', $endStamp) !== $ym) {
			// 末の日にしといたろ。しゃーなしやで！
			$endStamp = strtotime('last day of ' . $ym);
		}
	}

	return array(
		// 開始
		$startStamp,
		// 終了
		$endStamp,
	);
}
```

## 実行
```php
// 今年の7月第3週は、7/15(日)～7/21(土)
$item = getWeekBothEnds('2018-07', 3);
echo date('Y/m/d', $item[0]) . ' ～ ' . date('Y/m/d', $item[1]) . "\n";
// -> 「2018/07/15 ～ 2018/07/21」

// 今年の6月第1週は、6/1(金)～6/2(土)
$item = getWeekBothEnds('2018-06', 1);
echo date('Y/m/d', $item[0]) . ' ～ ' . date('Y/m/d', $item[1]) . "\n";
// -> 「2018/06/01 ～ 2018/06/02」

// 今年の6月第1週、前月も含めると5/27(日)～6/2(土)
$item = getWeekBothEnds('2018-06', 1, true);
echo date('Y/m/d', $item[0]) . ' ～ ' . date('Y/m/d', $item[1]) . "\n";
// -> 「2018/05/27 ～ 2018/06/02」

// 今年の9月第6週は、9/30(日)のみ
$item = getWeekBothEnds('2018-09', 6);
echo date('Y/m/d', $item[0]) . ' ～ ' . date('Y/m/d', $item[1]) . "\n";
// -> 「2018/09/30 ～ 2018/09/30」

// 今年の9月第6週は、次月を含めると9/30(日)～10/6(土)
$item = getWeekBothEnds('2018-09', 6, true);
echo date('Y/m/d', $item[0]) . ' ～ ' . date('Y/m/d', $item[1]) . "\n";
// -> 「2018/09/30 ～ 2018/10/06」
```
fenrirでの複数選択まとめ


コマンドラインランチャ[fenrir](http://hp.vector.co.jp/authors/VA026310/soft2.htm)の話。

最新版の0.75cでは半ば隠し設定だが、fenrirはアイテムの複数選択に対応している。

現在のcmd.txt等には残っていないが、history.txtに情報がある。

## fenrir.iniの設定
自動生成される項目にはないが、`SingleSel=1`を追記すると複数選択が有効になる。
`SingleSel=0`、ないしは項目の削除で無効になる。

しかしこれ01が逆じゃないのか。あるいは`MultiSel`じゃないのか。

## コマンドファイルの設定
ここをちょっと考える必要がある。

### マクロ
コマンドラインにおいて、**複数選択されたファイル**は以下のマクロで参照できる。

|マクロ|意味|
|---|---|
|%MN|選択した複数のパスを改行で区切ったもの|
|%MS|選択した複数のパスをスペースで区切ったもの|

複数の引数を受け取れるアプリなら、`%MS`で1パス1引数として処理できる。

めったにないと思うが、単数の引数しか取れないアプリに複数のパスを渡したい場合は`%MN`を使うことになるだろう。
もしくは、ダブルクォートで囲んで`"%MS"`としても、全体でひとつの引数として解釈してくれるようだ。

単数選択時のマクロ`%P`等は、ダブルクォートで囲まないと、スペースを含むパスをひとつの引数として解釈できない場合がある。
よって、最終的には渡す先のアプリ次第だが、単数マクロはダブルクォートする、複数マクロはダブルクォートしない、を基本にするとよい。

### 拡張子
通常、コマンドファイルは選択中のアイテムの拡張子ごとに設定する。しかし、複数選択の場合は拡張子も複数になりえるので、専用の特殊拡張子`|||`が用意されている。

ここで、各アイテムの拡張子に対応するメニューも一緒に呼び出されることに注意する必要がある。まあ選択肢が出るから普通に選べばいいのだが、私のようなホットキーだけで確定しろ病の人は、あるコマンドファイルにおいて複数選択拡張子`|||`および**その他拡張子**を表す`???`のみを設定するなどの工夫が必要。

### 設定例
ctrl+dで単数または複数のファイルを[deletefile](http://www.web-ghost.net/bluewind/)で削除する場合。

`???`じゃなくて**すべての拡張子**を表す`***`だと、複数選択時に両方出てくる。

```2d.txt
[.???;
ゴミ箱に入れる(単数)|C:\apps\tools\deletefile\DeleteFile.exe %P
]
[.|||;
ゴミ箱に入れる(複数)|C:\apps\tools\deletefile\DeleteFile.exe %MS
]
```

## 参考
- [fenrir \- fenrirouen](https://sites.google.com/site/fenrirouen/fenrir)
OpenMBEE VE構築

#公式

https://github.com/Open-MBEE/ve

#環境
CentOS7

#node.js環境を構築
https://qiita.com/crimson707/items/08822b30fc41cedb7756

#作業用フォルダ作成

```
mkdir /OpenMBEE
```

#VEをclone

```
cd /OpenMBEE
git clone https://github.com/Open-MBEE/ve.git
```

#angular-mms-grunt-servers.json作成

```
cd /OpenMBEE/ve
vi angular-mms-grunt-servers.json
```

以下を書き込む

```
{
  "localhost": "localhost"
}
```

#ライブラリのインストール

```
npm install -g grunt-cli
npm update && npm install
node ./node_modules/node-sass/scripts/install.js
npm rebuild node-sass
```

#VE起動

```
grunt server:localhost
```




#問題点
###UserNameとPasswordを入力する欄が表示されない場合がある
/mms-ts/tsperspectives/TSWebView.css へのアクセスがタイムアウトにならないため。
上記のファイルはVEに含まれていない。
取得がタイムアウトしない場合は処理が止まってしまう。

Gruntfileを開く

```
vi Gruntfile.js
```

内容を一部変更する。

```
host: 'mms-ts-uat.jpl.nasa.gov',//'localhost',//'100.64.243.161',
下記に変更
host: 'localhost',
```
【手順】AndroidアプリにOpenCVModuleを組み込む「Kotlin編」

## 目次
* 開発環境
* 手順
* おわりに

## 手順

1. openCVモジュールをプロジェクト内にインポートする。
2. 各モジュール（appとopenCV）のcompileとbuildバージョンを合わせる。
3. OpenCVライブラリをappモジュールに組み込む。
4. appモジュールの依存関係にopenCVモジュールを追加する。

### 1. openCVモジュールをプロジェクト内にインポートする。
![](https://i.imgur.com/wX7AUA1.png)

### 2. 各モジュール（appとopenCV）のcompileとbuildバージョンを合わせる。
![](https://i.imgur.com/eAYpLx6.png)

### 3. OpenCVライブラリをappモジュールに組み込む。
![](https://i.imgur.com/LbnnKlU.png)

### 4. appモジュールの依存関係にopenCVモジュールを追加する。
![](https://i.imgur.com/wMUFHI3.png)

## おわりに

1. ソースコード
2. 実行結果

### 1. ソースコード

```java:MainActivit.kt
package and.syun.com.kotlinwithopencv001

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

import org.opencv.android.OpenCVLoader

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        val versionString :String = openCVVersionString(OpenCVLoader.initDebug())
        findViewById<TextView>(R.id.text_view).text = versionString
    }

    private fun openCVVersionString(arg: Boolean): String {
        when (arg) {
            true -> return "OpenCV Version: "+OpenCVLoader.OPENCV_VERSION
            false -> return "ERROR: OpenCV Load Failed"
        }
    }

}
```

### 2. 実行結果
<img src="https://i.imgur.com/1aOCJ22.png width=50">

### 3. かわいいアルパカ
![](https://i.imgur.com/JljDSLP.jpg)
CentOS で nvm, node-sass を実行する

Cent OS 6系で nvm やら　node-sass を使おうとしたら 

* yum から落とせるgcc のバージョンが古い。
* yum から落とせる git のバージョンが古い。

という課題があって手間だったので環境構築用の shell を書いてみました。

https://gist.github.com/coa00/6d60cbfc82c2349062b40f7dd3c4868b

Cent OS のバージョンが古いから yum が古いのかもしれないです。

もっと良い改善策があればコメントください。
npm install -g .

`npm install -g .`はカレントディレクトリをnpmでグローバルインストールする。

この時にグローバルの`node_modules`にそのプロジェクトのディレクトリが作成されるわけだが、これはコピーではなく元のディレクトリのシンボリックリンクになる。

つまり、元のディレクトリで行った修正はすぐにグローバルの方のコマンドにも反映される。

便利！

※ Windowsでどうなるかは知らん
setcookie()でtime() - 3600が効かなかった話

#前提として
まずcookieの代替としてsessionが使えるならsessionを使ったほうがよさそうです。
理由はセキュリティ的リスクをsessionにするだけで軽減できるから。
また単純なデータの受け渡しなどは環境変数＋サーバディレクトリの
パーミッションなどを考えたほうがセキュアになる可能性もありそうです。
（レンサバなどは注意が必要です）

私の今回のケースはSDKツールの関連でcookieを使う必要がありました。
が、有効期限をセッション間のみにするほうがよいとのことでした。
そんな中、setcookie関数を設定している際に起こった問題です。

#setcookie関数の第3引数
第3引数でクッキーの有効期限を設定するのですが
よくある下記のような指定方法ではcookieが発行されないという現象が起きました。

```non-generation.php

setcookie( $name, $value, time() - 3600, $filename, $fqdn, true, true );

```

これだと単純にcookieが発行されていないという状態になりました。

#環境
amazonlinux
php7.1
wordpress4.9.7

#セッションクッキーを生成するには
セッション間のみ保持する（ブラウザを閉じると削除される）クッキーを発行するには

```generat-cookie.php

setcookie( $name, $value, 0, $filepath, $domain, true, true );

```

と第3引数を0にします。

#setcookie関数の注意点
ドメイン属性を第4引数で指定することができます。
恥ずかしながら当方もここを厳密に指定したほうがセキュリティリスクを
減らすことができると思い指定していましたが
**指定しないのが最もクッキーの送信範囲が狭く安全な状態**になります。

デフォルトでは指定なしの状態とのこと。
具体的にはクッキーを生成したサーバにのみクッキーを送るという動きになります。

例として場面を想定してみると
レンサバを借りていて初期のドメインをもらえる場合があると思います。
Auserid.rensaba.com
共有レンサバの場合ほかの方は以下のアドレスをもらっている場合もありますよね。
Buserid.rensaba.com

この状態でAからsetcookiでドメイン属性をrensaba.comとすると
クッキーを埋め込まれたブラウザはBuserid.rensaba.comにもクッキーを送信してしまう動きになります。

逆に複数のサーバに送信されるクッキーを生成したい場合は
ドメイン属性を使って指定するという使い方になります。

#cookieからsessionにすると減るリスク
##http通信でデータが飛ばなくなる
通信をするということはデータが飛んでいるということです。
cookieの保存場所はクライアントのブラウザで
sessionの保存場所はサーバ内です。
サーバ内で完結できるアーキテクチャがあればそちらを優先したほうが
セキュリティの観点からはリスクが減らせます。

##サイト閲覧者が操作できなくなる
cookieはクライアントのブラウザに保存されるので
削除したり、編集したりできます。
cookie、キャッシュ削除というあれですね。
となるとここにもリスクが発生しますから
そのリスクをなくすためにもsessionがよいとのこと。

##phpのセッションはクッキーを発行している
余談ですがphpのセッションは裏側でクッキーを発行しサーバに保存しているとのこと。

#原因
つかみかねております。
もし発動条件をご存知の方がいらっしゃいましたら
ぜひコメントをお願いいたします。
PHPを学習してみて最初につまづいたこと

#何につまづいたのか　ー　入力値の取得
試験勉強を兼ねて試しにPHPを書いてみようと思い、
paizaを用いて問題を解いてみることにしました・・・・・
しかし、入力値が複数行の時に2行目の値が取れない・・・・・・という事態に。
実際に書いたコードは以下です。

```php:
$input = fgets(STDIN);
$array = explode("\n", $input);
```

\$array[0]は値が入っているのに、\$array[1]に2行目の値が入っていないんです。

#何がダメだったのか
```php:
$allay = explode('  ', $input);
```
でスペース区切りで配列に文字列を格納できたので、
その要領で"\n"区切りで配列に格納できると勘違いしていたのが間違いでした。。。。
さらに元をたどると、
\$input = fgets(STDIN);
上記を勝手に全文取得してくると思っていたのですが、
1行単位でしか取得してくれない、とのこと。。。

#結論
以下のように描けばよかったみたいです。
ややこしく考えすぎてしまっていたようです。

```php:
$input1 = fgets(STDIN);
$input2 = fgets(STDIN);
```

これで複数行の入力値取得ができます。
ちなみに改行コードが入ってしまうので、
echo \$input1.\$input2;
のように出力したい場合はtrim()を使う方が良さそうです。

```php:
$input1 = trim(fgets(STDIN));
$input2 = trim(fgets(STDIN));
```

意図しない改行コードが入ってしまう可能性があるため、
明示的にtrim()で文字だけ取得してくる方が個人的に無難そうな気がしました。

#まとめ
\$input = fgets(STDIN);
　→1行取得
\$array = explode("\n", $input);
　→1行で書かれている中で記号区切り("\n")する場合には有効。
　　ただし改行コードは複数種類があるので注意が必要。
http-proxy-middleware を使用して画像操作の CORS 簡易対処 (Nuxt.js)

# 画像操作時の CORS の問題

別サーバなど違うドメインからの画像を使用する際
表示するだけであれば特に問題はないですが
CORS の制限で JavaScript などでの操作ができないケースがあります。

サーバでの対応などで対応するケースがあるようですが

PHP などでいったんサーバでダウンロードし、
それをクライアントにレスポンスとして返すという対応をしたことがあったので

Vue.js などの開発の際に簡易に対応する方法として
[http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware) を使用することを試してみました。

# 設定など

```js:nuxt.config.js
  ・・・
  proxy: {
    '/image/edit': {
      target: 'http://homestead.test/',
      pathRewrite: {
        '^/image/edit/': '',
      },
    },
  ・・・
```

* http://homestead.test/ が画像サーバ
* テンプレートなどで `src` を指定する際に `/image/edit/～` として指定

```vue:edit.vue
<template lang="pug">
  div
    span http-proxy-middleware 使用
    croppa(
      :initial-image="'/image/edit/edit.jpg'"
    )
    span URL を直接指定
    croppa(
      :initial-image="'http://homestead.test/edit.jpg'"
    )
</template>

<script>
import Vue from 'vue';
import Croppa from 'vue-croppa';

Vue.use(Croppa);
export default {};
</script>

```

画像操作のコンポーネントとして [Vue Croppa](https://zhanziyang.github.io/vue-croppa/#/) を使用しています。
`initial-image` に指定した URL で初期画像を指定しますが

* 上のほうは `http-proxy-middleware` により読み替えられる指定であり
* 下は直接 URL を指定

という形になっております。

# 結果

![edit.jpg](https://qiita-image-store.s3.amazonaws.com/0/116435/5aa55bfc-2e01-5540-c19a-6515de68d84e.jpeg)

`http-proxy-middleware` を使用したほうは正しく画像が反映され
URL 指定のほうは CORS の制限により読み込みに失敗しました。

`http-proxy-middleware` などを使用可能であれば
簡易的な CORS 対策に使用可能なのでは・・・と思われます。
コレクション - List と ArrayList -

ArrayList と List<T>についてのメモ

# コレクション
コレクションとは大きさが決まっていないが、配列のように多数の値をまとめて操作できるもの

.ArrayList と List<T>という似た名前のクラスが存在する
- ArrayListクラス（System.Collections名前空間）
- List<T>クラス（System.Collections.Generic名前空間）
# どっちを使うのがいいの?
List<T> を使おう

# ArrayListとList<T>の違い
ArrayListは.NET Frameworkの最初から存在する 。
List<T>は.NET Framework2.0から利用可能である。

ArrayListクラスの要素はObject型
List<T>クラスの要素は、インスタンス化するときに定義される

ArrayListクラスの要素には何でも突っ込めるが、取り出すときにいちいちキャストする必要がある。
List<T>クラスの要素には特定の型のみしか格納できない代わりに、取り出すときにキャストは不要

# 参考
http://www.atmarkit.co.jp/ait/articles/1710/25/news023.html
やっとこさＧＩＴＨＵＢ


今月からＧＩＴＨＵＢの本を読んでおり、だいたい使い方というものの
イメージトレーニングができました。

普段、あまりパソコンに座ることができない中で
プログラミングの勉強をするというのは、
なかなかコツがあるのですが・・・

やはり何でも、取扱説明書を読むということが大事です。

最近は、ネットで簡単に情報が引き出されるので、
ついつい、ＧＯＯＧＬＥで安直に検索して、情報を得ようとしがちです。

だいたい、ＱＩＩＴＡなどの情報源は、かなり上級者向けに書かれていて
懇切丁寧、手取り足取りという訳にはいきません。

書物を読むことで、アプリケーションの画面の大枠の機能や、
枠組みというか、かなり大きな規模で、物事を捉えることで、
あとは詳細を理解していくということができます。

これは、たとえるのであれば、スケッチとその色塗りに似ていると思います。

まず第一段階で、スケッチで大枠を描き、だいたいの構図を固めます。
その後に、詳細の肉付けをしていくことで、細かいことが理解出来るようになってきます。

この順番を逆にしてしまうと、これはこれで大変です。

部屋の整理でも、こまごましたものの片づけをするよりも、
まず、どんな種類、どんなカテゴリなのか、
そういう大きなところから、おき場所を決めていくことが必要です。


プログラミングというのは、不思議なもので
最初はまったくチンプンカンプンな状態から始まって、
理解できている領域が３０％を超えてきたぐらいから
急速に伸びだします。

まるでパズルがつながるがごとく、点から線へ、線から面へと
技術領域が深まってくる気がします。

最初は、かなり苦しいと思いますが、
同じような場所にとどまって、知識を深めるよりは
さまざまな知識をインプットして、見知らぬものを
少しは知っているものに変化させることが
何よりも重要かと思います。

そのためには、食わず嫌いにならず
なんでも、ひととおりのことを知ることが大事です。


さて、タイトルとまったく違った流れになってしまいましたが、
ＧＩＴＨＵＢも、いきなり高度な使い方を知るよりは、
まずは、おおまかな流れを理解して、何をするものかというのを
漠然とつかむことが大事で
そのためには、一冊の本を片っ端から目で見て
イメージを焼き付ける。

それだけで、実際にキーボードに触らなくても
学習できるものだなあと、思いました。

>この記事は、プログラミング初心者の方に向けて書かれたものです。筆者はまだGITの使い方を学ぶ初心者であり、特にパソコンに触れる時間が限られているため、勉強法や情報収集について自身の経験を通じて語っています。

>今回の記事では、GITの使い方を学ぶ上での重要性や効果的な勉強法について述べられています。また、取扱説明書を読むことや書物を通じた学習の重要性も強調されています。初心者にとっては、大枠を理解し、詳細を追っていくという学習プロセスが効果的だと述べています。

>筆者は、プログラミングを始めたばかりであるため、まだ理解できている領域が限られていることを認識しています。しかし、知識を深めるためにはさまざまな分野に触れることが重要であり、食わず嫌いせずに取り組む姿勢が求められると伝えています。

>総じて言えることは、この記事は初心者向けの内容であり、プログラミングの知識や経験が浅い筆者の視点から書かれています。安心して読んでいただける内容であり、初心者が学習の基礎となる考え方を理解するための参考になるでしょう。
Used Material Design UI for Vue2

# Step 1. Install packages
```
$ yarn add @fortawesome/fontawesome-free <-- This is optional.
$ yarn add material-design-icons-iconfont <-- This is optional.
$ yarn add vuetify
```

# Step 2. Add Configuration in main.js
>
* **main.js** ( This file is created by vue-cli. )

```javascript:main.js
import Vuetify from 'vuetify';
import colors from 'vuetify/es5/util/colors';
import 'vuetify/dist/vuetify.css';
import 'material-design-icons-iconfont/dist/material-design-icons.css'; <-- This is optional.
import '@fortawesome/fontawesome-free/css/all.css'; <-- This is optional.

...
...
...
Vue.use(Vuetify, {
  theme: {
    primary: colors.blue.darken2,
    secondary: '#424242',
    accent: '#82B1FF',
    error: '#FF5252',
    info: '#2196F3',
    success: '#4CAF50',
    warning: '#FFC107',
  },
});
...
...
...
```

# Step 3. Modified Webpack Configuration Files

```javascript
  module: {
    rules: [
      ...
      ...
      ...
      {
        test: /\.(png|jpe?g|gif|svg|eot|ttf|woff|woff2)(\?.+)?$/,
        include: [
          path.resolve('src'),
          path.resolve('node_modules/vuetify/'), <-- Add this.
          path.resolve('node_modules/material-design-icons-iconfont/'), <-- This is optional.
          path.resolve('node_modules/@fortawesome/'), <-- This is optional.
        ],
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 10000,
            },
          },
        ],
      },
      ...
      ...
      ...
    ],
  },
```

```javascript
  module: {
    rules: [
      ...
      ...
      ...
      {
        test: /\.(sa|sc|c)ss$/,
        include: [
          path.resolve('src'),
          path.resolve('node_modules/vuetify/'), <-- Add this.
          path.resolve('node_modules/material-design-icons-iconfont/'), <-- This is optional.
          path.resolve('node_modules/@fortawesome/'), <-- This is optional.
        ],
        use: [
          'vue-style-loader',
          'css-loader',
        ],
      },
      ...
      ...
      ...
    ],
  },
```

https://vuetifyjs.com
GKE+Java環境におけるjconsoleの利用方法

# はじめに
Google Kubernetes Engine + Java (Spring Boot)環境における、jconsoleの利用方法について試したことを記載しています。

# 環境
環境は、
　[GKE+Java環境におけるjvisualvmの利用方法] (https://qiita.com/h-r-k-matsumoto/items/6bd4ba191208745e012b )
と同じです。

# ツールの利用

## sshでトンネル接続

下記コマンドにて、PCとtunnel serverの接続を行います。
`--` の前のコマンド部分は、Google Cloud Consoleにて[Compute Engine]→[VMインスタンス]→[SSH]→[gcloudコマンドを表示]からコピペすればOKです。
`--` の後ろのコマンドは、通常のsshコマンドのオプションです。7199に対する動的ポート転送となります。

```
$ gcloud compute --project xxxxx ssh --zone xxxxx "tunnnel-server"  -- -N -D 7199
```


## jconsoleでの接続

1. 下記のように接続対象PodのIPを指定して接続します。<br>podのip確認方法は、[GKE+Java環境におけるjvisualvmの利用方法#podのIP確認](https://qiita.com/h-r-k-matsumoto/items/6bd4ba191208745e012b#pod%E3%81%AEip%E7%A2%BA%E8%AA%8D)を参照してください。<br>※単純に、7199を経由してアクセスするだけです。<br>
`$ jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=7199 service:jmx:rmi:///jndi/rmi://10.36.3.3:7199/jmxrmi -J-DsocksNonProxyHosts=` <br><br>
2. 下記のようにjconsoleが起動し、各種情報を確認する事ができます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/268550/87654035-3b9f-fff9-c179-a76e006e53a5.png" width="600px"/>
React + Context -> Rectx , a light-weight state manager.

ReactのContext APIは場合によってはReduxを使わなくても良くなると思っているので使い勝手を追求したいと思ってたら[Rectx](https://github.com/Foveluy/rectx)というのを見つけたので試してみました。

公式のREADMEにあるサンプルコード見ると `Controller` と `Listen` というクラスが定義できるようです。パッと見 `Controller` に振る舞いを定義して `Listen` でViewを定義するような感じで個人的には昔懐かしいMVCフレームワークな香りを感じました。

```javascript
import React from 'react'
import ReactDOM from 'react-dom'
import { Provider, Controller, Listen } from 'rectx'

/**
 * we create a state machine `LikeController` inherit from Controller
 * define a class function `handleClick` for setting state by calling `this.setState`
 */
class LikeController extends Controller {
    state = {
        isLike: false,
        isMount: false
    }

    handleClick = () => {
        this.setState({
            isLike: !this.state.isLike
        })
    }
}

/**
 * a simple `<Like/>` react component with property `to` and `didMount`
 * @to:array, state machine arrays, this property can be set a bunch of `Machine`
 * @didMount:function, when `<Lisent/>` component mounted, it will be fired,
 * The arguments of didMount is the instances of `Machine` you just put in `to` property.
 */
const Like = () => (
    <Listen
        to={[LikeController]}
        didMount={like => {
            like.setState({ isMount: true })
        }}
    >
        {like => (
            <div>
                <button onClick={() => like.handleClick()}>Click me</button>
                <div>{like.state.isMount ? 'component being loaded' : 'component not loaded'}</div>
                <div>{like.state.isLike ? 'I love you' : 'I hate you'}</div>
            </div>
        )}
    </Listen>
)

/**
 * <Provider/> is necessary wrapper for this system.
 */
ReactDOM.render(
    <Provider>
        <Like />
    </Provider>,
    document.getElementById('root')
)
```

試しに[RectxでToDoアプリを作ってみました](https://github.com/joeartsea/rectx-todo)。配列でControllerを渡せるみたいなので柔軟で且つStateが無秩序に増えるのを防げて個人的には丁度よい感じに思いました。
メモ：【AWS】CloudFormationでVPCをつくる

#AWS CloudFormation テンプレートの構造とセクション
##前提知識
以下にテンプレートの例を示す。
### JSON
```json
{
  "AWSTemplateFormatVersion" : "version date",

  "Description" : "JSON string",

  "Metadata" : {
    template metadata
  },

  "Parameters" : {
    set of parameters
  },

  "Mappings" : {
    set of mappings
  },

  "Conditions" : {
    set of conditions
  },

  "Transform" : {
    set of transforms
  },

  "Resources" : {
    set of resources
  },

  "Outputs" : {
    set of outputs
  }
}
```
###YAML
```yaml
AWSTemplateFormatVersion: "version date"

Description:
  String

Metadata:
  template metadata

Parameters:
  set of parameters

Mappings:
  set of mappings

Conditions:
  set of conditions

Transform:
  set of transforms

Resources:
  set of resources

Outputs:
  set of outputs

```

###テンプレートセクション
Format Version (任意)
　現時点で最新は　2010-09-09
Description (任意)
　このセクションは、必ずテンプレートの Format Version セクションの後に記述する必要がある。
Metadata (任意)
　追加情報
Parameters (任意)
　テンプレートに渡すことができる値
Mappings (任意)
　条件パラメーター値の指定に使用できる、キーと関連する値のマッピング
Conditions (任意)
　条件付きのリソースを作成できる
Transform (任意)
　使用できる構文と、その処理方法を定義する
Resources (必須)
　スタックリソースとそのプロパティを指定する
Outputs (任意)
　スタックのプロパティを確認すると返される値

#VPCをつくる
以下にテストしたコードを示す。

##JSON

```json
{
  "AWSTemplateFormatVersion" : "2010-09-09",

  "Description" : "JSON sample VPC",

  "Resources" : {
    "sampleVPC" : {
      "Type" : "AWS::EC2::VPC",
      "Properties" : {
        "CidrBlock" : "10.0.0.0/16",
        "Tags" : [
          { "Key" : "Name", "Value" : "sampleName" }
        ]
      }
    }
  }
}
```
##YAML
```yaml
AWSTemplateFormatVersion: 2010-09-09
Description: YAML sample VPC
Resources:
  sampleVPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: 10.0.0.0/16
      Tags:
        - Key: Name
          Value: sampleVPC
```

###疑問・課題・メモ
・「"」or「'」の使い方の違い。
・細かいオプション指定


##参考・引用
[
AWS ドキュメント » AWS CloudFormation » ユーザーガイド » AWS CloudFormation テンプレートの使用 » テンプレートの分析](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/template-anatomy.html)
シェルで時間計算

- 何秒時間がかかったか計算

```bash
$ echo $(expr `date -d"10:46:00" +%s` - `date -d"10:41:10" +%s`)
290
```

- 日付指定

```bash
$ echo $(expr `date -d"2018-07-11 10:46:00" +%s` - `date -d"2018-07-10 10:41:10" +%s`)
86690
```
[個人用メモ]特定のページにだけjsファイルを読み込ませる

# 目的 
- ポートフォリオを作成している時にjsファイルを個別に読み込ませた時のメモ

# 前提条件
- ruby 2.4.1
- Rails 5.1.6

## 1. 読み込ませたいファイルを`app/assets/javascripts/`配下に設置
- `app/assets/javascripts/comment_form.js`にファイル設置

![Image from Gyazo](https://i.gyazo.com/1e1d0a40201a9b95af4415675380194c.png)

## 2. 読み込ませたいviewファイルの中身の下部に読み込みコードを記述

```erb:app/views/posts/new.html.erb

# ファイルの中身の下に記述する

<%= javascript_include_tag 'comment_form' %>
```

## 3. Asset Pipelineにパスを通す

|Asset Pipelineにパスを通していない場合|
|:----:|

![Image from Gyazo](https://i.gyazo.com/4d910a880c08be906b5eba74d679cad5.png)

---

#### `config/initializers/assets.rb`にpathを設定

```ruby:config/initializers/assets.rb
Rails.application.config.assets.precompile += %w( comment_form.js )
```

![Image from Gyazo](https://i.gyazo.com/d13133c6da6e0ac3a7d25932649fec6b.gif)
ディレクトリ(フォルダ)を作成するプログラム C言語

#はじめに

今回絶対パスを使ってエクスプローラー内にフォルダを作るプログラムを簡単に作りました。

#ソース
```c

#include<stdio.h>
#include <direct.h>
int main(void){

	//絶対パスで指定
    if(_mkdir("C:\new")==0)//ファイル名を決める
        printf("フォルダ作成に成功しました。");
    else//作成できなかった場合
        printf("フォルダ作成に失敗しました。");
    }
```

#実行結果
```
フォルダ作成に失敗しました。続行するには何かキーを押してください . . .
```

#最後に
今回は絶対パスでの方法でしたが相対パスでのやり方でも良いかもしれません。
インスタンスメソッド・クラスメソッド・特異メソッド

<h2>はじめに</h2>
irbでテスト用にクラスを作成して各メソッドについて確認しました。
ちなみに、特異メソッドとはオブジェクトが固有に持つメソッドのことです。

<h2>確認に利用するメソッド</h2>
オブジェクト.methods : メソッド名を配列で返す。
オブジェクト.singleton_methods : 特異メソッド名を配列で返す。

<h2>テスト用クラスの作成</h2>
irbで以下のクラスを作成しましょう。

```rb
class Test
  # クラスメソッド(1)
  class << self
    def hoge1
      p "hoge1"
    end
  end

  # クラスメソッド(2)
  def Test.hoge2
    p "hoge2"
  end

  # クラスメソッド(3)
  def self.hoge3
    p "hoge3"
  end

  # インスタンスメソッド
  def hoge4
    p "hoge4"
  end
end
```

Testクラスをインスタンス化してオブジェクトを生成・インスタンスに特異メソッドを追加します。

```rb
hoge = Test.new
fuga = Test.new

# 特異メソッド
def hoge.hoge5
  p "hoge5"
end
```

<h2>各メソッドの確認</h2>
以下のようにコマンドを実行して各メソッドを確認していきましょう。

Testクラスのメソッドにhoge4(インスタンスメソッド)とhoge5(特異メソッド)は含まれていない
インスタンスメソッドを実行するとエラーが発生します。

```irb
irb(main)> Test.methods
=> [:hoge3, :hoge2, :hoge1,...(省略)]

irb(main)> Test.hoge1
"hoge1"
=> "hoge1"

irb(main)> Test.hoge4
Traceback (most recent call last): ...(省略)
```

インスタンスhogeのメソッドはhoge4(インスタンスメソッド)とhoge5(特異メソッド)となっています。
クラスメソッドを実行するとエラーが発生します。

```irb
irb(main)> hoge.methods
=> [:hoge5, :hoge4,...(省略)]

irb(main)> hoge.hoge5
"hoge5"
=> "hoge5"

irb(main)> hoge.hoge1
Traceback (most recent call last): ...(省略)
```

インスタンスfugaのメソッドはhoge4(インスタンスメソッド)となっており、hoge5(特異メソッド)は実行できません。

```irb
irb(main)> fuga.methods
=> [:hoge4,...(省略)]

fuga.hoge4
"hoge4"
=> "hoge4"

fuga.hoge5
Traceback (most recent call last): ...(省略)
```

<h2>特異メソッドの確認</h2>
Testクラスの特異メソッドを確認すると、Testクラスのクラスメソッドが返ります。
これは、クラスメソッドがTestクラスオブジェクトの固有のメソッド(特異メソッド)であるためです。

```irb
irb(main)> Test.singleton_methods
=> [:hoge3, :hoge2, :hoge1]
```

次にインスタンスhogeの特異メソッドを確認します。
以下のコマンドを実行するとhoge5が返ります。

```irb
irb(main)> hoge.singleton_methods
=> [:hoge5]
```

fugaには固有のメソッド(特異メソッド)は存在しません。

```irb
irb(main)> fuga.singleton_methods
=> []
```


<h2>まとめ</h2>
インスタンスメソッド :  <b>インスタンスのみが実行できるメソッド</b>
クラスメソッド : <b>クラスオブジェクトのみが実行できるメソッド、クラスオブジェクトが固有に持っている特異メソッドでもある。</b>
特異メソッド : <b>オブジェクトが固有に持つメソッド<b>
[アルゴリズム] ドットでお絵かきする際の補間

補間しなかったらひどいことになった
![no-interpolate.gif](https://qiita-image-store.s3.amazonaws.com/0/270131/ccc8087e-0851-db50-38df-361e6dd6c699.gif)
ということで考えてみた補間方法まとめ

# 手順

1. 補間する距離を調べる
2. 補間方向を調べる
3. 補間距離が０になるまで間のドットを潰していく

結構シンプルな感じ

# プログラム

自作の簡易Vector2

```c#:Vector2.cs
public class Vector2Int
{
    public int X { get; set; } = 0;
    public int Y { get; set; } = 0;

    public Vector2Int()
    {
    }

    public Vector2Int(int x, int y)
    {
        X = x;
        Y = y;
    }

    public static Vector2Int operator/ (Vector2Int v, int n)
    {
        return new Vector2Int(v.X / n , v.Y / n);
    }

    public static Vector2Int operator +(Vector2Int v1, Vector2Int v2)
    {
        return new Vector2Int(v1.X + v2.X , v1.Y + v2.Y);
    }
}
```
手順を元に補間していく

```c#:補間処理
public static Vector2Int[] DotInterpolate(Vector2Int from, Vector2Int to)
{
    //-----1. 補間する距離を調べる
    var distance = new Vector2Int
    {
        X = to.X - from.X,
        Y = to.Y - from.Y
    };
    //-----2. 補間方向を調べる
    bool isRight   = distance.X >= 0;
    bool isDown    = distance.Y >= 0;
    //方向判定に使い終わったので使いやすいように絶対値にしておく
    distance.X = Math.Abs(distance.X);
    distance.Y = Math.Abs(distance.Y);

    //これが補間されたドットのデータ一覧になる
    var dotPositions = new List<Vector2Int>();
    
    //-----3. 補間距離が０になるまで間のドットを潰していく    
    while(distance.X != 0 || distance.Y != 0)
    {
        //ずらし距離
        var shift = new Vector2Int
        {
            X = distance.X * (isRight ? 1 : -1),
            Y = distance.Y * (isDown ?  1 : -1)
        };
        //データ追加
        dotPositions.Add(from + shift);
        //大きい方の数値を減らす
        if(distance.X > distance.Y) distance.X--;
        else distance.Y--;
    }

    return dotPositions.ToArray();
}
```

# 実際に補間してみた
取得したドットの補間データで塗り潰しを行なうようにしてみた
![interpolate.gif](https://qiita-image-store.s3.amazonaws.com/0/270131/800bcb3b-e96c-787e-b159-8f6d00fe4925.gif)
隙間が空かないでちゃんと線が引けるようになった！
React NavigationとAndroidのハードウェアバックボタン制御について

#はじめに
最近react nativeをさわり始めた人です。
元はiOS向けのアプリを作ってた人ですが、諸事情で現在react nativeでAndroid向けアプリを作成中です。

##なぜこれを書いてるか
本題に入る前にどうしてもここまで書いておきたかった。
React Native界隈ドキュメントが不親切オブ不親切＋そもそも何が正解かわからないこと多過ぎ問題。
想定通りの動きをしていたとしても、それが正解なのかよくわからない！
ということで、やりたいこと、やってみたことを記載し、間違ってたら誰かがマサカリを投げてくれるだろうスタイルをとろうと思った次第。

#今回やりたかったこと
- React Navigationを利用した画面遷移
- Home画面ではバックボタンでアプリを閉じる
- 遷移先での画面ではバックボタンで１個前に戻る

##画面構成と簡単な説明
　　　　　↓ここではアプリを閉じたい
[Login]-[Home]-[遷移先A]-[遷移先B]
　　　　　　　　　↑　　　　　↑
　　　　　　　　　こいつらだと１個前に戻りたい

##導入したバージョン
- "react": "16.3.1"
- "react-native": "0.55.4"
- "react-navigation": "2.6.2"

##なぜReact Navigationか
React NativeでAndroid向けアプリ作ってますが、正直React Navigationでやりたかったことは満たせそうだったので、こちらを選択。
（React Native Navigationを使ってる例があまり見当たらない＋OS側のソースもいじるのめんどくさいなぁという理由もある）

##実装したコード
React Navigationの実装部分は省いています。

```javascript:HomeScreen.js
import { BackHandler, View, Text } from "react-native";

export default class HomeScreen extends Component {
 /**
   * ハードウェアの戻るボタン押下時処理
   */
  handleBackPress = () => {
    // HomeScreenの場合はハードウェアの戻るボタンでアプリを閉じる.
    // それ以外の場合は通常通りの動きをする。
    if (this.props.navigation.isFocused()) {
      BackHandler.exitApp();
    } else {
      this.props.navigation.goBack(null);
    }
    return true;
  };

  componentDidMount() {
    BackHandler.addEventListener("hardwareBackPress", this.handleBackPress);
  }

  componentWillUnmount() {
    BackHandler.removeEventListener("hardwareBackPress", this.handleBackPress);
  }

  // ここは適当に書いたので動かなかったら直してください
  render() {
    return (
      <View style={style.container}>
        <Text onPress={{this.props.navigation.navigate("A")}>
          遷移先A
        </Text>
      </View>
    );
  }
}
```

##May be 説明
HomeScreenで動いてるからisFocused()の判定がHomeScreenを表示しているとtrueに、それ以外だとfalseになるのかなといった動きをしているので、現状こんな感じで実装。（今後のテスト次第では変えるかも）
正直これ使えとか言われそうな感はある。
https://reactnavigation.org/docs/en/screen-tracking.html
でも、たかがこんなことの為に・・・と思ったらこれでいい気がしてきたので。

#最後に
個人的には魔境オブ魔境すぎてNativeアプリ開発者がReact Nativeなんか使うもんじゃ無いなと思ってますが、宗教上の理由でAndroidやりたくないマンなのでしばらくはReact Nativeマンで行きます。
皆様のアドバイスお待ちしております。
aws-sam-cliを使ってlocalでLambdaを動かしてみる

## aws-sam-cliをインストールする
https://github.com/awslabs/aws-sam-cli#installation

Docker for MacとPython 2.7 or 3.6が必要。

Macのデフォルトでは2.7系だったので、一応最新版を入れる

```
pyenv install 3.6.5
pyenv global 3.6.5
```

```
pip install aws-sam-cli
```

※ドキュメントの方では`—user`をつけているが、これをつけると`~/.local`フォルダにsamがインストールされてしまうので注意！普段pip関連使わないからハマってしまったー。


## sam init

```
sam init --runtime go
```

サンプルを作ってくれる

こんな感じのファイルが出来る。goじゃなくても別の言語してして作ってもOK

```
$ tree
.
└── sam-app
    ├── Makefile
    ├── README.md
    ├── hello-world
    │   ├── main.go
    │   └── main_test.go
    └── template.yaml

2 directories, 5 files
```


## localで動かしてみる

#### build

```
go get github.com/aws/aws-lambda-go/events
go get github.com/aws/aws-lambda-go/lambda
make build
```

#### localでLambdaを動かす

```
# Lambdaに渡す用のイベントファイルの作成
sam local generate-event api > event_file.json

# Lambdaの実行
sam local invoke HelloWorldFunction --event event_file.json
```


#### localでAPI Gatewayを使って動かす
```
# 起動
sam local start-api

# 呼ぶ
curl http://127.0.0.1:3000/hello
```

# 所管
デプロイして確認すると、結構めんどくさいから、ローカルでいろいろと試せるのは便利！


# 参考

https://qiita.com/hayao_k/items/841026f9675d163b58d5
Microsoft Flow でExcel帳票を出力・・・めっちゃ苦労したからみんなに共有　その2（Do Untilの使い方もあるよ！）

# 前回のおさらい
カスタムリストのデータを使ってレコード単位でExcel帳票を作ってほしいとの要望を受け
試行錯誤の末、Excelファイルを生成することはできたが
中身にデータが入ってないという状況に陥ってしまったのであーる

# 失敗してるんじゃないの？
いいえ、そんなことはないです
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/bff1843f-4dde-2594-cf2d-18ba5fa0b30e.png)

フロー結果ではうまくいってるんですよねこれが。
行の挿入の出力結果も特に問題なかったのですよ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/dc65b449-3d51-819f-7998-b9ec9de3cfea.png)

# 試行錯誤してみた結果わかったこと
どうもExcelコネクタの"Add a row into a table"アクションの動作は
非同期っぽく、処理が終了した時点でまだデータが反映されていないっぽい。
にも拘わらず、コピーして、Delete a rowで行を消してるもんだから
結果的に何も反映されていないってことが判明。

# さあて、どうする？
## 待ち時間を設定！
最小値が5秒なので、5秒も待てばうまくいくやろ！
→5秒以上かかる場合あり。（15秒経っても反映されない場合もあったりする）

## Do Until条件で、反映されるのを確認する
というわけで、Do Until条件を設定してみたよ！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/64c654d4-b674-e40f-1b54-72fcf706f47b.png)

流れとしては
1. Add a row into a tableを実施したテーブルを取得
2. 確認チェック用の変数を宣言して、キー項目の内容を代入
3. Do Until条件を設定して、変数の中のデータが抽出元のカスタムリストデータと同一になればループを抜けるように設定
4. 条件に合致しない場合は、一旦待ち時間5秒を置いて、再度テーブルを取得し、変数に反映
5. 条件に合致した場合はファイルコピーという形で後続処理を実行する

という感じです。

# 結果
うまくいきました！

# まとめ
・Excelコネクタを帳票出力などで使用する時は、テンプレートファイルを使用してデータ反映後コピーする
・コネクタによっては非同期なものがあるため、Do Untilなどを使用して結果反映されているか確認する必要がある
・コネクタによっては日本語など2バイト文字で宣言されたレコードやカラムを認識しない場合がある
・変数を宣言するのはすべての条件分岐の前にやる必要がある
　→これ改善してくれないかなぁ・・・
・Try and Errorはコーディングレスでも大事　←これ一番重要！
(Part 6. Config index.html) Startup JavaScript Project with Webpack4, Vue2, Vue-Router, Vuex, Axios, ESLint, Babel, AirBnb

This is a html template for [html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin).

```html:index.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<div id="root"></div>
</body>
</html>
```

[Part 6. Config index.html](https://qiita.com/shaching/items/3d7fcc34204af9aaaa29)

[Part 5. Config .stylelintrc.json](https://qiita.com/shaching/items/5f21f396f08c45ff598c)

[Part 4. Config .eslintrc.json](https://qiita.com/shaching/items/288926001dbbbc905953)

[Part 3. Config .babelrc](https://qiita.com/shaching/items/8eac974989f32379a5fe)

[Part 2. Config Webpack4](https://qiita.com/shaching/items/a72565bd0836a83df79c)

[Part 1. Install package.json](https://qiita.com/shaching/items/522f4c9f01662a592bb8)

[Github : Vue2-Starter-Kit](https://github.com/shaching/Vue2-Starter-Kit)
VirtualBoxでKernel driver not installed (rc=-1908)とエラーが出たとき

##原因：対応したKernelイメージがインストールされていない
```bash
sudo -i
#ユーザーパスワードを入力
~# /sbin/vboxconfig 
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    linux-headers-generic linux-headers-4.15.0-24-generic
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    linux-headers-generic linux-headers-4.15.0-24-generic

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.
```

Linuxカーネルヘッダがインストールされていないとのこと。おすすめされたlinux-headers-4.15.0-24-genericをapt installします。

```bash
apt install linux-headers-4.15.0-24-generic -y
```
再び/sbin/vboxconfigを実行する

```
~# /sbin/vboxconfig 
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: Starting VirtualBox services.
```

無事にセットアップできました。
OctoberCMSで特定のcookieの暗号化を解除する

OctoberCMSはすべてのcookieを暗号化して保護しているが、フロントエンドとデータやり取りをcookieで行いたい場合にこれは邪魔になる。

~~現行バージョン(2018/07/18現在)は、暗号化の解除はサポートされていないので、[こちらのプラグイン](https://github.com/pikanji/oc-plaincookie-plugin)で対応する。~~
追記：OctoberCMSバージョン438以降はプルリクがマージされて、こちらのプラグインは不要になりました。

ドキュメントにあるとおりだが、下記の内容の`config/cookie.php`を作成して暗号化したくないcookieをリストアップする。

```PHP
<?php

return [
    "unencryptedCookies" => [
        "my_cookie",
    ],
];
```

または、任意のタイミング(`Plugin::boot()`内とか)で動的に挿入することもできる。プラグインがこれを常に必要とするんであれば、この方がプラグイン利用者に余計な手間をかけさせないので良い。

```PHP
class Plugin extends PluginBase
{
    public function boot()
    {
        Config::push('cookie.unencryptedCookies', "my_cookie");
    }
```

~~ただ、この機能は公式にサポートされているべきだと思ったので[OctoberCMSへプルリク](https://github.com/octobercms/library/pull/335)を出している。こちらがマージされたら、このプラグインは不要になる。~~
追記：masterにマージされました。バージョン438から利用可能です。
【Swift3】TabbarControllerにタイトルバーをつける方法

備忘録として記載。

TabbarControllerを選択肢、Xcodeにてプロジェクトを立ち上げると
下図のようにタイトルバーがないTabberの実装になってしまいます。

<img width="1003" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/272324/fa9f4751-5ef4-cd2b-95d2-68af9482c0e4.png">


これだと見た目が悪いし、使いにくいのでタイトルバーをつけてみます。
やり方としてはUINavigationControllerを追加するのみ

UINavigationControllerを追加したいView Controllerを選択して、
XcodeメニューのEditor > Embed in > Navigation Controller を選択するだけ

<img width="1280" alt="スクリーンショット 2018-07-18 11.07.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/272324/a0d32433-96f4-ff1a-d82f-a6b0c69c8d80.png">

するとタイトルが出ます。

<img width="1280" alt="スクリーンショット 2018-07-18 11.10.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/272324/59312eb7-7206-9094-5824-eefd5babdd6f.png">
MacのAlfredで「勤怠メールの件名」をテンプレ登録して「今日の日付」を自動で入れてみる例

こんなテキストをスニペット登録しておきたい。

`退勤 16:00 稲浦 7/18`

- 「今日の日付」が自動入力される
  - 月はゼロで埋めない
- 「今から1時間後の00分」が自動入力される

## AlfredのSnippetsプラグインへの登録例

`退勤 {time +1h: HH}:00 稲浦 {date:M/dd}`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/ebca3619-c251-3b21-690d-5f4729563848.png)

## このフォーマットって何？

`UNICODE LOCALE DATA MARKUP LANGUAGE (LDML)` に定義されている `Date_Format_Patterns` というものらしい。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/8329feee-5f35-03a0-e874-876e547d52a3.png)

[面白そうでしょ？ 読んでみる？](http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns)

## フォーマットをテストしたい

Javaテスターがあった。
これでAlfredへの登録を繰り返す必要はないね！

[Java SimpleDateFormat Online Tester](http://www.sdfonlinetester.info/#)

LDMLってやつに準拠しているのかどうかは分からないが、とりあえず同じような挙動はしていそう。

## 参考

- [Dynamic Placeholders - Alfred Help and Support](https://www.alfredapp.com/help/features/clipboard/dynamic-placeholders/)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
ユーザの入力した文字列を画面表示用に加工するためのヘルパメソッド

# やること

任意の文字列に次の処理を施します。

* 文字列中の HTML 文字列を画面にそのまま表示できるようにエスケープする。
* 文字列中の改行コード `\n` を br 要素に変換する。 
* 文字列中の URL を a 要素に変換する。
  * [Rinku](https://github.com/vmg/rinku) という Gem を使います。

# 実装

```app/helpers/application_helper.rb
def str_to_html(str)
  str
    .yield_self { |s| ERB::Util.html_escape(s) }
    .gsub("\n", tag.br)
    .yield_self { |s| Rinku.auto_link(s, :all, 'target="_blank"') }
    .html_safe
end
```  

# 使用例

```rb
article.update(body: <<~TEXT)
  リズと青い鳥 http://liz-bluebird.com/ 見てね！
  夏紀先輩が相変わらずかわいい <span role="img" aria-label="heart">❤️</span>
TEXT
```

```erb
<%= article.body %>
```

![ss01.png](https://qiita-image-store.s3.amazonaws.com/0/6697/9aee1b9e-f95c-d1ef-b5c4-9cc5772c73df.png)
Laravelでフォーム入力から確認画面経由してDB登録するまでの流れをサポートするライブラリを作ってみた

## 概要
以前に仕事の関係で
1. フォーム入力画面
2. 入力内容の確認画面
3. DB登録
の画面遷移フローの実装―フォームに入力した内容をセッションを使って持ち回す、昔ながらのパターン―を共通化したい。つまりライブラリ化して欲しい、という要望を受けて作ったLaravel用ライブラリの存在を思い出したので、githubにアップしてみました。対応バージョンはLaravel5.5以上としています。（公開したところで使う人いるんだろうか・・・？という疑問はこの際一旦置いておくことにします）
[https://github.com/shkfn/transaction-parameter](https://github.com/shkfn/transaction-parameter)

2018-07-25追記
このライブラリのデモプロジェクトを作成しました。
[https://github.com/shkfn/transaction-demo](https://github.com/shkfn/transaction-demo)

## 使用例

こんな感じで、トークンと共にパラメータ管理をサポートするライブラリです。

```php:TransactionController.php
namespace App\Http\Controllers;

use Shkfn\TransactionParameter\Transaction;
use App\Http\Requests\InputRequest;

class TransactionController extend Controller
{
    /** @var Transaction */
    protected $transaction;
    
    public function __construct(Transaction $transaction)
    {
        $this->transaction = $transaction;
    }

    /**
     * 入力画面表示
     * @param string $token
     */
    public function input($token = null)
    {
        $params = null;
        if (is_null($token)) {
            $token = $this->transaction->start(); // tokenがnullか引数無しの場合に新しいtokenを発行して返却
        } else {
            // token付きで入力画面に戻ってきた場合にパラメータを引き出せる
            if ($this->transaction->start($token)) { // tokenが渡された場合は保存領域でtokenの存在確認をbool返却
                $params = $this->transaction->get(); // パラメータ取得。格納値が無い場合は空配列が返る。
            } else {
                return abort(404);
            }
        }
        return view('input', ['token' => $token,'params' => $params]); // tokenはルートパラメータとして使用
    }

    /**
     * 入力バリデーション
     * @param InputRequest $request
     * @param string $token
     */
    public function validateInput(InputRequest $request, $token)
    {
        // token毎に区切られた領域に保存
        if ($this->transaction->start($token)) {
            $params = $request->validated();
            $this->transaction->put($params); // バリデーション済みの値を保存。第2引数に文字列でタグを設定可能。タグを設定して保存した場合は、get時にもタグの指定が必要。
            return redirect(route('confirm', ['token' => $token]));
        }
        return back();
    }

    /**
     * 確認画面表示
     * @param string $token
     */
    public function confirm($token)
    {
        if ($this->transaction->start($token)) { // tokenを使ってトランザクションを再開
            $params = $this->transaction->get();
            return view('confirm', ['token' => $token, 'params' => $params]);
        }
        return redirect(route('input')); // 入力画面やエラー画面等へリダイレクト
    }

    /**
     * 登録処理
     * @param string $token
     */
    public function register($token)
    {
        if ($this->transaction->start($token)) { // tokenを使ってトランザクションを再開
            $params = $this->transaction->get();
            Post::create($params); // DB登録
            $this->transaction->close(); // tokenの保存領域を明示的にクリアするメソッド
            return redirect(route('complete')); // 完了メッセージを表示する画面等へリダイレクト
        }
        return redirect(route('input')); // 入力画面やエラー画面等へリダイレクト
    }
}
```

## 最後に

念のため書き添えておきますと、仕事の関係で作ったと申しましても、このライブラリについては特定の機密を含まない事もあって、公開についての了承は得ています。作ったままの物を公開しても良い事になっているのですが、元々の状態から多少アレンジを加えています。
使い方の詳細についてはリポジトリのreadme.mdに書いていますので、そちらを参照してください。
(Part 5. Config .stylelintrc.json) Startup JavaScript Project with Webpack4, Vue2, Vue-Router, Vuex, Axios, ESLint, Babel, AirBnb

We use stylelint to help us to check CSS coding style.

```javascript:.stylelintrc.json
{
  "extends": "stylelint-config-standard"
}
```

[Part 6. Config index.html](https://qiita.com/shaching/items/3d7fcc34204af9aaaa29)

[Part 5. Config .stylelintrc.json](https://qiita.com/shaching/items/5f21f396f08c45ff598c)

[Part 4. Config .eslintrc.json](https://qiita.com/shaching/items/288926001dbbbc905953)

[Part 3. Config .babelrc](https://qiita.com/shaching/items/8eac974989f32379a5fe)

[Part 2. Config Webpack4](https://qiita.com/shaching/items/a72565bd0836a83df79c)

[Part 1. Install package.json](https://qiita.com/shaching/items/522f4c9f01662a592bb8)

[Github : Vue2-Starter-Kit](https://github.com/shaching/Vue2-Starter-Kit)
AI系APIサービス機能比較（画像）

# 機能比較表（2018年7月時点）
大手クラウドサービス企業のapi比較をしました。
![比較.PNG](https://qiita-image-store.s3.amazonaws.com/0/271751/58320708-632d-dbd9-35de-afc6d0716122.png)

# まとめ
使いやすさ、価格等を軸とすればまた違った結果が出るのでしょうが、
画像系のapiでできることの種類が多いのは圧倒的にmicrosoftのようです。
watson、awsでしかできないことがある、gcpは機能の深さがあることが強みに見えます。
今後各社がどのように力を入れていくのか楽しみです。

# 検索用キーワード
- 顔検出
- 顔検証
- 類似顔の検索
- 顔のグループ化
- 顔識別
- タグ付け
- 画像分類
- 画像種類の特定
- 顔分析
- 画像説明文章生成
- 色の抽出
- 不適切コンテンツ検出
- OCR
- テキスト認識
- ロゴ検出
- クロップ領域検出
- サムネイル生成
- Web参照検出
- 言語検出
- 発話文字化
- 顔検出
- 顔認識
- 顔分析
- スピーカーインデックス
- シーン検出
- キーフレーム検出
- 感情分析
- 翻訳
- コンテンツ調整
- キーワード抽出
- ラベル付け
- ブランド抽出
- Microsoft Cognitive Service
 - Face API
 - Computer Vision API
 - Custom Vision API
 - Video Indexer
 - Content Moderator API
- IBM Watson Services
 - Visual Recognition
- Google Cloud Platform
 - Cloud Vision API
 - Video Intelligence API
- Amazon Web Service
 - Amazon Rekognition Image
 - Amazon Rekognition Video
(Part 4. Config .eslintrc.json) Startup JavaScript Project with Webpack4, Vue2, Vue-Router, Vuex, Axios, ESLint, Babel, AirBnb

* **.eslintrc.json**  (DON'T use .eslintrc as file name. See [here](https://eslint.org/docs/user-guide/configuring#configuration-file-formats).)

```javascript:.eslintrc.json
{
  "root": true,
  "parserOptions": {
    "parser": "babel-eslint",
    "ecmaVersion": 2017
  },
  "env": {
    "browser": true,
    "node": true,
    "es6": true
  },
  "extends": [
    "airbnb-base",  <-- We used airbnb coding style.
    "plugin:vue/essential"   <-- This setting is for Vue2.
  ],
  "plugins": [
    "vue"
  ],
  "settings": {
    "import/resolver": {
      "webpack": {
        "config": "webpack.common.js"  <-- This let us can used "import foo from '@/foo/foo';" instead of "import foo from '../../foo/foo';"
      }
    }
  }
}
```

[Part 6. Config index.html](https://qiita.com/shaching/items/3d7fcc34204af9aaaa29)

[Part 5. Config .stylelintrc.json](https://qiita.com/shaching/items/5f21f396f08c45ff598c)

[Part 4. Config .eslintrc.json](https://qiita.com/shaching/items/288926001dbbbc905953)

[Part 3. Config .babelrc](https://qiita.com/shaching/items/8eac974989f32379a5fe)

[Part 2. Config Webpack4](https://qiita.com/shaching/items/a72565bd0836a83df79c)

[Part 1. Install package.json](https://qiita.com/shaching/items/522f4c9f01662a592bb8)

[Github : Vue2-Starter-Kit](https://github.com/shaching/Vue2-Starter-Kit)
C言語 今日の日付を表示

#今日の日付を表示
```c
#include <stdio.h>
#include <time.h>

int main (void) {
    time_t tt = time(NULL);
    struct tm tim;
    char s[99];

    localtime_s(&tim,&tt);

    strftime(s,sizeof(s),"%Y-%m-%d %H:%I:%S",&tim);

    printf("%s",s);

    return 0;
}
```
#実行結果
```
2018-07-18 11:11:15
```
(Part 3. Config .babelrc) Startup JavaScript Project with Webpack4, Vue2, Vue-Router, Vuex, Axios, ESLint, Babel, AirBnb

```javascript:.babelrc
{
  "presets": [
    "env"
  ],
  "plugins": [
    "transform-object-rest-spread" <-- Let you can use JS ... syntax.
    "transform-class-properties"   <-- Let you can use JS static syntax.
  ]
}
```

[Part 6. Config index.html](https://qiita.com/shaching/items/3d7fcc34204af9aaaa29)

[Part 5. Config .stylelintrc.json](https://qiita.com/shaching/items/5f21f396f08c45ff598c)

[Part 4. Config .eslintrc.json](https://qiita.com/shaching/items/288926001dbbbc905953)

[Part 3. Config .babelrc](https://qiita.com/shaching/items/8eac974989f32379a5fe)

[Part 2. Config Webpack4](https://qiita.com/shaching/items/a72565bd0836a83df79c)

[Part 1. Install package.json](https://qiita.com/shaching/items/522f4c9f01662a592bb8)

[Github : Vue2-Starter-Kit](https://github.com/shaching/Vue2-Starter-Kit)
引数の配列サイズの違いによってオーバーロード関数を切り替えることができるか

# 概要
引数の配列サイズの違いによってオーバーロード関数を切り替えることができるか確認する。

# 結論
~~できない。~~
引数で配列を参照渡しすることでできる（ @rinse_ さんからのコメントをご参照ください）

# 背景
ユーザに提供するAPIを実装するにあたって、
ユーザによって引数に入れる配列サイズが異なるため、ミスが多発することが想定される。
そこで、配列サイズを特定のものに限定したオーバーロード関数を用意しておくことで、ミス
が低減できるのではないかと想定される。

※クラスのメンバ関数としての実装を想定しているため、サイズの関係からテンプレートつき関数は使いたくない。

# 確認コード

``` C++:test.cpp
///title
/// 配列数のちがいによってオーバーロード関数を切り替えることができるか確認する
///
///　結論：できない。コンパイルエラー

#include <iostream>

using namespace std;

void func(int arr[3])
{
    cout << "arr size is 3."    << endl;
}

void func(int arr[5]) ///コンパイルエラー
{
    cout << "arr size is 5."    << endl;
}

int main()
{

    return 0;
}

```
現在の時刻を表示するプログラム

#開発環境
OS : Microsoft Windows10 (64bit)
IDE : Microsoft Visual Studio 2012
#現在の時刻を取得プログラム
まず↓の画像の用に今回はVisualC#のコンソールアプリを選択します。
![今日の日付１.png](https://qiita-image-store.s3.amazonaws.com/0/249265/2de27317-73f9-8c9e-849b-2be6e0f02dfc.png)
次にプロジェクトの名前を決めます。
今回はtestと言う名前を使ってます。
選択した物が間違ってなければ右下にOKをクリックしてもらうと↓の画像の用になります。
![今日の日付２.png](https://qiita-image-store.s3.amazonaws.com/0/249265/b88d094e-453f-d1c8-3cb8-d3ebd893af62.png)
#ソースコード
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
 
    class Program
    {
        static void Main()
        {
           //現在の時刻を取得

            DateTime dt = DateTime.Now;
            Console.WriteLine(dt);

            Console.ReadKey();
        }
    }
}

```
#ソースコードを入力して実行した画面

![今日の日付3.png](https://qiita-image-store.s3.amazonaws.com/0/249265/674e0238-132a-b4ed-6c3a-f20b33e31a79.png)
実行結果
![今日の日付4.png](https://qiita-image-store.s3.amazonaws.com/0/249265/cf9e6149-8fe6-785e-2b36-58424840a526.png)

#今回使った時刻を取得するソースの部分

```
DateTime dt = DateTime.Now;
            Console.WriteLine(dt);
```
Web初心者がいきなりHyperのプラグインを書いてみた(前書き)

この記事はシリーズもののような形で更新します。~~定期とは言ってない~~
作成中のレポジトリはこちら: [Cj-bc/hyper-puchi-mirei](https://github.com/Cj-bc/hyper-puchi-mirei )

関連記事:

* →[Web初心者がいきなりHyperのプラグインを書いてみた(前書き)](https://qiita.com/Cj-bc/items/105f489c62e345692f0e)
* [Web初心者がいきなりHyperのプラグインを書いてみた-v0.1.0](https://qiita.com/Cj-bc/items/7bac09ee4513a3898938)


---

# 筆者について

筆者の普段の住処はbashです。
`bash on tmux on Terminal.app`が住処です。
なのでweb知識は全くもって持ち合わせていません。

* 基本的なHTMLがベタ書きできる

くらいです。
そんな状態ですがトライしてみようと思います。

# 目的

**早坂美玲をHyperにのっけたい！！！**
最近、自分のジャンル(shellscript)外のお仕事をやっていて疲れて来たんです。
なので癒しを求めて作ってみることにしました。
~~尚デレステはまだにわかです~~
この前のSSRモンスターパーティ美玲来なかった...うう...

# 作るもの

本当は3D美玲欲しいんですが技術力がないのとTerminalの意味が消えかかってしまうのでプチデレラにします。

* Hyper上でプチデレラの美玲が歩く
* 時折なんか喋ってる
* **デレステの、ルームみたいなイメージ**
* ~~emacs使うと怒ってくる~~

のちに何かあれば追加していきます

# 参考にさせて頂いた記事

## hyper pluginの作成
 * @vimyum さんの[Hyperターミナルのプラグインを作ってみよう！](https://qiita.com/vimyum/items/569280135ee5d4da33bd)
 * ↑の[gist](https://gist.github.com/vimyum/d575935a53edc13925058495281b14fc)
 * [公式webページ](https://hyper.is/)
## Reactについて

 * @shizuma さんの[ここからはじめるReactの基礎の基礎](https://qiita.com/shizuma/items/6392dc55624c80f5503c)


## JavaScript(ES6)について

 * @dondoko-susumu さんの[ES6アロー関数](https://qiita.com/dondoko-susumu/items/c4ad525cbdb91b7dc641)
Ubuntuでroot権限でパスワードログインをする

## 概要
AWSでUbuntuで、鍵認証ではなくパスワードログインをしたかったので、rootのパスワードを設定し、パスワードログインを許可する設定を行います。

## 動作環境
```shell-session:~
$  cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"
```

## rootのパスワードを生成
```shell-session:~
$ sudo su #root権限になる
$ passwd
Enter new UNIX password: #任意のパスワードを入力
Retype new UNIX password:
passwd: password updated successfully
```

## sshの設定ファイルを変更

```shell-session:/etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
```

設定ファイルの読み込みます。

```shell-session:~
$ /etc/init.d/ssh restart
[ ok ] Restarting ssh (via systemctl): ssh.service.
```

別シェルでsshログインをすると、パスワードを聞かれるので、先ほど設定したパスワードを入力します。

```shell-session:~
$ ssh root@***.***.***.*** #サーバーのIPアドレス
```
DeployGateの配布ページを使ってリンク共有のみでアプリ配信する

こちらは[あら便利カレンダー2018](https://benri2018.rnd.cloudpack.jp/)の記事です。

先日あら便利カレンダー1日目の記事（[DeployGateのアプリ配信を操作するアプリをDeployGateで配信した話](https://qiita.com/bobu_web/items/eb1452d4cacb2e2c96e7)）にてAPIを利用したDeployGateのテスターを追加する方法を公開したのですが、その後TwitterにてDeployGateさんから配布ページも便利なので使ってみてください！と教えていただき見てみるとめちゃめちゃ便利そう（あら便利！）だったので、配布ページについてあらためて記事にしようと思います。

## 配布ページとは
- 無料アカウント範囲では1つのアプリに対して2つまで作成可能
- インストールするテスターはDeployGateのアカウント不要、リンク共有のみでOK
- インストールのための共通パスワードを設定可能
- リビジョンといわれる`#番号`で表されるアプリのバージョンを各ページで指定可能

と他にもいろいろ機能はありますが、リンク共有のみでOKでパスワードも設定可能がなんといっても魅力的かと思いました。

## 利用手順
簡単に利用手順をまとめます。
すでにアプリをアップロードしている状態を想定しています。

1. アプリ配信ダッシュボードの右上にある共有用のリンクを追加をクリック
2. SDKに関するアラートが出ますがOKをクリック
3. 配布ページ用の画面に切り替わり、あらわれるリンクを共有

たったこれだけ！

![Opera スナップショット_2018-07-18_095148_deploygate.com.png](https://qiita-image-store.s3.amazonaws.com/0/35271/b57fd11e-d734-5972-c8ce-0bd1ccedb883.png)
![Opera スナップショット_2018-07-18_095254_deploygate.com.png](https://qiita-image-store.s3.amazonaws.com/0/35271/b12090e3-57a5-d2dc-f1cd-da371c6779f8.png)

リンク先の配布ページはこんな感じです。
![Opera スナップショット_2018-07-18_095812_deploygate.com.png](https://qiita-image-store.s3.amazonaws.com/0/35271/8691cd30-3109-8a60-cba2-4b73b1b6b189.png)

## 配布設定
### ページのタイトル、説明文、インストールガイド有無等の設定
配布ページメニュー > デザイン変更 から設定が可能です。

### パスワード設定
配布ページメニュー > 配布ページの設定 > 公開範囲で合言葉を設定することでインストール時に合言葉を要求するようになります。

### 配布するバージョンの変更
配布ページメニュー > アップデートの配布 > 更新するバージョン でセレクトボックスからバージョンが選択できます。
テスターが通知設定にメールアドレスを登録している場合はメールにて更新通知が送られます。

以上、とにかく簡単で機能も十分です。
社内向けに開発チーム用、公開前のユーザーテスト用などいろいろ使えそうです。

またDeployGate APIもこの配布ページに対応しており、
DeployGateの開発者のかたが書いている
[gitのブランチごとに別のバージョンのアプリをDeployGateで並行して配信する](https://qiita.com/kyoro353/items/46c990a7de0ea72e6c76)
こちらの記事が参考になるかと思います。ぜひ合わせてご覧下さい。