OmniAICreator/Qiita-1.07M huggingface dataset:
UE4 is Macho（UE4は何事もマッチョ！）

#はじめに

みなさんUnreal Engine 4使われた事、実はそんなにございませんよね。
私も配属１日目で結構な情報提供量を要求されました、エバンジェリストを呼ぶお金は嫌なのでこうしているのだと思います。

話をもとにもどして、このゲームエンジンWindows98の頃からくらいしか知りませんが、GUIのゲームエンジンとして登場し当時も、動作はそうとう不安定でした。
今、考えてみればマシンスペック不足だった気がします。


使い続けてから３月くらいですが、以下のような事がわかってきました。

#Unreal Engine 4 リアルタイムの処理をするためだと思われるが、はじめはベイクが走る。

UE4のelementalとかを初めて、Mac OSとWindowsで読み込む場合、約１時間 程度、テクスチャー生成に時間を取られます。（さらにターゲットプロジェクトを他に変換すると３時間とか取られます）
おそらくその事を知らずに、Unityのライブコーディング気取りでカチカチと別のイベントを発生させてしまい、フリーズのリブートになるようです。
![ue4frees.png](https://qiita-image-store.s3.amazonaws.com/0/25895/30445c5e-be3c-e759-2e09-d523855567d0.png)




#MacのOpenGLだと変なテクスチャーになってしまうので、DirectXのPCでビルドするようになると思う

上記の理由により、汚いのより綺麗、生成したものが遅いのより早いので、DirectXのPCが主流になると思います。Mac,OpenGLなんてやっても金にならないからこうなるんでしょうね。（ちなみにこのプロジェクトをmacで開こうとすると３時間待ちとかで出来たり出来なかったりプロジェクト作り直すかなー）

#情報量が半端ない

結構、ものすごいマッチョな情報量なので覚悟してください。lit unlitなどUnityでは見慣れていない用語の意味を調べていくと、読めるようになります。上司には”ふつつか者ですが努力と根性で頑張ります。”をお伝えください。最近だんだんまたわかってきたのですが、言い回しがUE4は違うだけで結局これってUnityのxxxをxxxとか言っているような気がします。両方とも数式で計算した結果が反映されているのですがそこら辺をわかった上でハイ同じですとは言えません。

#マシンパワー
上記の理由によりマシンスペックそしてパワー（台数も含む）が高ければ、美しい映像が手に入りセンス次第で敵に勝てます。開発専用機を模索中ですが結構しそうですね。開発機＋２モニター構成で使うことを想定しているAAAゲーム開発エンジンですから仕方ありません。

#新規参入について
死ぬ思いで作ることになると思います。流行りで飛びついても失敗するでしょう。
Editor拡張 最も簡単なScrollView

Assets - Editorフォルダ以下に配置します。

```csharp
using UnityEngine;
using UnityEditor;
using System.Collections;

public class Test : EditorWindow
{
	Vector2 scrollPosition = new Vector2(0, 0);

	[MenuItem("Window/Test")]
	static void ShowWindow()
	{
		var window = EditorWindow.GetWindow(typeof(Test));
		window.Show();
	}

	void OnGUI ()
	{
		scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);

		for (int i = 0; i < 10; i++)
		{
			GUILayout.Label("HogeHoge");
		}

		EditorGUILayout.EndScrollView();
	}
}
```

![scrollView.PNG](https://qiita-image-store.s3.amazonaws.com/0/17192/9f74de00-7a83-2832-84f0-5e8b4ed76315.png)

小さくすると自動的にスクロールバーがでます。

![scrollView1.PNG](https://qiita-image-store.s3.amazonaws.com/0/17192/29786cd8-a079-66d6-f33d-3b7a513e63e5.png)
そのprotectedいらなくない？


protectedを使うと依存関係が複雑化してしまう、という例を並べてみました。privateメソッドにも言及しています。異論や例外はあると思いますが、こういう考え方もあると知っておくと役には立つと思います。

## そのprotected変数いらなくない？
C++やC#のprotected変数は使うべきではない、というのは一般的な意見かと思います。Effective C++でも言及されていますね。protected変数を持つClass Aを継承したClass Bにとっては、Class Aのprotected変数の内容を知らなくてはならなくなるし、Class Aの関数によってprotected変数の内容が変更されるかどうかは実装を見ないとわからない。これは、Global変数に依存するのと同様に依存関係の複雑化を招きます。

```cpp
class A{
protected:
	int _value;
public:
	void Reset(); //関数によって_valueが変化するかは実装を見ないとわからない
}

class B : public A{
	B() : A(){
		_value = -5; //Aが想定していない形で_valueが設定されてしまう可能性がある
	}
}
```

というわけで、変数はprivateにしましょう。継承先で値の参照が必要になったら、メソッドを準備すればOK。

## そのprotectedメソッドいらなくない？
protectedメソッドを使う場面も、よく考えたらis-a関係じゃなくhas-a関係だった、ということが多いです。例えば、下記のようなコードはStrategyパターンで実装した方が適切です。

```cpp
//継承により実装を柔軟に変更可能としたい場合
class A_inheritance{
protected:
	virtual void Implement() = 0;
public:
	void Func(){
		Initialize();
		Implement();
		Terminate();
	}
private:
	void Initialize();
	void Terminate();
}

class B : public A_inheritance{
protected:
	void Implement(){
		//実装内容
	}
}

//上記より、Strategyパターンで書いた方が適切
class A_strategy{
private:
	const IImplement &_impl;
public:
	A_strategy(const IImplement &impl)
	: _impl(impl)
	{}
	
	void Func(){
		Initialize();
		_impl.Implement();
		Terminate();
	}
private:
	void Initialize();
	void Terminate();
}
```

変数と合わせて、protectedを使うときはちょっと手を止めてみましょう。

## そのprivateメソッドいらなくない？
privateメソッドはpublicメソッドのサブルーチンとして使うことが多いと思います。privateメソッドは、そのクラス内のすべての変数を使うことができてしまいます。これでは、メインルーチンから見るとサブルーチンの入力が何なのか判断がつかなくなってしまいます。

多くの場合privateメソッドの代わりにstatic関数を使うことで、サブルーチンの入力を明確化でき、わかりやすくなります。

```cpp
static int SomeStaticFunc(int value, int times){
	return value * times;
}

int SomeClass::PrivateFunc(){
	return _value * _times; //private変数を用いている
}

//privateメソッドを使った場合
void SomeClass::PublicFuncWithPrivate(){
	if( PrivateFunc() > 100 ){
		//実行内容
	}
}

//staticメソッドを使った場合
void SomeClass::PublicFuncWithStatic(){
	if( SomeStaticFunc(_value, _times) > 100 ){
		//実行内容
	}
}
```

`PublicFuncWithPrivate`より、`PublicFuncWithStatic`の方が、用いている変数も一目でわかりますよね。この意見あんまり見ないですが、static関数の方がよくないですか？

C#は単独の関数が使えないので、代わりにprivate staticメソッドか、別クラスのpublic staticメソッドになります。

## その言語、protectedなくない？
protectedはいつから実装されたのか、興味が湧いたので調べてみました。

オブジェクト指向を最初期に導入し、C++に影響を与えたのがSIMULA([wikipedia](https://ja.wikipedia.org/wiki/Simula))という言語らしいのですが、その初期実装の一部から既にprotectedはあったようです。C++がその影響を受けprotectedを導入し、JavaもC#も導入し、他の多くの言語も影響を受けて、今の形があるようです。

一方で、SwiftとかRustとかPythonとか、一部の言語は文法的にprotectedの役割をするものがないですよね。protectedをサポートしなかった理由は言語それぞれなので乱暴な言い方になってしまいますが、これらの言語の存在が、オブジェクト指向においてprotectedなしでも実用上問題ないことの証明になっています。
iOS、Androidの解像度について(iOSはpt / Androidはdp)

# 概要
スマートフォンの解像度や縦横比は、非常に複雑ですね。
レスポンシブルに対応するには、デザイナーさんとの協力が不可欠です。
（仲良くしましょう！）

そこで、デザイナーさんとの共通用語の単位について、
再度整理したいと思います。

## iOSの解像度

|パターン|比率|対応端末|
|:----|:----|:----|
| @2x | 1pt = 2px | iPhone4/4S/5/5S/5C/SE/6/6S |  
| @3x | 1pt = 3px | iPhone6 Plus/6S Plus | 

iPad系は面倒なので、一旦除きます。

## Androidの解像度

|パターン|比率|対応端末|
|:----|:----|:----|
| hdpi | 1dp = 1.5px | 800✕480px/854✕480px/960✕540px |  
| xhdpi | 1dp = 2px | 1,280✕720px/960✕640px | 
| xxhdpi | 1dp = 3px | 1,920✕1,080px | 
| xxxhdpi | 1dp = 4px | 2,560✕1,440px | 

# デザイナーさんに依頼するときは、iOSはpt、Androidはdpで指定するように伝えましょう。

特にWeb系のデザイナーさんに依頼するときは、注意しましょう。

『余白（パッディング、マージン）、大きさ（幅、高さ）、フォントは、ピクセル指定しない。』

iOSはpt指定、Androidはdp指定すると解像度を意識しなくとも良いので、
その旨を正確に伝えましょう！

# 参考
スマートフォンアプリマーケティング　現場の教科書
UdacityのIntro to Inferential Statistics Lesson9 受講メモ

※自分用メモです。

# Z-critical Value
* α=0.05のときのZ-value をZ-critical Valueという。
![Z Critical Value 0.05   Udacity.png](https://qiita-image-store.s3.amazonaws.com/0/133889/eddcd5aa-dfaf-9500-a8f4-3cfc29dcad89.png)

# Z-score
標本平均のZ-scoreと母集団平均との差について改めて確認。この意味は？
![Z Score   Udacity.png](https://qiita-image-store.s3.amazonaws.com/0/133889/c508ab8d-63a9-e6e2-e781-9b7fb91561a4.png)

# Two-Tailed Test
* Xe=7.13(Z-score -2.59)を有意と考える考え方の説明（かな？）
* α=0.05とした時に、Xe=7.13は上下5%のところに含まれるため有意だと言える。
![Two Tailed Test   Udacity.png](https://qiita-image-store.s3.amazonaws.com/0/133889/6f837494-657c-13a2-bcd1-2f4febaff810.png)
※標本平均がCritical Areaに含まれるような場合は有意だってことかな？

# Hypothesis
* 帰無仮説と対立仮説についての説明
 * Null Hypothesis（帰無仮説）：μ = μI
 * Alternative Hypothesis(対立仮説）：μ < μI, μ > μI, μ ≠ μI

# Fail to Reject the Null
* Null Hypothesisの証明は大変だけど否定は簡単という話。
* 仮説：ほとんどの犬は四肢を持っている。（殆ど=50%以上）
* 検証：10匹の犬を検査したところ、10匹ともに四肢があった。
 * 10匹だけを検査して50%以上の犬が四肢を持っているとは言えない。
 * なので、仮説を証明することはできない。
 ※直感的には分かる気がします。

# Evidence to Reject The Null
* 仮説：ほとんどの犬は四肢を持っている。（殆ど=50%以上） 
* 検証：10匹の犬を検査したところ、６匹の犬が三肢だった。
 * これは仮説を否定できるため、Null Hypothesisを否定できる。  
 (なんとなく、ここが微妙ですがまぁ、そう理解したいと思います）

# Mean and SD
* 例題：この教材のEngagement Dataについて。
* μとσを答える。
![Mean and SD   Udacity.png](https://qiita-image-store.s3.amazonaws.com/0/133889/ac255624-3117-daa0-e064-bc273ac54cfe.png)

# Null Hypothesis
* この時のNull Hypothesisは何となるかを答える。  
（μ = μI　となる選択肢を選ぶ）

# Alternative Hypothesis
* この時のAlternative Hypothesisを選択する。  
（μ < μI, μ > μI, μ ≠ μI となる選択肢を選ぶ）

# one-tailed or two-tailed
* Alternative Hypothesisを片方向で検査するのか両方向で検査するのか、どうするかを決める際の説明。
* 基本的にはtwo-tailedがコンサバで良いが、必要に応じては（明らかに減少又は増加のいずれかを検査する必要が無い場合）one-tailedでも良い。
![One tailed or two tailed   Udacity.png](https://qiita-image-store.s3.amazonaws.com/0/133889/3c2238da-7348-c8c7-dea8-7bc1d0703012.png)

# Conduct Hypothesis Test
* 仮説を検査するための判断基準を言っている。
* Null Hypothesisを否定するのは
　1. 標本平均がcritical resionにあること
　2. 標本平均のz-scoreがz-critical value以上であること
　3. 標本平均の発生する確率がαレベル未満であること。

![Conduct Hypothesis Test   Udacity.png](https://qiita-image-store.s3.amazonaws.com/0/133889/e523c65b-d1b5-61bd-f8ea-5fc78e6db380.png)

# Result of Hypothesis Test
* 図の状況から、Null Hypothesisを否定できるかどうか？
![Results of Hypothesis Test   Udacity.png](https://qiita-image-store.s3.amazonaws.com/0/133889/27c4d543-9d3a-dde9-330d-3484e4ddaf53.png)

# Increase Sample Size
* n = 50のときはどうか？
* n = 50では z-score > z-critical valueとなるためNull Hupothesisを否定できる。  
（多分、サンプル数が大きいと、その標本平均自体の信頼度が上がるからだと思うけど、動画では何も言ってない。）

## おまけ
### n = 30 のSD
![Sampling Distributions_30.png](https://qiita-image-store.s3.amazonaws.com/0/133889/e353c0b5-30f2-07a2-44e6-5ab6750d8d59.png)  
### n = 50 のSD
![Sampling Distributions_50.png](https://qiita-image-store.s3.amazonaws.com/0/133889/e82e62be-3b88-a213-71a1-d1e92eea3621.png)

# Probability of Obtaining Mean
* n = 50の標本平均を持つ母集団があると過程したとき、標本平均 = 8.3未満となる可能性は？
![Probability of Obtaining Mean   Udacity.png](https://qiita-image-store.s3.amazonaws.com/0/133889/51399deb-b822-8b64-0da5-b09a343e3c20.png)
* 標本平均=8.3のz-scoreは、前項より2.44とわかっている。
* z=2.44の確率はz-tableから0.9927
* 1-0.9927=0.0073 
* 標本平均が8.3を下回る可能せはは7.3%となる。
laravel5のページネーションをbootstrap以外のUIKit等CSSフレームワークに適用させる方法

前回書いたこれの続き（ http://qiita.com/qwe001/items/a82054b45acaca164d7c ）
実は私の案件ではCSSフレームワークはbootstrapじゃなくてUIKitなんです。まじかよ。

### 何がしたいか

laravel5の純正のページネーション機能では次のようなHTMLタグが生成されると思います。

View「index.blade.php」

```
<div>{{ $items -> appends(['disp_list' => $items -> perPage()]) -> render() }}</div>
```

↓

```
<div>
	<ul class="pagination">
		<li class="disabled"><span>«</span></li>
		<li class="active"><span>1</span></li>
		<li><a href="(サイトURL)?disp_list=5&amp;page=2">2</a></li>
		<li><a href="(サイトURL)?disp_list=5&amp;page=2" rel="next">»</a></li>
	</ul>
</div>
```

一方で、UIKitのページネーションのCSSは次のような記述が必要です。

```
<div>
	<ul class="uk-pagination">
		<li class="uk-disabled"><span><i class="uk-icon-angle-double-left"></i></span></li>
		<li class="uk-active"><span>1</span></li>
		<li><a href="(サイトURL)?disp_list=5&amp;page=2">2</a></li>
		<li><a href="(サイトURL)?disp_list=5&amp;page=2"><i class="uk-icon-angle-double-right"></i></a></li>
	</ul>
</div>
```

パッと見ただけでも各Class名に「uk-」が必要なんだなということがわかるかと思います。
jQueryのattrで変えようかな…とかも考えましたが、それは正解ではないなというのはわかっていたので、見つけた正解がこちら

### 結論：Landish Paginationを使う

http://landish.github.io/Pagination/

### インストール

ルートユーザーで実行してください

```
composer require landish/pagination
```

インストールが完了したら

```
composer update
```

### 実装

```
<div>{{ $items -> appends(['disp_list' => $items -> perPage()]) -> render() }}</div>
```

↓

```
<div>{!! (new Landish\Pagination\UIKit($items -> appends(['disp_list' => $items -> perPage()]))) -> render() !!}</div>
```

### おわり

え、これだけ？はい。これだけです。なんて簡単。ありがとう海外の神々よ。改宗しなきゃ。
bundle installについて

通常のbundle installをすると、gemはシステムにインストールされる。
複数のプロジェクトを作成していると、Gemのバージョンの競合が発生する。

なので、
bundle install --path vendor/bundle

を行う。
上記コマンドを実行するとvenderディレクトリができてその中にgemがインストールされる。
Spring SecurityとFacebookのOpenID Connectを連携させる

## はじめに
Spring-bootやSpring-MVCを使ったウェブサービスを運用していて、認証にSpring-Securityを使っている場合を想定する。最近では認証にTwitterやFacebook、GoogleのOpenID Connectを使うものも増えてきた。というわけで、Spring-SecurityとOpenID Connectを連携させてみた。かなりニッチな領域のようで、Web上にほとんど情報がなかった。

## 実際にやったこと

- [FacebookのAPIを使うための準備](http://blog.apitore.com/2016/07/17/facebook-api/)
- [Facebook4JでFacebookとOpenID Connectする](http://blog.apitore.com/2016/07/18/facebook4j-openid-connect/)
- [Spring SecurityにFacebookでOpenID Connectする方法](http://blog.apitore.com/2016/07/19/spring-security-facebook-openid/)

ひとことで言えば、Spring-Socialという便利なライブラリがあって、それを使えば主要SNSのOpenID Connectは容易にSpring-Securityと連携できる。と言っても、多少の工夫は必要だった。

## 関連リンク

- <a href="http://docs.spring.io/autorepo/docs/spring-social/1.1.4.RELEASE/reference/htmlsingle/">Spring Social Reference</a>
- <a href="https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase-sec">spring-social-samples</a>
- <a href="https://www.petrikainulainen.net/programming/spring-framework/adding-social-sign-in-to-a-spring-mvc-web-application-configuration/">Adding Social Sign In to a Spring MVC Web Application: Configuration</a>
- <a href="https://github.com/pkainulainen/spring-social-examples/tree/master/sign-in/spring-mvc-normal">spring-social-examples</a>
ECCube3入門者への優しい世界を創るためのTips集 ~ ルーティングとフックポイント編 ~

#対象者
下記に一つでも該当する方
- Symfony2ってなにそれ？Symphonyちゃうの？
- PHP一応かけるよ(元java開発社)
- MVCの心得有り


  ...筆者がモデルケースとなっております。



#3つのProviderを愛でることから始めましょう
いきなりですが、彼らの名前を覚えると、とりあえずはどこのソースが動いているかはわかります。

1.`FrontControllerProvider`
2.`AdminControllerProvider`

彼らの名前を見れば一目瞭然です、URLのルーティングを定義してくれているProvider様ですね。
名前からわかるように管理画面とフロント画面でさっくりわかっています。
とりあえずここを見れば今皆さんが見ている画面の裏で走っているロジックを
特定することができます。


3.`EccubeServiceProvider`

お次はこいつ。
なんでもつめ込まれている(気がする)$appに実際に色々詰めています。
- カート追加時のロジックみたいからのCartに紐づくServiceを呼び出したいな〜
- そそ、商品情報(Product)が欲しいからrepository出してよー
みたいなのに全て答えてくれます。
Sessionも持っています。

なので呼び出したいものが会った時一度このProviderを見てみて下さい。

※この$appはSilexのApplication、つまりPimpleなんですね。
この記事見て$appの使い方がわかった気がしました、えぇ、silexやpimpleも初見でしたとも。
http://iakio.hatenablog.com/entry/2014/02/13/233610

上記の3つを使いこなせば、処理のソースどこからみればわからんヲワタ＼(^o^)／状態を
回避することができるはずです。


また、ECCube3の機能拡張は基本的に**Plugin**という形で作成していきますが、
その際にも(大体の場合は)ServiceProviderを作成することになります。
自作のControllerにアクセスするためのURLを定義したりRepositoryもほいほい$appに登録しちゃって下さい！


#event.dispatcherに歩み寄ってみましょう
本体のソースを見ていると時々出てくる彼。
こんな感じですね。

`$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_INDEX_INITIALIZE, $event);`
これは**プラグインのfunctionをここで実行できるよ**という意味になります。
上の例だと「カートに商品を追加したところだ、これから送料無料チェックするぞ！」というタイミングで
自作のプラグインのfunctionを実行できます。


プラグインの実行タイミングの定義は2種類あってどちらもevent.ymlにて定義します。
公式サイトでは"共通フックポイント", "個別フックポイント"と読んでいます。
http://downloads.ec-cube.net/src/manual/v3/plugin.pdf


#開発するときはこんな流れでやってみるのはいかがでしょうか
(๑′ᴗ‵๑) < ドラゴンボールの商品今よー売れてるから、ドラゴンボール関連の商品3個以上買ってくれたら送料サービスしましょ！

開発者。。。(送料無料系か、、管理画面から指定した金額、個数を超えたら送料無料的な機能は確かあったな、、、)
開発者 <ドラゴンボールの商品というのは、"ドラゴンボール"のカテゴリが付いている商品という認識でよろしかったでしょうか？
(๑′ᴗ‵๑) <うんまぁそんな感じでたのんますわ！
開発者 <かしこまりました！

開発者。。。(まず知らんとあかんことは「どこで送料無料の計算が行われているか」や。商品の個数で送料無料にするか否か的なロジックを~~パクる~~オマージュするしか無いっしょ！
あ、確かカート画面で送料どうこうって書いてた気がする！)
 => カート画面へGO：開発者<送料無料のロジック発見！

開発者。。。(そういや優しい世界では3つのProviderを愛でよと書いてあったから見てみよう。)
FrontControllerProviderさんで`/cart`で検索したら即あたり激アツ。
$c->match('/cart', '\Eccube\Controller\CartController::index')->bind('cart');
CartControllerのindexメソッドを見てみるとそこには開発者さんが探していた送料無料関連のロジックが、、！

ここらへんで処理したいときは、このタイミングやな！
`$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_INDEX_INITIALIZE, $event);`
あとはCartから商品情報を取得してよろしくやってしまいましょう！

まぁこんな感じでプロバイダーとフックポイントがわかっていればあとは
プラグインを作っていくだけですね！
また時間が作れれば次は続編書くかもです！


#あとがき
ECCubeとは長きにわたって愛されてきた日本製のECサイト構築用オープンソース(株式会社ロックオン社(http://www.lockon.co.jp/ )が提供)です。

2007年以来の大型アップデートを行い2015年7月にEC-CUBE3.0がリリースされました。
http://www.ec-cube.net/product/info_3.php

すでにバージョン3.1.0になっており、今後もアップデートが続けられ末永く愛されていくであろうECCube3に関しまして、恩恵を受けている開発者の一人として貢献したく本記事の記載を決めたわけであります。

ぶっちゃけまだメジャーバージョンアップして一年も立っていないので記事やらトラブルシューティングがそこまで落ちていない状態なので、これからECCubeを触る開発者の方の少しでも役に立てればなと思っています。
xgboostでKaggleのタイタニックチュートリアルに挑戦した

## はじめに
[Kaggle](https://www.kaggle.com/)が流行ってる。Kaggleは一言で言えば機械学習のコンテストサイトみたいなものだ。そのKaggleにKaggleで流行中の機械学習手法xgboostを使って、タイタニックチュートリアルに挑戦した記事のリンクをまとめておく。最終的な評価はまだ先になるが、現時点で精度は80%を超えて上位10%には入れた。

## 試行錯誤の軌跡
- [Kaggleで流行中のXgboostを使ってみた](http://blog.apitore.com/2016/06/27/kaggle-xgboost-install/)
- [Kaggleチュートリアル：タイタニックタスクに参加する](http://blog.apitore.com/2016/07/01/kaggle-tutorial-titanic/)
- [Kaggleのタイタニックチュートリアルで色々もがいてみた](http://blog.apitore.com/2016/07/04/kaggle-titanic-trial-and-error/)
- [Kaggleのタイタニックチュートリアルで粘ったら精度80%を超えた](http://blog.apitore.com/2016/07/05/kaggle-titanic-traial-and-error-2/)

上記リンクにはソースコードもある。Windows環境におけるRのインストールから、XgboostおよびRandom Forest、SVM、Neural Networkもインストールし、一通り動作させた。その後、タイタニックチュートリアルで素性の設計を行った。色々と小手先のテクニックを駆使していて、誰でも出来そうな簡単な工夫しかしていないので、内容的には難しくないと思う。
External Frameworkの@IBDesignable/@IBInspectableを有効にする方法


#問題
carthageを使っている方だったら馴染みのある話かもしれないですが, フレームワークのヘッダファイルから `@IBDesignable` `@IBInspectable` の情報が抜け落ちてしまっているらしく, フレームワーク側で`@IBDesignable` `@IBInspectable` に対応していてもその利用者側からは使うことができません。
抜け落ちてしまうのはどうしようもないみたいですが, 対策として利用可能にする方法を調べました。

#対策

フレームワーク利用者側からできる対策と, フレームワーク実装者側からできる対策がそれぞれ見つかりました。

##1.該当クラスを継承して対応する（フレームワーク利用者側）
まず, `@IB~` に対応しているフレームワーク内のクラスを継承したクラスを自分のプロジェクトに追加する。
#### @IBDesignableへの対応
そのクラスに `@IBDesignable` をつけるだけ。
#### @IBInspectableへの対応
`@IBInspectable` が使える変数のgetter/setterとなるcomputed propertyを追加し, `@IBInspectable` をつける。

参考サイトからの引用ですが, こんな感じです。

	@IBDesignable
	class MyCustomView: CustomView {

	    @IBInspectable override var bgColor: NSColor {
    	    get {
       	    	return super.bgColor
	        }
    	    set {
	        	super.bgColor = newValue
	        }
	    }
	}

参考・引用元:https://github.com/Carthage/Carthage/issues/335#issuecomment-223761898

##2.実装クラスをヘッダに含めて対応する（フレームワーク開発者側）
Materialというライブラリが `@IB~` に対応しており, どうやっているのか調べたところ, フレームワークのプロジェクトの

`Target` -> `Build Phases` -> `Headers` -> `Public`

に実装ファイル（`*.swift`）を追加していました。

これで良いのだろうかという疑問はありますが, 手元のフレームワークのプロジェクトでも `@IBInspectable` を利用することができました。

※追記(2016/7/21)
ちゃんとやるんであれば, 面倒ですがインターフェースだけを定義したクラスを別で作って`Headers`に追加したほうが良いかもしれないです。ちなみに`protocol`に`@IB~`をつけるのはできませんでした。

ただ, `@IBDesignable` の方はIB上で `Build Failed` となってしまい利用できず。。こちらは引き続き調べてみます。

参考元(Material):https://github.com/CosmicMind/Material


 　
 
 
以上です。もっと良い方法や, 問題点ありましたら, コメントいただけると嬉しいです！
Google Play Services に含まれてるはずの〇〇クラスがどの aar に入ってるか調べる

# 背景

仕事で某 Android アプリをビルドして実行したところ `com.google.android.gms.iid.InstanceID` というクラスが見つからない的なエラーが出たので調べてみたところ、どうやらアプリに組み込まれてる play-services-\*-\*.\*.\*.aar が足りないっぽいのですが
どの aar に入ってるのかわからなかったので find してみました。

# 方法

※以下、コマンドラインは bash で書いてます。

まず、play-services-\*-\*.\*.\*.aar を適当なディレクトリにコピーします。

```bash
cp ${SDK_PATH}/extras/google/m2repository/com/google/android/gms/play-services-*/${PLAY_SERVICES_VERSION}/*.aar ~/hoge/
cd ~/hoge
```

次に、 aar を解凍します。
実態は zip なので unzip とか使えます。

```bash
find . -name "*.aar" -exec unzip \{\} -d \{\}.d \;
```

解凍すると、中からクラスファイルの入った classes.jar が出てくるので、これも解凍します。
これも実態は zip です。

```bash
find . -name classes.jar -exec unzip \{\} -d \{\}.j \;
```

あとは解凍されたファイルの中から目的のクラスを検索すれば見つかります。
今回の僕のケースでは InstanceID が欲しいので InstanceID.class を find します。

```bash
find *.d/*.j -name InstanceID.class
```

ありました!
僕の求めていた aar は play-services-iid でした。

```
play-services-iid-9.0.1.aar.d/classes.jar.j/com/google/android/gms/iid/InstanceID.class
```
Laravelでシーダーを使う


テストデータをまとめていれたいときとかに。

#シーダーファイルを作る

```
$ php artisan make:seeder PhotoTableSeeder
```

で`database/seeds`にシーダー用のクラスができる。
その中にのrunメソッドにデータの流し込みなどの記述をする。


```php:PhotoTableSeeder.php
<?php

use Illuminate\Database\Seeder;

class PhotoTableSeeder extends Seeder {

	public function run() {
		$authors = ['田中太郎','山田太郎','佐藤太郎'];
		foreach ($authors as $author) {
			DB::table('author')->insert('author')
		}
	}
}
```

とりあえず実行されているかを確認したいだけであれば `print("テスト")`とかもアリ。

###Lumenの場合
`make:seeder` コマンドがないので、自分で作る。
新しいクラスを使ったら `composer dump-autoload` を忘れずに。
（コマンドがあるLaravelではオートロードまでを勝手にしてくれるらしい）

##callメソッドでシーダーファイルを呼び出す

作ったシーダーファイルを`DatabaseSeeder.php`から呼び出す。
このファイルはデフォルトで用意されている。

```php:DatabaseSeeder.php
<?php

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
    
        // 各テーブルへのデータの流し込みを呼び出す
        $this->call('PhotoTableSeeder::class');
    }
}
```

###追記：シーダー実行時のオプション

オプションで`--class`を使えば特定のシーダーだけ実行される。

```
$ php artisan db:seed --class=PhotoTableSeeder
```                                              

#シーダー実行

```
$ php artisan db:seed
```

**DatabaseSeeder.php内のrunメソッド** が実行される。

##シーダーをマイグレーションごと巻き戻したいとき

```
$ php artisan migrate:refresh --seed
```

#毎回全データをクリアしてからシーダーを実行する

runメソッドの最初に **データのクリアの処理** を記述するとよい。

##クエリビルダを使った場合

```php:PhotoTableSeeder.php
public function run() {
	// データのクリア
	DB::table('author')->truncate();
	
	// データ挿入
		・・・・・・
}
```

##DBファザードを使った場合

```php:PhotoTableSeeder.php
public function run() {
	// データのクリア
	\Illuminate\Support\Facades\DB::table('author')->truncate();
	
	// データ挿入
		・・・・・・
}
```
[WebViewシリーズ④]  WebView（アプリ内）のリンクからiTunesが表示できない

# 概要
アプリ内のWebViewにiTunes(itunes.apple.com)のリンクを貼って
リンクをタップしても表示されない問題がありました。

# 対策
外部ブラウザでiTunesを表示する

# 参考ソースコード

```:ViewController.swift
//MARK: - UIWebViewDelegate
extension ViewController: UIWebViewDelegate {
    
    func webView(webView: UIWebView, shouldStartLoadWithRequest
        request: NSURLRequest,
        navigationType: UIWebViewNavigationType) -> Bool {
        
        if let url = request.URL, let scheme = request.URL?.scheme, let host = request.URL?.host {
            
            if scheme.hasPrefix("http") || scheme.hasPrefix("https") {
                
                //itunesへのリンク
                if host == "itunes.apple.com" {
                    UIApplication.sharedApplication().openURL(url)
                }
                return true
            }
        }
        return false
    }
}
```

# こちらも合わせて読んでください♥
[[WebViewシリーズ①]　WebViewのイベントをフックする](http://qiita.com/eKushida/items/a1679e2f438d3fa83c18)
[[WebViewシリーズ②]　WebView内でJavaScriptのメソッドを操作する](http://qiita.com/eKushida/items/055dc36119757b2c304e)
[[WebViewシリーズ③]　WebViewは、ページ内のアンカーへリンクできない？？](http://qiita.com/eKushida/items/dd91615c68f3bd5abdd1)
[[WebViewシリーズ④]　WebView（アプリ内）のリンクからiTunesが表示できない](http://qiita.com/eKushida/items/f7f7195ca0f12b25bca1)

[ゆるふわにUIWebViewでJavaScriptイベントをひろってみる](http://qiita.com/nnsnodnb/items/27fd7c1ca2f8e24ec9c7)
SoftLayerのフリーダムを満喫(IPMIでフルコントロール）

SoftLayerは透明性の高いサービスです。またチケットというサポートを通じていろんなことをお願いできるのです。今回はIPMIのアドミ権限ももらえたので忘れないうちに書いておきます。
ちなみにIPMIですが、http://e-words.jp/w/IPMI.html
SoftLayerは物理サーバーをオーダーすればIPMiを利用してリモートでいろいろなことができます。
たとえば　
SoftLayerベアメタルサーバーにお好みのＯＳをインストールする
http://qiita.com/osonoi/items/72659386ce5846a7fefb
　しかしながら実はこのIPMIフルに使えるかというとそうではなくデフォルトの状態では権限が限られてます。たとえば
![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/59741/be1037a7-d5f7-1284-574c-85e5923bad23.jpeg)

しかし、ここはネゴしだいで何とかなってしまうSoftLayer,以下のようなチケットを投げたら
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/59741/f7dd0198-7af8-3edb-5f31-31a1ae3d6d5f.jpeg)
すぐにアドミ権限をいただけました。
![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/59741/419d026e-8d09-ef8d-9aeb-a335d14a6e02.jpeg)
さきほどの設定も今回はできます。
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/59741/f5ac8862-76b6-77c1-5859-87e2a4964c80.jpeg)



さらにIPMI VIWERを使えば以下のようにSNMPの設定をして何か異常があったときにSNMP Receiverに情報をおくることも可能です。
![snmp.jpg](https://qiita-image-store.s3.amazonaws.com/0/59741/bd3e643c-b9e2-582d-44fb-fcbbf904740a.jpeg)


ちなみにIPMI VIEWEERのダウンロードは
https://www.supermicro.com/solutions/SMS_IPMI.cfm
slack新機能！message buttonを使ってbotkitをレベルアップさせる！

# 概要
2016/06/21にSlackの「[What's New](https://slackhq.com/get-more-done-with-message-buttons-5fa5b283a59#.fd8jzi7t5)」よりSlackの投稿にボタンをつけられる事を知りました。
localのbotkit単体でこちらの機能を試せるのかと思いきや、httpsの対応サーバが必要という事だったので、
httpsサーバを手軽に試すため、Herokuのfreeプランを使ってチャレンジしてみました。

![スクリーンショット 2016-07-19 19.17.06.png](https://qiita-image-store.s3.amazonaws.com/0/50185/47e16894-a4d7-be19-0e8e-73d1b733e2ca.png)

# 手順

## サンプルコードを取得する
[botkitのサンプル](https://github.com/howdyai/botkit/blob/master/examples/slackbutton_bot_interactivemsg.js)があったので拝借して、message_buttonの実装を少しだけ追記しています。
https://github.com/hakamata-rui/slack_message_button.git
※サンプルのProcfileを見るとworkerではなくHerokuにてhttpsのリクエストを受け付ける必要があるためwebで起動する事にしています。

## Herokuでapp登録する
Herokuのappの作り方は長くなるので省略します。
Qiitaで記事をあげている方がたくさんいるのでそちらを参考にしてください。
Herokuでapp作成後、settingsからHeroku Domain(`${APP_NAME}.herokuapp.com`)を控えてください。

## Slackでapp登録する
botkit単体ではmessage_buttonは使えないため、slackの[CreateApp](https://api.slack.com/apps/new)からappとして登録する必要があります。
App Name等は適当に決めて、Redirect URI(s)にはHeroku Domainに/oauthを加えたURL(`https://${APP_NAME}.herokuapp.com/oauth`)
app登録後、Bot Usersからbotの名前を適当に設定します。
最後に「App credentials」を開き、Client IDとClient Secretを控えます。

![スクリーンショット 2016-07-19 19.32.45.png](https://qiita-image-store.s3.amazonaws.com/0/50185/9537108c-2360-66da-8324-c62435980237.png)

## Herokuのapp設定
Herokuのappの環境変数に先ほど控えた変数「clientId」と「clientSecret」を登録します。

![スクリーンショット 2016-07-19 19.35.03.png](https://qiita-image-store.s3.amazonaws.com/0/50185/a6ed5f2b-6c34-341b-6746-fc916ea6388d.png)

## Herokuにデプロイ
アプリをデプロイしてWebServerが立ち上がっている事を確認します。
<img width="810" alt="スクリーンショット 2016-07-19 19.38.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/50185/76051e62-2fd3-e396-7e10-022835463385.png">


## Slackのapp設定
「Interactive Messages」のRequestURLにHeroku Domainに/slack/receiveを加えたURL(`https://${APP_NAME}.herokuapp.com/slack/receive`)を登録してください。
※HerokuでWebServerが立ち上がっている状態でなければ登録できませんでした。

## Slackのappとしてteamに登録
Heroku Domainに/loginを加えたURL(`https://${APP_NAME}.herokuapp.com/login`)をブラウザ等で開き、自分のチームにapp登録してください。
問題なく登録できていれば、botが以下の発言をしてきます。
![スクリーンショット 2016-07-19 19.36.45.png](https://qiita-image-store.s3.amazonaws.com/0/50185/7584ed57-2c7d-55dd-f7d1-3783022c6627.png)

## ボタンを試してみる
buttonと発言するとbotがボタン付きの投稿をしてくるので、ボタンを押してみてください。
押したボタンの名前をbotが返答できていれば成功です！

# 最後に
botkitのconversationもいいですが、buttonが使えたほうがより操作が直感的にできるようになると思います。
herokuもbotkitも初心者で未だ不明な箇所も多々ありますので、ご指摘あればコメントに残してください。
Atom plugin メモ

# Atom plugin メモ
## linter 
linter-ruby ruby用
コードをリアルタイムエラー検出
linter単体では意味なし
## git-plus
⌘+シフト+hでgitの操作ができる
## file-icons
ファイルの種類によってファイルのアイコンが変わって見やすくする
## pigments
cssのコードを読み取って背景にその色を表示する
## color-picker
色の指定をしやすくする
## highlight-column
コードのインデントを見やすくする
## minimap
右にコードの全体像を表示する
## language-apache
シンタックスハイライト（Apache系）
TeraTerm > シリアルのボー・レートのデフォルト値を変更 / 新しい接続先ウィンドウは起動時に開くようにする

```txt:動作環境
TeraTerm 4.90 on Windows 7 pro
```

## やりたいこと

- TeraTermのシリアル通信設定をデフォルトで115200bpsにしたい
- TeraTerm起動時に「新しい接続」ウィンドウを表示したい

TeraTermは設定を変更して「設定保存」すると次回起動時から「新しい接続」ウィンドウが表示されなくなる。
そうなると違うCOMポートで接続したい時に保存されたポートで接続した後に「新しい接続」メニューを実行することになる。
これを避けたい。

## 手順

1. 任意のCOMポートで接続をする
2. [設定]-[シリアリポート]にて「ボー・レート」を115200にする
3. [設定]-[設定の保存]にて設定を保存する
  - この時点で開くエクスプローラ内のTERATERM.INIファイルのショートカットをデスクトップに作る
  - 保存を押す
4. 3で作ったショートカットからTERATERM.INIを開いて下記のように編集する (以下参照)
  

```txt:編集前
;	Port type (serial/tcpip/namedpipe)
Port=serial
```

```txt:編集後
;	Port type (serial/tcpip/namedpipe)
;Port=serial
```

`5. 4で使用したショートカットを削除する


以上でボー・レートのデフォルト値は変更できたが、TeraTerm起動時に「新しい接続先」ウィンドウが開くようにできる。

ボー・レート以外の設定変更にも適用できる。


## 参考

http://oshiete.goo.ne.jp/qa/5158891.html
SwiftでUIButtonTypeが.customのサブクラスを作る


UIButtonをカスタマイズする際に、UIButtonのサブクラスを作ると思います。

そのクラスをボタンに適用する方法として、Storyboardの場合はXcodeの **Custom Class** にクラス名を設定し、併せてButtonのTypeを **Custom** に設定します。これを忘れるとボタンが意図した挙動にならなかったりします。

![xcode.png](https://qiita-image-store.s3.amazonaws.com/0/15905/29be523d-162b-0cd4-ab6c-8afc86628be4.png "xcode.png")


そこで、サブクラス内にコードでButtonTypeを設定できれば良いのでは？
と思い調べてみました。

---

Objective-C時代には、init内で

```
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame: frame];
    if (self) {
        self = [UIButtonbuttonWithType: UIButtonTypeCustom];
    }
    return self;
}
```
みたいなこともできたようです。（動作未検証）

---

ですが、Swift場合は、 **self** への代入はできませんでした。

```
self = UIButton(type: .custom)

// Cannot assign to value: 'self' is immutable
```

また、 **buttonType** というプロパティがあったのですが、

```
buttonType = .custom

// 'buttonType' is a get-only property
```

読み出し専用だと怒られてしまいます。

---

ここで、ひとつの疑問が浮かびました。

**「コードだけで .custom なサブクラスはどうやってつくるのか？」**

下記ページによると、Swiftでは UIButton のサブクラスは **.custom がデフォルト**とのことです。

[http://stackoverflow.com/questions/27079681/how-to-init-a-uibutton-subclass](http://stackoverflow.com/questions/27079681/how-to-init-a-uibutton-subclass)

---

検証してみましょう。

```
let button = MyCustomButton()
print(button.buttonType.rawValue)

// 0
```

0が出力されました。

UIButtonTypeの定義部分をみるとcustom = 0 で正しいようです。


```
public enum UIButtonType : Int {
    case custom
    case system
    case detailDisclosure
    case infoLight
    case infoDark
    case contactAdd
}
```

この場合は、未設定なのでデフォルト値の custom になってると言った方が正しいでしょうか。

そして残念ながら、ButtonTypeをCustomに設定し忘れる問題をコード側で解決することはできないようです。

---

####結論
- **コードの場合はデフォルトで.customの設定となる**
- **Storyboardの場合は忘れずにButtonのTypeをCustomに設定する**
大容量のzipを展開(解凍)できない　bad CRCなどのエラーが発生する場合の対処法

#大容量のzipを展開(解凍)できない　bad CRCなどのエラーが発生する場合の対処法
大容量のファイルをzipで圧縮した場合、展開するときにbad CRCと表示されることがあります。
大容量のファイルでは、同じ.zip拡張子でもZIP64というフォーマット拡張が適用されている場合があります。これに対応していない展開ソフトではエラーになる模様です。
圧縮前のファイルサイズが4GB程度あるとZIP64が適用されるようです。

Linuxでbad CRCが発生した例

```
$ unzip hoge.zip
Archive:  hoge.zip
  inflating: abc.txt     bad CRC 306a1b53  (should be 2a7ce59e)
  inflating: def.txt
  inflating: ghi.txt     bad CRC 90fb626f  (should be dbaa772e)
  inflating: jkl.txt
  inflating: mno.txt     bad CRC d204aa0e  (should be 2b5c71f4)
```

同じファイルをWindowsのLhaplusで解凍した場合、「正常に解凍できません。CRCが一致しないか、出力先ファイルが使用中です。」というエラーが起きます。

##対策
まずは、以下を確認
1. 正常に圧縮ができていたか
2. ネットワークや外部記憶装置を経由してファイルを移動させた際、正常に移動できていたか

ここでは、上記を何度やり直しても解決しない場合の対策を紹介します。
ZIP64をサポートする展開ツール、[7-Zip](https://sevenzip.osdn.jp/)を試してみます。

###CentOSの場合

```
$ sudo yum --enablerepo=rpmforge install p7zip
$ 7za x hoge.zip
```
Amazon Linuxであれば、`sudo yum install p7zip`でインストールできると思います。
「Everything is Ok」と表示されれば問題無く完了です。

###Ubuntuの場合

```
$ sudo aptitude install p7zip
$ 7zr x hoge.zip
```
CentOSと微妙にコマンドが異なるので注意。Ubuntuでは`7zr`です。

###Windowsの場合
Lhaplus等のソフトを使用せず、Windowsのエクスプローラで開き、zipを展開する機能を利用して展開してみてください。
それでもダメなら7-Zipを試してみます。
[ここから](https://sevenzip.osdn.jp/)インストーラをダウンロードして、インストールします。
インストール後はファイルを右クリックしたときのメニューに、7-Zipという項目が追加されるので、展開を選びます。

ここで紹介したソフト
7-Zip　[https://sevenzip.osdn.jp/](https://sevenzip.osdn.jp/)
ElasticSearchやらかし記録

#トラブルの原因
AWSで開発機１のAMI作成する。
AMIから別インスタンス（開発機２）を作る。
＼(^o^)／クラスタに自動追加されてシャーディングされる。
※Elasticsearchのバージョンは1.7.5。2.x系では自動でノード追加されないためこの現象は発生しない。
教訓：AMIからインスタンスを作る時はセキュリティグループを分けて別ネットワーク扱いにして作った後、設定変更してから同一セキュリティグループに入れる。

開発機２のクラスタ名を変えてElasticSearch再起動
開発機１のElasticSearchのステータスがRedに！＼(^o^)／
開発機２はNoIndexに。
　＊クラスタとIndexがひも付けされてるのね。

#とりあえず、Redステータスから回復させる（注意：間違ってます）
＊localhostではなく、プライベートIP(esmaster)でサービス稼働している。
curl -XGET http://esmaster:9200/_cat/shards
で
UNASSIGNED
になっているShardに対して
<pre>
curl -XPOST 'esmaster:9200/_cluster/reroute' -d '{
    "commands": [{
        "allocate": {
            "index": "インデックス名",
            "shard": 1,
            "node": "gCPHfxxpTeim4DA8AFhESg",　＊Nodes Statでnodesで表示されるやつor「node.name」
            "allow_primary": 1
        }
    }]
}'
</pre>
を実行していく。
これをやるとStatusはGreenになるが、データは無い状態になる。
結果、今まで５／５持ってたデータが２～３／５になる。
・・・あっかーん＼(^o^)／
Shardはデータの分割単位。コピーはReplica！

正しくは開発機２を同一クラスタに戻した状態からmoveコマンドでShardのノードを移動させないといけなかった。
https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-reroute.html

<pre>
curl -XPUT 'esmaster:9200/_cluster/settings' -d '{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}'

curl -XPUT 'esmaster:9200/_cluster/settings' -d '{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}'
</pre>
移動前にルーティングを止めて、移動作業が終わってノードを切り離したら再開させる操作も必要。

#結局
Zookeeperのデータも壊れてテーブルが無い（hbase shellのlistコマンドで見えない）のに
org.apache.hadoop.hbase.TableExistsExceptionが発生するようになり、
ググッた情報を実行しても直らないので
hbase.zookeeper.property.dataDir
のパスを変更して対応。

こういう面倒くさいことになるので、AMIからのインスタンス作成時は気をつけましょう。
Laravelのマイグレーションファイルを書き直した時に注意すること


カラムに入れるデータの形を`string`から`unsignedInteger`に書き直した時に

```
$ php artisan migrate:refresh
```

としてみたけども、うまくいかなかった。
上記コマンドは **新しいマイグレーションファイルを追加した時** だけ使えるのかな？

#解決法

1. **sqlite_sequence以外** はDBを削除
2. `$ php artisan migrate` しなおす


DBの「migrations」が残っていると **Nothing to migrate** と出るのでちゃんとsqlite_sequence以外は削除すること。
ShinobiLayer: SoftLayerのSupermicroのBIOS設定をコマンドで変更する方法

#1. はじめに
以前、[SoftLayerのSupermicroのBIOS設定をテキスト形式で取得する方法](http://qiita.com/testnin2/items/976d1116eb2c404882ef)を記載しましたが、ここまでやると、BIOS設定も自分で変更したくありませんか？
本記事では、BIOS設定の変更方法をご紹介します。

#2. BIOS設定一覧を取得する
[SoftLayerのSupermicroのBIOS設定をテキスト形式で取得する方法](http://qiita.com/testnin2/items/976d1116eb2c404882ef)を参照して、BIOS設定情報が取得する。

`sum -i {IPMIのアドレス} -u root -p {IPMIのパスワード}  -c GetCurrentBiosCfgTextFile --file {出力ファイル名}`

#3. 変更箇所を記載したConfigファイルを作成する
上記で得られた出力ファイルを編集し、該当セクションと変更箇所のみを記載したテキストファイルを作成する。以下はAES-NIを無効化する例。

```bioscfg_aesni_disabled.txt
[Advanced|CPU Configuration] 
AES-NI=00                               // 00 (Disable), *01 (Enable)        
```

#4. BIOS設定変更の実施

このテキストファイルを、`./sum -i {IPMIのアドレス} -u root -p {IPMIのパスワード} -c ChangeBIOSCfg --file bioscfg_aesni_disabled.txt`
のように指定して、ホストを再起動すればBIOS設定は変更される。

```
# ./sum -i 10.132.2.248 -u root -p xxxxxxxx -c ChangeBIOSCfg --file bioscfg_aesni_disabled.txt 
Supermicro Update Manager (for UEFI BIOS) 1.6.1 (2016/06/04) (x86_64)
Copyright©2016 Super Micro Computer, Inc. All rights reserved
...........

Status: Start updating the BIOS configuration for 10.132.2.248

************************************WARNING*************************************
    Do not remove AC power from the server.
********************************************************************************

.
Status: The BIOS configuration is updated for 10.132.2.248

Note: You have to reboot or power up the system for the changes to take effect
```
rex0220 フィールドオプションリスト設定プラグイン

# フィールドオプションリスト設定プラグイン

kintone アプリ開発時に、手軽にドロップダウンなどの値リストを設定できるプラグインです。
フォーム設定画面でドロップダウンに 47都道府県をひとつひとつ GUI で設定するのが面倒で作成しました。
値の個数が多い場合に、効率的に設定できます。

下記項目について、値リストとデフォルト値の設定を行います。

・ドロップダウン
・ラジオボタン
・チェックボックス
・複数選択

[rex0220 stores](https://rex0220.stores.jp/) で、販売中です。

## 設定画面例

![flist01.png](https://qiita-image-store.s3.amazonaws.com/0/100572/eaa2ad1f-dc5f-21d7-8e23-89b7040c65fc.png)

# フォーム設定手順

## フォーム画面で項目設定

- フォーム画面で、変更対象の項目を配置します。
- フィールドコード、並びなどを設定します。

![flist02.png](https://qiita-image-store.s3.amazonaws.com/0/100572/a3dc6dd9-1018-1930-001f-ae2e50fab7fb.png)

## プラグイン設定画面で、変更対象項目をチェック

- 変更対象項目をチェックします。

![flist03.png](https://qiita-image-store.s3.amazonaws.com/0/100572/6c96b63e-2961-2b2d-cc68-9d030a2d1d90.png)

## リスト欄、デフォルト欄をクリックして、編集モード

- 直接テキストを変更するか、テキストをコピペして変更します。
- 一行で、一個の値になります。
- 変更後、タブキーで確定します。
- 値が変更された欄は、グリーンに変わります。

※テストでドロップダウンに値を300件指定したところ、問題なく設定されました。

![flist04.png](https://qiita-image-store.s3.amazonaws.com/0/100572/65143f09-d5e2-c6c8-e26b-261176da74de.png)

## 保存

- 変更完了後、「保存する」をクリック

![flist05.png](https://qiita-image-store.s3.amazonaws.com/0/100572/16dcf308-3d7b-7644-d50b-8137be6bc956.png)

## フォーム画面で変更内容の確認

- 必ず、フォーム画面で変更内容を確認してください。
- 確認後、本番環境へ反映します。

![flist06.png](https://qiita-image-store.s3.amazonaws.com/0/100572/e705ae04-b317-5830-c665-76bec54be6ee.png)

## 保存時のエラー

- リスト内に重複データがある場合、エラーダイアログ表示します。
- 変更内容を訂正してください。

![flist07.png](https://qiita-image-store.s3.amazonaws.com/0/100572/07e0d52e-837d-592e-b067-6ce5efe1a450.png)

## フォーム設定APIのエラー

- フォーム設定APIでエラーが発生した場合、エラーダイアログ表示します。
- エラー内容を確認して、変更内容を訂正してください。

下記エラー画面例は、デフォルト値の指定エラーです。

![flist08.png](https://qiita-image-store.s3.amazonaws.com/0/100572/d6b85226-d111-9c27-6275-5f537593a7ca.png)


# フィールドオプションリスト設定プラグインの追加

![flist11.png](https://qiita-image-store.s3.amazonaws.com/0/100572/8824a003-a3aa-442d-cbc7-0a68557cc597.png)



# 注意事項

- 本プラグインによって、オプションリストを変更した場合、必ずフォーム画面で変更内容を確認してから、本番環境に反映してください。
RubyMine で文字入力時の自動折り返し (wrap) を有効・無効化する

# 問題

RubyMine で文字入力時に 80 桁を超えると、自動で折り返しされてしまう。自分で設定した気もするが、どのオプションで制御するのか分からなくなってしまった。

# 解決策

`Preferences > Editor > Code Style > Default Options > Right margin (columns) > Wrap on typing` を true にすると文字入力時に自動で折り返し (wrap on typing) される。false だとされない。
【Linux】【PHP】CentOS7にPHP5.6インストール時に「Requires: httpd-mmn = 20051115」エラー

参考：[CentOS7にApache2.4とPHP5.6をインストールしようとしたらhttpd-mmnの違いでエラーが出る](http://increment-log.com/centos7-apache24-php56/)

##事象

yumでPHPをインストール中にエラー。

httpd-mmnとはapacheのソースコードに定義されている互換性に関する定数で、Apacheのhttpd-mmnは『20120211』なのに、PHP5.6が要求しているhttpd-mmnは『20051115』でエラーになっている。

```
Error: Package: php-5.6.23-1.el6.remi.x86_64 (remi-php56)
           Requires: httpd-mmn = 20051115
           Installed: httpd-2.4.6-40.el7.centos.1.x86_64 (@updates)
               httpd-mmn = 20120211
               httpd-mmn = 20120211x8664
               httpd-mmn = 20120211-x86-64
```

##原因・解決方法
CentOS6用のepelとremiを入れていたことが原因。
epelとremiを削除して、yumのキャッシュ削除して、CentOS7用のepelとremiを入れると解決。

①インストールされているepelとremiを探す

```
rpm -qa | grep epel
rpm -qa | grep remi
```

②epelとremiを削除
上記で確認したパッケージ名を指定して削除する。

```
rpm -e XXXX
rpm -e XXXX
```

③CentOS7用のepelとremiをインストール

```
yum install epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

④キャッシュ削除
まずはコマンドでキャッシュ削除。

```
yum clean all
```

/etc/yum.confの以下がキャッシュとのこと。これを削除。
\$basearch：システムのアーキテクチャ
\$releasever：Red Hat Enterprise Linuxのバージョン

```
[main]
cachedir=/var/cache/yum/$basearch/$releasever
```

```
rm -rf /var/cache/yum/x86_64/7/remi
rm -rf /var/cache/yum/x86_64/7/remi-php55
rm -rf /var/cache/yum/x86_64/7/remi-php56
```

⑤PHPインストール

```
yum install --enablerepo=remi,remi-php56 php php-mbstring php-mysql
```
まだキーバインド使わずに消耗してるの？


Mac歴が長くても意外と知らない人が多いと感じている私です。
今回は開発が爆速になるキーバインドについてちょっとした記事にしていきます。

## キーバインドとは

簡単にいえばショートカットキー
そもそもは我々Vimmerにとって永遠の敵である `Emacs` のもの...

## カーソル移動

- `control + a` : 行始めに移動(Vimでいう `0`)
- `control + e` : 行末に移動(Vimでいう `shift + a`)
- `control + f` : 1つ後ろに移動(カーソルキーでいう→、Vimでいう `l`)
- `control + b` : 1つ後ろに移動(カーソルキーでいう→、Vimでいう`h`)
- `control + p` : 1行上に移動(カーソルキーでいう↑、Vimでいう `k`)
- `control + n` : 1行下に移動(カーソルキーでいう↓、Vimでいう `j`)

## 削除

- `control + d` : 右側の文字を削除します。deleteの逆です(Vimでいう `x`)
- `control + h` : deleteと同じ動作(Vimでいう `shift + x`)
- `control + k` : カーソルから右側を切り取り

## 貼り付け

- `control + y` : control + kなどでコピーしたものを貼り付け(OS共有なし)

## おまけ

### Vim

```.vimrc
inoremap <C-e> <Esc>$a
inoremap <C-a> <Esc>^a
noremap <C-e> <Esc>$a
noremap <C-a> <Esc>^a
```

Vimmerは上記を設定すると同じようにキーバインドを使用できます。

### 組み合わせ

`shift + control + e` をすると簡単に行末までハイライトすることができるぞ！！

## まとめ

まだまだありますが、ざっとこのぐらいできればカーソルキー連打の鈍足開発が爆速になるのではないでしょうか！？
HTML 【保存版!!】最初に貼るべきテンプレート



```html:▪️テンプレート1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xm1ns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>PHP入門</title>
</head>
<body>
	<!-- ここにプログラムを記述します -->
</body>
</html>
```



```html:▪️テンプレート2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xm1ns="http://www.w3.org/1999/xhtml">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript">


<title>PHP入門</title>
</head>
<body>
	<!-- ここにプログラムを記述します -->
</body>
</html>
```


<dl>
<dt><font color="ff0000">▪️htmlspecialchars関数</font></dt>
HTMLには特殊な意味（役割）を持っている文字（特殊文字）があり、その文字をHTMLでの意味（役割）としてではなく、ただの文字（見た目は記号）として表示する（させる）ために文字参照値（という言い方が正しいかどうかは分からないが）に置き換える機能を持つ関数。
HTMLタグの効果を打ち消して、いたずらコードを送り込まれないようにしている。
<dt>
<font color="ff0000">▪️$_REQUEST</font>
</dt>
これは 'スーパーグローバル' あるいは自動グローバル変数と呼ばれるものです。 スクリプト全体を通してすべてのスコープで使用することができます。
現在の$_GET、$_POST、$_COOKIEなどの内容をまとめた変数。

<dt>
<font color="ff0000">▪️スーパーグローバル</font>
</dt>
スクリプト全体を通してすべてのスコープで使用可能な変数のこと。

</dl>
[htmlspecialcharsについて(参考ページ)](http://d.hatena.ne.jp/porco_webangya/20130904/1378259713)
[$_REQUESTについて(参考ページ)](http://www.tryphp.net/phpref-request/)
ShinobiLayer: LSI(AVAGO) MegaRAIDのFirmware Upgrade方法

#1. はじめに
[SoftLayer Event] ID:30731783にて、LSI(AVAGO) 9361-8i RAIDのfirmware versionが4.650.00-6383未満の場合には、高負荷時にHDDがランダムにofflineになるという重要な障害が通知されていました。
本記事では、このような深刻な障害が見つかった場合に、FirmwareのUpgradeをどのように実施するか？をご紹介したいと思います。

#2. 現行のFirmwareのversionを確認する方法
OSを再起動＋IPMIコンソールを使うことで、RAIDカード情報をコンソールから確認する方法はこちらを参照ください。
http://qiita.com/testnin2/items/5a58de9e070dd146320d

StorCLIコマンドを使って確認したい場合＋VMware環境下でStorCLIコマンドが導入されていない場合はこちらを参照ください。
http://qiita.com/testnin2/items/cf0a6846240b7e955a4b

#3. FirmwareのUpgrade
Firmware Upgrade手順を記載します。

1. 事前のホストサーバー電源停止（shutdown）。VMware環境下では、vSphere Web Clientからホストサーバーをメンテナンスモードに変更＋ホストサーバーの電源停止を実施しておくと良いでしょう。
2. SoftLayerのCustomer Portalにおける該当ホストのDevice Detailsから、Action -> Firmware Upgardeを選択
![009_modify.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/1afc4107-2dc4-b7a5-5c7d-c2bfdf2481b5.jpeg)
![010_modify.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/59b8df3a-c650-5fa0-3a0f-578c9fedb269.jpeg)

3. ひたすら待つ（１時間ぐらい？）・・・ちなみに、バックグラウンドでの作業は、IPMIコンソールから確認することも可能です。
![011_modify.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/c8a0a22d-db6a-2f68-a466-e7dcaf8f6295.jpeg)


#4. 確認

![013_modify.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/9b19a040-747a-3cea-2db1-f9fd7745944c.jpeg)

```text:コマンドでの確認
[root@ibmesx02:~] /opt/lsi/storcli/storcli /c0 show|grep -i version
BIOS Version = 6.31.03.0_4.17.08.00_0x06140200
FW Version = 4.650.00-6383
Driver Version = 6.605.08.00
```
S3に別アカウントからアクセスする


いわゆるクロスアカウント
http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html


今回やること
---

マネジメントコンソール上であるAWSアカウント（A）から、他のAWSアカウント（B）の特定のS3バケットにアクセスする



ポリシー作成
---

AWSアカウント（B）にログインする。


![スクリーンショット 2016-07-19 17.20.16.png](https://qiita-image-store.s3.amazonaws.com/0/18331/41ae0409-6eb2-2a4f-8163-42e2471df239.png "スクリーンショット 2016-07-19 17.20.16.png")

Create Policyを選択して

![スクリーンショット 2016-07-19 17.21.02.png](https://qiita-image-store.s3.amazonaws.com/0/18331/55fc4d89-139f-7ebc-506b-3ef9f41459fb.png "スクリーンショット 2016-07-19 17.21.02.png")


Create Your Own Policyを選択

以下を設定

~~~
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::よみこみたいバケット名"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::よみこみたいバケット名"
        }
    ]
}
~~~


Role作成
---

![スクリーンショット 2016-07-19 17.24.33.png](https://qiita-image-store.s3.amazonaws.com/0/18331/d19229a3-4b8e-53bb-f5ef-587994bce48d.png "スクリーンショット 2016-07-19 17.24.33.png")


「Provide access between AWS accounts you own」を選択


![スクリーンショット 2016-07-19 17.25.39.png](https://qiita-image-store.s3.amazonaws.com/0/18331/dbca977a-e8ea-7b2a-a4bf-6268899cd946.png "スクリーンショット 2016-07-19 17.25.39.png")


Account IDの欄には、「AWSアカウント（A）のアカウント番号」をいれる

attach policyでさきほどのポリシーをアタッチ

![スクリーンショット 2016-07-19 17.29.16.png](https://qiita-image-store.s3.amazonaws.com/0/18331/d51642ce-beef-8b4e-8914-7644cf3fc4f6.png "スクリーンショット 2016-07-19 17.29.16.png")

Role ARNの値をメモる

AWSアカウント（A)からS3にアクセスできるようにする
---

AWSアカウント（A）にログインする


グループの作成し、

![スクリーンショット 2016-07-19 17.37.10.png](https://qiita-image-store.s3.amazonaws.com/0/18331/82481a64-f674-6bd7-d461-94aeb4b21fbd.png "スクリーンショット 2016-07-19 17.37.10.png")


Create Group Policyを選択し、以下をいれる

~~~
{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "さきほどつくったIAM RoleのARN"
  }
}
~~~

またさきほどつくったIAM Roleに記載されていたURLにアクセスすると、操作ができます。
Webサイトのビルマ語（ミャンマー語）対応まとめ

ビルマ語は、ここ最近のOSでUnicodeのフォントに対応していますが、
多くのミャンマー人は未だに偽UnicodeといわれるZawgyi-oneというフォント（文字コード）を使っているそうです。
そのため、Webサイト側でビルマ語に対応しようとなると、どの文字コードを使うのか、Webフォントを使うのかという問題になります。
今回はそこで参考にしたサイトなどを紹介します。

ちなみにミャンマー語ってビルマ語って言うんですね。
Google翻訳の言語の選択肢名もビルマ語となっていました。

![image](https://qiita-image-store.s3.amazonaws.com/0/103853/0b1916e9-d2b1-e93d-884b-a0a5ae7bd331.png)

…と思いきやこっちはミャンマー語でした。

# はまったポイント

* IE10以下とiOSではセレクトボックス（プルダウン）にWebフォントが利かない

# 結局どうしたか

サイトはZawgyi-Oneをインストールしているミャンマー人が見ることを前提とし、
セレクトボックスのみ、システムのフォントを指定する！
※Zawgyi-Oneがインストールされていない人が見るとセレクトボックスだけ文字化けになる。

# 参考にしたサイト

## エヤワディ Blog
ビルマ語勉強中？の著者によるブログ
Webサイトのビルマ語対応について参考にさせていただきました。
http://www.ayeyarwady.com/blog/

### ビルマ語（ミャンマー語）のUNICODEはUNICODEじゃなかった？
http://www.ayeyarwady.com/blog/archives/1125

### ついにGoogle翻訳にビルマ語（ミャンマー語）が
http://www.ayeyarwady.com/blog/archives/2682

### ビルマ語（ミャンマー語）フォントがなくてもビルマ語を表示する方法
Webフォントの技術について書かれていました。
http://www.ayeyarwady.com/blog/archives/1239

# 使用したフォント
Zawgyi-Oneフォントを使用しました。
ミャンマー大統領オフィスのサイトでもダウンロードできるフォントです。
http://www.president-office.gov.mm/zg/

セレクトボックスでの文字化けが発覚するまでは、WebフォントとしてNo more tofu font略してnotoフォントというフォントを使用しました。
tofuというのは文字化けのときに出てくる□のことです。
Googleで使用されていて、OFL（フリーライセンス）で、唯一文字化けが無かったため採用しました。
これはUnicodeです。

### Beautiful and free fonts for all languages
https://www.google.com/get/noto/

### Web Font Generator
ttfファイルをアップロードするとWebフォント用ファイルとcssを生成してくれるサイト
https://www.web-font-generator.com

# その他参考にしたサイト

### タイ近隣３国のフォント
お勧めフォントを紹介しています。
結局これは使いませんでしたが。
http://superscript.sakura.ne.jp/special-neighborfonts.html

### BBC(ニュースサイト)
ビルマ語を文字化けさせずに表示させているサイト
http://www.bbc.com/burmese

### ビルマ文字一覧
https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%AB%E3%83%9E%E6%96%87%E5%AD%97

### 文字コードの考え方
文字コードとフォントの違いが分からなくなったため見ました。
フォントは文字コードを文字として表現するものでしかないですが、
どの文字コードをどの文字で表現するかを定義しているので、
文字コードが違えばフォントも変えないと文字化けが起こります。
http://homepage2.nifty.com/zaco/code/page01.html

### 意外と多い!? Web フォントに対応していない環境 ～2012 年の Web フォント事情
Webフォントについて独自調査のシェアなど
http://tech.nitoyon.com/ja/blog/2012/04/26/web-font-popularity/

### HTML 作文で、 \<pre> … \</pre> の中では文字サイズの指定がないと、なぜ文字が小さくなりますか？
User Agent Stylesheetが効いてしまう問題が発生したため調べたら見つけました。
実際の解決策は、単にcssで指定してやることだったようです。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13118976048
メール送信テストをしたいときの手順メモ

# きっかけ
既存アプリのメール送信部に改修が入ったが、添付ファイルが機密性が高いので外部メールアドレスを使ってテストできない。

# 見つけたツール
FakeSMTP
https://nilhcem.github.io/FakeSMTP/

# 手順
1. zipファイルをダウンロードして解凍
2. jarファイルをダブルクリックで起動
3. メール送信を行うプログラムを起動して、受信されるのを待つ

# FakeSMTPのいいところ
- 外部にメールが飛ばないので、でたらめなアドレスでもテストが出来る。
- 外部にメールが飛ばないので、機密性が高いファイルの添付テストも容易に出来る。


# はまったところ
javamailを使うということは、SMTPホスト(プロパティキー：mail.smtp.host)はおそらくプロパティファイル等に定義していることが多いと思われる。
FakeSMTPを使ってテストする時は、SMTPホストはlocalhost、あるいは127.0.0.1を指定しないとfakeSMTPで受信出来ない。
ポート番号はデフォルトの25で大丈夫だと思うが、変更は可能。



# 書いた理由
SMTPホストのアドレスはちゃんとlocalhostを指定しないとダメ、と書いてあるサイトが無かったので。
InputMethodManager#setInputMethodを利用してもアプリ内からはIMEを変更できないっぽい

アプリ内でIMEを切り替えたいメソッドがあるとおもったけど、実は動作しなかった。
セキュリテイの観点から禁止されているっぽいけど、たどり着くのに時間がかかったので、メソッドの説明か上の方に書いて欲しかった。

- A client application can ask that the system let the user pick a new IME, but can not programmatically switch to one itself. This avoids malicious applications from switching the user to their own IME, which remains running when the user navigates away to another application. An IME, on the other hand, is allowed to programmatically switch the system to another IME, since it already has full control of user input.
【Android】【Kotlin】Kotlinとretrolambdaは併用できないっぽい。

# 何の記事？
既存のAndroidアプリの一部にKotlinを導入しようとしたらコンパイルエラーが出てしまった問題について。

# 結論
retrolambdaとKotlinを併用するとコンパイルエラーが出る。

# 実際のコード
####Kotlinで書かれたデータクラス
```HogeClass.kt
package hoge.myapplication

data class HogeClass(var name: String = "俺だよ俺俺。") {
}
```
####上記クラスを呼び出すJavaで書かれたMainActivity
```MainActivity.java
package hoge.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import hoge.myapplication.Test.HogeClass;

public class MainActivity extends AppCompatActivity {

    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        HogeClass hoge = new HogeClass();
        tv = (TextView) findViewById(R.id.main_tv);
        tv.setText(hoge.getName());
    }
}
```

で、コンパイルすると

```
Error:(15, 9) エラー: シンボルを見つけられません
シンボル:   クラス HogeClass
場所: クラス MainActivity
Error:(15, 30) エラー: シンボルを見つけられません
シンボル:   クラス HogeClass
場所: クラス MainActivity
```

こんなエラーが出る。

どうやら、retrolambdaを使うとこのエラーが出るようだ。
retrolambdaをbuild.gradleのplug-inから削除したら治った。

併用する方法があるのかもしれないけど、
ラムダ式使うならKotlinで書けやってことなのかもしれない。

retrolambdaを使っている既存プロジェクトにKotlinを導入すると、
既存のラムダ式を全て改修する必要が出てくる可能性があるのでよく検討したほうがいいかも。
GroupedなUITableViewで上端のmarginをとりたい

```swift
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 0 {
        return .min
    } else {
        return super.tableView(tableView, heightForHeaderInSection: section)
    }
}
```

* `return 0`だとうまくいかない。
* `0`より大きい値を返すことで変更できるため、`CGFloat.min`を指定することで上端のmarginを消し去れる。
wgrep-ag で保存出来なくなって諦めかけた話

`ag-group-matches` を `nil` にしたら解決しました。

```
M-x customize-variable RET ag-group-matches RET
```

`ag` のデフォルト出力が変わったんですかね？

- [Recent update to output format seems to have broken wgrep · Issue #119 · Wilfred/ag.el](https://github.com/Wilfred/ag.el/issues/119)

`--group` の代わりに `--nogroup` が使われる様に、 `ag-group-matches` を `nil` にして対応した、というお話でした。

```shell-session
$ ag --version
ag version 0.32.0

Features:
  +jit +lzma +zlib
```
Jenkins の Pipeline Plugin は、今のところ無効化できないようだ

# 概要

Jenkins の Pipeline plugin で作ったジョブを無効化(disable)にしようと思ったのだが、できなかった

# 結論

いま(2016-07-19)はサポートされていないようだ

# 調べたこと

Google で調べて、次のものを見つけたら

* [[JENKINS-33821] Pipeline job s can`t be disabled - Jenkins JIRA](https://issues.jenkins-ci.org/browse/JENKINS-33821)

次のISSUEに行き着いた。

* [[JENKINS-27299] Refactor Disable Build feature out of AbstractProject for Workflow Compatibility - Jenkins JIRA](https://issues.jenkins-ci.org/browse/JENKINS-27299)
プラグイン「UploadPack」でwebroot以上に保存した画像を表示する

前回[Uploadpackで画像をwebrootより上に保存する](http://qiita.com/xx_small/items/049680985e5734d74fe3)だけを行ったので、
今回は出力まで。

```html
<img alt="" src="/view/image/6/test.png">
```
というタグが生成される想定なので、
手っ取り早く`ViewController.php`に`image`というアクションを作成。
(色々なところで使うなら`AppController.php`とかコンポーネントにしてもいいかも。)

```php
public function image($id, $image_name)
{
    $data_dir = ROOT. DS. 'data'. DS. 'img'. DS;
    $file = sprintf($data_dir. '%s/%s', $id, $image_name);

    if (file_exists($file)) {
        $this->response->file($file);
        return $this->response;
    }

    return false;
}
```

画像が保存されているフォルダへのパスは、[コア定義定数](http://book.cakephp.org/2.0/ja/core-libraries/global-constants-and-functions.html#id3)を参考にして`ROOT`からのパスを指定。

```php
 $data_dir = ROOT. DS. 'data'. DS. 'img'. DS;
```

引数からファイルまでの絶対パスを生成して($file)、
ファイルが存在していれば`response`で表示する。
responseについては[ファイルを送る](http://book.cakephp.org/2.0/ja/controllers/request-response.html#cake-response-file)参照。

これでwebrootより上に保存した画像が表示されるはず。