OmniAICreator/Qiita-1.07M huggingface dataset:
Laravel 5.3でデバッグバーを使用する方法


* [barryvdh/laravel-debugbar](https://github.com/barryvdh/laravel-debugbar)というパッケージがあるのでこれを使用する。

## barryvdh/laravel-debugbarをインストール

* compose

``` console
cd your/laravel/project/path
composer require barryvdh/laravel-debugbar
```

## config値を設定
### config/app.php

* config/app.phpの'debug'項目値をtrueに設定する。
* また、providersとaliasesに下記を追加
	
	``` config/app.php
		...
		
		/*
		|--------------------------------------------------------------------------
		| Application Debug Mode
		|--------------------------------------------------------------------------
		|
		| When your application is in debug mode, detailed error messages with
		| stack traces will be shown on every error that occurs within your
		| application. If disabled, a simple generic error page is shown.
		|
		*/
	
		'debug'           => env('APP_DEBUG', false),
		
		...
	
		/*
		|--------------------------------------------------------------------------
		| Autoloaded Service Providers
		|--------------------------------------------------------------------------
		|
		| The service providers listed here will be automatically loaded on the
		| request to your application. Feel free to add your own services to
		| this array to grant expanded functionality to your applications.
		|
		*/
	
		'providers'       => [		...	
			//barryvdh/laravel-debugbar
			Barryvdh\Debugbar\ServiceProvider::class,
		],
		
		...
		
		
		/*
		|--------------------------------------------------------------------------
		| Class Aliases
		|--------------------------------------------------------------------------
		|
		| This array of class aliases will be registered when this application
		| is started. However, feel free to register as many as you wish as
		| the aliases are "lazy" loaded so they don't hinder performance.
		|
		*/
	
		'aliases'         => [
			...
			//barryvdh/laravel-debugbar
			'Debugbar' => Barryvdh\Debugbar\Facade::class,
		],
		
		...
	```

* 上記のようになっているので、.env.xxxxで設定。

	``` .env.xxxxx
	APP_DEBUG=true
	```

### config/debugbar.php

* 下記のコマンドを叩くと、`config/debugbar.php` が作成される。

	``` console 
	cd your/laravel/project/path
	php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"
	```



## 結果

|before|after|
|---|---|
|![debugbar-before.png](https://qiita-image-store.s3.amazonaws.com/0/102123/6518f672-f23c-4d99-7f9d-1c2568cd267c.png "debugbar-before.png")|![debugbar-after.png](https://qiita-image-store.s3.amazonaws.com/0/102123/bd848467-0697-e011-fb13-71380a8f444d.png "debugbar-after.png")
|


* デバッグバーが表示されるようになった！
アジャイル開発時におけるプロジェクトの進め方（その2）

# アジャイル開発におけるプロジェクトの進め方
アジャイル開発において、色々悪い意味で誤解をしている方々が沢山いるので、
アジャイル開発をした事が無い方々の指針になればと思い書いております。

その1については下記を参照の事
[アジャイル開発時におけるプロジェクトの進め方（その1）](http://qiita.com/sinaku-developer/items/bd74bde161b640b75b70)

## 朝会について（デイリースクラム）

朝会についてです。
毎朝眠い目をこすって会社に行って、朝会をこなすのが苦痛で仕方がない方々もいると思います。

朝会ってそもそも何のために必要なの？
顔を突き合わせてやる必要あるの？
なくせないの？

っと色々疑問もあると思いますが、結論からいうと
**個人的には無くす事は可能だと思います。**
大事な事なので強調しました。

そもそも日本人においてよくあるのが、物事の本質を見失って、
ルールだから守るという、目的を見失い、形骸化した物事に縛られる事が多々あります。

朝会を無くす為には、朝会の目的を正しく理解する必要性があります。

世間一般に言われている朝会の目的は以下のような物があると思います。

- 作業進捗の確認
- 作業予定の確認
- 問題点の確認

さて・・・よくある朝会での報告内容ですが、この報告内容について、どのように対処しますか？

よくあるパターンが、作業進捗の確認はそのまま終わり、作業予定は、各個人頑張れぇー
問題点については、関係者で話して解決して下さい。

こんな感じだと思います。

**はっきり言って、これだと無意味で、紙の報告書と同じです。**

アジャイルではチームで開発を進めていく事が何より重要です。

- 各個人の作業はチームの作業。
- 各個人の作業予定はチームの作業予定
- 各個人の問題点はチームの問題点

この認識がない限り、朝会なんぞ顔つき合わせてやっても無意味です。

逆に、これらの事をチームの作業・予定・問題と捉える事が出来るのであれば、
朝会じゃなくても良いのです。

これをチームとして捉えるというのはどういうことでしょうか？

一番わかり易い問題点で例をあげます。

A〜Dさんが同じチームで働いている際に、
朝会で、Aさんの部分に問題がある場合に、問題点に関係するなら、当然その他の関係する人間が、問題点の解決にあたるのは当然ですが、万が一関係しなくても、
自分なら解決出来る問題であれば、積極的に、問題点の解消に参加出来る状態がチームとして問題点を捉えるという事です。

ですので、上のようにAさんの作業に問題があり、B〜Dさんにとっては関係ない状態でも、
**自分なら解決出来る！！**
こう思ったら、積極的にチームの問題点として解決に向かえる状態である事こそ望ましいのです。

そして、朝会の真の目的は、声を出して、チーム内の人間関係を円滑にし、
お互いがお互いを思いやり、チームとして健全な状態を保ち、恐れることなく、
互いにプロジェクトの成功の為に、相互に助け合う環境（そういった空気ともいえる）を作り出す事こそが重要です。

逆に朝からピリピリ個人攻撃はなくとも、どんよりしたデイリースクラムなんぞ、
紙の報告書以下の価値しかありません。

それなのに、朝会とは朝会とはとか寝言をぶっこいても意味が無いのです。

逆に、いつでも困っているときに、相互に助け合い、お互いの仕事に対して尊敬しあい、
協調する事がチーム全体としてできているのであれば、
朝会などという事はしなくてもいいでしょう。

それができている時点で、すでに目的とする、チームとしてのタスクの取り組みと問題点の取り組みができているはずですから。
あとはいかにしてそれを持続させるかです。

それは各チーム毎によって、手法は千差万別でしょう。

朝会が合わない人間どうしが朝会を無理にしても、チーム内の空気が悪くなるだけです。

朝会が必要なんじゃない。
チームとして働くための空気を作り、問題点等のチームとして共有し、チームとしてプロジェクトに望める体制を作る事こそが目的です！！

これを忘れず、形式化した朝会にならないように頑張ってください。

ちなみに私はチャットとSkypeでいつでも話せりゃいいんじゃないの派です。

## 朝会の時間について

よくアジャイルの本等を読むと、朝会の時間は変えたら駄目ですよって事が書かれていると思います。

そもそも、なんで駄目なんでしょうか？
朝会を毎回同じ時間に繰り返す事に何の意味があるのでしょうか？

これは、開発に良いリズムを作る為の習慣です。

目的は、仕事をする上で、チームとしてのリズムを整えて、今から君も僕もチームのメンバーだ！！

とういう認識を持つ為の、ある種の儀式です。

ですので、朝会にこだわるい必要は無いのです。
昼会でも夕会でも、自分達のチームとして最適なリズムの作り方を試してみれば良いのです。

ただし、1度これだと決めたら、そこから同じように繰り返す事が求められます。

誤解の無いように言っておきますが、開発にいいリズムが作れれば良いのです。

別に朝集まって、チームメンバーがギニュー特戦隊ばりのポージングを決めて、
奇声を上げながら写真を取るのが、一番いいリズムで開発が出来るならそれで良いのです。

朝だからやるのではないのです。

開発にいいリズムを刻むために、チーム全体のパフォーマンスを上げる為に行うのです。

アジャイルにしろウォーターフォールにしろ、朝会にしろ、あくまでも開発を行う為の手法です。

開発を行う為に守るべき事は、手法ではなく、チーム全員のパフォーマンスを常に最高に保つことが目的です。

ウォーターフォールでは、スケジュールが聖典になりましたが、
アジャイルで朝会が聖典になり、目的が見失われる事が無い事を祈ります。
Quantum Chemistry - Time Dependence

関連 http://qiita.com/7of9/items/d3a1799928734375f34f

CG分野で使われるSpherical Harmonics。自分の数値シミュレーション計算に用いたいと思い調べると、量子化学の講義にたどり着く。

短く分かりやすそうな159本のビデオを少しずつ消化中。

Quantum Chemistry - Time Dependence
https://www.youtube.com/watch?v=GI54KUjUGqc&index=37&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh

- 時間依存を見る
- 緑の式
   - プサイn
     - rはwavefunctionの空間のdimension (x,y,zなど)
     - tは時間
     - プサイnはハミルトンオペレータの固有関数である
- 紫の式
   - 緑の式を位置rの関数と時間tの関数で表したもの
   - [このビデオ](https://www.youtube.com/watch?v=XjIBIc-Ldok&index=28&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh)の右下オレンジの式
   - (補足) Enのnは添え字のnの意味だろう (nの積でない)
- ピンクの式
   - プサイnの絶対値の二乗
   - それは「プサイn」と「プサイn*(プサイnの複素共役)」の積
- 黄色の式
   - ピンクの式からプサイnとプサイn*をくくりだし
   - expの部分をくくりだした
   - expの部分はプラスマイナスで消えるので水色の式となる
- 水色の式
   - expの0乗は1となり時間tの関数が消える
- オンレジの式
   - ピンクの式と水色の式からこの等式となる
   - 時間tの関数が消えているので「恒常的(stationary states)」である
- 緑の式
   - プサイをプサイnで表したもの
   - 紫の式について総和を取った
- ピンクの式
   - プサイの絶対値の二乗の式を展開した
   - 緑の式と「緑の式の複素共役」の積
   - 総和のインデックスはmとnを使っている
- 右上の黄色の式
   - 左下のピンクの式を整理した
   - 係数、プサイ、expの乗数などにm,nの値が入っている
- 水色の式
   - 黄色の式からm=nの場合の式を第1項に
   - それ以外(m not equal n)の場合の式を第2項にした
   - 紫にてΔEmnをEm - Enと定義し、それを式変形に使った
- オレンジの部分
   - 紫の式にてcos(kt)をexpで表した式がある
   - それを使ってexpの式をcosの式に変形する
   - 2 * 2 cos()で4cos()となる
   - 時間tによる部分は「時間的に振動している」
   - それはcos()の関数であった
   - 振動の周期はヘイチバーに依存し
   - かつΔEmn (mとnの状態のエネルギー差)にも依存する
- 紫
   - ΔEmnが大きいとcos()の内部の値が大きくなるので
   - 振動が速くなる
Quantum Chemistry - Commuting Operators

関連 http://qiita.com/7of9/items/d3a1799928734375f34f

CG分野で使われるSpherical Harmonics。自分の数値シミュレーション計算に用いたいと思い調べると、量子化学の講義にたどり着く。

短く分かりやすそうな159本のビデオを少しずつ消化中。

Quantum Chemistry - Commuting Operators
https://www.youtube.com/watch?v=jw9BHoYsu9k&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh&index=36

- 白
  - オペレータAとオペレータBが同じ`{|n>}`を持つ時、commutatorsは0となる
      - commutatorの定義は[このビデオ](https://www.youtube.com/watch?v=aG_L3gym0uU&index=29&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh)の左上ピンクの式
      - [オペレータA, オペレータB] = オペレータAオペレータB - オペレータBオペレータA
- 緑の式
  - 固有値、固有関数の式
  - [このビデオ](https://www.youtube.com/watch?v=GHk5C7PNFOc&index=32&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh)の左下オレンジの式
- 紫の式
  - 関数fのket表記をc_nとnのket表記で表した式
  - [このビデオ](https://www.youtube.com/watch?v=PHus6stbje0&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh&index=33)の左上緑の式
- ピンクの式
  - `|f>`にcommutator`[A,B]`が作用したものを見る
  - それはあらゆるnに関しての総和となる (2つ目の形)
  - commutatorの定義より`AB - BA`と表記される (3つ目の形)
- 黄色の式
  - ピンクの式にて、積を展開して得られる
- 水色の式
  - 黄色の式から
  - オペレータBと`|n>`を固有関数の式で変形しb_nがつき
  - オペレータAと`|n>`を固有関数の式で変形しa_nがついた式
- オレンジの式
  - 水色の式から
  - オペレータAと`|n>`を固有関数の式で変形しa_nがつき
  - オペレータBと`|n>`を固有関数の式で変形しb_nがついた式
- 紫の式
  - 係数a_nとb_nをくくりだした
  - その結果、係数の部分が0となる
- ピンクの式
  - 紫の式で係数が0になるので、総和の結果も0となる
- 黄色
  - つまりcommutator`[A,B]`が0となる
  - 意味としてはAとBはお互いにcommuteする
  - 左上の緑を参照して
     - AとBが同じ`|n>`を持つ時、お互いにcommuteして
     - commutatorsが0となる
- 右上緑の式
  - momentumとpositionのオペレータはお互いにcommuteせず
  - commutatorは0にはならない
  - つまりは「momentumとpositionは異なる固有関数を持つ」ことを意味する
  - その結果として、2つの値を「正確に」「同時に」測定はできない
access_logの解析にvisitorsを使ってみた

## 公式

* [Visitors - fast web log analyzer](http://hping.org/visitors/index_jp.php)
* [Visitorsの使い方（Apacheのアクセスログ解析） – No:170 – Linuxで自宅サーバ構築（新森からの雑記）](http://www.uetyi.com/server-const/linux-server/entry-170.html)

## 使い方

makeするとvisitorsコマンドが生成される。

access_logを読み込んでメール送信例

```
cat access_log | visitors -f log.html -
uuencode log.html log.html | mail -s "visitors" user@myaddr.com
```

html出力され、こんな感じのグラフが見れる。

![aaa.png](https://qiita-image-store.s3.amazonaws.com/0/25728/79600616-ff2f-a310-82d9-e5859b7cc36b.png)

```bash:複数ログを読み込む場合
( \
cat access_log \
zcat access_log.?.gz \
) \
| ./visitors -f log.html -
```

## 文字化け対策

```bash:htmlをsjisに変換してメール送信
#!/bin/sh
set -eu

( \
cat access_log \
zcat access_log.?.gz \
) \
| ./visitors -A -m 30 -f log.html -

nkf -s --overwrite log.html
sed -i -e 's@<head>@<head><meta http-equiv="content-type" content="text/html;charset=shift_jis">@' log.html

uuencode log.html log.html | mail -s "visitors" user@myaddr.com
```
技術英語 > ..., use returns [judiciously] -- only when they improve readability.

@ Code Complete (No. 13032 / 36077)

関数内のreturnについて。

> ..., use returns <font color=red>judiciously</font> -- only when they improve readability.

http://ejje.weblio.jp/content/judiciously
> ((かたい))思慮深く，賢明に

「よく考えて」returnを使おう、とのこと。
指定した複数のclassを持つ要素だけ取得する

#そうだったんだ

```js:指定した複数のclassを持つ要素だけ取得する

//セレクタの間に半角スペースを入れない
$('.foo.bar').addClass('hoge');

```

#出典
http://kachibito.net/snippets/multi-class
[Swift2.2]Code Sign error: Automatic provisioning profile selection unavailable... が出た時の対処

Swift2.2
プロジェクトを複製して、各ファイル各ディレクトリを整理していたら

Check dependencies
Code Sign error: Automatic provisioning profile selection unavailable: A bundle identifier is required for automatic provisioning profile selection. Either enter a bundle identifier in the Info.plist, or select a provisioning profile to use in the build settings.

なるエラーが出た時の解決策、自分用にメモ。

ProjectNavigator>Targets>BuildSettings>ProductBundleIdentifier

にパッケージ名を入力。
info.plistの場所を変えたりするとここが勝手に消えたり更新されたりするのだろうか・・・
メモ　PHPでシェルスクリプトを動かす

PHPでシェルシェルスクリプトを動かす時のメモ

環境　ubuntu14.04
      php5.6
      apache2.4


PHPでシェルスクリプトたたくときはshell_exec("sh ***.sh")でいいのだけどうまく
いかなかった。（***.shの中はFFMPEGの操作）

/var/log/apache2/error.logを見てみると、シェルスクリプトを開けないというエラーが
出ていた。
そこで、シェルスクリプト、おいてあるディレクトリのパーミッションを７５５に。

そうすると今度はFFMPEGのPermission deniedが、さらにffmpegの実行ファイル、おいてある
ディレクトリのパーミッションを７５５.
ファイルの保存先のディレクトリを７７７にしたらうまく動いた。


※できたファイルを何度も上書きしたかったので、、シェルスクリプトの先頭に
umask 0000をつけて、以降出来上がるファイルのパーミッションを666にした。
（666-000＝666だそうです。めんどくさいなぁ）

shell_execだと、FFMPEGの処理が終わるまで待たされる。。

バックグラウンドで動かすにはsystem関数を使ってさらに出力をリダイレクトする必要が
あるみたいで下記のようにしてみたら処理待ちをしなくなった

system("sh ****.sh > /dev/null &")
Firefox 49 と -webkit-text-stroke??

# Firefox 49 と `-webkit-text-stroke` ??

**https://jsfiddle.net/e60Lwsw8/6/**

> ##### Firefox 49 で表示 :arrow_down:
>
> [![2016-09-23-023902_1227x598_scrot.png](https://qiita-image-store.s3.amazonaws.com/0/70467/59006449-1c7e-ccd1-2e7a-7bf161e54d30.png)](https://jsfiddle.net/e60Lwsw8/6/)

Firefox 49 (厳密には 48) から、上記のように縁取りCSSが使えるようになったのですが、

- **Firefox なのに `-moz` ベンダープレフィックスが効かない!!**
- **Firefox なのに `-webkit` ベンダープレフィックスが効いてる!???**

という、コトの流れを知らないと理解しがたい現象が起きます。

## Firefox 49 の `-webkit` ベンダープレフィックスサポート

つい先日アップデートされた Firefox 49 から、**Web ページの互換性向上のため** に [`-webkit` ベンダープレフィックスのつく CSS プロパティをサポートするように](https://developer.mozilla.org/ja/Firefox/Releases/49#Compatibility) なりました。

これらのサポートは、Firefox 48 の時点で [`about:config` から `layout.css.prefixes.webkit`](about:config?filter=layout.css.prefixes.webkit) で切り替えられる (default = false) 機能でしたが、49から true がデフォルトになった形です。

### サポートするプロパティ

https://developer.mozilla.org/ja/Firefox/Releases/49#Compatibility

詳細は上記サイトに譲りますが、たいがいのプロパティは Firefox で実装済み（もしくは `-moz` ベンダープレフィックスつきで実装済み）のプロパティに紐付けられ、それらへのエイリアスのような扱いになっています。

一方で、Firefox の既存機能に紐付かないプロパティも存在します。それが `text-stroke` 系プロパティのサポートです。

## `text-stroke` プロパティ

`text-stroke` (`text-stroke-*`) プロパティによる文字の縁取りは、WebKit (Blink) では、`-webkit` ベンダープレフィックス付きですが、かなり昔から ([caniuse.com](http://caniuse.com/#search=text-stroke) によれば Chrome 4 から) サポートしてます。

> ```css
h1 {
  -webkit-text-stroke: 1px red;
}
```
> 
> ##### Chrome で表示 :arrow_down:
> ![stroke.png](https://qiita-image-store.s3.amazonaws.com/0/70467/205ab850-2a37-99ee-9688-57587ca75e31.png)

iOS / Android (3以外) でも普通に使えるプロパティなので、モバイルデバイス向けのページ等で使っている方もいるのではないかと。

一方、標準化は進んでないようで、*Chrome だろうと* ベンダープレフィックスなしでは表示できません。

>```css
h1 {
  text-stroke: 1px red; /* ベンダープレフィックスなし */
}
```
>
> ##### Chrome で表示 :arrow_down:
> ![stroke-noprefix.png](https://qiita-image-store.s3.amazonaws.com/0/70467/16ecec7e-77ca-f8eb-f84d-917b45fcce36.png)

それを裏付けるかのように、IE (Edge) / Firefox では、一貫してこのプロパティをサポートしていませんでした。
...先日までは。 :smirk: 

Firefox 49 は、本来 Firefox に無かった機能である `text-stroke` を、 WebKit との互換性向上という目的で追加した結果、*『Firefox なのに `-webkit` しか効かない』* というフシギな状態ができるワケですね。

### :warning: サポートはあくまで "互換性向上" 

Firefox の縁取りサポートで、CSSの表現力が高まる...と歓迎したいところですが、[Mozilla の blog でも言及されている通り、](https://www.mozilla.jp/blog/entry/10559/) 縁取りが 正式に Firefox の機能になったわけではありません。

実際、`about:config` でカンタンに切り替えられてしまう機能なので、**あくまで WebKit との互換性向上のためのサポート** と捉えましょう。Firefox で `-webkit` サポートを見越した縁取りCSSを書かないように!! :smiling_imp:

---

:kissing: .o( コレが標準化の起爆剤となって、ベンダープレフィックスなしの `text-stroke` プロパティになってくれるといいんですけどね... )
gzからunixODBCとMySQL Connector/ODBCをインストール

# はじめに
業務でインターネットから隔離されたサーバーの環境構築をする際、gzファイルからmakeしてインストールする必要があったので、忘れないようにメモ。

## 前提
インストール先のOSは下記のとおり。

+ RedHat Enterprise Linux 6 (x86, 64-bit)

インストールするソフトウェアは下記2つ。

+ [unixODBC-2.3.4](http://www.unixodbc.org/)
+ [MySQL Connector/ODBC 5.3.6](http://dev.mysql.com/downloads/connector/odbc/)

# unixODBCのインストール
## ダウンロード
下記サイトにアクセスして`unixODBC-2.3.4.tar.gz`をダウンロードする。
[http://www.unixodbc.org/](http://www.unixodbc.org/)

## インストール
makeするために、一旦`/usr/share/doc`に展開する。

```bash
cd /usr/share/doc
tar xvzf unixODBC-2.3.4.tar.gz
```

展開先へ移動して、make⇒インストール。

```bash
cd /usr/share/doc/unixODBC-2.3.4
./configure
make
make install
```

デフォルトのインストール先は`/usr/local`になっているので注意。
変更したい場合は、`./configure --prefix=/usr/local/unixODBC`とかで設定する。

いきなり`make install`するのが怖い場合は`make -n install`とすると、実際にインストールはせず、インストール時の出力内容を確認できる。

# MySQL Connector/ODBCのインストール
## ダウンロード
下記サイトにアクセスする。
[http://dev.mysql.com/downloads/connector/odbc/](http://dev.mysql.com/downloads/connector/odbc/)

「Select Platform：」で「RedHat Enterprise Linux / Oracle Linux」を選択する。

下記のファイルをダウンロードする。
Red Hat Enterprise Linux 6 / Oracle Linux 6 (x86, 64-bit)
Compressed TAR Archive
(mysql-connector-odbc-5.3.6-linux-el6-x86-64bit.tar.gz)

## インストール⇒問題発生
下記ドキュメントに従ってインストールを実施する。
[4.2.2 Installing Connector/ODBC from a Binary Tarball Distribution](http://dev.mysql.com/doc/connector-odbc/en/connector-odbc-installation-binary-unix-tarball.html)

まずは展開する。

```bash
tar xvzf mysql-connector-odbc-5.3.6-linux-el6-x86-64bit.tar.gz
```

展開の結果、`bin`と`lib`のディレクトリが生成されるので、必要なファイルをコピーする。

```bash
cp bin/* /usr/local/bin
cp lib/* /usr/local/lib
```

インストーラを実行して、Unicodeのドライバーを導入する。（ANSIのドライバーもあるらしいが、公式のドキュメントに譲る）

```bash
myodbc-installer -a -d -n "MySQL ODBC 5.3 Driver" -t "Driver=/usr/local/lib/libmyodbc5w.so"
```

**【問題発生】**
ここでエラーが出た。エラー内容は下記のとおり。

```
（前略）: error while loading shared libraries: ****.so: cannot open shared object file: No such file or directory
```

## 原因調査
下記記事によると、どうやら共有ライブラリが見つからないらしい。
[動的ライブラリ・共有ライブラリのリンクミスへの対応](http://next49.hatenadiary.jp/entry/20120215/p1)

`ldd myodbc-installer`で足りないライブラリを確認してみると、下記2つのライブラリが見つからない。

+ libodbc.so.2
+ libodbcinst.so.2

もしやと思い、unixODBCのインストールとともに導入された`/usr/local/lib`を確認すると、無事発見できた。

## パスを通して、再度インストール
先ほどのディレクトリにパスを通して、再度`mysql-installer`を実行する。

```bash
LD_LIBRARY_PATH=/usr/local/lib; export LD_LIBRARY_PATH
myodbc-installer -a -d -n "MySQL ODBC 5.3 Driver" -t "Driver=/usr/local/lib/libmyodbc5w.so"
```
公式ドキュメントにのっとり、導入されたことを確認して完了。

```bash
myodbc-installer -d -l
```
作業手順書に記載すべき項目のメモ


* 作業目的
* 作業体制 (作業担当範囲、連絡体制、トラブル発生時の対応、事前・事後作業など)
* メタ情報 (手順作成者、検証者、作業実施者、確認者、承認者、日付)
* 作業実施前のチェックリスト(作業実施条件、事前準備の確認など)
* 作業作業後のチェックリスト(作業終了条件、事後作業の確認など)
* 作業リスク
* 作業時間
* 作業フロー
* 作業手順
* 切り戻し手順(失敗時に元に戻す手順)
* 作業対象ノード
vim-plugでカラースキームのインストール

vimのプラグインマネージャ[vim-plug](https://github.com/junegunn/vim-plug)を使い始めた。vim-plugでカラースキームをインストール後、`~/.vim/colors`に配置するには、__post-update hook__を利用する。
[deep-space](https://github.com/tyrannicaltoucan/vim-deep-space)をインストールする場合を例にとってみよう。
まず`~/.vim/colors`ディレクトリと`~/.vim/plugged`ディレクトリがなければ作っておく。
`.vimrc`に

```vim

...
set t_Co=256
set background=dark
colorscheme deep-space

...

call plug#begin('~/.vim/plugged')
...
Plug 'tyrannicaltoucan/vim-deep-space', {'do': 'cp colors/* ~/.vim/colors/'}
...
call plug#end()

...

```

と記述する。`do`オプションが処理の本体。`:PlugInstall`コマンドでdeep-spaceのインストール後、`deep-space/colors/deep-space.vim`を`~/.vim/colors`下に配置してくれる。
`:PlugInstall` もしくは `:PlugUpdate` でプラグインの元レポジトリからのコードの取得が行われなかったとき（すでにインストールされていたりバージョンの更新がなかったとき）はpost-update hookを行われないようだ。
うまくいくと

```

...

- Finishing ... Done!
- Post-update hook for vim-deep-space ... OK 

...

```
と表示され確認できる。
OSX ServerにLets' EncryptのSSL証明書を適用したメモ

OSX ServerのSSL証明書はServer.appからGUIで設定するようになっているので、cert-bot-autoコマンドで手動作成して手作業で適用してみた。実際にはhttpd.confとか辿って実ファイルの場所を調べ、certbot-autoが書き出す証明書からシンボリックリンクを貼るとかすればcron更新とかも可能かも知れない。有効期間が3ヶ月しかないので、そのうち自動化を考える。

準備は[こちら](https://webtatan.com/blog/webcreate/letsencrypt-create)を参考にさせてもらった。まずコマンドツールのインストール。
```
$ git clone https://github.com/certbot/certbot
```
今回はadminのホームに作成。そのディレクトリに入って初回起動。

```
cd certbot
sudo ./certbot-auto

```
home-brewで必要なツールがドバドバとインストールされる。ちょっと後悔。サーバー機以外でやればよかった...
終わったら、
```
./certbot-auto certonly -manual -d hogehoge.com --debug
```
で証明書取得。（Macは不安定なので--debugオプションつけろよって言われた）
上記ページと違ってるのは、自分でサイト所有証明のダミーファイルを置かなくても、ツールの画面上でWebルートフォルダを指定すれば全部自動でやってくれるようになってた点。

更新時の出力メッセージをコピペしとく。

```
- Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/hogehgoe.com/fullchain.pem. Your cert will
   expire on 2016-12-21. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot-auto again. To
   non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
```

つまり次回は単に

```
./certbot-auto
```
でよさげ？

で、/etc/letsencrypt/live/hogehgoe.com/は不可視フォルダらしくadminでも直接入れなくて面倒なので、中のフォルダを適当なところにコピー。4つのファイルができるうち、2つあれば足りる模様。ワイルドカードも使えないので、fullchain.pem（中間証明書と公開鍵のパック）、privkey.pem（暗号鍵）をひとつずつcpした。
で、.pemファイルはダブルクリックするとKeyChain.appに自動で登録されるけど、それをしてはダメで、Server.appで「証明書」画面を開き、「＋」ボタンから「証明書識別情報を読み込む...」を選択。こんな画面が出るので、まずprivkey.pemをドロップすると秘密鍵欄が埋まる。次にfullchain.pemもドロップすると下の2つの欄が埋まり「読み込む」ボタンが押せるようになる。

![スクリーンショット 2016-09-23 1.39.24.png](https://qiita-image-store.s3.amazonaws.com/0/128639/f04fcfc9-136b-60eb-cb1b-ff8b7de3ba62.png)

この状態で、今度は「Webサイト」などの設定画面にいけば、証明書一覧のところで選べるはず。SSL設定を追加する場合は「＋」から。SSL証明書を指定するとポートが443になる。あとは既存サイトと同じ設定にする。80と443でエントリが2つできて、アクセス制限とかの細々とした設定を二重に管理しなければなないのはどうにかならんもんですかね...

更新が上手くいくか、自動更新の道があるかは12月に検証します。

#2016.12.14追記：

失効一週間前の警告メールが来たので更新にチャレンジ。時間がないのでとりあえず今回も手動でやってみました。
certbotのインストールディレクトリに潜って、certbot-autoを実行ではApacheの設定を変更できなかったらしくエラーに。なので、結局初回と同様に

```
cd certbot/
./certbot-auto certonly -manual -d hogehoge.com --debug
```
として証明書作成のみを行いました。webrootフォルダの指定に失敗したんですが、普通に/etc/letencrypt/live/hogehoge.com/fullchain.pem
に書き出されました。暗号鍵（privkey.pem）も書き換わってるっぽいので、また一緒にコピーして、GUIで再登録。
Useful Ruby method to compete in paiza

## What is paiza?
[paiza](http://paiza.jp) is Japanese recruiting service which uses competitive programming to measure the level of applicants. paiza ranks users by 6 levels based on coding results. Unlike major competitive programming service like Topcoder, it supports [a lot of  languages](http://paiza.jp/guide/language) including Ruby which is not popular in this world.

Since I usually use Rails, I've chose Ruby as coding language. The items below are the techniques I learned during try.

## String#ljust, String#rjust
In paiza, output sometimes needs formatting. Although Ruby has sprintf which can do complex things, in most cases, using String#ljust, String#rjust is enough.

### Input

```text
2
apple banana orange
1 2 3
```

### Required output

```text
apple     banana    orange    
1         2         3         
```

### Good

```ruby
total_rows = gets.to_i
db = []
total_rows.times { db << gets.chomp.split }

db.each do |line|
  # Fill space if str length is less than 10
  formatted = line.map { |str| str.ljust(10) }
  puts formatted.join
end
```

## Array#transpose
Let's consider the problem you have to return the sum of each database column.
You can get labels, number of rows and the data of each row.
Required output is column name and sum.

### Input

```text
apple banana orange
5
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
```

### Required output

```text
apple 17
banana 22
orange 27
```

One of Ruby's strength is chain of methods. If the requirement was the sum of the values in the same row, you can easily implement it.
Unfortunately, paiza prefers the problem about vertical calculation. Perhaps it may be useful to add a certain difficulty to problems due to the restriction of console which is generally used for output in competitive programming. Implementation using index of array is below

### Bad

```ruby
label = gets.chomp.split
total_rows = gets.to_i
db = []
total_rows.times { db << gets.split.map(&:to_i) }
result = []
# column handling is hard for Ruby
(0...label.size).each do |i|
  sum = 0
  db.each { |line| sum += line[i] }
  result << sum
end

(0...label.size).each do |i|
  puts "#{label[i]} #{result[i]}"
end
```

Although it works, I sometimes made index counting mistakes for more complicated problems. C-like index isn't natural for Ruby in my humble opinion.

Ruby's array has method **transpose** which switches row with column. By using it effectively, we can make code nicer to prevent errors.

### Good

```ruby
label = gets.chomp.split
total_rows = gets.to_i
db = []
total_rows.times { db << gets.split.map(&:to_i) }
result = []
# Use tranpose for easy handling
db.transpose.each { |arr| result << arr.reduce(&:+) }

[label, result].transpose.each do |pair|
  puts pair.join(' ')
end
```
minikubeでkubernetes

ローカルでkubernetesを動かしてみようと思い環境を構築している中、`minikube`というツールを使ったら凄く簡単に環境を構築できたのでその覚書きです。

# minikubeとは
ローカルで簡単にkubernetesを実行することができるようにするツールです。
ローカルのVM上にkubernetesの単一ノードを構築してくれます。

# 前提
PC：MacBook Pro
OS：OS X El Capitan（version 10.11.6）
VM：VirtualBox（version 5.0.26）

# minikubeのインストール
下記コマンドを実行して`minikube`をインストールします。

```
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.10.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
```

# kubectlのインストール
kubernetesを操作するためのCLIである`kubectl`を、下記コマンドを実行してインストールします。

```
curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
```

# kubernetesクラスタの作成
`minikube`を使用してVirtualBox上にkubernetesのクラスタを作成します。

```
minikube start
```
上記コマンドを実行すると、VirtualBox上に「minikube」という名のkubernetesクラスタが作成されます。
クラスタを作成した後は、`kubectl`で作成したクラスタを操作できるように設定を行います。

```
kubectl config use-context minikube
```

試しに`kubectl`でpodの情報を取得すると、環境により多少表記は異なりますが下記のように表示されます。

```
$ kubectl get pods --all-namespaces
NAMESPACE     NAME                           READY     STATUS    RESTARTS   AGE
kube-system   kube-addon-manager-minikube    1/1       Running   0          1m
kube-system   kubernetes-dashboard-xxxxx     1/1       Running   0          35s
```

# 終わりに
`minikube`を使用せずにkubernetesの環境を構築しようとした際は四苦八苦していたのですが、`minikube`を使用すると簡単に環境を構築できてちょっと感動してしまいました。
kubernetesを試してみたい!と思った時には凄く便利だと思います。

# 参考リンク
- [公式ドキュメント](http://kubernetes.io/docs/getting-started-guides/minikube/)
- [GitHub minikubeインストール情報](https://github.com/kubernetes/minikube/releases)
- [minikubeでローカルKubernetes 1.2/1.3クラスタを5分でつくる方法](http://qiita.com/mumoshu/items/8f55ee830d8e5c172dd4)
IoTの情報サイトまとめ

こんにちは。dot studioの岩上です。IoT分野はまだまだ可能性が多く、黎明期のweb業界と同じ雰囲気を感じています。10年近くWeb業界にどっぷりいるのですが、ソフトウェアとハードウェアで関わる人数もスケジュールも扱う単位も違うことに戸惑いながらも楽しく動いています。今回は、IoT業界で情報を探しているプランナー、ディレクター向けにチェックしておきたいサイトをまとめてみました。

##IoTNEWS
IMG
https://iotnews.jp/
のびすけが主催しているIoTLTにも参加して頂いているIoTNEWSさん。dotstudioの設立時にもインタビューで取り上げて頂きました。（link）人工知能からスマートホーム、コネクテッドカー、ドローン、要素技術など、1日10記事前後の更新で、IoTに特化して月間25万PVの専門メディアです。

##Gigazine
IMG
http://gigazine.net/
ガジェットからスマホ、マンガ、アプリ、インタビューやイベントレポートまで幅広い。安定のiPhone7や、テスラ、AI、VR、IoT系の記事も多く、見ていて飽きません。何より情報が早く、2000年から運営している老舗メディア。サイト名の由来がオンラインマガジンとしてギガバイト級のサイトという意味で、「GIGA」＋「MAGAZINE」＝Gigazineのようです。（Wikipedia参照）

##engadget
IMG
http://japanese.engadget.com/
AOL運営でUS、UK、スペイン、ドイツ、中国で展開しているengadget。2004年3月にアメリカでスタートした老舗メディア。日本では月間1,500万PV。タイアップ記事は2,000,000円〜。媒体資料がわかりやすくかっこいいです。

####媒体資料
[ダウンロード用媒体資料](http://o.aolcdn.com/os/japan/mediaguide/Engadget_201607-09_new2.pdf)


##ガジェット通信
IMG
http://getnews.jp/
2チャンネル検索などを提供している、（有）未来検索ブラジルが2008年に立ち上げたメディア。現在は東京産業新聞社に運営が移管されています。ゲームからグルメ、ガジェット、AI、VRと幅広いです。エンタメ系が強い印象。

##アスキー
###週刊アスキー
IMG
http://weekly.ascii.jp/

###ASCII.jp×ASCII START UP
IMG
http://ascii.jp/startup/

1997年から運営開始。技術者向けのコンテンツ、デジタル家電、ゲーム、IoTと幅広くIT情報総合サイトとして運営している老舗メディア。紙媒体は2015年6月に惜しまれながらも休刊しましたが…紙媒体の時から見てます。2015年4月時点で月間4,000万PV／タイアップ記事は1,500,000円〜。前回はイベントでお世話になりました。

参考：[ASCII主催のIoTイベント！IoT＆H/W BIZ DAY 2に出展しました]
(https://dotstud.io/blog/aascii-startup-event-report/)

##LYVE
IMG
http://hashlyve.com/
シリコンバレーから最新のガジェットやIoTプロダクトを動画で発信する分散メディア。昨年、サンフランシスコでお世話になった[SCRUMVENTURESさん](http://scrum.vc/ja/)の出資先の1つ。毎日数本動画として情報発信する体制づくりもスゴイ。最近はFacebookでの更新が多いです。

IMG
https://www.facebook.com/hashlyve/

##Kickstarter fan！
IMG
http://www.kickstarterfan.com/
その名の通り、キックスターターでおすすめの商品をわかりやすくまとめてくれる。英語が苦手な人はおすすめ。まくらで1億円のファンディングとかスゴイ。
本家Kickstarterはこちら。

IMG
https://www.kickstarter.com/

##Techable
IMG
http://techable.jp/
以前はマーケティングよりだった気がしますが、現在はガジェットやIoTコンテンツが多めです。AdGangやISUTAを運営するMashMediaさん運営しているTechメディア。Startupタブがおすすめ。

##補足海外版：
###hacker.io
IMG
https://www.hackster.io/
プロダクトの工程がわかって楽しい。画像、動画、テキストで開発事例や実際の作り方を無料公開するサイト。RaspberryPiやArduino、Edison、Tesselなど、幅広くノウハウを提供している。ソースコードも公開されいてるので、IoT開発しているエンジニアは何かヒントになるかも。


##まとめ
IoTは分野的に広いので、効率よく情報をキャッチしながら新しいアイディアや企画のモトにしていきたいですね。気になるサイトは是非feed登録してください。（dotstudioも合わせて登録してもらえたら嬉しいです）
jpeg画像をpngに変換する

Javaはこんなことも手軽にできるんですよねぇ、という機能の1つ。

このサンプルでは、入力にjpegを渡したものを、png変換します。

```java
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Collection;

import javax.imageio.ImageIO;

import org.apache.commons.io.FileUtils;

..............

// 画像ファイルの入力。inputFileはjpeg画像のFileクラス
BufferedImage bufimg = ImageIO.read(inputFile);

// outpitFileに出力。ファイル形式はpng
ImageIO.write(bufimg, "png", outputFile);
```

これだけで変換作業が完了します。CMSなどで大量の画像アップロードや、加工してサムネイル化、また無断コピー防止のために元画像の電子指紋（署名）を発行して保管するとか、画像の端に名前いれるとか、などなども自由にできますね。

[Apache CommonsのFileUtils](https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/FileUtils.html)を使えば、1つのディレクトリ内にある拡張子別にフィルタして取り出すのも簡単ですから、定期バッチ処理として使うもよし、一括変換に使うもよし。複数ファイルがある場合はリスト化してパラレルストリームに流すのも有効ですね。
getUserMediaでステレオ入力がモノラルに変換されてしまう現象の回避

# どんな現象？
getUserMediaを使ってブラウザから音声を取得する際に、
元の音声はステレオなのに、取得後の音声がモノラルに合成されてしまう。
具体的には、以下の図のように、
ステレオの入力音声(Input)をgetUserMediaで取得した音声(streamData)は、
入力音声のLRがモノラル合成された音声が2chで出てくるという、
なんとも残念な結果になる。

![スクリーンショット 2016-09-23 0.39.56.png](https://qiita-image-store.s3.amazonaws.com/0/123125/fd7dbf03-f635-d27e-07dc-48f77f7b6f36.png)

WebChatのようにヘッドセットからモノラルで音声入力する場合は問題にならないが、
音楽データをステレオ入力する場合などは、モノラル合成されてしまうと困ることがある。

# 理由
getUserMediaにはエコーキャンセラ機能が備わっているらしい。
これがデフォルトでオンになっており、
エコーキャンセラ動作の前段でステレオ入力がモノラルに変換されてしまうそうだ。

# 回避方法
getUserMediaのconstraintsに、
エコーキャンセラを無効化する設定を追加すればOK。

```js:sample.js
  // constraints
  var constraints = {
    video: false,
    audio: { echoCancellation: false }  // エコーキャンセラ無効化
  };
  // constraints (Chrome)
  if (window.chrome) {
    var constraints = {
      video: false,
      audio: {mandatory: {echoCancellation : false, googEchoCancellation: false}}  
    };
  }

  // Initialize getUserMedia
  navigator.getUserMedia = ( navigator.getUserMedia ||
    navigator.webkitGetUserMedia ||
    navigator.mozGetUserMedia ||
    navigator.msGetUserMedia);

  if (navigator.getUserMedia) {
     navigator.getUserMedia (
       constraints,
       // successCallback
       function(stream) {
         var source = context.createMediaStreamSource(stream);
       },
       // errorCallback
       function(err) {
         alert('The following error occurred: ' + err);
       }
     );
  } else {
    alert('getUserMedia not supported');
  }
```

# 参考
https://lab.infocom.co.jp/2016/06/theta-vr-powerup2-send-3dsound.html
StoryboardのWarningと対処方法

#はじめに#
XcodeでStoryboardのWarningを消したときのメモです。

#Push segues are deprecated#
warning: Deprecated: Push segues are deprecated since iOS 8.0

セグウェイの種類がPushになっているためです。
Showに変更します。

#Constraint referencing items turned off in current configuration.#
Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.

制約が参照しているビューがinstalledをオフにされているためです。
制約自体のinstalledをオフにします。

#Plain Style unsupported#
Unsupported Configuration: Plain Style unsupported in a Navigation Item

複数のスタイルが選べたものが、iOS7でUBarButtonItemStyleDoneに集約されたためです。
ナビゲーションアイテムのボタンをStyleについてDoneにします。
JModelicaで常微分方程式初期値問題を解く

#目的・狙い
* 流行りの1DCAEを使いたい
* JModelicaのinterfaceの使い勝手を確認したい
* Modelica言語を勉強する
* OpenModelicaでいいのではと言われる前にJModelicaのいいところを探したい

尚、環境構築方法は[JModelicaをUbuntuにインストールする](http://qiita.com/TatsuyaKatayama/items/7d231244f79c216677eb)の記事を参照。

#JModelicaの基本的な使い方
1. Modelファイル(*.mo)を用意する
2. Function Mockup Units(以下FMUs)にコンパイル
3. FMUsを読み込む
4. 読み込んだFMUsを計算する
5. 結果を見る

もちろん、３の工程からコンパイル済みのFMUsを読み込むことも可能。

---

#常微分方程式を解く
Google先生によるとModelicaでHelloWorldと言えば、1階の線形常微分方程式の初期値問題が多いようである。

```math
\begin{eqnarray}
\frac{dx(t)}{dt} &=& -x(t) \\
  x(0) & = & 1
\end{eqnarray}
```

紙と鉛筆で解く方法は教科書に任せて、解析解の導出はSymPyで行う。SymPyを利用できる環境下で下記を実行。

```py:python
import sympy
x = sympy.Function("x"); t,C1 = sympy.symbols("t C1")
#x(t)について解く x(t) == C1*exp(-t)
ans = sympy.dsolve(x(t).diff(t)+x(t),x(t))
#積分定数C1を計算(t=0,x(0)=1)し、ansの式に代入する
C = {C1:ans.subs(x(t),1).subs(t,0).lhs}
ans.subs(C)
#--> x(t) == exp(-t)
```

以上から解析解は以下のようになる。

```math
\begin{eqnarray}
  x(t) & = & \exp(-t)
\end{eqnarray}
```

---
#JModelicaで常微分方程式を解く
##1.モデルファイルの準備
以下のモデルファイルを準備する

```c:ode_test.mo
model HelloWorld 
	Real x(start=1);
equation
	der(x)= -x;
end HelloWorld;
```

1行目～５行目：モデル（クラス）定義
２行目：初期値1の状態変数xの定義
３行目：各変数の関係式を以下で定義するよ。の合図
４行目：dx/dt = -x　の方程式を定義

---
##2.モデルをFMUsにコンパイル
モデルファイルのディレクトリでJModelicaを起動。(インストール場所は適宜変更）

```bash:bash
/home/ubuntu/JModelica/bin/jm_ipython.sh
```

```py:ipython
from pymodelica import compile_fmu
hello_fmu = compile_fmu("HelloWorld","./ode_test.mo")
```

##3. FMUsを読み込む

```py:ipython
from pyfmi import load_fmu
hello_model = load_fmu(hello_fmu)
```

---
##4. 読み込んだFMUsを計算する
1秒分計算する

```py:ipython
res = hello_model.simulate(final_time=1)
```

##5.結果を見る
状態変数xの結果は`res["x"]`でアクセスできる。
先の解析解を合わせてグラフ化する。

```py:ipython
import numpy as np
from matplotlib import pyplot as plt
t = np.linspace(0,1,101)
x = np.exp(-t) 
plt.plot(t, x, label="$x=e^(-t)$")
plt.plot(res["time"],res["x"],"--",label="JModelica")
plt.legend()
plt.show()
```

---
![first_liner_ode.png](https://qiita-image-store.s3.amazonaws.com/0/132571/432e51a9-e051-3aea-1b65-a0fa5bc14021.png)

---
#Assimuloで常微分方程式を解く
## Assimuloって
* JModelicaの積分器を担うPythonのモジュール(JModelicaが使える環境であれば使える)
* 常微分方程式を解くのに便利
* Anacondaな人は`conda install -c https://conda.binstar.org/chria assimulo`でインストール

```py:ipython
from assimulo.solvers import CVode
from assimulo.problem import Explicit_Problem
#微分方程式を表す関数を定義
def ode_func(t,x):
    dxdt = -x[0]
    return np.array([dxdt])
#陽的な問題と積分器を含んだモデルを定義し計算
exp_mod = Explicit_Problem(ode_func, 1) #xの初期値は1
exp_sim = CVode(exp_mod)
t1, x1 = exp_sim.simulate(1)#計算時間1秒
#結果のプロット
plt.plot(t, x, label="$x=\exp(-t)$")#先に計算した解析解
plt.plot(res["time"],res["x"],'--',label="JModelica")#JModelicaの数値解
plt.plot(t1,x1,'-.',label="assimulo")#Assimuloの数値解
plt.legend()
plt.show()
```

---
![first_liner_ode_assimulo.png](https://qiita-image-store.s3.amazonaws.com/0/132571/db6c490e-4112-1fcb-c45e-51500db50827.png)

---

#まとめ
* 1階の線形常微分方程式初期値問題の解析解をSymPyで導出した
* JModelicaの基本的な使用方法を確認した
    * 計算結果(数値解)の見た目は解析解と比較して良好
    * 計算結果をPythonで扱えるので便利
* Assimuloで常微分方程式を数値的に解いた
    * 常微分方程式が立てられているのであれば便利
* Assimuloの読み方が不明
意外と知られていない!?  Python標準ライブラリの関数groupby


Python標準ライブラリのモジュール [itertools](http://docs.python.jp/3/library/itertools.html) はイテレータを扱う便利な関数が提供されています。
その中でも [groupby](http://docs.python.jp/3/library/itertools.html#itertools.groupby) はよく使う機会が多いのですが、以外と知らない人も多いようなので紹介します。

# groupby

iterable(リストやイテレータなど)を任意のキーでグルーピングする関数です。
戻り値はキーとキーに属する要素のイテレータになります。

groupbyに渡すiterableは同じキーの要素が連続していなければならないので、事前にソートする必要があります。

# 基本的な使い方

説明だけだとイメージがつきにくいので簡単なサンプルを見てみましょう。

文字と数値のタプルを要素とするリストを、文字でグルーピングする例です。

```py3
from itertools import groupby
from operator import itemgetter

a = [("b", 3), ("a", 1), ("c", 2), ("a", 2), ("b", 1)]
a = sorted(a, key=itemgetter(0))

for (k, g) in groupby(a, key=itemgetter(0)):
    print("key:" + k)
    for item in g:
        print(item)
```

```:実行結果
key:a
('a', 1)
('a', 2)
key:b
('b', 3)
('b', 1)
key:c
('c', 2)
```

ソートしないでgroupbyを使うと次のようになってしまいます。

```:ソートしないで実行すると...
key:b
('b', 3)
key:a
('a', 1)
key:c
('c', 2)
key:a
('a', 2)
key:b
('b', 1)
```
CentOS 7からsystemctlに変わってスタートアップスクリプトをいじるのが大変だった

# はじめに
CentOS7からデーモンの管理に`service`から`systemctl`を使うようになりました。
以前までは起動スクリプトを変更するときは`/etc/init.d`とかを見れば良かったんですが、今はありません。
どこにあるのか謎だったのですが調べたところ ` /usr/lib/systemd/system` にありました。

起動スクリプトに起動時のオプションが含まれていてそれを変更したい場合にはこのディレクトリを参照すれば良さそうです。

![Screen Shot 2016-10-12 at 23.27.43.png](https://qiita-image-store.s3.amazonaws.com/0/47327/5e8d178f-956e-6731-43ab-d7b26fd408b2.png)


忘れそうなのでメモ。
プロジェクトマネージャが行うべきただ一つのこと。

# プロジェクトマネージャの仕事とは

初めてプロジェクトマネージャになった場合
一体何をすればいいのでしょうか。

 - 要員メンバーのスケジュール管理
 - 要員メンバーの作業指示
 - 要員メンバーの成果物レビュー
 - 要員メンバーとのコミュニケーション
 - お客さんとの打ち合わせ
 - リソース管理
 - リスケジュール
 - 社内の各種事務作業
 　　　　　　　　　　　　　　　 　等

あげればキリがないほど多く
何をやれば良いのかよく分からなくなり
人によってやることが変わってしまい
PMが変わると雰囲気が一変してしまうということも。。。


# プロジェクトマネージャがやるべき、ただ一つのこと

それでは、唯一これだけは絶対に外してはいけない
プロジェクトマネージャがプロジェクトを担当した時に
どんなプロジェクトであっても、
真っ先にやるべきことは一体何なのか


それは、


**リスク管理表の作成**である。


# リスク管理帳表とは？

プロジェクトで発生し得るリスクを管理して、
発生頻度やその重要度に応じてリスクに優先度を決定する。

その上で、発生確率を抑えるための回避策
発生時の対応策を事前に明記しておくものです。


# なぜ？？

それではなぜ、この一つが最も重要となるのか。
そりゃもちろんプロジェクトマネージャがリスク管理を行うのは
必然・当然なのは周知の事実であろう。

だが、なぜそれ一つに絞ることができるのか。


# 解答の前に一つ自問してほしい

例えば、今のプロジェクトでガントチャートを作成して
スケジュールを書いているとする。

なぜ、そのガントチャートが必要なのか答えられるだろうか。





多くの読者はスケジュールが遅れたら大変だから
と答えられるだろう。


つまり、リスク管理である。

# 当たり前にやっているプロジェクト管理の全てはリスク管理にあり

**ガントチャートでスケジュールを管理する**
という当たり前と言っても過言ではない作業は、
その裏には、

1.リスク管理表に
　- スケジュールに遅延が発生する可能性がある
　　・発生確率　大
　　・重要度　　大
　- 回避策
　　・ガントチャートを用いてスケジュールを毎日報告してもらう
　- 判断基準
　　・スケジュールから１０％以上の乖離が発生した時
　- 対応策
　　・原因を分析して下記の対応をとる
　　　- 作業者の技術不足
　　　　　→作業メンバーの変更もしくは、有識者とのペアプロの実施
　　　- 見積もり外の作業量増加
　　　　　→リスケジュール検討、追加要員のアサインを検討
　　　　　　お客様へ再見積もりの依頼の可能性を示唆しておく（軽減策）


というリスク管理表があるから実施するのである。
実際にリスク管理表にすることは暗黙的にしなくとも
プロジェクトマネージャはリスクを感じているから
実施するのである。


# リスク管理表のメリット

リスク管理表を作成することの利点は
リスクが発生しているという状況をメンバーに共有することができる。

記載の予定スケジュールより１０％遅れたら
危ない状態なんだということを具体的な数値で意識することで

問題発生時に速やかな報告をもらえるようになるメリットがある。



# まとめ

最初に記載したプロジェクトマネージャの仕事とは様々あるように見えるが、
全ては、リスク管理に集約しているということを念頭に起き、
リスク管理表の検討すべき項目をプロジェクト間で共有して
組織の財産とすることでプロジェクトマネージャの育成が捗ると思う。


PM間でのプロジェクトマネージメントのやり方を平準化できるので、
あの人だから、こういうやり方
この人だから、こういうやり方

というような、個人知識を減らし、共有知識に昇華できると
良いこと尽くし。



でも、結構ないがしろにしている会社が多いリスク管理表


# 補足
じゃあどういうリスク管理表作ればいいの？
についてはまた後日時間を見つけて書く予定
windowsでvagrantで作成したゲストOSにansible入れてみる。

#目的
yumとかで環境構築するの面倒だし、間違って環境壊すと再構築が大変。
構成管理ツールを使えば、簡単にできるよって言われた。
#ゴール地点
Windowsでvagrantを利用して仮想マシンを用いて、構成管理ツールを使用できる状態にする。
今回は構成管理ツールが使用できるのを確認できるまでを行う。
#前提条件
vagrantで仮想マシンが立ち上がるところまで確認できていること。
できていないかたは[こちら](http://qiita.com/satoshi-baba-0823/items/f995a5006720a90b33cb)

#やりかた
ansible用のゲストOSを立てる方法とかもあると思うけど、楽するためシェルを使って、初回起動時にansibleを自動で入れてしまう方法をとる。

##vagrantでBOXを追加して初期化する。
[配布されているBOX](http://qiita.com/satoshi-baba-0823/items/f995a5006720a90b33cb)お借りして、初期化までしてしまいましょう。
今回はなんとなくCentOS6.4で行きますが、違うものでも大丈夫です。
名前も適当につけてあげてください。

```
$vagrant box add vagrant_ansible https://github.com/2creatives/vagrant-centos/releases/download/v6.4.2/centos64-x86_64-20140116.box
```

適当なところに作業ディレクトりを作成して、初期化をしてしまいましょう。

```
$vagrant box init
```


##Vagrantfileをいじってシェルが動くようにする。
ここからが本題です。
先ほどの初期化で作成されたVagrantfileを編集して、初回起動時にシェルが起動するようにしましょう。

```  Vagrantfile.
  # IPアドレスのところは忘れずにコメントを外す。
  config.vm.network "private_network", ip: "192.168.33.10"

  # Vagrantfileが配置されているディレクトリを、仮想OSのroot直下に複製し同期する。(とりあえずやっておくくらいの認識で今はOK)
  config.vm.synced_folder "", "/vagrant_data"

  # Vagrantfileが配置されているディレクトリの、provision.sh(シェル)を実行する。
  config.vm.provision :shell, :path => "provision.sh"
```

次に実行するprovision.shを、Vagrantfileと同じディレクトリに作成します。
pythonのインストールとansibleのインストールを記述しましょう。

```provision.sh
sudo yum install -y epel-release
sudo yum install -y ansible

# 後々ここらへんにansibleの実行的なものを書く。
```

ここまで書けば、最初にvagrant upを行った際に、provision.shが実行されてansibleが使えるようになるはずです。

##ansibleが入っているか確認する。
確認するために、下記のコマンドで仮想マシンを立ち上げましょう。
必ずVagrantfileのディレクトりに移動してから行ってください。
コマンドを実行すると、仮想マシンが立ち上がり、シェルによってansibleのインストールなどが始まります。

```
$vagrant up
```

もしも初回起動を済ましてしまった場合は、2回目以降の起動時にはシェルが動かないので、下記のコマンドで実行しましょう。
予めvagrant upで起動しておかないと動かないので注意が必要です。

```
$vagrant provision
```

立ち上がったら、自分の使用しているツールでSSH接続をしてみましょう。
ユーザ名:vagrant
パスワード:vagrant
IP:アドレス:192.168.33.10(config.vm.network "private_network"のやつ)

SSHで接続後に、ansibleを実行してcommand not foundが出なければ、とりあえず今回は完了です。

若干中途半端な気もしますが、ansibleで環境を構築するのは次回になります。
お疲れさまでした。
Groovyの環境設定に関するめも

# はじめに
WindowsでGroovyをまさぐる際に行った設定のメモ。

# エディタ
以下を参考に、Atomエディタでコードをかけるように設定した。
[WindowsのAtomでGroovyを実行する](http://qiita.com/mas0061/items/aa95921fa6a0e5b33d4f)


# スクリプトのエンコーディング
以下を参考に、UTF-8にEncodingを設定した。
※%GROOVY_HOME%\bin\startGroovy.bat に設定を記載

[groovyでスクリプトのエンコーディングを指定する - uehaj's blog](http://uehaj.hatenablog.com/entry/20090815/1250316330)
eclipseからGithubへのプッシュで401 Authorization Requiredエラー

#Gitで401 Authorization Requiredエラー
色々試したけど結局原因は分からず・・・
githubへの接続をhttpsからsshに変更して暫定的に対応

##エラー内容
> Can't connect to any repository: https://github.com/xxx/yyyy.git(https://github.com/xxx/yyy.git: 401 Authorization Required)

##エラー発生環境
- Pleiades All in One Eclipse4.6
- EGitプラグイン

##対処方法
githubへの接続をhttpsからsshに変更

1. 秘密鍵/公開鍵の生成
    - eclipse → ウィンドウ → 設定  → 一般  → ネットワーク接続  → SSH2 → 鍵管理
        - DSA鍵の生成
        - 秘密鍵の保管（パスフレーズは空白）
1. 公開鍵をgithubに登録
    - settings → SSH and GPG keys → New SSH key
        - 上記で作成した公開鍵を登録
1. githubへのURLをhttpsからsshに変更
    - URLを変更（https://github.com/xxx/yyyy.git → ssh://git@github.com/xxx/yyy.git）
    - ユーザーはgit
    - パスワードは空白

##補足
プロキシを使用している場合はeclipseのsshプロキシ設定が必要

- eclipse → ウィンドウ → 設定  → 一般  → ネットワーク接続
    - アクティブ・プロバイダーをマニュアルに変更
    - HTTPSスキーマのプロキシを設定
railsでmongoid/rspec/pryを使うnewのやり方

#自分用のrailsのnewまでの流れです
- mongoidを使いたいのでactive recordをbundle installしない
- Rspecを入れたい
- hamlを入れたい
- timestampも入れておきたい

Gemfileを生成します
```
$ bundle init
```
Gemfileを開いて

```
#gem rails
```
の#を消して保存

```
$ rails new sample --skip-active-record --skip-bundle
```
mongoidを使いたいのでアクティブレコードとデータベースに関するGemをインストールしないようにスキップします。
sampleには適当にファイルの名前つけておいてください

sample/Gemfileに以下を記述します

```
gem 'mongoid'
gem 'haml-rails'

group :development do
gem 'xray-rails'
end

group :test do
gem 'database_cleaner'
gem 'binding_of_caller'
end
group :development :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
gem 'pry-rails'
gem 'pry-byebug'
gem 'pry-doc'
gem 'better_errors'
end

```
保存したら
```
$ bundle install
```
これやったらあれがない、これがないとかエラー出て来ることがある
エラー文に
sudo gem　ほにゃららとか
書いてあったら　その部分をそのままコピーしてパスワードを書いたら上手くいきそう

xcodeとか書いてあったらxcodeを開いてagreeしてみたりしたら何となくいけるんじゃないかな

```
$ rails g mongoid:config
$ bundle exec rails generate rspec:install
```
上がmongoidの設定
その次がRspecの初期設定

```spec/rails_helper.rb
config.include FactoryGirl::Syntax::Methods
```

とかやっとけば毎回factoryGirlと書かなくていい

最後にまた

```
$ bundle install
```

あとはmodelつくるときに　最後に--timestampsを追加しておく
【Swift3】コードで画面遷移を行う方法

# 同じストーリーボードのビューに遷移する場合
ストーリーボードで遷移先のビューを選択し、IdentityのStoryboard IDに任意の名前を設定。
```withIdentifier: ""```に設定した名前を入れる。

```.swift
let storyboard: UIStoryboard = self.storyboard!
let nextView = storyboard.instantiateViewController(withIdentifier: "nextView")
present(nextView, animated: true, completion: nil)
```

## NavigationContorollerの場合
```.swift
let storyboard: UIStoryboard = self.storyboard!
let nextView = storyboard.instantiateViewController(withIdentifier: "nextView")
let navi = UINavigationController(rootViewController: nextView)
// アニメーションの設定
// navi.modalTransitionStyle = .coverVertical
present(navi, animated: true, completion: nil)
```

# 異なるストーリーボードのビューに遷移する場合
遷移先のビューの「Is Initial View Controller」にチェックを入れておく。
```name: ""```に遷移先のストーリーボードの名前を設定。

```.swift
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let nextView = storyboard.instantiateInitialViewController()
present(nextView!, animated: true, completion: nil)
```
EC-CUBE3のTips


#開発環境インストール
http://qiita.com/akinrt/items/1a136f90186fcc5ac222

* vagrant

https://github.com/EC-CUBE/eccube-vagrant

#API作成
公式ドキュメントによる指針
http://ec-cube.github.io/api.html

Controllerにて
```
return $app->json(array('hoge'=>'fuga'), 200);
```

などでjsonを返せる

$app->jsonメソッドはSilexにて実装されている。

http://qiita.com/kino0104/items/9f9e6f75d58b40663673


* その他プラグインで作成
https://github.com/EC-CUBE/eccube-api

#Symfony2とEccube3ってどこが違うのか？

Symfony2 demoのsrc/AppBundleにBundleがある。
それらにその他バンドルのフォルダを追加したものがsrc/Eccube



比較
##symfony2 demo

https://github.com/symfony/symfony-demo

##Eccube3

https://github.com/EC-CUBE/ec-cube


#プラグイン、機能追加は？
http://qiita.com/chihiro-adachi/items/6318642120f67faedf0b

独自サイトのためにイジる時

1. Eccubeフォルダ内をいじる

2. pluginの形で作る（配布可能になる）

  

#SNS認証機能は？
* API authorization
http://ec-cube.github.io/api_authorization.html

http://ec-cube.github.io/web-api-doc.html

node.js
php(symfony)

などの例がある



https://github.com/nanasess/eccube3-oauth2-client

http://oauth2-client.thephpleague.com/usage/



エンドポイント（twitterの場合）
https://dev.twitter.com/oauth/3-legged

 POST oauth2 / token
GET oauth/authorize
カスタムウィンドウのクラス名とファイル名は同じでないといけない

UnityEditorの便利な機能、カスタムウィンドウを作って画面に表示したままUnityを閉じます。再び開きます。すると、

>This can happen if layout contains custom windows and there are compile errors in the project.

というメッセージが表示されて、ウィンドウレイアウトを作り直す羽目になってしまいます。カスタムウィンドウを閉じて終了した場合は大丈夫で、さらに、大丈夫なものとそうでないものがある、という意味の分からない状況。

さんざん悩んだんですが、どうやら

**カスタムウィンドウのクラス名とファイル名は同じでないといけない**

ようです。例えば、EditorWindowを派生したHogeEditorWindowというカスタムウィンドウクラスを作る場合は、HogeEditorWindow.csというファイルに保存しなければなりません。Hoge.csやHogeEditor.csではダメです。

おそらくレイアウトファイルの解釈部分で、本来はクラス名で判別すべきところをファイル名にしているところがあるように思われます。ここらへんはUnityのバージョンによって異なる可能性がありますが、5.4.1f1ではこんな感じでした。

3時間返せー。
Cloud9のNode.jsテンプレートでreq.read()した時にnullが入る

ドットインストールの[Node.js入門](http://dotinstall.com/lessons/basic_nodejs)をCloud9のNode.jsテンプレートで動かして学んでいたところ、フォームを作ってPOSTしたデータをイベントで受け取って表示するという内容で詰まりました。

```javascript:server.js(一部省略）
function renderForm(posts,res){
var data = ejs.render(template,{
        posts: posts
    });
    res.writeHead(200,{'Content-Type': 'text/html'});
    res.write(data);
    res.end();
}

server.on('request',function(req,res){
    if(req.method === 'POST'){
        req.data = "";
        req.on("readable",function(){
            req.data += req.read();
        });
        req.on("end",function(){
            var query = qs.parse(req.data);
            posts.push(query.name);
            console.log(posts);
            renderForm(posts,res);
        });
    }else{
        renderForm(posts,res);
    }
});
```

`req.data += req.read();`した時の文字列に`null`が入ってきていて、postsを表示すると「hogenull」とか「abcdnull」に。原因を探していたところ記事がヒットしたので、`req.data += req.read() || '';`を試したらいけました :+1:

情報元：[nodejsのreadableイベントは最後にnullが来るかも](http://var.blog.jp/archives/43995154.html)
CSS3でWebサイト上のナビゲートに使える「くり抜き(スポットライト)」を実装する

Webサービスの初回ヘルプなどを作成するとき、ユーザーの次のアクションを示すボタン以外を暗くして、次のアクションを明示的に示したい場面というのは度々あるかと思います。

呼び方は人によって違いがあるかとは思いますが、私は「スポットライト」を呼んでいますので、以後は「スポットライト」の名称で進めていきたいと思います。

今回はそのスポットライトをCSSで実装したサンプルを見た後に、実際の実現方法を解説します。

## CSSでスポットライト

<img width="905" alt="スクリーンショット 2016-10-12 21.03.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/75633/6463a227-0a40-48ad-141c-202f54ed78b2.png">
[CSS Spotlight http://codepen.io/potato4d/pen/yaoExv](http://codepen.io/potato4d/pen/yaoExv)

まずはじめに、完成したものが以上となります。
Click me!と書かれたボタンの周囲が明るくなっており、それ以外の部分が暗くなっています。

CodePenにアクセスしてもらうと分かる通り、Click meがClickableとなっており、ホバー・クリックが可能となっています。

## 動作のしくみ

それでは、詳しい説明にはいっていきます。
まず前提ですが、CSSを普段記述するかたですとおわかりの通り、明るい部分を明るくしているわけではなく、全体を大きなdiv要素`.spotlight`で囲っており、真ん中のみを透過しています。

<img width="962" alt="スクリーンショット 2016-10-12 21.07.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/75633/db192af6-ac3e-4927-081c-59f2c9aecffa.png">

透過をまったくなしに書き換えて表示した場合のようす。薄暗くかかっている全体が、`.spotlight`要素となります。

その上で、背景(`background`)に`radial-gradient`プロパティを利用しています。
これは、円形グラデーションを作成するためのプロパティですが、`radial-gradient`および`linear-gradient`のグラデーションプロパティは、
例えば0~100pxを白、100px~を赤などと指定すると、完全なる別の２色を表示することができます。

<img width="961" alt="スクリーンショット 2016-10-12 21.11.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/75633/9ef13da1-ff87-f7b3-faef-ec339b28af56.png">
[CSS Gradient Double Color http://codepen.io/potato4d/pen/WGybmO](http://codepen.io/potato4d/pen/WGybmO)

赤と緑で`linear-gradient`を利用した場合のようす。中央である50%を境として、二分されています。

その上で、CSSには透明を表す`transparent`がありますので、2色のうち片方に`transparent`を指定してやります。
その上で、もう片方を`rgba(0,0,0,0.4)`などの半透明色を指定してやると、先程のスポットライトを作成することができます。

<img width="961" alt="スクリーンショット 2016-10-12 21.15.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/75633/2d3b0642-7de3-0565-c569-6821853c3b16.png">


`transparent`と`rgba(0,0,0,0.4)`を指定した場合の見えかたの変化のようす。

これらの知識をつなぎ合わせて、実際のコードに落とし込むとき、`.spotlight`のコードは以下となります。

```css:style.css
.spotlight{
  position: absolute;
  left: 0;
  top : 0;

  width: 100vw;
  height: 100vh;

  background: radial-gradient(transparent, transparent 100px, rgba(0,0,0,0.4) 100px, rgba(0,0,0,0.4));
  
  pointer-events: none;
}
```

そうして、実際の表示は[はじめにあったCodePenのもの](http://codepen.io/potato4d/pen/yaoExv)となります。

## カスタマイズ

<img width="961" alt="スクリーンショット 2016-10-12 21.22.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/75633/f54dabd4-b438-1794-67c3-ccda0a60f568.png">

今回は楕円で作成しましたが、`radial-gredient`に`circle`を足すことで正円にすることも可能です。
誤差のない小数二分探索(二分法)


## 前言
- https://twitter.com/codera_iroha/status/729675348615389185
- の続きが未だにない状況で、
- https://twitter.com/tanakh/status/781136467846234112
- を見つけてしまったので、書くことにしました。

## 背景
- 競技プログラミングでは二分探索は割と出てきますが、小数だとどこで探索を打ち切るかが問題になります。
- 現状、使われている主流な方法は、
  - EPSを用いる
  - 二分探索の回数を決める
- 方法になりますが、誤差が問題となります。

## 方法
- ここで、[IEEE浮動小数点数](https://ja.wikipedia.org/wiki/IEEE_754)は符号付き整数とみなしても大小関係が保たれることを利用します。
- つまり、double型をlong long型と解釈し、整数の二分探索を適用すればよいのです。
  - checkerにはlong long型をdouble型に変換した値を渡す。
- ただし、負の数の扱いは異なるため、正の数を経由して型変換する必要があります。

## 実装
- RubyのRange#bsearch
  - 本家 https://github.com/ruby/ruby/blob/trunk/range.c
  - backports https://github.com/marcandre/backports/blob/master/lib/backports/2.0.0/range/bsearch.rb
- *backports版を* 私が適当にC++に移植したもの
  - https://github.com/cielavenir/cpp_libraries/tree/master/binarysearch
  - 本家の実装を今更見ましたが、reinterpret_castではなくunionを使っているようです。この方が良かったかも。
【Swift】storyboardを利用しないテンプレート（基本的なView）

# 概要
PureLayoutのサンプル（基本的なView） 第1弾です。
次回はUITableView, UITableViewCellをUpします。

# 目的
[storyboardを利用しない必要最低限のテンプレート（Swift）](http://qiita.com/menomoto/items/3140ec04b509e4726615) を参照ください。

# メリット （PureLayout vs Storyboard）
#### PureLayoutのメリット (Stroyboardを使用しないメリット)
* コードチェックしやすい
* push時にコンフリクトしづらい
* 色やマージンなどの数値の共通化がしやすい
* 全部コードで記述するのでViewの状態が明確になる
* 同じようなViewはclass化して再利用しやすい（未検証）

#### Storyboardのメリット
* GUI（Storyboard）上で各Viewの配置、UIViewControllerの画面遷移を視覚的に確認できる
* 「シミュレータ起動（ = ビルド実行）」しなくてもViewの配置が確認できる
* Dev以外（デザイナーなど）もIBで直感的に画面を作れる

# 対象View
* UISearchBar
* UILabel
* UITextField
* UIImageView

# 結果
![サンプル](http://i.imgur.com/MR8S9oH.png "サンプル")

# github
https://github.com/menomoto/Sample_PureLayout/tree/master/pureLayoutSample01
jenkinsでgit submodule updateに失敗する場合の対応策

#前提
- Jenkins ver. 2.6
- Git plugin 2.4.2
- Git client plugin 1.19.5
- gitリポジトリは、プライベートリポジトリ(ID/PWが必要)

#現象
サブモジュールも取得したい時は、
> Jenkinsのジョブのソースコード管理>GitからAdvanced sub-modules behavioursを追加しRecursively update submodulesをチェックする

とサブモジュールも更新しようとするが、サブモジュールのリポジトリが、プライベートリポジトリだと認証のエラーが出ます。

> FATAL: Command "git submodule update --init --recursive" returned status code 1:
stdout: 
stderr: Cloning into 'submodule_lib'...
fatal: Authentication failed for 'http://git.example.com/scm/projects/submodule_lib.git/'

みたいな感じ
まぁ、ID/PWが必要なんだろうけど…

#対策
1. URLにIDとPW入れる
http://account:password@git.example.com/scm/projects/submodule_lib.git
2. git pluginのバージョン上げる
experimental pluginsからGit Pluginの3.0.0-beta2を入れるとUse credentials from default remote of parent repositoryというのが出るのでそれをチェックすると良いらしいけど試してません。。。
3. .netrcを置く
/var/lib/jenkinsに.netrcを作成

```/var/lib/jenkins/.netrc
machine qiita.com
        login test
        password test
```

jenkinsのサービスを起動しているユーザーにオーナーを変更しておく

```
# chown jenkins:jenkins .netrc 
```
Javaのshell実行モジュールで、何故か「wgetエラー」

<b>実行環境</b> Mac Sierra、Java 7系、Javaからコマンドを実行（Runtime クラス）


<b>実行内容</b>
0番目の要素 = wget
1番目の要素 = http://40.117.97.13:8080/*******/jar/setSymboliclink.jar
2番目の要素 = -O
3番目の要素 = /*******/setSymboliclink.jar

<b>エラーメッセージ</b> 
java.io.IOException: Cannot run program "wget": error=2, No such file or directory

<b>付記</b>
SCP ではエラー発生せず