OmniAICreator/Qiita-1.07M huggingface dataset:
pythonライブラリicrawlerを使い簡単に画像データを集める

#開発環境
- mac OS High Sierra 10.13.6
- anaconda3-5.2.0
- python3.6

#はじめに
以前、[DeepLearningモデルDCGANをアイドルの顔画像を生成してみた](https://qiita.com/NakaokaRei/items/0551dbfc0ac14176b876)という記事でpythonのライブラリBeautifulSoupを使い画像のスクレイピングをしました．（[この記事](https://karaage.hatenadiary.jp/entry/2017/08/23/073000)を参考にしています．）
今回はより簡単に画像を集められるicrawlerというライブラリを使い、画像集めをしてみました．

#ライブラリのインストール
pipを使いインストールします．ターミナルで以下のコマンドを実行すればインストールできます．

```
$ pip install icrawler
```
　
#画像を集める
ソースコード以下になります．

```icrawler.py
from icrawler.builtin import GoogleImageCrawler
import sys
import os

argv = sys.argv

if not os.path.isdir(argv[1]):
    os.makedirs(argv[1])


crawler = GoogleImageCrawler(storage = {"root_dir" : argv[1]})
crawler.crawl(keyword = argv[2], max_num = 1000)
```

ターミナルで以下を実行すれば指定したディレクトリに画像が保存されます．

```
$ python icrawler.py 保存したいディレクトリのパス 集めたい画像のキーワード
```
実際に実行して見ると、

```
$ python image/neru 長濱ねる
```
指定したディレクトリに画像が保存されます．

<img width="684" alt="スクリーンショット 2018-07-15 21.32.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/256520/e5d1893a-845c-a0d0-4bbe-0e1fd9587d6e.png">

#最後に
今回実装したコードは[GitHub](https://github.com/NakaokaRei/crawler)に載せてあります．
また、もっと詳しい使い方は英語ですが[こちら](http://icrawler.readthedocs.io/en/latest/)のサイトに書いてあります．
Ginaの方法

#情報の整理
##メモ書き
・パス
・案件
・テクニック
に情報をまとめる。
注今思えばもっと細分化してもいいかも事務系と
お仕事をわけるとか・・・
→今それじゃおっつかないのでエクセルシートに業務日誌を書いてまとまったものは
別シートに書いています。気を付けていることは最初にお題目を書いておくことです。

##手順書
ちょっとのメモでいいからとっておけっていわれたね。
手順書がどこにあるかのまず取り出し方を把握ってところから始めるって教えてもらいました。

案件ごとの管理ドキュメント・・・ちゃんと理解あるリーダーのもとで
使うとツール並みに使えました。

##質問表
項目としては
・質問内容大　分類のこと
・質問内容中　内容のこと
・質問者
・回答者
・ステータス
・期日
注　不明点を洗い出して不明は不明でOutPutのほうを赤字にしておいて
仕事は進めて行くってことが大事なのかと思います。
ステータスが大事だってリーダーさんが言ってたね。

##担当割
担当者
やること
デッドライン
が大事です。
スケジュール変更など話合ったことを書いておくと便利でした。

##WBS
準備
調査
リハーサルも書き込むこと。
やった成果物のパスを張っておくことが一番記憶につながる。
不明点は備考に書いておくこと。

##クローズリスト
出したもの全部書き出して
再鑑依頼中（レビュー依頼中）とか書いておく。

##日付　名前　OK/NG
テスト項目書につける。
Android dependency 'com.android.support:support-support-v4' has different version...のエラーの解決法

```
Android dependency 'com.android.support:support-support-v4' has different version for the compile (27.0.2) and runtime (27.1.1) classpath. You should manually set the same version via DependencyResolution.
```

Android Studioで上記のようなエラーが発生した時はプロジェクトの`build.gradle`内の`buildscript`に以下を追記する

```
subprojects {
        project.configurations.all {
            resolutionStrategy.eachDependency { details ->
                if (details.requested.group == 'com.android.support'
                        && !details.requested.name.contains('multidex') ) {
                    details.useVersion "統一したいバージョン"
                }
            }
        }
    }
```
JJUG CCC 2017 Fall 　リポート Java


Javaのユーザーの集いらしいです。
別世界すぎちゃってという部分もありましたが、
意外と役に立つこともあるみたいで
リポートしておきます。
公式サイトのアドレスはこれ
http://www.java-users.jp/ccc2017fall/

##SpringBootとMyBatisでデータベースを可視化する
ccc_l1
説明
レガシーで大規模なシステムを目の前にした時、まずデータ構造を抑えるのは最重要事項ともいえます。 しかしそういった現場ではドキュメントが追いついていないことも多く、情報のサルベージにそもそも時間を取られてしまうのが実情ではないでしょうか。 私が参画したプロジェクトにも、メンテナンスが行き届いているとはいえないExcelのエンティティ定義書があるだけでした。 ドキュメントは多くの場合プロダクト開発のインプットとして生まれますが、サービスが継続していくに従って現状を可視化する役割へと変化していきます。 現在は多くの可視化ツール・サービスがありますが、とはいえレガシーなシステムではそのスキームに乗れないことも数多くあります。 そんなとき、SpringBootは強力な味方になりえます。 私はSpringBootとMyBatisを使ってデータベースのメタ情報を可視化するWebアプリケーションを作成しました。 本発表ではその経験を元に、現状を技術で可視化することの重要性、SpringBootやMyBatisの強力さ、現場改善のヒントをお話できればと思います。

説明用資料
https://speakerdeck.com/higedrum/springboottomybatisdedetabesuwoke-shi-hua-suru

用語
SchemaSpy・・・
CUIで実行できる
既存のDBからリバースできるものらしいです。

コメント
レガシーシステムをなんとかするためにデータに注目するというのは
その通りだと思います。SchemaSpyより便利なものをspringBootとMyBatisで作ったそうです。


##Pivotal認定講師が徹底解説！Spring Bootの本当の理解ポイント
ccc_e3
資料
https://www.slideshare.net/masatoshitada7/spring-boot-jjug

コメント：有名な先生らしいですね。
##Spring Security にできること・できないこと
ccc_g4
説明
Spring Security を導入すれば Web アプリのセキュリティについては一安心・・・なわけはなく、 Spring Security にもカバーしている範囲と、そうでない範囲があります。 本セッションでは、 IPA の出している「安全なウェブサイトの作り方」で挙げられているセキュリティ対策と照らし合わせながら、 Spring Security が保護してくれる範囲について私なりに整理した内容をお話しします。 実装の詳細な話はせずに、 Spring Security の機能に焦点を当てた内容になります。 なお、この内容は 2017-06-24 に関ジャバで行われた「KANJAVA PARTY 2017 !!!」と同じになります。

資料
https://qiita.com/opengl-8080/items/6dc37f8b77abb5ae1642

コメント
全部聞けなかったんですが、面白かったです。
ジーナセキュリティテスト担当で大活躍したことがあります。
やるかやんないかでプロジェクト救えるか救えないかぐらい違ったりしました。
面白いなと思うのは全体的にガーってたたく人がいないのでいろんなことが
わかりましたね。また、性能でも３多重とか５多重やるとまた、変なエラーが出てきたりしました。
そんなことを思い出しました。

##新しいプログラミング言語の学び方 ~ HTTPサーバーを作って学ぶJava, Scala, Clojure ~
ccc_g6
説明
ScalaやClojureなど、Javaとは異なるパラダイムを持つJVM言語が昨今注目を集めています。効率のよい学習のためには、「Hello world!」の次に何をするべきでしょうか？トレーニングの1つとして提案するのが、HTTPサーバーの実装です。このセッションでは簡易なHTTPサーバーの実装を通じて、文字列やバイト列の操作、正規表現、I/O、並列化など、Webアプリケーション開発に必要なテクニックをJava, Scala, Clojureの各言語ごとに学んでいきます。（各言語やHTTPサーバーの実装についての深い事前知識は必要ありません

資料
https://speakerdeck.com/todokr/xin-siihurokuraminkuyan-yu-falsexue-hifang-httpsahawozuo-tutexue-hu-java-scala-clojure

コメント
興味深い内容でした。
イベントいってJava、JavaScript教えてもらおう。

その他
ご本もお出しになっているようです。
クローリングハック あらゆるWebサイトをクロールするための実践テクニック 単行本（ソフトカバー） – 2017/9/14
竹添 直樹 (著),‎ 島本 多可子 (著),‎ 田所 駿佑 (著),‎ 萩野 貴拓 (著),‎ 川上 桃子 (著)

D-Cube
イベントもやってるそうです。
https://d-cube.connpass.com/
JSX記法

#JSX記法メモ

```jsx:index.js
ReactDOM.render(
  <div>Hello World</div>, // 末尾のカンマがないと動かない
  document.getElementById('root')
);
```

classの付け方

```jsx:index.js
ReactDOM.render(
  <div className="hello">Hello World</div>, // classは予約語なのでclassNameを使う
  document.getElementById('root')
);
```

イベントの付け方

```jsx:index.js
ReactDOM.render(
  <div onClick={関数名}>Hello World</div>, // 関数名を波括弧で囲う
  document.getElementById('root')
);
```
Circuit Breaker Pattern 調べてみた

## 調べるきっかけ
飲み会で会社の若手がNetflixのHystrixってのがCircuit Breaker Patternで、要するにNetflixやべーです。って言ってたんだけど、正直何それ？状態だったのでどういうものなのかだけは押さえておこう的なアレです。

## どういうものか？
Circuit Breakerは日本語にすると、そのまま「ブレーカー」ですね。乾燥機をつけたままエアコンを付けると落ちるヤツです。

通常、API呼び出しとかで呼び出し先に障害が発生して接続できない場合、タイムアウトまで待ってエラーを返すようになっているかと思います。

エラーになることがわかっているのに、リクエストするのはムダですし、相手側の負荷も高めてしまうので好ましくありません。

こういうところにブレーカーを入れておくと、しきい値を超えてリクエストが失敗したら、ブレーカーを落として、即エラーを返るようにしてあげるイメージです。

Webサービスで言うところのブレーカーは、障害の連鎖を食い止めるために入れるものかなぁと思います。

### 障害の連鎖
マイクロサービスとかだと、別のサービスのAPIを呼び出して、その中ではさらに別のサービスを呼び出してといったようになっているかと思います。

A -> B -> C
ここでCに障害が発生したとすると、Bはタイムアウトまでレスポンスを待ちます。Bはタイムアウトを待っているうちに、他からのリクエストが来て、そいつらもタイムアウトまでレスポンスを待つ、、、リソースを食いつぶして、Bも落ちる。Bが落ちると、次はAみたいな感じで障害の連鎖が起こることが懸念されます。

参考：マイクロサービスにおける障害と Failurewall
https://qiita.com/okumin/items/d7a108ea36f3ad2e3882
図が超絶わかりやすかったです

## Circuit Breaker Pattern
マーチン・ファウラーが言ってるものらしく、XPとかリファクタリングとか2000年くらいにjavaやってた人は聞いたことのある名前なはずです。ちょっとテンション上がりました。
https://martinfowler.com/bliki/CircuitBreaker.html
短いし、Google翻訳にぶち込めばなんとなく意味わかります。

実装例みたいなコードやシーケンス図あるので理解しやすいと思います。

クライアントと呼び出し先のサービスの間に、ブレーカーを入れます。
ブレーカーが落ちる、ブレーカーを上げる、ここらへんを自動的に行われるようにするパターンですね。

たとえばこんな感じでしょうか
* 一定時間内にしきい値の回数以上失敗した場合、ブレーカーを落とす
* 最後の失敗から一定時間以上経過していたら、ブレーカーを戻す（再度落ちることもある）

## まとめ
実装自体はまんま電気のブレーカーがイメージ通りでした。
リモートへのアクセスが失敗した場合に、うまいこと障害が連鎖しないための仕組み。
呼び出し先のサービスが止まったら、呼び出し元のサービスが継続できない所だとあまり意味がない気がします。それでも、NetflixのHystrix使えば監視・モニタリングなんかもできるようで、やばそうな雰囲気とか感じ取れるかも。

確かに、NetflixのHystrixってのがCircuit Breaker Patternで、要するにNetflixやべーです。
MSX 仮想VRAM (2)

真面目にVSync処理してないのでチラつくが、チラつきの丁度いいサンプルなのでこのままにしておく。

```wall.c
/*
z88dk / WebMSX
zcc +msx -lndos -create-app -bnwall wall.c
*/

#include <msx/gfx.h>
#include <stdlib.h>
#include <string.h>

#define BYTE unsigned char
#define _countof(arr) (sizeof(arr)/sizeof(arr[0]))

#define WIDTH 64
#define HEIGHT 48

const int dx[] = { 0,  0,  1,  1,  1,  0, -1, -1, -1 };
const int dy[] = { 0, -1, -1,  0,  1,  1,  1,  0, -1 };

BYTE vvr[HEIGHT][WIDTH];	// 仮想VRAM
BYTE pgblt[8*16];	// パターンジェネレータ・バッファ
BYTE pnblt[32*24];	// パターンネーム・バッファ
BYTE walls[8][2][8];	// プリレンダー・シフト壁

void gen_walls()
{
	BYTE wall[] = { 0xff, 0x81, 0xbd, 0xbd, 0xbd, 0xbd, 0x81, 0xff };

	for (int y = 0; y < 8; y++) {
		int w = wall[y];
		for (int x = 0; x < 8; x++) {
			walls[x][0][y] = w & 0xff;
			walls[x][1][y] = w >> 8;
			w <<= 1;
		}
	}
}

void put_wall(int x, int y)
{
	vvr[y  ][x  ] |= 1;
	vvr[y  ][x-1] |= 2;
	vvr[y-1][x  ] |= 4;
	vvr[y-1][x-1] |= 8;
}

void gen_map()
{
	int lines[][4] = {
		{  1,  1, 63,  1 },
		{  1, 23, 63, 23 },
		{  1, 47, 63, 47 },
		{  1,  1,  1, 47 },
		{ 31,  1, 31, 47 },
		{ 47, 24, 47, 47 },
		{ 63,  1, 63, 47 },
		{  1, 23, 23,  1 }
	};

	for (int i = 0; i < _countof(lines); i++) {
		int x0 = lines[i][0];
		int y0 = lines[i][1];
		int x1 = lines[i][2];
		int y1 = lines[i][3];
		int dx = abs(x1 - x0);
		int dy = abs(y1 - y0);
		int sx = (x0 < x1) ? 1 : -1;
		int sy = (y0 < y1) ? 1 : -1;
		int err = dx - dy;

		for (;;) {
			put_wall(x0, y0);
			if (x0 == x1 && y0 == y1) { break; }
			int e2 = 2 * err;
			if (e2 > -dy) {
				err -= dy;
				x0 += sx;
			}
			if (e2 < dx) {
				err += dx;
				y0 += sy;
			}
		}
	}
}

void memmerge(BYTE *dst, BYTE *src, int len)
{
	for (int i = 0; i < len; i++) {
		*dst++ |= *src++;
	}
}

void main()
{
	const BYTE *pjiffy = (BYTE *)0xfc9e;
	int px = 0;
	int py = 0;

	set_mode(mode_1);
	gen_walls();
	gen_map();

	while (! get_trigger(0)) {
		int st = get_stick(0);
		px += dx[st] * 3;
		py += dy[st] * 3;
		if (px < 0) px = 0;
		if (px > (WIDTH-32)*8) px = (WIDTH-32)*8;
		if (py < 0) py = 0;
		if (py > (HEIGHT-24)*8) py = (HEIGHT-24)*8;

		int xh = px >> 3;
		int yh = py >> 3;
		int xl = px & 7;
		int yl = py & 7;
		int yr = 8 - yl;

		// パターンジェネレータ
		memset(pgblt, 0, 8*16);
		BYTE *pg = pgblt;
		BYTE *w0 = &(walls[xl][0]);
		BYTE *w1 = &(walls[xl][1]);
		for (int i = 1; i < 16; i++) {
			pg += 8;
			if (i & 1) memmerge(pg,    w0+yl, yr);
			if (i & 2) memmerge(pg,    w1+yl, yr);
			if (i & 4) memmerge(pg+yr, w0,    yl);
			if (i & 8) memmerge(pg+yr, w1,    yl);
		}

		// パターンネーム
		BYTE *pn = pnblt;
		for (int y = 0; y < 24; y++) {
			memcpy(pn, &(vvr[yh+y][xh]), 32);
			pn += 32;
		}

		// VBlank
		BYTE jiffy = *pjiffy;
		while (jiffy == *pjiffy) ;

		// ブロック転送
		vwrite(pgblt, 0, 8*16);
		vwrite(pnblt, 0x1800, 32*24);
	}
}
```

[WebMSXテープ版](http://webmsx.org/?tape=http://www.maroon.dti.ne.jp/lance/file/wall2.cas)
テストデータ作成

#テストデータ作成

##[テストデータ作成法]
###[説明書き]
以前、あるプロジェクトで問題を解決するためにアイデアを考えたことがあります。
要件定義ちゃんと書けとか、仕様の整理とかあんまり即効性があるものをわたしは
持っていません。その中でも比較的即効性があるのがテストデータを工夫することだと
思います。読んでみれば当たり前のことばかりかもしれませんがまとめて電子に媒体になった状態はそれなりに価値があると思います。伝統的なSier以外の新しい会社なんかでは
それなりに価値があると思います。

###[概要]
・単純な境界条件-最大値、最小値、1つ違いの境界値-を全てテストする。
・複合境界条件をテストする。つまり変数に小さすぎる値や大きすぎる値が
代入されるような入力データの組み合わせをテストする。
・データの種類が正しいかどうかのテストケースを作成したか。例えば、給与計算
プログラムの従業員数が負数の場合などをテストする。
・代表的な値-中間的な値-をテストする。
・JUNITでカバレッジ100%を目指してテストする。ステートメントと分岐をきちんと網羅すれば100には相当近くなります。意外と100は難しいのでどこがテストできてないかを把握して妥協することも必要かと思います。

###[エラーがでやすいデータ例]
ほんの数例ですがあげておきます。閏日はテストケースで作成した経験がありますが
これをやったからといって今のシステムでエラーがでるわけではないですが注意深くみるようにはなるようです。実際に銀行システムでジーナがテストケースを出しましたがお客さん
にあたる業務の人は興味ないみたいでした。

ソフトウェアテスト入門　押さえておきたい<要点・重点>
78ページ参照
ソフトウェアテスト　PRESS編集部
技術評論社

文字列の場合
ゼロ・NULL系→NULL　空文字　スペース　全角/半角

数値の場合
ゼロ・NULL系→0　
制限値→言語仕様上の上限、下限およびその前後

日付の場合
閏日　2008/2/29
存在しない日付　2009/2/29
業務上の特殊日　年末年始/月末・月初

###[データ作成例　半角数字11桁までOKの例]
OKパターン
1

12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
12345678901

NGパターン
123456789012

###[データ作成例]
会員IDとして「6文字以上かつ10文字以下の半角英数字」
でならないとした場合のデータ例　10バイトで出来る限り作っています。

全角数字が混じっている場合　NG
12345678０

半角数字　OK
1234567890

半角かつ英数字以外　NG
123456789ｶ

半角で英小文字　　OK
abcdefghij

半角で英大文字　　OK
ABCDEFGHIJ

全角で英小文字　　NG
ａｂｃｄｅ

全角で英小文字　　NG
ＡＢＣＤＥ

全角で英数字以外　NG
12345678漢

###[編集後記]
課長さんたちへ
プロジェクトって大体わけのわからないエラーでつぶれていくみたいですね。
そういうときに単体やり直しができればいいですができない場合も
あってそういうときに今だったら何か言えるような気がします。

★もしやってないようだったらセキュリティテストもやるかやらないかでプロジェクト
救えるか救えないかぐらい違います。SQLコマンドを入力欄に埋め込んだりとかUNIXを
入力欄に埋め込んだりとかそういうやりかたですけど、いけてない箇所があぶりだされる
可能性は経験的にあると思います。横断的に画面をたたく人っていないんで結合テストで
発見できなかったことが発見出来たりします。
セキュリティやってて面白かったのは性能も3多重・5多重やると変なエラーがでてきてくれ
たことです。
参考リンク　セキュリティチェックについての説明
https://qiita.com/Tsutou/items/4fd498f8ab2638bd5650?utm_content=bufferc639e&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer

参考リンク 脆弱性診断ツールについて
https://qiita.com/tamura__246/items/9c70ddc1c03cf623cf8d
★
えてして生のデータいきなりとか
ものすごいものでがって流してとかやりがちですが
ある程度範囲をしぼって
単体チックにテストしてみるとか
設計書をもとに（設計書ないなら自作して）テストデータ作ってテストしてみるとか、

設計書もとにデータ作ってテストしてエラー出して
プログラマーさんに説明して直してもらうっていうのが・・・・
ジーナのキラースキルの一つです。
ちなみにテストだけではわたしは自分のスキル売りません。

その他
JunitよりSpockとか他のものも試してみるのもいいかも・・・

＃＃
便利な情報が載っているらしい。
https://www.ipa.go.jp/security/vuln/websecurity.html
RichText に書式付きで追加する

# RichTextBox (リッチテキストボックス)

RichTextBox は、フォントを設定したり、色を設定できるテキストボックス

[System.Windows.Forms.RichTextBox](https://msdn.microsoft.com/ja-jp/library/system.windows.forms.richtextbox(v=vs.110).aspx)

# RichTextBox (リッチテキストボックス)

既に書式設定がされている状態で、テキストを追加する場合、↓のような方法では無理

> String str = "Hello";
> int iti = this.richTextBox1.TextLength;
> this.richTextBox1.Text += str;
> this.richTextBox1.SelectionStart = iti;
> this.richTextBox1.SelectionStart = this.richTextBox1.TextLength - iti;
> this.richTextBox1.SelectionColor = Color.Red;

↑のやり方だと、書式が一旦初期化(.Textなので、テキスト/文字列だけになってしまう)

↓のやり方でイケた

> String str = "Hello";
> this.richTextBox1.SelectionStart = this.richTextBox1.TextLength;
> this.richTextBox1.SelectionColor = Color.Red;
> this.richTextBox1.SelectionLength = 0;
> this.richTextBox1.SelectedText = str;

選択領域に文字列を設定して、書式を設定して・・・という方法でうまくイケた。
ベイズ最適化シリーズ（1）　ーベイズ最適化の可視化ー

#ベイズ最適化とは
ベイズ最適化は、機械学習のハイパーパラメータ探索でよく使われます。その実行はGPyOptで簡単にできます。ベイズ最適化とGPyOptについて詳しく知りたい方は、以下のサイトを参考にしてください。
https://qiita.com/marshi/items/51b82a7b990d51bd98cd

ベイズ最適化は様々な場面で使えます。例えば、下記の用途が挙げられます。
・実験条件を最適化したい
・生産ラインの歩留まりが、最も良くなる設定値を見つけたい
・グラタンが美味しく焼けるオーブンの温度と加熱時間を求めたい

#GPyOptでベイズ最適化
GPyOptを使って、ベイズ最適化の可視化を行います。
使う非線形関数のコードはこちら

```py
Z = 0.1*(X**2+Y**2-16)**2 + 10*np.sin(3*X)
```

可視化すると以下のようになります。

```py
import matplotlib.pyplot as plt
import numpy as np

#関数の定義
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
 
X, Y = np.meshgrid(x, y)
Z = 0.1*(X**2+Y**2-16)**2 + 10*np.sin(3*X)#Zは山の高さ

#グラフのプロット
plt.figure()
cont = plt.contour(X, Y, Z, cmap="Greys")
cont.clabel(fmt='%1.1f', fontsize=14)
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
```
![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/264781/49b9367e-978d-d1a3-be91-05118123f0a9.png)
山が三つほどあり、中央の山(高さ35くらい)が最も高い地点です。今回は、ベイズ最適化で最も高い地点(中央の山の頂上)を見つけ出します。

通常、GPyOptは最低値を探索します。そのため、関数にマイナスをかけて最適化します。

```py
import GPy
import GPyOpt
import numpy as np 

#最適化する関数
def f(x):
    xx,y = x[:,0],x[:,1]
    z = -(0.1*(xx**2+y**2-16)**2 + 10*np.sin(3*xx))#Zは山の高さ
    print(-z)
    return z

#状態変数の幅
bounds = [{'name': 'xx', 'type': 'continuous', 'domain': (-3,3)},
          {'name': 'y', 'type': 'continuous', 'domain': (-3,3)}]

#ベイズ最適化
myBopt = GPyOpt.methods.BayesianOptimization(f=f, domain=bounds)
myBopt.run_optimization(max_iter=30)
```
最適値の出力：(x,y)とz

```py
print(myBopt.x_opt)
print(-myBopt.fx_opt)
```
探索履歴を保存します。

```py
result_x = myBopt.X
result_z = -myBopt.Y
```
#ベイズ最適化の可視化
探索履歴を可視化します。

```py
plt.figure()
cont = plt.contour(X, Y, Z, cmap="Greys")
cont.clabel(fmt='%1.1f', fontsize=14)
plt.xlabel("X")
plt.ylabel("Y")
sc = plt.scatter(result_x[:,0], result_x[:,1],s=50,
 c=range(len(result_x)),cmap="autumn")
plt.colorbar(sc)
plt.plot(result_x[:,0], result_x[:,1], linestyle="dashed")
plt.show()
```

![figure_2-1.png](https://qiita-image-store.s3.amazonaws.com/0/264781/313f7395-3ac9-1fad-3cd5-7a24303b7cba.png)
探索した順番で、点と点を繋いでみました。
・序盤は左の山を探索しています（赤い点）。
・中盤は隅っこを探索しています（オレンジの点）。
・終盤は中央の山を集中的に探索しています（黄色い点）。



高さ（Z）の探索履歴を可視化します。最初はランダムに5個の地点を探索し、その後30回のベイズ最適化による探索をしているため、合計で35個のプロットが得られます。

```py
plt.figure()
plt.plot(result_z)
plt.xlabel("epochs")
plt.ylabel("Z")
plt.show()
```
![figure_3-1.png](https://qiita-image-store.s3.amazonaws.com/0/264781/39670a59-b265-8970-934b-5022e7db29e1.png)

見事、最高点（高さ35付近）を見つけることができました！今回は二次元関数でしたが、n次元関数のときは、主成分分析などをして可視化すると直感的に分かりやすいかもしれません。

~~次回は、GPyOptを使ってXGBoostのハイパーパラメータを探索してみます。~~
[次回](https://qiita.com/shinmura0/items/bcc8c4a06b9a49c943d6)は、GPyOptを使ってアンサンブル学習を最適化してみます。
git@github.com: Permission denied (publickey). の解消

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">プログラミング初心者はGithubで作業ログ残してツイッターに連携して作業すると、優しいお兄さんたちがコメントしてくれるのですごくおすすめ。作業も可視化されるし、質問しなくても何しようとしているのか見てわかればこたえてくれやすくなる。</p>&mdash; Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/984972796953477121?ref_src=twsrc%5Etfw">April 14, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ほうほう、と思って早速GitHub垢を作成、意気揚々と git clone かましたら

```
git@github.com: Permission denied (publickey).
```

って言われてやる気なくしたので対処法の覚書
↓
[gitHubでssh接続する手順~公開鍵・秘密鍵の生成から~](https://qiita.com/shizuma/items/2b2f873a0034839e47ce)
↑
この方の手順をなぞるだけだっ！ 



あと
[QiitaはTwitterのツイートを埋め込める](https://qiita.com/yyu/items/d7483b63f701ae1d1c50)
これも初知りだったので備忘として。
[Rails 5]rake assets:precompile RAILS_ENV=production エラー

#開発環境
rails 5.1.4'
cloud9


#やりたい事
heroku上でも画像が表示させたい。
#トラブル
```
rake assets:precompile RAILS_ENV=production
```
を実行しようとした際に

```
module.js:487
    throw err;
    ^

Error: Cannot find module 'npmlog'
    at Function.Module._resolveFilename (module.js:485:15)
    at Function.Module._load (module.js:437:25)
    at Module.require (module.js:513:17)
    at require (internal/module.js:11:18)
    at /home/ubuntu/.nvm/versions/node/v8.2.1/lib/node_modules/npm/bin/npm-cli.js:22:13
    at Object.<anonymous> (/home/ubuntu/.nvm/versions/node/v8.2.1/lib/node_modules/npm/bin/npm-cli.js:148:3)
    at Module._compile (module.js:569:30)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
```
と出力されてしまいます。

```
module.js:487
    throw err;
```
について少し調べたのですが、githubにて[Cannot find module './Module' Error at module.js:487 #14865](https://github.com/facebook/react-native/issues/14865)と同じようなエラーを見つけ修正しましたが改善せず、、、
他に方法はないでしょうか。
にかいどーIoTびぼうろく H30.7.15

#IoTのためのPython環境構築
まず目標を見失わないように確認したい。
現在の課題はポンプの制御をRaspberryPiでするということだ。
そのためには何かコンピューター言語を使う必要があるが、2018年7月現在もっとも情報が多いPythonを使うことにする。
何よりRaspberryPiのGPIOを制御するのに向いている。
しかし私はプログラミング等完全に素人なので、1からPython環境を構築せねばならない。
ちなみに前回の7.8の記事を読んだ人からその仕事だけならarduinoのほうがよほど楽だが、RaspberryPiのほうが初心者でもとっつきやすいし後々応用が効くのでそのままRaspberryPiのほうが良いと指摘を受けたのでそうすることにする。

#環境構築～Visual Studio Code～
まずざっと検索してみたところ、テキスト形式で記述できるアプリケーションが必要だということがわかった。
そのためにはWindowsに標準でついているメモ帳でもいいようだが、秀丸やサクラエディタが推奨されていた。
え・・・、ちょっと待って。Pythonやサクラエディタって20世紀のものじゃないか？
私も昔使ってた記憶がある。この記事を書いているのは2018年だからざっと20年くらい前だ。
本当にこれでいいのか、これは機関銃が開発されてるのにマスケット銃で戦うようなものではないか、
ということをtwitterで書いてみたところ、秀丸やサクラエディタも更新されてるから大丈夫だよということのほかに、
Visual Studio Codeというアプリケーションを教えてもらった。マイクロソフトが作っていて、コード作成に特化された初心者でも使いやすいアプリケーションだ。

Visual Studio Code
https://code.visualstudio.com

インストール等はQiitaでもほかに記事があるし省略する。私も何をやったか覚えていない。おそらく、ダウンロードしてから次へ連打だけだろう。

#環境構築～Anacondaで一気にPython環境～
Visual Studio Codeをインストールしたが、まだPythonの環境構築は何も行っていない。
さてどうしたもんかなと思っていたらまた優秀なtwitterフォロワーからAnacondaというものをインストールすればほぼ終わると教えてもらったのでそうすることにする。

Anaconda
https://www.anaconda.com/download/

ここからPython3.6Ver.をダウンロードして次へを連打してインストールしたが、ここで問題が発生した。
インストールに参考にしていたところによるとWindows10の左下の”ここに入力して検索”のとこからcmdと打ち込み、
コマンドプロンプトを起動させその画面から Python と打ち込めば

Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

と出るはずだが、エラーが出てこの文章は出なかったのだ。
どうやら"Path"が通っていないことが原因ということがtwitterで指摘された。
しかし私にはPathがなんなのかわからず調べたところ、「環境変数Path」というのが正式名称らしく、「exeがある場所を調べるとこ」という回答がもっともよく要領を得た。
初心者には"Path"というのは引っかかるところだと思われるので参考にして欲しい。
Pathの通し方も多くの記事があるので省略する。

#科学は1つの光源である
どこで明るくなればあらゆる場所が照らされる。
これでPython環境の構築ができたので次はPythonを覚えることである。
Swift4の日付日時関連メモ


appleのDateのドキュメント
https://developer.apple.com/documentation/foundation/date

###今の日時
`init()`

```Swift4
let nowDate = Date() 
```

###現在時刻からhoge秒

`init(timeIntervalSinceNow: TimeInterval)`

昨日の日時

```
let yesterday = Date(timeIntervalSinceNow: -60 * 60 * 24)
```

###指定した時刻からhoge秒

さらに昨日(一昨日)
`init(timeInterval: TimeInterval, since: Date)`

```
let dayBeforeYesterday = Date(timeInterval: -60 * 60 * 24, since: yesterday)
```

###2001年1月1日00:00:00 UTCを基準に初期化された日付
UTC(協定世界時：Coordinated universal time)

`init(timeIntervalSinceReferenceDate: TimeInterval)`



###1970年1月1日00:00:00 UTCを基準に初期化された日付値を、指定された秒数で作成します。

`init(timeIntervalSince1970: TimeInterval)`

let current = Date(timeIntervalSince1970: 60)


##比較

compareなど使用せずに不等号で比較できます。(Swift3から

```
if nowDate > yesterday {
	// 入る
}

if Date(timeIntervalSinceNow: 0) == Date() {
	//同じ
}
```
要件定義　書き方

#要件定義の書き方
要件定義
わたしがかつて社内SEだったころに派遣できていた 
ある方に教えていただいたことです。 

要件定義を書く機会はそれほどなかったですが 
マニュアル書いたり計画書書いたり一番応用が利いたスキルでした。 
皆様の参考になると幸いです。 

ジーナと要件定義
小さいものですが経験あります。
パスワード管理ツール・・・・実際書いたのは要件定義と基本設計書が合体したもの。
ドキュメント→実装→テスト

##本文
要件定義とは
お客様の要求をまとめたもの

##要件要素
###既存の仕組み
　　
　　１.役割（要件定義として記載する場合は権限・役割を記載する必要あり）
　　○○業務　・・・現在手動で○○会社の○○チーム
　　○○業務　・・・現在○○アプリを○○会社の○○チームが担当

　　２.アプリ内の既存の仕組・・・ソースを読む必要がある場合が多い。
ここがしっかり書かれていないとやりにくいです。
　　ここをうまく説明できるとお客様の信頼が勝ち取れる可能性があります。

###仕様内容
　　既存の仕組みをどう変えていくか
　　１.日時,月次　・・・タイミング
　　２.フロー（作業・処理）
　　３．画面・パターンなどの表
　　4．図
注　画面・パターンが作った時点でお客様との話合いが行われるべきでここからがスタートです。
あるべき姿が一枚絵でかけるところまでです。レガシーシステムですごく困っている場合
画面遷移とか機能だってやりやすくシンプルに変えたっていいし、手動対応をお客様に頼むという手もあります。

###懸案事項
　お客様に聞くこと、頼むことがしっかり書かれていること。
付記
　一旦、要件定義としてまとめておいた後は、表の形で要件の遷移を管理していく方法も
あるようです。　要件トレース

##要件定義　フォーマット例

１.要件内容
　　　・概要
　　　・対象システム
２.事前調査
　　　対象システムの権限を制限することで本要件を満たせるかの事前調査を行う。
３．対応概要
４．懸案事項
PowerShellの知識　システムインテグレータの現場から


知識をまとめる機会があったので連携します。
pythonなど他の言語でもこういうことが簡単にできるとか
話広げてもらったらうれしいです。

PowerShellのcommand、リンク
■再帰検索
PS > Get-ChildItem C:\Windows -Recurse ……サブフォルダの内容も表示する
注　設計書フォルダに使用したりソースを一覧を作成し、識者に
大体のあたりを吹き出しでつけてもらったりする。

■ファイル比較
https://qiita.com/kmr_hryk/items/9b0d28ed0fda5b34f07c
注WinMergeがなかったのでこれを使いました。
WinMergeのほうが10倍便利だけど使えないときは助かるし、
知っていて損はないと思います。

■ファイルに対する文字列検索等
リンクもcommandもないですが文字列検索も面白いテーマだと思います。
私自身はVBAよりちゃんと動くし可読性が高く間違いも少ないと思っています。

■リンク
それパワーシェルでできるよ
https://qiita.com/cd01/items/da9a36582372e7d0a7f6
【PowerShell】csvからインポートした値を配列に格納する方法
https://qiita.com/satton6987/items/3ed0c651708abcfae716
libGDXで背景を自動スクロールさせる

# 方法 
[ParallaxBackground](https://github.com/surahul/ParallaxBackground-libgdx) から、[ParallaxBackground.java](https://github.com/surahul/ParallaxBackground-libgdx/blob/master/core/src/com/rahul/libgdx/parallax/ParallaxBackground.java) と [ParallaxLayer.java](https://github.com/surahul/ParallaxBackground-libgdx/blob/master/core/src/com/rahul/libgdx/parallax/ParallaxLayer.java
) をまるっとコピーします。 
そのあとゲーム画面で背景をスクロールさせるコードを書きます。 
# ゲーム画面 
横スクロールの場合、**横スクロール速度** 1.0f、**縦スクロール速度** 0.0fという感じで、背景のサイズに合わせてうまく調整してください。
一番最後の *new Vector2(0,100)* は、横スクロールなら1番目の数字を変えて2番目は0にしてください。ここの数字もいじるとスクロールの速度が変えられます。 


```GameScreen.java
ParallaxBackground rbg;
public GameScreen(){ 
assets = new AssetManager();
         assets.load("background.pack", TextureAtlas.class);
         assets.finishLoading();

         atlas = assets.get("background.pack");

rbg = new ParallaxBackground(new ParallaxLayer[]{
                new ParallaxLayer(atlas.findRegion("background"), 
                new Vector2(横スクロール速度, 縦スクロール速度), new Vector2(0, 0)),},
                背景の横幅, 背景の高さ, new Vector2(0, 100));
} 

public void render(float delta){
rbg.render(Gdx.graphics.getDeltaTime());
}

```
neologdインストール時にハマった備忘録

# はじめに
neologdをインストールするにあたってハマった
同じ記事が見当たらなかったため、こちらに残しておきます。
結論は、anacondaが原因でした

# 環境
Mac OSX El Caption
Python 3.7.0
anaconda 3-4.2.0

こちらを参考にmecabをインストールしました。ありがとうございますm(__)m
[MeCabとCaboChaをMacに導入してPythonから使ってみる](https://qiita.com/musaprg/items/9a572ad5c4e28f79d2ae)

# neologdがインストールできない
```
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
```
ここまでは問題なく進む。

**nelogd 辞書をインストールする**

```
./bin/install-mecab-ipadic-neologd -n -a
```

```
$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/
param.cpp(69) [ifs] no such file or directory: /usr/local/lib/mecab/dic/mecab-ipadic-neologd/dicrc
```
ディレクトリがないと言われる

## パスが間違っているのかも
```
$ sudo find / -name mecab-ipadic-neologd
```
何も表示されなかった。インストールされていないっぽい
## エラーっぽい文言
```
[make-mecab-ipadic-NEologd] : Fix yomigana field of IPA dictionary
patching file Noun.csv
Hunk #1 FAILED at 3013.
Hunk #2 FAILED at 35404.
Hunk #3 FAILED at 37378.
Hunk #4 FAILED at 38942.
Hunk #5 FAILED at 45216.
Hunk #6 FAILED at 48892.
6 out of 6 hunks FAILED -- saving rejects to file Noun.csv.rej
```
パッチが適用できず、Noun.csvを保存する際に失敗しているようだ。
こちらを参考にしました：
[diffを利用したpatch適用と「hunk FAILED」「malformed patch」等の解決方法](http://uguisu.skr.jp/Windows/diff_patch.html)

# anacondaが怪しい

```
./../../libexec/iconv_euc_to_utf8.sh ./char.def
pyenv: iconv: command not found

The `iconv' command exists in these Python versions:
  anaconda3-4.2.0/envs/py3.5

```
インストール中に、上記の文言が延々と出ている。

anacondaのライブラリと干渉していて、`iconv`がうまくインストールできていないみたい。
pyenvで環境管理していたので、下記のようにホームディレクトリのpythonの向き先をシステムにして、インストールしなおしたらうまくいった。

```
$ pyenv versions
  system
* 3.7.0 
$ pyenv local system 
$ pyenv versions
* system 
  3.7.0
$ source ~/.bash_profile 
```

# まとめ
anacondaは便利ですが、色々入っちゃうので注意が必要なんですね。
勉強になりました。
Stored Propertyに対して OSバージョンの判定を間接的につける

##はじめに - 直面した事象
複数バージョンに対応しているアプリケーションで最新OSのみの機能を導入する際、OSバージョンによる判定が必須になります。そのような場合は例えば、下記のような形でバージョンの判定を行います。

```Swift
if #available(iOS 11.0, *) {
    do something
}

@available(iOS 11.0, *)
class ClassForOS11 { }

class SomeClass {
    @available(iOS 11.0, *)
    var iOS11ComputedProperty {
        retrurn property
    }

    @available(iOS 11.0, *)
    func iOS11Function() {
    }
}
```

しかし、上記のような方法はComputed Property、 Class、 メソッドには使用できますが、Stored Propertyには使用できません。下記のようにするとCompile Errorになります。

```Swift
class SomeClass {
    @available(iOS 11.0, *)
    var arView: ARSCNView?
    // Stored properties cannot be marked potentially unavailable with '@available'

    // 省略
}
```

このような状態の際に、特定OS以上のみでサポートされているクラスのインスタンスを、特定OSバージョン以外もサポートしているクラスのStored Propertyとして保持したいというケースに遭遇しました。本記事では、暫定で考えた対処法を記載します。

##検証環境
以下の環境を使用しています。

macOS High Sierra Version 10.13.4
Xcode Version 10.0.0 beta3

##実装
前提：
以下を本記事のケースとします。

* iOS 10以上をサポート
* iOS 10以上をサポートしているクラスのストアドプロパティとして、iOS11以上で使用できるクラスのインスタンスを保持したい

以下のようにして、対処しました。

```Swift
class SomeClass {

    // TODO: iOS 10サポートを外したタイミングで書き換える
    // storedPropertyはOSバージョン判定できないため暫定で以下のように対処
    private var storedArView: Any?    
    @available(iOS 11.0, *)
    var arView: ARSCNView? {
        get {
            return storedArView as? ARSCNView
        }
        set(newArView) {
            storedArView = newArView as Any
        }
    }
}

```
インスタンスの型として、iOS11以上のクラスを記述するとその時点でコンパイルエラーとなってしまいます。
そのため、暫定でAnyで定義し、実際のアクセスはcomputed property経由で行うようにします。
computed propertyはOSバージョンによる判定が可能なため、この方法で該当プロパティを保持しながら、OSバージョン判定を行うことが可能です。
ただし、 Anyで定義しているため、静的型付けのメリットが失われており、実装は開発者自身が気をつけなければなりません。状態として本来好ましくはないため、TODOコメントなどで残して置くと良いと思われます。

##まとめ
Stored PropertyのOSバージョン判定をComputed Propertyを介して間接的に行う方法を紹介いたしました。
もっと良い方法をご存知の方がいらっしゃいましたら、共有いただけますと幸いです。

また、Stored PropertyのOSバージョン判定ができない合理的な理由の説明がなかなかできないため、この辺りお詳しい人は補足いただけますと幸いです。stored property周りの処理（metaデータとしての登録？）などはコンパイル時に実行されるため、そのタイミングではOSバージョンの判定ができない、computed propertyなどのOSバージョン判定は実行時に行われるのでOSの判定が可能、あたりかなとは思っているのですが。。。
python を3.7に上げたら Pokemon Terminal で env: python3.6: No such file or directory と出るようになった

OSX HighSierra です。

```
brew upgrade python
```

で python 3.6.5 → 3.7 にしたら ポケモンターミナルでエラー発生。

```
$ pokemon
env: python3.6: No such file or directory
```

$HOME/.Pokemon-Terminal/pokemonを見る。

~~~python:pokemon
#!/usr/bin/env python3.6

import sys

from pokemonterminal.main import main


main(sys.argv[1:])
~~~

シェバンを書き換える。

~~~diff:pokemon
- #!/usr/bin/env python3.6
+ #!/usr/bin/env python3
~~~

これで解決。
Minibatch Size調整の基本

# Minibatch Size
minibatch sizeは学習中のリソースに影響を与える。


# 一般的な値
だいたいの場合minibatch sizeで使用する値は以下。
1,2,4,8,16,32,64,128,256,1024,2048
minibatch sizeが大きいほどメモリを多く消費する。


# CNNの場合
Learning Rate(学習率)が同じならminibatch sizeが大きくなるとモデルの精度は低下する。
Learning Rate(学習率)を調整すればモデルの精度は低下しない。[1]
![minibatch size for cnn](https://qiita-image-store.s3.amazonaws.com/0/271751/2bf05962-f2b8-adfd-7131-637abfe4a8aa.png)

# まとめ
minibatch sizeが小さすぎると学習の速度が遅くなる。minibatch sizeが大きすぎると多くのリソースを必要とすることになる。
32 - 256くらいの値をまず試してみるべし。

# 参考文献
[1] [Mishkin, Dmytro, Nikolay Sergievskiy, and Jiri Matas. "Systematic evaluation of CNN advances on the ImageNet"](https://arxiv.org/pdf/1606.02228.pdf)
python 操作・基本メモ

#モジュールを読み込む
モジュールを読み込むときに使いやすいもの．

```py

import csv             #csvモジュールを読み込む
from csv import ...    
#csvモジュールのうち，一部のみを取り込む．容量節約．
import csv as cs       #モジュールを別名で登録する
```

#スクリプト編集時

```py
#コード区切り(エディター: Spyder)
#Code cellとも呼ばれる．コードに区切りを作る．部分部分でチェックしながらコードを作成するときに便利．

#%%

#スクリプト折り返し (\でスクリプトを折り返しできる)
print("abcdefghij" + \
      "klmn" )

```

Matlabの```%%```と似ている．

#文字列操作
```py

T = 25
T = str(T)             #文字列へ変換
K = [1,2,7]

for i in range(0,2):
   K[i] = str(K[i])
#(リストに対してはうまくいかないため，forループでいちいち変換してあげる)

T = "3\n"
T = T.split()          #区切り文字(\nや空白)で分割．
# T = ['3']            #返り値はリスト
T = T.split('/n')[0]   #リストの最初の値だけを取り出す
# T = '3'                #返り値は文字列となる
```

#演算子
```py

%     #剰余(あまり)   (例)9 %4  ...答えは1
!=    #not equal
<=   #左辺が右辺以下
```

#リスト操作
```py

test = []
test.append("23")     #"23"を要素として追加
test.append("df")     #"df"を要素として追加
k = len(test)         #テストの要素数を取得

test2 = [""]*6        #6個の""を持つリストを作成
```

#インスタンス(変数型判別)

```py

J = "String"
if isinstance(J,str) == True:
   print(J)
#  Jの型は文字(str)なので、Stringが出力される

```


#本日の日にち取得
```py

from datetime import datetime
t = datetime.now()    #年月日時間を一括取得
day = t.day           #日取得
month = t.month       #月取得
```
fadeIn( )メソッドを使用したら、モーダルがcssで指定した位置と違う箇所に出てくる時の解決法

jsファイルからモーダルを呼び出そうと以下のようにコードを書いていたが、モーダルをcssで中央に設定したものの、fadeInで呼び出すと左上に行ってしまう。


```stylesheet.css
.bg-modal{
  display:flex
  justify-content:center;
  align-items:center;
  display:none;
}
```
```script.js
$(function(){
  $('.signup').click(function(){
    $('.bg-modal').fadeIn();
  });
});
```

#原因

jqueryの.fadeIn( )メソッドでは、フェードイン時に`display:block;`が勝手についてしまう。
そのため、cssで`display:flex;`を指定していたのに反映されずに`display:block;`が適用されていたのだ。


# 解決した時のコード

```script.js
$(function(){
  $('.signup').click(function(){
    $('.bg-modal').fadeIn().css('display','flex');
  });
});

```


参考にしたのはこの記事！感謝していますm(_ _)m
https://twotone.me/web/895/
【Vue.js】Vue CLI UIが立ち上がらない時は

# はじめに

[Vue CLI UIが想像以上に便利だった話 - Qiita](https://qiita.com/isihigameKoudai/items/eee3eb6a435675fdfd73) を読んで、Vue CLIをバージョン3系に更新したのに合わせて、せっかくだから使ってみようと思ったら、エラーが出て全然立ち上がる気配無し。

公式のバグっぽいですが、単純な話だったので備忘録を。

# 環境

- macOS 10.13.5
- Node.js v9.4.0
- Vue CLI v3.0.0-rc.4

# 事象

```
$ vue ui
🚀  Starting GUI...
 ERROR  Error: Cannot find module 'read-pkg'
Error: Cannot find module 'read-pkg'
    at Function.Module._resolveFilename (module.js:555:15)
    at Function.Module._load (module.js:482:25)
    at Module.require (module.js:604:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/local/lib/node_modules/@vue/cli/node_modules/@vue/cli-ui/apollo-server/connectors/folders.js:5:17)
    at Module._compile (module.js:660:30)
    at Object.Module._extensions..js (module.js:671:10)
    at Module.load (module.js:573:32)
    at tryModuleLoad (module.js:513:12)
    at Function.Module._load (module.js:505:3)
```

なんてことは無い。依存パッケージ漏れ。

# 対処法

漏れているパッケージを追加します。

```
$ npm i -g read-pkg
+ read-pkg@4.0.1
added 16 packages from 14 contributors in 3.581s
```

改めて実行してみます。

```
$ vue ui
🚀  Starting GUI...
🌠  Ready on http://localhost:8000
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/159578/9744a91c-7c5d-95a1-50c4-8c8bcab365b0.png)

やったぜ。

# おわりに

Thrown error "cannot find module 'read-pkg'" #1855 - GitHub
https://github.com/vuejs/vue-cli/issues/1855

2018/07/15現在、Issueとして起票されていますね。公式で解消されるのを待ちましょう。
それまではこれで対策するしかないようです。
エクセル編集操作@python

シート編集(シート編集編)とシートからデータ取得編(シート読み込み編)の2章立て．個人的にデータ分析はPandas,エクセル自体の編集はopenpyxl,読み込むだけならxlrdが有用な気がする．


#**Excelシート編集編**
##1. Pandasを用いる
エクセルの書式にこだわらない場合はpandasモジュールを用いる．まずworkbookを作成or読み込みする．そのあとは，登録したworkbook変数名で様々な操作ができる．

##Workbook作成と読み込み
```py

import pandas as pd
import numpy as np

#Workbook作成
book1 = pd.ExcelWriter('example.xlsx')                    

#excel作成----------------------------------------------
#まずDataFrame作成
data = pd.DataFrame({'A'    : 1.0,
                     'Name' : pd.Categorical(['A','B']),
                     'Data' : np.array([2,3])
                     })

#DataFrameをexcelに転写し,保存
data.to_excel(book1,'sheet1')
book1.save()　　              #保存


#Workbook読込----------------------------------------
#excelを読み込み
data2 = pd.read_excel('example.xlsx','sheet1',dtype = {'A':float,'Data':float,'Name':str})
#dtypeでデータタイプを指定                       
```
これで作成されたエクセルは以下の様になる．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/267311/ee89ac4c-4a4c-431a-4fb6-cba89c017003.png)

##2. Openpyxlを用いる
エクセルの書式をなるべく残したい場合にOpenpyxlは便利。しかしセルの結合には対応していないようで(Openpyxl: ver2.6)、結合セルはこのパッケージで保存した後もとに戻ってしまう（結合が解除されてしまう）。Openpyxlを使う場合はセルの結合は避けたほうがいいように思う。

```py

import openpyxl
from openpyxl.worksheet.datavalidation import DataValidation   #セルのデータ入力規則を挿入する場合につかうモジュール

#まずWorkbookをロードする。
wb = openpyxl.load_workbook('C:/Users/...../Sample.xlsx')  #基本
wb = openpyxl.load_workbook('C:/Users/...../Sample.xlsx',data_only = True)
# 値だけを読み取るモードでWorkbookをロードする場合．
# この場合関数のあるセルを読み取ると，関数ではなく結果だけを読み取る

#シートを読み込む。カッコは[]を用いる
ws = wb['Sheet1']

#セル値を読み込む
cellA = ws.cell(24,144)
Kin = cellA.value
# wsというクラスにcellAと、cellAというクラスにvalueがある。
# これで実際にセル(24,144)内にある値にアクセスできる（この場合Kinに格納される）

#全セル値を取得
cells = ws.values
list_cells = list(cells)
# まずセルの全情報を取得し、そののちにリスト化している

#入力規則(dv1)を作成する
dv1 = DataValidation(type="list", formula1='A,B,C', allow_blank=True)
dv1.add(cellA)
ws.add_data_validation(dv1)
# まずdv1を作成し、それをセルに適応する。その後ワークシートにも適応する必要がある。

cellA.value = 'ABC'

#保存する。
wb.save('C:/Users/...../Sample2.xlsx')
# 元ファイルにセルの結合があると、次ファイルを開けたときにエラーとなり、セルの結合が分解されていた。
```



#**Excelシート読み込み編**
エクセルシートの中身を読み込むためのメモです．
import xlrdを用います．読み込むだけなら十分有用です．
##workbookを読み込む
```py

import xlrd
book1 = xlrd.open_workbook("")
```

##worksheetを読み込む
```py

sheet1 =book1.sheet_by_name("")
```

##sheet内セル(2,4)のデータを読み込む
```py

n1 = sheet1.cell_type(2,4)   #タイプを読み込む
n1 = sheet1.cell_value(2,4)  #値を読み込む
#読まれる値は，xlrdの場合セル3行目4列目(0から開始)となる．
#xlrdは、数式ではなくその結果を読み取る。
#セル内の式が"=14+15"なら29を読み取る
#結合セルの値を読むには、左上のセルを指定すればよい
```


**参照**
[Pandas Documents](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_excel.html)
[openpyxl](https://openpyxl.readthedocs.io/en/stable/tutorial.html#saving-to-a-file)
[Excel読み込み](https://www.python-izm.com/third_party/excel/openpyxl/openpyxl_read/)
[xlrdライブラリ](https://www.lifewithpython.com/2013/05/xlrd.html)
Rubyのインストール方法(Ubuntu編)

#はじめに
UbuntuにRuby(バージョン2.3.3)をインストールしてみました。
本記事は、その記録です。

#必要なもの
Ubuntu 18.04 LTSです。

#内容
Rubyのバージョン管理ツール「rbenv」を使ってRubyをインストールします。
合わせて、Rubyとrbenvのインストールと動作に必要な各種ソフトウェアもインストールします。

```
# Rubyのインストールに関連する各種ソフトウェアをインストール①
$ sudo apt-get install git gcc build-essential libreadline-dev zlib1g-dev

# Rubyのインストールに関連する各種ソフトウェアをインストール②
# (注)Ruby 2.4以上をインストールしたい場合、「libssl1.0-dev」ではなく「libssl-dev」をインストールすること
$ sudo apt-get install libssl1.0-dev

# rbenvをインストール
# → gitでプログラムを取得してパスを設定
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l

# ruby-buildをインストール
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

#Rubyをインストール
$ rbenv install 2.3.3
$ rbenv global 2.3.3
```

#感想
最初はlibssl-devを使用してRubyをインストールしようとしていたためエラーが発生しました。
Ruby2.4未満ではlibssl-devは使用できないのに気がつくのに結構時間がかかりました。
それ以外はそんなに引っかかる箇所はありませんでした。

rbenvは、Rubyのバージョン管理に必須のツールと聞いています。
まだその必要性は感じられていませんが、そのうち感じる日が来るのかなと思っています。

# 参考文献
[rbenv を使って ruby をインストールする(CentOS編)](https://qiita.com/inouet/items/478f4228dbbcd442bfe8)
[Ubuntu 18.04上においてruby-buildでruby 2.3.*をインストールする](https://arimasou16.com/blog/2018/04/30/00255)
Learning Rate調整の基本

# Learning Rate
Learning Rate(学習率)はハイパーパラメータの中で最も重要なものの一つ。

## 一般的な値
- 0.1
- 0.01
- 0.001
- 0.0001
- 0.00001
- 0.000001

初期値は0.01にしてみるのが基本。
## 調整方法
validation errorがより少なくなるように設定する。
validation errorの減少するスピードが遅ければ(①)learning rateを増やし、validation errorが増加してしまっているなら(②)learning rateを減らすなど。
![learning rate image](https://qiita-image-store.s3.amazonaws.com/0/271751/4c2bcb49-4247-aff0-b894-d4a64a596fa6.png)


## より高度な設定
効率的に学習をすすめるにはLearning Rateをepoch数に応じて減少させる。
[参考]横軸はepoch数
![learning rate image2](https://qiita-image-store.s3.amazonaws.com/0/271751/7edb3085-656c-600f-a039-8b05b449765e.png)


学習アルゴリズムを使う。
1. [TensorFlow - AdamOptimizer](https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer)
2. [TensorFlow - AdagradOptimizer](https://www.tensorflow.org/api_docs/python/tf/train/AdagradOptimizer)
3. [Tensorflow - GradientDescentOptimizer](https://www.tensorflow.org/api_docs/python/tf/train/GradientDescentOptimizer)
4. [TensorFlow - MomentumOptimizer](https://www.tensorflow.org/api_docs/python/tf/train/MomentumOptimizer)
OpenWeatherMap APIで天気情報を取得してMacの通知センターに表示する

[Cool.io](https://github.com/tarcieri/cool.io)::TimerWatcher、[OpenWeatherMap](https://openweathermap.org/) API、[terminal-notifier](https://github.com/julienXX/terminal-notifier)を使用して、指定した秒間隔で天気情報を取得し、Macの通知センターに表示するサンプルプログラムです。

<img width="368" alt="weather_watcher_notification.png" src="https://qiita-image-store.s3.amazonaws.com/0/54161/a760845b-9aa5-4f52-071a-e4a0ef3ab2f0.png">

# 準備

- OpenWeatherMapのアカウント登録(Freeプランあり)とAPIキー取得
    - 下記サンプル内の`YOUR_API_KEY`に設定
- `gem install cool.io`
- `gem install terminal-notifier`

# サンプル

```ruby:weather_watcher.rb
require 'net/http'
require 'uri'
require 'json'
require 'cool.io'
require 'terminal-notifier'

class WeatherWatcher < Coolio::TimerWatcher
  API_KEY = 'YOUR_API_KEY'
  CITY_NAME = 'Tokyo'
  COUNTRY_CODE = 'JP'
  INTERVAL_SEC = 300

  def initialize
    super(INTERVAL_SEC, true)
  end

  def on_timer
    weather = get_weather
    icon_id = weather['weather'][0]['icon']
    temperature = weather['main']['temp']
    description = weather['weather'][0]['description']
    notify(icon_id, temperature, description)
  end

  def get_weather
    uri = URI('http://api.openweathermap.org')
    uri.path = '/data/2.5/weather'
    params = { q: "#{CITY_NAME},#{COUNTRY_CODE}", units: 'metric', appid: API_KEY }
    uri.query = URI.encode_www_form(params)
    response = Net::HTTP.get(uri)
    JSON.parse(response)
  end

  def notify(icon, temperature, description)
    TerminalNotifier.notify(
      "#{CITY_NAME}, #{COUNTRY_CODE}",
      title: "#{temperature}℃, #{description}",
      contentImage: "http://openweathermap.org/img/w/#{icon}.png"
    )
  end
end

def run
  loop = Coolio::Loop.new
  timer = WeatherWatcher.new
  loop.attach(timer)
  loop.run
ensure
  timer.detach
end

run
```

# 参考文献

- [Cool.io と Ruby C拡張 と GVL とイベント駆動と](https://github.com/sonots/fluentd-scr/blob/master/05_coolio_cextension.md)
- [Call current weather data for one location](https://openweathermap.org/current#one)
【Vue.js】vue createがコケまくる時の対処法

# はじめに

Vue CLIに2系と3系があることを最近知り、自分の環境に入っていたのが2系だったので、3系を再インストールしました。
3系で改めてVue.jsのプロジェクトを作ってみようとしたら、エラーが出て一向にプロジェクトが作れない事象が発生しました。
その時の対処法を記しておきます。

# 環境

- macOS 10.13.5
- Node.js v9.4.0
- Vue CLI v3.0.0-rc.4

# 事象

```
$ vue create testproject


Vue CLI v3.0.0-rc.4
? Please pick a preset: default (babel, eslint)


Vue CLI v3.0.0-rc.4
⠋  Creating project in /Users/saken649/Documents/Projects/testproject/testproject.hasProjectGit /Users/saken649/Documents/Projects/testproject/testproject false
✨  Creating project in /Users/saken649/Documents/Projects/testproject/testproject.
🗃  Initializing git repository...
⚙  Installing CLI plugins. This might take a while...

npm ERR! Unexpected end of JSON input while parsing near '...1.4.0.tgz"},"engines"'

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/saken649/.npm/_logs/2018-07-15T08_21_44_120Z-debug.log
 ERROR  command failed: npm install --loglevel error --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/dist
```

`https://npm.taobao.org/dist` から `npm install` する時にエラーが出ている。
ということはバグっぽい気がしています。

# 対処法

リポジトリから取れないとなるとどうしよう。。。と思って調べてみたら、既に公式Issueで対策が上がっていました。
https://github.com/vuejs/vue-cli/issues/889#issuecomment-397225829

> I am using "vue-cli 3.0.0-rc.1", I solve the problems by setting the ~/.vuerc from "useTaobaoRegistry": true, to false.

ということでやってみます。

```
$ vi ~/.vuerc
```

ばっちり記述を発見。

```
{
  "useTaobaoRegistry": true
}
```

`true` なので `false` に書き換えて保存。

```
{
  "useTaobaoRegistry": false
}
```

改めて `vue create` してみましょう。

```
$ vue create testproject


Vue CLI v3.0.0-rc.4
? Please pick a preset: default (babel, eslint)


Vue CLI v3.0.0-rc.4
⠋  Creating project in /Users/saken649/Documents/Projects/testproject/testproject.hasProjectGit /Users/saken649/Documents/Projects/testproject/testproject false
✨  Creating project in /Users/saken649/Documents/Projects/testproject/testproject.
🗃  Initializing git repository...
⚙  Installing CLI plugins. This might take a while...


> fsevents@1.2.4 install /Users/saken649/Documents/Projects/testproject/testproject/node_modules/fsevents
> node install

[fsevents] Success: "/Users/saken649/Documents/Projects/testproject/testproject/node_modules/fsevents/lib/binding/Release/node-v59-darwin-x64/fse.node" is installed via remote

> yorkie@1.0.3 install /Users/saken649/Documents/Projects/testproject/testproject/node_modules/yorkie
> node bin/install.js

setting up Git hooks
done

added 1307 packages from 766 contributors and audited 12135 packages in 43.584s
found 0 vulnerabilities


🚀  Invoking generators...
📦  Installing additional dependencies...

added 1 package from 1 contributor and audited 12139 packages in 9.112s
found 0 vulnerabilities


⚓  Running completion hooks...

📄  Generating README.md...

🎉  Successfully created project testproject.
👉  Get started with the following commands:

 $ cd testproject
 $ npm run serve
```

大丈夫そうですね。

ついでに、ローカルサーバーの立ち上げ方も、 `npm run dev` ではなく `npm run serve` に変わってたんですね。
アップデートしてみて初めて知った。。

# 終わりに

今回原因になってた `https://npm.taobao.org/` ですが、どうやらnpmのミラーらしいです。
確かにアクセス出来なかったので、タイミング悪く落ちていたのかなんなのか。。。
今のところ、taobaoを切って困ってはいないので、この設定にしておいて良さそうです。
RSpec | context と example と all と each の違い

# 結論

- context と all は同じ
- example と each は同じ

(調べるまでallとcontextは別だと思いこんでいた)

# ヒント

[Relish](https://relishapp.com/rspec/rspec-core/v/3-7/docs/hooks/before-and-after-hooks)には「どちらでも好きな方を使えば良い」と書いてあるが、新しい方の記法 `context` / `example` に揃えておいた方が、分かりやすいし無難だろう。

しmockには `example` しか使えないようなので注意。

>WARNING: Mocks are only supported in before(:example).

# 動作確認のコード例

```rb
# https://relishapp.com/rspec/rspec-core/v/3-7/docs/hooks/before-and-after-hooks

RSpec.configure do |config|
  config.before :context do
    puts 'before context'
  end

  config.before :example do
    puts 'before example'
  end

  # Note: the :example and :context scopes are also available as :each and :all, respectively. Use whichever you prefer.

  # Same as context
  config.before :all do
    puts 'before all'
  end

  # Same as example
  config.before :each do
    puts 'before each'
  end
end

RSpec.describe do
  subject { true } 
 
  describe do
    it { is_expected.to be true }
    it { is_expected.to be true }
  end

  describe do
    it { is_expected.to be true }
    it { is_expected.to be true }
  end
end
```

# 実行例

```bash
$ bundle exec rspec -fd rspec/before_hooks.rb

before context
before all

before example
before each
    should equal true
before example
before each
    should equal true

before example
before each
    should equal true
before example
before each
    should equal true

Finished in 0.00986 seconds (files took 0.29761 seconds to load)
4 examples, 0 failures
```


# Gist

- [In RSpec before and after hooks, :context is same :all, :example is same as :each](https://gist.github.com/YumaInaura/87bcb2aa79ee0eb9ba2a2cf048025ab8)

# 参考

- [`before` and `after` hooks - Hooks - RSpec Core - RSpec - Relish](https://relishapp.com/rspec/rspec-core/v/3-7/docs/hooks/before-and-after-hooks)

# 環境

- ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
- rspec-core 3.7.1








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
AI(Openpose)でバッティングフォーム解析

# はじめに
[画像からの人物検出](https://qiita.com/nanako_ut/items/13849bd4cc087139a40c)や、[画像から姿勢推定・骨格検出](https://qiita.com/nanako_ut/items/974466acf065b95f984a)をいくつか試してきたので、そろそろ実際のデータでの解析をやってみたくなりました。

そこで、2018年5月頃から、中学生のバッティングフォーム解析を始めました。


# 環境
- 撮影カメラ　自分のスマホ（HTC U11）
- 解析環境
    - windows10 home（64bit/CPU）
    - Google Colaboratory（python3/CPU）
- ライブラリ　[DeNA/Chainer_Realtime_Multi-Person_Pose_Estimation](
https://github.com/DeNA/Chainer_Realtime_Multi-Person_Pose_Estimation/blob/master/README_JP.md)

# フォーム解析
## 解析対象
練習におじゃまして、トスバッティングの様子を横から撮影させてもらいました（各選手1分間ずつくらい）

## 解析結果
選手の動画は使えないので、下記の説明用データは自分（野球素人）のバッティング画像とデータです。。。（お見苦しいですが、、、ご容赦を）

### OpenPoseでの骨格推定結果
- パターン①

![1.gif](https://qiita-image-store.s3.amazonaws.com/0/170139/1a14a743-eeba-d28b-2042-6020f3aaec3b.gif)

- パターン②

（パターン①よりも体重移動をしてスイングしているイメージ。あくまで本人イメージ。。。素人なのでゴメンナサイ。。。）

![2.gif](https://qiita-image-store.s3.amazonaws.com/0/170139/5d029cf0-3a88-aa84-c107-a61e9df5fc54.gif)

### 数値解析結果

バッティングの開始・終了までの目・肩・腰・膝・足首の位置の変化をプロット

![image.png](https://qiita-image-store.s3.amazonaws.com/0/170139/2c4fd34f-9772-3107-1351-5a8afeda47ee.png)

位置の変化から、

- パターン①の方が縦の移動量が少ない
- パターン②の方が横の移動量が大きい（パターン②は体重移動してスイングしたイメージだったので当然ね）

ということは言えそう。


## 考察
数値解析結果から、以下のことが見れそう。

- 体重移動せずに、その場で回転して打つ傾向にあるか
- 体重移動して打つ傾向にあるか
- 各選手毎の、縦方向の移動量、横方向の移動量を比較することで、「移動量」という切り口から、選手の特徴は見出せそう

- 競技者から見れば、経験値や感覚として分かっていることで、データを見るまでもないことかもしれないが...まぁ感覚を数値化することに意義がある...かも...

# 解析方法
①動画⇒画像⇒②骨格検出⇒③分析⇒④動画へ戻すという、かなり遠回りなやり方をしました。
動画からのリアルタイムフォーム解析はしていません。（GPU環境がなかったので、、、）

１． 動画を画像に分割（OpenCV）
２． 分割した画像を1画像づつ骨格検出＆座標をCSV出力（[DeNA/Chainer_Realtime_Multi-Person_Pose_Estimation](
https://github.com/DeNA/Chainer_Realtime_Multi-Person_Pose_Estimation/blob/master/README_JP.md)）
３． 座標CSV読込、結果をプロット（Pandas）
４． 解析結果の画像を動画へ（OpenShot）

※.50秒の動画で約1500枚の画像に（スマホのカメラが30FPSだったようです）。約1500枚の画像の骨格検出にwindows端末で6時間、Colaboratoryで4時間かかりました。。。
（夜、寝る前にバッチ仕込んで、朝、出社前にまたバッチ仕込んで、、とちまちまと骨格検出。。。GPUだったら速いのかなぁ（遠い目…））
    
# 得られたこと
## データを見る切り口の大切さ
- 数字さえ出してみれば、その数字から何かが見えてくるかもしれない、という期待をもって望んだものの、、数字を目の前にして愕然。数字をこねくり回そうとしても、考えうる可能性が多すぎで何もできない、という闇にはまる。。。
- 何らかしらの切り口（今回は「移動量」）を持って、数字を見ていくことが重要だなと。

## 判断基準の大切さ
- 「移動量」という特徴が出たとしても「だから？」という結果に。移動量＝ブレと解釈していいのか、移動量が多いと良いのか、悪いのか、移動量から何が言えるのか、、、
数字を判断する何かしらの基準がないと、解析結果はただの結果でしかなく、活用していけない、ということも実感。。。

## コミュニケーションの大切さ
- 競技未経験の自分では、「判断基準」を自分の経験として持ち合わせていない。。。
- ならば「判断基準」を持ち合わせている人（監督さん、コーチ）に教えてもらうしかない
- あくまで、解析は競技力向上が目的なので、監督さん、コーチに有用なものであってほしい・・・。どういう解析が有効か相談させてもらうしかない・・・。
- 「データ解析」は、自分が思っていた以上に競技への理解や、関係者とのコミュニケーションが必要だと実感。

## おまけ
- 統計学の知識は全くないけれど、今のところは足し算・引き算・平均・三角関数の範囲で進められそう

# 今後やりたいこと

- ピッチングの解析にも挑戦してみたい
- 継続的に（最低でも１年くらいは）選手のフォームの変化を追っていきたい
- 小学生や、高校生のデータもとってみたい。年齢別に特徴が見られたりするのだろうか
- 競技力向上のみならず、ケガとの関連（こういう特徴がある選手はケガしやすい）等にも活用できるといいな
- 学生の選手に対して、プロの〇〇選手と特徴が似ている、といった分類ができるようにしたい（プロのデータは手に入らないだろうけれど。。。）
- GPU環境ほしい。。。

夢物語は膨らむばかり。。。

**最後に、、、プロの方、データお待ちしてます（笑）**

# 2018/7/23 追記

Colaboratory 約1500枚の画像の骨格検出

- CPU : 4時間
- GPU : 15分弱

でした。