OmniAICreator/Qiita-1.07M huggingface dataset:
Zybo > Chronicles blog03 > PRINT function @ libsrc->standalone_v3_08_a directory in your BSP folder | print() | STDIO printf()

Adam Taylorのblogより

https://forums.xilinx.com/t5/Xcell-Daily-Blog/Zynq-and-MicroZed-say-Hello-World-Adam-Taylor-s-MicroZed/ba-p/367469


```
#include <stdio.h>
#include "platform.h"

void print(char *str)'

int main()
{
    init_platform();
    print("Adam Edition Microzed Using Vivado How To \n\r");
    return 0;
}
```

改行コードが`<CR><LF>`でなく`<LF><CR>`なのがもやもやする。
ある測定器もこういう改行コードだったが、偶然だろうか。


> Hence the example from Xilinx uses <font color=red>the PRINT function</font>, which is declared under <font color=red>the libsrc->standalone_v3_08_a</font> directory in your BSP folder. 
This function is a much simpler output routine. Information on this function and others can be found in Xilinx user guide UG643 (“OS and Libraries Document Collection”).

...

> Changing the file to use the STDIO PRINTF function in place of <font color=red>the PRINT function</font> dramatically increases the size of the program. 
For the Zynq-based MicroZed system, program size is not too important because we have lots of DDR SDRAM capacity. However, program size can be considerable for smaller MicroBlaze-based applications.

MicroBlazeを使う場合はprint()を使うほうがprintf()よりメモリ節約できるとのこと。
こういうのはMSP430の時にもあった。
JavaでExceptionのStackTraceが出力されない事がある。

# JavaでExceptionのStackTraceが出力されない事がある。
## JVM起動中に同じExceptionが何度も発生する場合、StaceTraceが最適化されることが原因らしい。
まさか、StackTraceが出力されなくなる事があるとは思ってませんでした。
Tomcatなど、長時間起動しているJVMでは当然、同じフローで同じExceptionが発生し続ける場合があるので、
そういう状況にあたるかもしれませんが。（まさに自分はそうでした）

下記の設定で、最適化の実施有無を制御できるようです。
`-XX:-OmitStackTraceInFastThrow`

Java7でこの仕様を初めて認識したが、Java5から設定があったようです。
Java8でも同様の設定があるかどうかなどは調べてみる必要がありそうです。

参考：http://piyolian.blogspot.jp/2012/02/java-omitstacktraceinfastthrow.html
Unity入門　~アニメーションを行うまで~

#Unityでのアニメーションを行うまでの入門です

Unityの入門知識を色々漁っていましたが、中々良いものがなかったので自力でまとめました。

Unityに元々ある機能を利用し、簡単にアニメーションを行うまでのメモです。
**本当にUnityを知らない人向けのものです。**

##説明
Unityのインストールは、Unityの公式ページに行けば簡単にできます。
http://unity3d.com/jp/get-unity/update
Unityを起動すると、以下の画面が表示されるはずです。![スクリーンショット 2016-01-29 20.53.36.png](https://qiita-image-store.s3.amazonaws.com/0/109795/7b39e5f2-9a2c-f7ea-dfeb-d5a3c5c27c6f.png)

この画面上にオブジェクト（物）を配置し、コードを書くことでゲームを作ることができます。
この３d空間ですが、スクロール動作でズームアップとズームアウト。
左上の手を選択した状態で、右クリックを押しながらドラッグすることで、空間内を自由に動くことができます。また、左クリックを押しながらドラッグすると視点変更ができます。


###では実際にオブジェクトを配置してみましょう。
以下のようにCubeを選択してみてください。

![スクリーンショット 2016-01-29 20.53.51.png](https://qiita-image-store.s3.amazonaws.com/0/109795/51bf597c-cf25-fd49-f1c6-4c70c3140e1c.png)

そうすると空間の中に、白い立方体が出現したはずです。それが**オブジェクト**です。
右上の十字（？）などのアイコンを選択した状態で、画面上のオブジェクトをドラッグすることでオブジェクトを操作することができます。

###ではオブジェクトをアニメーションさせましょう
Unityではアニメーションを行うために、AnimationControllerとAnimationが存在します。
AnimationControllerが脳みそ。Animationが「走る」「飛ぶ」といった動作をイメージしてください。

最初に、下の方にあるAssetの中で左クリックをして、下のようにAnimationControllerを作成しましょう。
![スクリーンショット 2016-01-29 20.55.28.png](https://qiita-image-store.s3.amazonaws.com/0/109795/87aa288c-aa93-7fa0-14ad-6c84a1033ce1.png)

おそらくアセットの中にNew Animator Controllerという名前の物があるはずです。
AnimationController（脳みそ）ができたら、次はAnimation（動作）を作りましょう。
下の写真のようにAnimationウインドウを開いてください。

![スクリーンショット 2016-01-29 20.57.06.png](https://qiita-image-store.s3.amazonaws.com/0/109795/ee1d87b1-e5a3-cc66-721f-2bbd422c5868.png)

正しく開くことができたら下の写真のようになるはずです。Unityの上の再生ボタンが赤くなっていない場合は、Animationウインドウの赤線をドラックしてみてください。
Unityの再生ボタンが赤くなっていれば、それは現在アニメーションの録画モードになっている事となります。

![スクリーンショット 2016-01-29 20.59.40.png](https://qiita-image-store.s3.amazonaws.com/0/109795/3f47964c-548a-b330-28d9-0a35c088ff72.png)


録画モードに正しくなっていること、Animationウインドウのタイムライン（赤の線）が０になっていることを確認して、右のTransformのRotationのxの値に**好きな値を入力した後、再度０を入力してください**
次にAnimationウインドウのタイムラインを0.30にずらし、Rotationの値を90にしてください。
上手くいけば、Animationウインドウが下のようになります。

![スクリーンショット 2016-01-29 21.26.29.png](https://qiita-image-store.s3.amazonaws.com/0/109795/22e382c5-ec96-9135-f2f9-adb0671ce139.png)

同じようにタイムラインが1.00の時はxに180、1.30の時に270、2.00の時に360を入力してください。

![スクリーンショット 2016-01-29 21.27.52.png](https://qiita-image-store.s3.amazonaws.com/0/109795/5d401d13-be32-c7e7-6320-4d55a47aa287.png)

全部が終了した後にAnimationウインドウの再生ボタンを押すと、立方体が回転するはずです。
このようにUnityでの簡単なアニメーションはコードを書かずに作り上げることができます。
女子大生が選ぶ可愛いターミナル環境＊♪

[![https://gyazo.com/a32caccc7454aebd5f5a9e8b769728f0](https://i.gyazo.com/a32caccc7454aebd5f5a9e8b769728f0.jpg)](https://gyazo.com/a32caccc7454aebd5f5a9e8b769728f0)

# :kobito: ターミナル: [iTerm2](https://www.iterm2.com/)
## 背景設定　Preferences->Window
iTerm2を使うとターミナルの背景に画像を使うことができます。
おすすめはディズニーランドやディズニーシーで夜に撮影した写真です :two_hearts: 
無条件に可愛くなります :sunglasses: 

##カラー設定　Preferences->Profiles

||Normal|Bright|
|:--|--:|:--:|
|Black|<font color="#000000">■</font>#000000|<font color="#666666">■</font>#666666|
|Red|<font color="#ff3399">■</font>#FF3399|<font color="#ff3366">■</font>#FF3366|
|Green|<font color="#33ffcc">■</font>#33FFCC|<font color="#99ff33">■</font>#99FF33|
|Yellow|<font color="#ccff99">■</font>#CCFF99|<font color="#ffff33">■</font>#FFFF33|
|Blue|<font color="#6666ff">■</font>#6666FF|<font color="#9999ff">■</font>#9999FF|
|Magenta|<font color="#ff0099">■</font>#FF0099|<font color="#ff99ff">■</font>#FF99FF|
|Cyan|<font color="#99ffff">■</font>#99FFFF|<font color="#66ffff">■</font>#66FFFF|
|White|<font color="#ffccff">■</font>#FFCCFF|<font color="#ffccff">■</font>#FFCCFF|
|Foreground|<font color="#ffccff">■</font>#FFCCFF||
|Background|<font color="#000000">■</font>#000000||
|Bold|<font color="#ffffff">■</font>#FFFFFF||
|Selection|<font color="#ff3399">■</font>#FF3399||
|Selected Text|<font color="#ffffff">■</font>#FFFFFF||
|Cursor|<font color="#ff0099">■</font>#FF0099||
|Cursor Text|<font color="#ffffff">■</font>#FFFFFF||

# :kobito: zsh + oh-my-zsh
テーマはpygmalion
preztoのsteeefも可愛い♪

# :kobito: tmux

```
$ brew install tmux
```

# :kobito: Vim
テーマ,カラー設定

```~/.vimrc
colorscheme molokai
highlight LineNr ctermbg=black ctermfg=cyan
highlight StatusLine ctermbg=white ctermfg=darkred
highlight StatusLineNC ctermbg=white ctermfg=lightblue
highlight VerSplit ctermbg=magenta ctermfg=magenta
```

[![https://gyazo.com/7017c140066bd8208c55dd3da6db365e](https://i.gyazo.com/7017c140066bd8208c55dd3da6db365e.jpg)](https://gyazo.com/7017c140066bd8208c55dd3da6db365e)


# :kobito: 最後に
もっと可愛いターミナルを作る方法があれば教えてください。
Zybo > Chronicles blog01 > Project作成から > FIXED_IO | UCF | M_AXI_GP0_ACLK | FCLK_CLK0

Zybo関連のblogを参考にしていたが、基本的なことが分かっていないのでその辺りを勉強しないといけない。

Kindle版を読み始めたAdam Taylorのblogを参考にして、未学習の項目をつぶしていくことにする。

Vivadoのインストールフォルダに Zybo用のBoard Definition Fileをコピーした状態で開始。

https://forums.xilinx.com/t5/Xcell-Daily-Blog/Bringing-up-the-Avnet-MicroZed-with-Vivado/ba-p/362901

> Within the Zynq PS, <font color=red>the fixed I/O</font> includes the MIO, clocks, and resets along with the DDR3 reference voltages. As these are fixed, no <font color=red>UCF file</font> is required because we are not working with the programmable logic (PL) side of the Zynq. We will need to create UCFs later when we use the Zynq’s PL side.

FXIED_IO と UCF は上記の通りらしい。

Adam Taylorのblogには Validate Designをしなさいと書いている。実行したら以下のエラーがでた。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/494b485c-608b-4251-f158-a472ed14ce4f.png)

M_AXI_GP0_ACLK ピンの設定がされていないとのこと。

以下のtutorial では FCLK_CLK0 と M_AXI_GP0_ACLK が接続されている。
http://zedboard.org/content/creating-base-zynq-design-vivado-ipi-20132

接続して Validate Design を実行するとエラーは出なくなった。

FCLKC_CLK0については、[上記リンク](http://zedboard.org/content/creating-base-zynq-design-vivado-ipi-20132)に以下の記載がある。

>  <font color=red>the 'FCLK_CLK0' signal</font> - this is one of the four output clocks from the PS.


![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/1b6c2067-f2b8-e46a-3cdd-9169a5c33d60.png)
【パズル４】ほとんどのエンジニアには解けるパズル４

エンジニア向けのパズルシリーズの４作目を公開した。[パズルサイト](http://challenge-your-limits4.herokuapp.com/)にアクセスするとNo Hacking「ハッキング禁止」のタイトルとDO NOT kick my APIs「私のAPIを蹴るな」とだけ出る。
プログラム言語を問わず、どんな技術を担当しているエンジニアであってもほとんど誰にでも解けるパズルだ。
<img width="420" alt="20160127172437.png" src="https://qiita-image-store.s3.amazonaws.com/0/108761/2f92b80d-91f3-6b89-9743-93b54d6f3f1b.png">


今回は初めてパズルの公開時間を事前告知をした。せっかくなので上位解答者達のコメントは後で[こちらのブログ](http://tango-ruby.hatenablog.com/)で紹介するつもりだ。
これまでのパズルと比較すると今回のは短い。分かる人は本当に一瞬で終わってしまうかもしれない。理由は事前告知をしたからだ。もうこれが不安でしょうがない。まず公開時間に本当に解きに来ていただける方が居るのかが分からない。さらに公開した後に何時間も解答者コメントがまったく入っていない状態で待つ、なんてのが耐えられない。なのでとにかく短くした。「短すぎてオモロない！」と感じたら、そうコメント欄に入れていただければ、と。

特に優秀なエンジニアの方はパズルをサッサと解いて、最後の画面でコメントを入れていただければ、作った方としては安心できる。

このパズルの目的である「優秀なエンジニアにパズルを通して楽しんでいただくこと」が達成されていることを願うのみである。

##【ほとんどのエンジニアには解けるパズル４】
http://challenge-your-limits4.herokuapp.com/

もし１発目からナニすればいいのかまったく分からないという方はDO NOT kick my APIsをクリックしてください。
　
## 詳細を書いたブログ
http://tango-ruby.hatenablog.com/
Macにawscliを入れようとしたら詰まったので、調べただけ

```
$ sudo pip install awscli
```

LINUXとかと同じで、これでいけてた気がするんやけど

```
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
```

じゃないと行けなかった。
http://docs.aws.amazon.com/cli/latest/userguide/installing.html#install-bundle-other-os
Spring Bootでバリデーションエラーメッセージを日本語にしてみる


`Spring Boot`では`application.properties`に設定を書けば`MessageSource`クラスから多言語対応されたメッセージが返ってくるらしい。
...が、どうもバリデーションエラーメッセージは多言語化してくれなかった。

簡単にやり方をメモっておく。

## 動作環境

* Java 8
* Spring Boot 1.3.2

## 実際に書いたコード

https://github.com/yhinoz/spring-boot-example

## 設定ファイルの用意

ほぼ初期設定のまま。言語ファイルは`i18n`の下に置きたかったのでそこだけ変更。

```java:src/main/resources/config/applicaton.properties
# INTERNATIONALIZATION
spring.messages.basename=i18n/messages
spring.messages.cache-seconds=-1
spring.messages.encoding=UTF-8
```

## 言語ファイルの用意

設定ファイルに記載した場所と名前で用意する。
日本語を記載するファイルを作るので`messages_ja.properties`というファイル名にする。

```java:src/main/resources/i18n/messages_ja.properties
org.hibernate.validator.constraints.NotEmpty.message=入力してください
```

## 設定クラスの用意

`messageSource`クラスをバリデータに設定するクラスを用意する。
`@Configuration`を見て自動的に読み込んでくれるので作成するだけで良い。

```java:src/main/java/com/example/config/MessageConfig.java
package com.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class MessageConfig extends WebMvcConfigurerAdapter
{
	@Autowired
	private MessageSource messageSource;
	
	@Bean
	public LocalValidatorFactoryBean validator()
	{
		LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
		localValidatorFactoryBean.setValidationMessageSource(messageSource);
		return localValidatorFactoryBean;
	}
	
	@Override
	public Validator getValidator()
	{
		return validator();
	}
}
```
Windows7 , Python 3.5.1, Sphinx 1.3.5 で sphinx-autobuild (0.5.2)

Windows7 64bit に Python 3.5.1 32bit をインストール。

venv で sphinx 用の仮想環境を作って、Sphinx と sphinx-autobuild をインストール。
sphinx-autobuild 0.5.2 だと [Error when running sphinx-autobuild in python 3.5 on Windows 7 · Issue #40 · GaretJax/sphinx-autobuild](https://github.com/GaretJax/sphinx-autobuild/issues/40) に引っかかるので、livereload 2.4.0 をインストールし直す。

```bat
python -m venv sphinx
sphinx\Scripts\activate.bat
pip install sphinx
pip install sphinx-autobuild
pip install livereload==2.4.0
```
vim の自然な正規表現置換

基本的な上にチラ裏感あるけど，
なぜかすぐ忘れるので自分が特に使うところだけメモ．

## したいこと

ファイル中の

```
<http://www.w3.org/2000/01/rdf-schema#hogehoge>
<http://www.w3.org/2000/01/rdf-schema#fugafuga>
```

を

```
rdfs:hogehoge
rdfs:fugafuga
```

とかに全部置換したい場合がある．

## どうする？

以下を実行．

```vim
:%s/<http:\/\/www.w3.org\/2000\/01\/rdf-schema#\(.\{-}\)>/rdfs:\1/gc
```

もしくは

```vim
:%s/\v\<http:\/\/www.w3.org\/2000\/01\/rdf-schema#(.{-})\>/rdfs:\1/gc
```

## 解説

### マッチする文字列を検索

Vim では置換する際に置換条件を省略すると，最後に検索した検索条件を利用できる[^2]．
なのでまず `/` による検索で，ハイライトされる範囲が正しい事を確認する．
メタ文字である `/` をエスケープしつつ[^hosoku]，`hogehoge`の部分に `\(.*\)` って書く．

```
/<http:\/\/www.w3.org\/2000\/01\/rdf-schema#\(.*\)>
```

この状態でEnter押して，検索できるか確かめる．

### デフォルトで最長一致になる罠を回避

実は `\(.*\)` では最長一致のパターンに引っかかってしまう[^1]．
たとえば，以下の文字列だとちゃんと`hogehoge`がマッチするが，

```
<http://www.w3.org/2000/01/rdf-schema#hogehoge> ?ptlbl .
```

以下の文字列だと`hogehoge> <nyahonyaho>`がマッチしてしまう．

```
<http://www.w3.org/2000/01/rdf-schema#hogehoge> <nyahonyaho> .
```

最小マッチさせたい場合は `.\{-}` を使う．さらに，変数に入れたい場合は同様に`()`で囲んで`(.\{-}\)`にする．

```
/<http:\/\/www.w3.org\/2000\/01\/rdf-schema#\(.\{-}\)>
```

### マッチした文字列を置換

マッチしたら満を持して置換コマンドを実行する．

まず置換条件を省略して`:%s//`って書く．
続いて，`\(.*\)`が`\1`に入ってるので，`rdfs:\1`って書く．
このままだと一行で一回しかマッチしないので`/g`を最後につける．
一応置換する前に確認したい場合は，`c`もつける．

```vim
:%s//rdfs:\1/gc
```

検索から置換までを一発で書くと，冒頭のコマンドになる．
`\v`オプションを付けると`()`と`{-}`に対するエスケープが不要になって一部すっきりするが，
この場合逆に `<>`をエスケープしなければならなくなるので，どちらが良いかは好みが分かれると思う．

```vim
:%s/\v\<http:\/\/www.w3.org\/2000\/01\/rdf-schema#(.{-})\>/rdfs:\1/gc
```

<!--

### 一発で書いても良い

正直このくらいなら一発で書いても良いと思う．

```
:%s/<http:\/\/www.w3.org\/2000\/01\/rdf-schema#\(.\{-}\)>/rdfs:\1/gc
```

-->

<!--

`\v` (Very Magic (ネーミングが意味不明すぎて吹くんですがなんか意味あるんですか？））
つかうと`\(.*\)`が`(.*)`と書けて若干すっきりする．そうでもないか．

```vim
:%s/\v<http:\/\/www.w3.org\/2000\/01\/rdf-schema#(.*)>/rdfs:\1/gc
```

-->

## コマンド履歴を有効活用しよう

正規表現，便利だけど，よっぽど賢くない限り一発でなんとかなるということは稀で，
多くの人は試行錯誤してマッチする正規表現を探すということになると思う．
なので， `q:` でコマンド履歴， `q/` で検索履歴が開けて，
`Ctrl-C` でコマンドラインにコピーできる，ということを知っていれば，作業スピードが上がると思う．

<!--
## 自分だけ？

`:%s//g` の，`:%s` 部分をなんて書けばいいんだっけ？ってなる．
無意味な３文字の文字列，馬鹿には憶えるのが困難で死にたくなる．
でもたぶん，意味が頭に入ってれば憶えられるんだと思う．

`:` がコマンドモードに入るよーって意味，
`%` はファイル全体(正しくはバッファか)っていう意味で，省略できる，省略した場合，その行だけが対象になる．
`s` は…なんで`s`なんだろう？`sed`でも`s`だけど．
あれ，結局 `s` がよくわかんないままだな．またど忘れしそう．
-->

---

[^1]: vim置換 - Qiita http://qiita.com/waoooon/items/8d982e49692c8145ca4b

[^2]: ここまで出来る！Vimの(ちょっと高度な)正規表現と検索/置換テクニック - http://qiita.com/m-yamashita/items/5755ca2717c8d5be57e4

[^hosoku]: 自環境(macvim)だと，置換したい文字列をクリップボードに入れて，NORMAL モードで `/` を打った後ペーストすると，エスケープすべき位置にバックスラッシュが補完される．
処理に合わせて自動的にデータを変換する (Apache Camel)


# Apache Camelでの実装イメージ

<img width="480" alt="スクリーンショット 2016-01-31 9.06.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/37624/cfcc3aa0-4608-f375-5f63-427e5b99cdb1.png">

この"`処理`"を実装する

* 処理は分担して実装できる
* 処理は何かのメッセージを受けて、何かのメッセージを返すだけ。
* 前の処理や後の処理の依存度が低ければ、処理の入れ替えや修正が簡単になる。

# メッセージの形式

メッセージには下記の情報が含まれている。
処理はこの情報にデータ出し入れするだけ。

* Header (Map）
* Property (Map)
* Body (Object）
* Attachement

# 処理

処理の中では前の処理を考えずに、どういう型が欲しいかを書いてデータを取得する。
単なるキャストだけではなく、データ変換も行える

例えば、BodyからString形式で情報を取得したい場合は下記のように書く。

```java
String body = exchange.getIn().getBody(String.class);
```

この時、メッセージの内容がIntegerでもFloatでもFileでもxmlでもInputStreamでも、Camelが自動的に変換してString形式にしてくれる。
（変換できなかったら `type converterが見つかりません`みたいなエラーが出る。）

Headerの場合は

```java
String header = exchange.getIn().getHeader("headerName", String.class);
```

この仕組を使って

```java
from("file:test")
.to("http:xxxxxx");
```

と実装すると、フォルダを監視して、ファイルを発見するとFileインスタンスでメッセージを流して、そのあとhttpでファイルの内容を送信する事ができる

この例では、
* ファイル処理の実装は「ファイルを読み込んでメッセージに詰め込む」だけで、後の処理に何が入るかを考えていない。
* http送信処理の実装は「メッセージを読み込んで内容を送信する」だけで、手前の処理がファイル処理だろうが、FTP処理だろうかは考えていない。

# 独自のデータ変換登録

前の例ではCamelがデフォルトで持っているデータ変換処理を使ってデータを変換しているが、デフォルトで実装しているデータ変換で間に合わない場合はもちろんエラーになる。

たとえば、Mapをbyte[ ]に変換する場合は一律Json形式にすると決めたら下記のクラスを置いておけばいいだけ。
これで、この変換が必要な場合にCamelが呼び出す。

```java
import com.fasterxml.jackson.core.JsonProcessingException;
import org.apache.camel.Converter;

import java.io.UnsupportedEncodingException;
import java.util.Map;

@Converter
public class MapConverter {

    @Converter
    public static byte[] toByteArray(Map map) throws JsonProcessingException, UnsupportedEncodingException {
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(data);
        return json.getBytes("utf-8");
    }

}
```

`@Converter`に関して、どこに置いても反応してくれるかどうかはドキュメントに書いてあるのかも。。。
私は同一プロジェクトの別パッケージ内にクラスを置いたけど動作していた。

参考
http://camel.apache.org/type-converter.html


このクラスを置いておくだけで、下の例のようなMapをhttpで送信する時には自動的にjsonに変換して送信してくれる

例：

```java
.......
.process(exchange -> {
    Map map = new HashMap();
    map.put("aaa", 111);
    map.put("bbb", 222);
    exchange.getIn().setBody(map);
})
.to("http:....")
```


# 明示的に型変換をする場合

```java
from("file:xxx")
.convertBodyTo(String.class)
```

だったり

```java
from("file:xxx")
.process(exchange -> {
    String body = exchange.getIn().getBody(String.class);
    exchange.getIn().setBody(body);
})
```

javaオブジェクト --> json

```java
from("xxxxxxxx")
.marshal().json(JsonLibrary.Jackson)
.to("yyyyy")
```

json --> javaオブジェクト

```java
from("xxxxxxxx")
.unmarshal().json(JsonLibrary.Jackson)
.to("yyyyy")
```
ExcelファイルをサーバーサイドでPDFに変換

# サーバー上でExcelファイルを簡単にPDFに変換できるCLIを紹介します


```centos
yum install libreoffice libreoffice-langpack-ja

yum install openoffice.org-headless

libreoffice --headless --nologo --nofirststartwizard --convert-to pdf excel.xlsx

```

「excel.xlsx」がPDFに変換されます。
Jenkinsの環境変数にjsonを読みこませる

# Jenkinsでjsonを読み込む方法
(Linux,MACで確認)

とある事情でjson形式のファイルからjenkinsの環境変数にセットする方法を探しておりました。
結論として見つからなかったので、かなり見苦しい力技でやってしまったので、もしこんなプラグイン使えば一発だよっていうのがあったら教えて下さい。。。

## 準備
・**jq コマンド**をインストール
→ json整形用のコマンドです。yumでもbrewでもいいのでとりあえずインストールしてください。
・**EnvInject Plugin**をJenkinsにいれておく

なんらかの理由でどちらかがでもできない場合は別の方法を模索してください。

## ざっくりとした(力技の)流れ
1.jsonファイルを用意
2.jqによるjson解析→iniファイル形式に書き出す
3.iniファイルをJenkinsの環境変数に読み込ます

## 手順詳細
1.jsonファイルを用意

```json:sample.json
{
    aaa : 1,
    bbb : 2
}
```

2.jqによるjson解析(以下のようなshをJenkinsの手順に登録)

```shell:getJson.sh
#!/bin/sh
A_NUM=$(cat sample.json | jq -r '.aaa')
echo "A_NUM=${A_NUM}" >> ini.txt
```


3.iniファイルをJenkinsの環境変数に読み込ます
Jenkinsのビルド手順から「環境変数のインジェクト」を選択
（もちろん EnvInject Plugin が入ってないと、標準ではありません）
「プロパティファイルのパス」のところに、先ほどの「ini.txt」を記載します。

``` 
プロパティファイルのパス [./ini.txt] (workspace直下にファイルがある場合)
```

4.これで、Jenkins上で環境変数として扱えます。
何かの引数に使うなり、別のジョブへの引数に使ったり用途はいかようにも。

```
echo ${A_NUM}
```
Qiitaに投稿するとき用のメモ

# リンク
\<a href="https://qiita.com/drafts/67d636e42befae097e30/edit">機械学習や制御工学に関するPythonやRのスクリプト \</a>
# 数式
\`\`\`math
e^{i\pi} = -1
\`\`\`
```math
e^{i\pi} = -1
```
# ソースコード
\`\`\`c:hello_world.c
\#include <stdio.h>
int main()
{
    printf("うまくかけた。");
}
\`\`\`
```c:Hello_Quiita.c
#include <stdio.h>
int main()
{
    printf("Hello Qiita");
}
```
# エスケープ
バックスラッシュでエスケープ
例　\\# 

# 参考文献
数式テスト
http://qiita.com/pommes16807/items/fd96b2c9cc5235f2a0da
Qiita書き方メモ
http://qiita.com/hiroyuki_hon/items/f2a779bb295fd12646ab
OSX、Swiftで写真加工 (CIFilter)

iOSのアプリをつくっていたときに、CIFilterのパラメータを変えたりしてはビルドして実機やシミュレータで確認するののがあまりに面倒だったので、ふとOSX側でやってみたら意外とさくさくできたので、その方法です。

iOSで写真をフィルタ実装するときのプロトタイプにも使えるし、OSXで複数の写真にフィルターをかけるとかにも使えると思います。

## クロームのフィルターを掛けてみる

```
import Cocoa

func myFilter(img: CIImage) -> CIImage? {
    guard let filter = CIFilter(name: "CIPhotoEffectChrome") else {
        return nil
    }
    filter.setValue(img, forKey: "inputImage")
    return filter.outputImage
}

func main() {
    if Process.arguments.count < 3 {
        print("err: args input_image_path output_image_path")
        exit(1)
    }
    let inputURL = NSURL(fileURLWithPath: Process.arguments[1])
    let outputURL = NSURL(fileURLWithPath: Process.arguments[2])
    guard let img = CIImage(contentsOfURL: inputURL) else {
        print("err: input img error")
        exit(1)
    }
    guard let outImg = myFilter(img) else {
        print("err: filter error")
        exit(1)
    }
    let cg = CIContext().createCGImage(outImg, fromRect: outImg.extent)
    if let dest = CGImageDestinationCreateWithURL(outputURL, kUTTypeJPEG, 1, nil) {
        CGImageDestinationAddImage(dest, cg, nil)
        CGImageDestinationFinalize(dest)
    }
}

main()
```

xcrunを使って実行してみます

```
xcrun swift filter.swift input.jpg out.jpg
```

入力画像
![input.jpg](https://qiita-image-store.s3.amazonaws.com/0/26103/b2b0819c-e683-2407-0798-35262770fb1a.jpeg)

出力画像
![out.jpg](https://qiita-image-store.s3.amazonaws.com/0/26103/cf154f44-a064-b504-5f48-2d64f8fc5d6e.jpeg)


## もうちょっといろいろ調整してみる

```
func myFilter(img: CIImage) -> CIImage? {
    guard let vfilter = CIFilter(name: "CIVignette") else {
        return nil
    }
    vfilter.setValue(1.2, forKey: "inputRadius")
    vfilter.setValue(1.5, forKey: "inputIntensity")
    vfilter.setValue(img, forKey: "inputImage")
    guard let cfilter = CIFilter(name: "CIColorControls") else {
        return nil
    }
    cfilter.setDefaults()
    cfilter.setValue(0.95, forKey: "inputSaturation")
    cfilter.setValue(1.05, forKey: "inputContrast")
    cfilter.setValue(vfilter.outputImage, forKey: "inputImage")

    guard let efilter = CIFilter(name: "CIExposureAdjust") else {
        return nil
    }
    efilter.setValue(0.45, forKey: "inputEV")
    efilter.setValue(cfilter.outputImage, forKey: "inputImage")
    return efilter.outputImage
}
```

出力画像
![out-02.jpg](https://qiita-image-store.s3.amazonaws.com/0/26103/d12125a3-6b43-1ee3-14ce-f691300d2bf3.jpeg)

##まとめ

CIFIlterはかなり充実していていろいろできます。iOSとOSXで微妙に違う部分もありますが、わりと同じように使えて便利でした。

以下がCIFilterのリファレンスです。

iOS
https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html

Mac
https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html

## おまけ
実際にCIFilterを使ってつくったiOSカメラアプリです
http://swdyh.tumblr.com/post/136317130125/buttonlesscam-長押しで撮影するiosのカメラアプリをつくった
Capybara + Poltergeistで取得したスクリーンショットが見切れる場合


save_screenshotにオプションを渡す。

```ruby
page.save_screenshot("screenshoto_file_name", full: true)
```

pryなどでデバッグ中に利用する場合、第1引数をnilにすれば、適当なファイル名で出力される。

```ruby
page.save_screenshot(nil, full: true)
```
ファイル名でファイルを検索して開くvimプラグイン


# 背景

vimを利用していて、vim上で目的のファイルをファイル名で検索し、そのままvim上に開けるようにしたいと思った。
「ファイルの内容」を検索してヒットしたファイルを開きたいときはvimgrepを利用すればいい、ということは検索してすぐに見つかった。しかし「ファイル名」で検索する場合はすんなり見つからなかったのでメモを残しておく。

# ctrlp.vimプラグイン

今回の目的は[ctrl.vim](https://github.com/ctrlpvim/ctrlp.vim)を使うと実現できるとわかった。

## インストール

```:.vimrc
NeoBundle "ctrlpvim/ctrlp.vim"
```

[※ NeoBundleを利用したことがない人はこちら](http://qiita.com/koyopro/items/c473b3c2323501b7891a#%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E7%AE%A1%E7%90%86%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E5%B0%8E%E5%85%A5)

## 基本的な使い方

vimを開いて`Ctrl+p`を押すとctrlp.vimが起動する。

例えば「model」と入力すると、該当するパスにヒットするファイルを絞り込むことができる。

![ControlP_-____Documents_joyz_tt-server__-_VIM_と_hellogae.png](https://qiita-image-store.s3.amazonaws.com/0/62874/72e2addb-7974-6184-97d8-d34d20dc11c1.png "ControlP_-____Documents_joyz_tt-server__-_VIM_と_hellogae.png")

この状態で`Enter`を押せば、現在のウィンドウでそのファイルを開くことができる。
また`Ctrl+t`を押すと、新しいタブで開くことができる。

ファイルを開く必要がない場合は`Esc`でctrlp.vimを終了する。

その他、便利なコマンドがいろいろあり、こちらの記事が見やすくまとまっている。

[ctrlp.vimの使い方まとめ - Qiita](http://qiita.com/oahiroaki/items/d71337fb9d28303a54a8)

## あいまい検索が便利

パスの検索はあいまいな検索で行うことができる。
上記の結果に続けて「post」と入力すると、以下のような状態になる。

![ControlP_-____Documents_joyz_tt-server__-_VIM.png](https://qiita-image-store.s3.amazonaws.com/0/62874/a73ba571-9a7f-f31e-7520-ca4cf89081d5.png "ControlP_-____Documents_joyz_tt-server__-_VIM.png")

入力した文字列がパスに含まれて入れば拾ってくれる。
なんとなくしか覚えていないファイルでも開けるのが便利。

## ファイル一覧はctrlp.vim起動時に読み込まれる

検索対象になるファイル一覧は、ctrlp.vimを最初に起動した時に読み込まれる。
そのため、対象ファイルが多い場合には起動に時間がかかることに。
vim自体を起動し直した場合は、再度読み込みが発生する。

また、途中で新規にファイルを追加したときは検索対象になっていないため検索してもヒットしない。
その場合はctrlp.vimを起動中に`F5`を押して再読み込みを行えばよい。

# 参考

ctrlpvim/ctrlp.vim: Active fork of kien/ctrlp.vim—Fuzzy file, buffer, mru, tag, etc finder.
https://github.com/ctrlpvim/ctrlp.vim

ctrlp.vimの使い方まとめ - Qiita
http://qiita.com/oahiroaki/items/d71337fb9d28303a54a8
Elixirでもtryがしたい！

~~railsタグに釣られたそこのあなた！elixirを少しやってみませんか！？~~

~~Regex.runがマッチしない時nilを返すのでついカッとなって書いた反省はしていない~~

rubyist(rails使ってる人だけ？)にはお馴染みの`try`と同じようなことがしたいので作ってみました。
ruby(rails)の`try`を知らない方のために説明すると、「`nil`なら何もせずに`nil`を返して、`nil`でなければ与えられた処理をするメソッド」です。非常にシンプルなので実装を見たほうが分かりやすいと思います。

# 作る
すでに`Kernel.SpecialForms.try`という関数があるので、とりあえず`attempt`という名前にします(短くて良いネーミング緩募)

```ex
defmodule Attempt do
  def attempt val, fun do
    unless is_nil val do
      fun.(val)
    end
  end
end
```

# 使ってみる

before

```ex
> 25 |> Integer.to_string
"25"
> nil |> Integer.to_string
** (ArgumentError) argument error
    :erlang.integer_to_binary(nil)
```

`nil`にInteger.to_stringを適用しようとして悲しいことになっています。

after

```ex
> import Attempt
> 25 |> attempt(&Integer.to_string/1)
"25"
> nil |> attempt(&Integer.to_string/1)
nil
```

良い感じですね。パイプラインと`&`が良い仕事しています。パイプライン万歳。
マクロにできそうな気がするけど、マクロがよく分かってないのでマクロ版はそのうち。

# おまけ
railsタグが付いているのにelixirの話を読まされてご立腹の方のためにrubyの小ネタをば。

```rb
def double a
  a * 2
end

2.try(&method(:double)) #=> 4
```

オブジェクトのメソッドならば`&` + シンボルでブロックの代わりになることは有名ですが、名前空間なしで呼び出せるメソッド(同じクラスのメソッドとかKernelのメソッド)の場合は`method`メソッドを使うことで`&`を使って書くことができます。
Redux + Reactのboilerplateっぽいチートシート未満


何回か使ううちに微妙な所も見えつつ、とはいえ結局より良いfluxは出てき無いので付き合っている感じのRedux。

毎回最初にどう書くんだったか忘れてしまうのでここらで自分が毎回やっているのをまとめておく。

だいたい下記を入れておいてる前提

- react関連
	- react
	- react-dom
- redux関連
	- redux
	- react-redux
	- redux-actions
	- redux-thunk

- babel必要ならこのへんのpreset
	- babel-preset-react
	- babel-preset-es2016

# main

エントリポイントになる所。あんまり考えることはない。
`./store`、`./container`は下記で記載する。

あんまり気合いれない時はこのファイルにstoreもcontainerもまとめちゃう。

```js
import React, { Component } from "react"
import ReactDom from "react-dom"
import setupStore from "./store"
import createContainer from "./container"

export default function render(){
  let containerEl = document.querySelector("#container")
  let store = setupStore()
  ReactDom.render(createContainer(store), containerEl)
}
```
必要があれば`render(containerEl)`みたいに外からcontainerのDOMもらったりする

# store

initialState + middleware設定とかしとく。
ちょいちょいいじる必要でるくせにどこでやるんだったかわすれがち

```js
import reducers from "./reducers"
import {createStore, applyMiddleware} from "redux"
import thunk from "redux-thunk"

export default function setupStore(){
  const initialState = {
    todo: []
  }
  return createStore(
  	reducers, 
  	initialState, 
  	applyMiddleware(thunk)
  )
}

```

# container
reduxとreactつなぐ部分。
connectするらへん
一番忘れてて悩む所。
ここらへんすっきりしてくれると楽なのになー。。。

とりあえず`mapStateToProps `、`mapDispatchToProps`どちらも最初に作っておいてしまう派。


```js
import { bindActionCreators } from "redux"
import { connect, Provider } from "react-redux"
import App from "./Component/App.js"

import * as actions from "./actions"

function mapStateToProps(state){
  // 必要に応じてreselectとかここで使う
  return state
}

function mapDispatchToProps (dispatch) {
  // dispatchとかcomponent以下に渡したくないのでここでbindしてしまう。
  return bindActionCreators(actions, dispatch)
}

export default function createContainer(store){
  let ConnectedApp = connect(mapStateToProps, mapDispatchToProps)(App)
  return (
    <Provider store={store}>
      <ConnectedApp />
    </Provider>
  )
}

```

`container`と`store`を分離するパターンの時には取り回しよくなるように`createContainer(store)`としておく。
mainファイルにまとめてしまう時はあんまりそのへん気にしない
# action
actionはシンプルだが、`redux-actions`使うとだいぶ便利で良い。
ちょっとredux-actもいいなと思っている昨今。

```js
import { createAction } from "redux-actions"
import * as types from "./types"

export const setTodo = createAction(SET_OBJ, (obj) => obj)
```

## types
単純な定数定義

```js
export const SET_OBJ = "set_obj"
```

# reducer
あんまり忘れない部分。
もうちょっと楽したい気もする。けどredux-actionsが未だに馴染んでないので普通に書いてる

```js
import { combineReducers } from 'redux'
import * as types from "./types"

const someItem = (state = {}, action) => {
  switch(action.type){
    case types.SET_OBJ:
      return Object.assign({}, state, action.payload)
    default:
      return state
  }
}

const rootReducer = combineReducers({
  someItem
})

export default rootReducer
```
Linuxサーバから自宅のネットワークにVPN接続をする

# 環境

- YAMAHA NVR500
- Ubuntu 14.04

# 手順

```bash
sudo apt-get install pptp-linux
sudo pptpsetup --create <Profile> --server <IP> --username <PPTP Account> --password <Password> --encrypt
sudo pppd call <Profile> updetach
```

Profileには任意の接続名を指定します。
IPには、NVR500のグローバルIPを指定します。YAMAHAの場合、DDNSサービスを使って、xxxxxx.aa0.netvolante.jpというホスト名を指定するのがいいでしょう。
PPTP Account/Passwordは、NVR500側で設定したものを指定します。

ifconfigでppp0が表示されていれば接続が成功しています。
一旦、切断を行います。

```bash
sudo poff <Profile>
```

# 接続手順の簡略化

必要な時だけVPN接続をするので、接続手順を楽にするためにスクリプト化しておく。

- Profileはvpn
- 自宅のネットワークは、192.168.1.0/24 

```bash:vpn-connect.sh
#!/bin/bash
pon vpn

sleep 5

route add -net 192.168.1.0 netmask 255.255.255.0 ppp0
```

```bash:vpn-disconnect.sh
#!/bin/bash
poff vpn
```

## 接続

```bash
sudo vpn-connect.sh
```

## 切断

```bash
sudo vpn-disconnect.sh
```
エクセルでエポックタイムから日本時間(JST)に変換するマクロ

処理としては、

1. 選択範囲の右隣に列を追加
* 選択範囲のにあるエポックタイムをJSTに変換したものを隣の列に代入

を実施。以下ソース。

```vbnet

' エポックタイム⇒JSTへの変更を行うマクロ

' メイン処理
Sub main()

    ' 時間の高速化のための処理
    '' 更新処理停止
    ScreenUpdating = False
    '' 計算の自動化停止
    Calculation = xlCalculationManual
    
    ' エポックタイム⇒JSTへの変更
    Call doFormSelection

    ' 時間の高速化のための処理を解除
    Calculation = xlCalculationAutomatic
    ScreenUpdating = True

End Sub

' 選択範囲対する処理
Sub doFormSelection()
    
    Dim selectionRange As Range
    Dim selectionCell As Range
    Dim lastRow As Long
    
    lastRow = getLastRowRejectSplace(Selection)

    ' 選択範囲の右側にセルを追加
    Columns(Selection.Column + 1).Insert Shift:=xlToRight
    
    ' セルの書式を日付形式に変更
    Selection.Offset(0, 1).NumberFormatLocal = "yyyy/m/d h:mm;@"
    
    For Each selectionCell In Selection
    
       Call convertToJstFromEpoch(selectionCell)
       ' エポックタイム⇒JSTへの変更
       If selectionCell.Row = lastRow Then
            Exit For
       End If
       
    Next selectionCell
    
    ' 幅の調整
    Selection.Offset(0, 1).EntireColumn.AutoFit
End Sub

' エポックタイム⇒JSTへの変更
Sub convertToJstFromEpoch(targetCell As Range)
    
    Debug.Print TypeName(targetCell.Value)
    If TypeName(targetCell.Value) = "Double" Then
        targetCell.Offset(0, 1).FormulaR1C1 = "=(RC[-1]/(3600*24))+25569+135/360"
    End If
    
End Sub

' 引数で指定した範囲の最終行を取得
Function getLastRowRejectSplace(targetRange As Range) As Long
    getLastRowRejectSplace = Cells(Rows.Count, targetRange.Column).End(xlUp).Row
End Function
```
コードレビューを優先するか自分の作業を優先するか

TL;DR: コードレビューを優先すべき。

---

こんにちわ。 合同会社コベリンの CIO です。

僕らの会社の開発は基本的にプルリクエストを出してレビューしてもらって、大丈夫ならマージするというよくある流れで行っています。

今回は、自分の作業よりもコードレビューを優先したら開発効率が増した(相手も自分も)ということについて書きたいと思います。

事の起こりは、僕が下記の記事を読んでレビューの優先度を上げたことから始まります。

[[翻訳] コードレビューについて](http://iwashi.co/2015/10/22/oncodereview-translated)

この記事にはコードレビューをする側とされる側に対してどのような姿勢でそれらに望むべきかについて書いてあります。

その中に、**コードレビューを最優先に！** という記述があります。


それに習って、1ヶ月ほどレビューの優先度を MAX にしました。

## 結果

対照実験や定量的な開発効率の計測は行っていないのですが、感覚的には改善されたと思われます。

何よりも開発のテンポが良くなった感じがあります。

こういう良くなったっていう雰囲気大事だと思います。


## 考察

何故改善したのかについて自分なりに考えてみます。

### 作業の重要度の視点で

レビューと自分の作業、どちらの方が重要なのか？ということについて考えてみます。

関わる人が多い作業を止める方が作業全体への影響度が大きいのでここでは関わる人が多い作業ほど重要であるという考え方をしてみます。

非常に雑に考えると

- 自分の作業は自分だけのものです 
  - 関わる人は自分1人
- レビューは自分の作業でもあり相手の作業でもあります
  - 関わる人は自分と相手の2人

ということで、レビューの方が重要度が高い作業であると考えられます。

よってレビューを優先することによって重要度が高い作業が先に終わり、効率が改善されたと考えられます。

### キリの良い所までという視点で

例えば自分の作業がノッている時にレビューをお願いされたとします。

弊社では Slack で 「@hogehoge れびゅよろ〜 <プルリクエストの URL>」 みたいな感じでメンションが飛んできます。

今まで僕は切りの良いところまで作業を進めて、その後にレビューをしていました。

しかし、切りの良いところってなかなか訪れない(特に作業がノッている場合)のでレビューが遅れがちになりました。

僕の経験上、キリの良い所ってのはなかなか来ないのでレビューの依頼が来たら10分以内で無理やりにでも作業を中断してレビューを行ったほうが良いと思います。

キリの良い所まで作業をするということは重要度の高いレビューを後回しにしてしまっているので結果的に開発効率が落ちます。

### 時間が経過するという視点で

コードを書いてから時間が立つほど書いた人でさえコードについてどんどん忘れていきます。

レビュー依頼をしたらその人は別の作業に移っていき、人間の記憶力は無限ではないのでさっきのことはどんどん忘れてしまうのでしかたのないことです。

「ちゃんと書けば後で読んでもわかりやすいコードになるはずだ」と言われそうですが、それは理想論でそんな理想を追い求めているとそれこそ開発効率が落ちます。

なのでできるだけレビューした人がコードについて覚えている状態でレビューをすべきです。

そうすることで質問に対して直ぐに答えてもらえることが期待できます。

また、コードに対する修正が必要になった場合も直ぐに修正を行うことができます。

時間が経ってからではもう一度コードを書いた時のことを思い出さなくては行けないのでレスポンスが落ちてしまい、レビューする側にも待ち時間が発生してしまいす。

これらのことからすぐにレビューを行うことで記憶を呼び起こす時間やレスポンスを待つ時間が削減されるので開発効率を改善することができます。

### コミュニケーションという視点で

コードレビューはプルリクエストを通して行う人と人とのコミュニケーションです。

レビューを後回しにするということは

```
レビューを依頼する人: 「こんにちわ！　元気ですか？」
レビューを依頼された人: 「...」
数時間後...
レビューを依頼された人: 「こんにちわ。元気です。」
```

という会話をしているようなものです。

これは明らかにテンポが悪そうですね。


---


ということで、コードレビューを優先することで開発効率が改善したということと、その理由について考えてみました。

これからも意識してコードレビューを優先的に行っていきたいと思います。

その中でなにか新しい知見が得られたらまた追記したいと思います。
Bitnami RedmineでMySQLのDBバックアップを取るコマンドが通るまでの試行錯誤

#MySQL backup@20150623


まず何をどうするかも不明なので調べ・・
http://satsumahomeserver.com/blog/3612
を参照  
まず環境変数でINSTALL_DIR としてパスを通しコマンド実行

* C:\BitNami\redmine-2.6.1-0  
* C:\BitNami\redmine-2.6.1-0\mysql\bin>mysqldump ?u root ?p bitnami_redmine &gt; backup.sql

&gtが不明と返される・・ので調べると
http://chunye.seesaa.net/article/418976383.html
を参照  
これは > が &gt に文字化けしているようで

* C:\BitNami\redmine-2.6.1-0\mysql\bin>mysqldump -u root -p bitnami_redmine > backup.sql  
* mysqldump:Got error: 1045: Access denied for user 'admin'@'localhost' (using password: YES) when trying to connect

パスワードが間違っていると出てくる。おそらく、mysql の root ユーザーのパスワードが違うのでしょう。
http://mysql.javarou.com/
を調べると  
コマンドラインから MySQL に接続しPWが間違っているか確認して見る  
mysql -u ユーザー名 -D データベース名 -p

* C:\BitNami\redmine-2.6.1-0\mysql\bin>mysql -u root -D bitnami_redmine -p  
* Enter password: ***********  
* Welcome to the MySQL monitor.  Commands end with ; or \g.  
Your MySQL connection id is 1 to server version: 4.1.19  -community-nt
* Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

* mysql>
* mysql>SHOW DATABASES;
* mysql> SHOW TABLES FROM test;
* mysql> \q
* Bye

MySQLへのrootログオンは正常、PWも正しい、ことが判明  
Windows, binのフォルダがrootで書き込み不可と思いユーザ登録して見る  
[ローカルユーザとグループ（ローカル）\グループ]でUsersにroot追加  
変わらず

http://stackoverflow.com/questions/20059823/mysqldump-error-1045-access-denied-despite-correct-passwords-etc
を調べると  
-hでホスト名、-Pでportなどspecifyと書いてある。
* mysqldump -h hostname -u username -P port -B database --no-create-info -p > output.sql
I think you should specify the args

でホスト名とポート番号を指定

* mysqldump -h ホスト名 -u root -P 9306 -B bitnami_redmine -p >backup.sql
* Enter password: ***********
* mysqldump:Got error: 2003: Can't connect to MySQL server on 'ホスト名' (10061) when trying to connect

ホストに接続できないと言われ、従いホスト名は削って

* cd C:\BitNami\redmine-2.6.1-0\mysql\bin
mysqldump -u root -P 9306 -B bitnami_redmine -p >backup.sql
* Enter password:***********

・・でbackup.sql正常作成された。　　→^_^;
神関数を生まないためのサンプルコードのススメ

#神関数を生まないためのサンプルコードのススメ
main関数が数キロ行、数十キロ行

マジカ！

といったソースを目にしたことがある。

神関数

そう呼ばれる代物だ
神様ではなく一般ピープルには精々1キロくらいまでしか読み取ることはできないのではないだろうか。

神関数を作られる原因としては、あれが足りない、コレが足りないと1関数に継ぎ接ぎしていくうちに、やがて神関数へと成長する

では、神関数を作らないためにはどうしたらいいかといったら

サンプルコード

数十行で完成するサンプルを作って、動くかどうかを確認するのだ。
動くことが確認できたら、サンプルコードのメインとなる関数を呼び出すようにして、次のサンプルコード開発へ。
この流れを繰り返す。

継ぎ接ぎしていること自体は、神関数と変わらないのだが、
-１つ１つの動作が確認できる
-どこで間違えが発生したかわかる
-分担出来る
-引き返せる
-どこまで作ったか進捗がわかる

色々とメリットがある

神関数はテスト前の一夜漬け
サンプルコードは日々勉強してテストに臨む

ケースバイケースだが、極力であれば　サンプルコード開発することが理想ではあるが、ほとんどの人たちが一般ピープルなのである。

テスト前の一夜漬けによって今日も新しい神が生まれていく。


#サンプルコード開発のポイント
大抵完成に至らないプロジェクトに当てはまることはこのポイントを押さえていないからではないだろうか
- 完成のイメージをもつ
- 完成の条件は少なくする
- やったことがないことは、やったことのあることを組み合わせて実現する

サンプルコードは完成を前提に作る。
完成しなかったらそれはサンプルコードではないのだ。
つまりは確実に完成するか、完成する成功率が高くなるように目標を設定して取り掛かることがポイントといえる。

誰もやっていないことが新しいことではなく、やったことがあることをたくさん持っている人が新しいことができる

このことを思い違いしてはいけない。


#サンプルコード開発で対策した方がよいこと
沢山サンプルコードを作っていて、何度も同じことをすることがあったり、何を作ったか思い出せなくなってきてしまった。
それを踏まえて以下のことは対策しておいた方が良さそうだ。

- 引数・設定値の保存（理由：同じ値を何度も設定するから）
- コピペして使うような何度も使うソースコードはライブラリ化（理由：サンプルコードは同じことを繰り返す癖みたいなこのが出来る）
- 作ったサンプルコードの見える化・リスト化（理由：最近何を作ったのか思い出せない）


#日々、サンプルコード開発
大体のプログラムにまつわる仕事はコレの繰り返し
- 仮定する
- 検索する
- サンプルコードを開発する
- 組み込む

この繰り返し回数を如何に上げるかが、いいプロダクトを作れるかが決まってくるのではないだろうか
[小ネタ]JavaScriptでgetElementsByClassNameを書くのが面倒なので$clsにする

小ネタです。ご容赦ください。

大規模なJavaScriptであればjQueryやAngularJS・React.jsなどを使うと思いますが、簡単なページやちょっとしたテストで外部のライブラリを使うまでもない場合、DOM操作をするときは直接`getElementsByClassName`や`getElementsByTagName`などと書くことになり、面倒です。

## とにかく`getElementsByClassName`が長い

```js
<div class='class1'>
    <div class='class2'>
        A
    </div>
</div>
```

例えばこのようなHTMLに対するDOM操作は、素のJavaScriptではコードが長くなってしまいがちです。

```js
document.getElementsByClassName('class1')[0].getElementsByClassName('class2')[0];
```

また、次のような間違いをしてしまってイラっとくるときがあります。

- `getElementByClassName`
- `getElementsByClassname`

## `$cls`と置き換えてみる

jQueryで`$('.class1')`という記法がとても羨ましくなります。なので数行のコードを追加してこれを`$cls`に置き換えてみます。

```js
var $cls = function (className) {
    var context = this == window ? document: this;
    return context.getElementsByClassName(className);
};

HTMLElement.prototype.$cls = $cls;
```

先ほどのコードは次のように書けるようになりました。

```js
$cls('class1')[0].$cls('class2')[0];
```

## アンチパターン？

`HTMLElement.prototype.$cls = $cls;`のように書くのはアンチパターンかもしれないですね。


## 複雑なDOMには正規表現かライブラリで

本当に小さなコードを書くときはこれで十分ですが、`getElementById`や`getElementsByTagName`なども使いたくなったらjQueryを真似て`$('#id')`のようにセレクトできるように`$`という関数を用意して中で正規表現を使うように実装するのか、素直にセレクタの扱いに優れたライブラリを利用したほうが楽かもしれないですね。
PHPプロジェクトでいろいろなCIサービスを使ってみたというお話

# この記事の概要
GitHubでコミット＆プッシュしたときに自動でテストを行ったり、
PullRequest時では「このコード、コーディング規約違反してるよ！」とコメントしてくれるようなサービスの紹介になる。

PHPプロジェクトについて下記のレポジトリが対象
URL:https://github.com/igara/syonet

# SideCI
URL:https://www.sideci.com/
PullRequestを出した時にコミットしたファイルの静的解析を行い、
コーディング規約違反している対象の行に対してコメントを追加してくれる。

![スクリーンショット 2016-01-31 18.11.05.png](https://qiita-image-store.s3.amazonaws.com/0/89599/2cf4392f-5410-0dd2-12c6-5c247686fd85.png)
上記はnamespaceの指定がなく、規約に反していますというコメントの例である。

PSRの規約に準じてコメントがされているので
[php-cs-fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer)をフォーマッタとして用いれば大抵は修正される。
（namespaceの違反は修正されないが、）

コード修正をし、規約どおりになると下記のようにコメントが隠れるようになる。
![スクリーンショット 2016-01-31 18.13.27.png](https://qiita-image-store.s3.amazonaws.com/0/89599/21a67c65-1fde-9135-399f-aa5435fe3848.png)

この時のPullRequestの例として下記になる。
https://github.com/igara/syonet/pull/48

PHP以外にTypeScriptとかも静的解析を行っていただける。

# TravisCI
URL:https://travis-ci.org/

レポジトリにプッシュされた後に
いろいろな言語のバージョンによるビルドを自動的に行ってくれるサービス
主にPHPUnitの実行とカバレッジの取得用に使っている。

カバレッジ取得するために
[php-coveralls](https://github.com/satooshi/php-coveralls)を使用している。

composerで導入する時は下記を実行する。

```
composer require satooshi/php-coveralls --dev
```

.travis.ymlに行いたいタスクを記載し、レポジトリのルートに置くことで自動でビルドが行われる。

```.travis.yml


language: php

php:
    # 下記はビルド対象のPHPバージョン
    - 5.6
    - 7.0
    - hhvm
    - nightly

before_script:
    # laravelの環境設定ファイルの作成
    - cp -p .env.example .env
    # composerは30日毎にupdateすること責められる...
    - composer self-update
    - composer install
    - php artisan key:generate

script:
    # PHPUnitを実行し、ガバレッジを取得する
    - mkdir -p build/logs
    - chmod -R 777 build/logs
    - vendor/bin/phpunit --coverage-clover build/logs/clover.xml

after_success:
    # coverallsにカバレッジの反映をさせる
    - travis_retry php vendor/bin/coveralls -v

```

TravisCIはcomposerやxdebugが使える模様。

下記は各PHPのバージョンによるビルドの結果になる。
![スクリーンショット 2016-01-31 18.23.31.png](https://qiita-image-store.s3.amazonaws.com/0/89599/9a0e6a07-6e65-6c6d-b243-76fe24ada8c1.png)

README.mdにビルドの状態がわかるようにバッチを置くことができる。
↓こいつ
[![Build Status](https://travis-ci.org/igara/syonet.svg?branch=master)](https://travis-ci.org/igara/syonet)

# Coveralls

カバレッジの結果をパーセント表示にしたり、カバレッジを元にPHPUnitのassertの状態を確認できたりできる。

.coveralls.ymlを設置する必要があるので下記を記載した。

```.coveralls.yml

coverage_clover: build/logs/clover.xml
json_path: build/logs/coveralls-upload.json
service_name: travis-ci
exclude_no_stmt: true

```

TravisCIと同様にバッチの設置ができる。
↓こいつ
[![Coverage Status](https://coveralls.io/repos/github/igara/syonet/badge.svg?branch=master)](https://coveralls.io/github/igara/syonet?branch=master)

# 参考記事
[規約に沿ってないPHPコードを駆逐する](http://qiita.com/noboru_i/items/23827b655ac854ba04b2)
StoryboardでTableViewの区切り線を左に詰める

Storyboardだけでできたのでメモ。

##1. SeparatorのInsetsを変更する。  

1. Custom Insetsにする  
![スクリーンショット 2016-01-31 18.28.23.png](https://qiita-image-store.s3.amazonaws.com/0/37319/d30d5436-943b-1931-fa21-a4d60033644d.png)  

2. Leftを0にする  
![スクリーンショット 2016-01-31 18.28.53.png](https://qiita-image-store.s3.amazonaws.com/0/37319/bce9d173-f1c6-4a66-3301-35e4cc80b6ea.png)

##2. Layout Maginsを変更する

1. Explicitにする
![スクリーンショット 2016-01-31 18.29.37.png](https://qiita-image-store.s3.amazonaws.com/0/37319/3069baa0-3e64-c32c-57a7-ea2dcb822708.png)

2. Leftを0にする  
![スクリーンショット 2016-01-31 18.32.58.png](https://qiita-image-store.s3.amazonaws.com/0/37319/2d309302-e4c6-8df5-9205-4a7fd8a194ce.png)

####変更前  
<img width="320" alt="変更前.png" src="https://qiita-image-store.s3.amazonaws.com/0/37319/20842536-89bd-27dc-18e3-cc7b7dd4fc0f.png">

####変更後
<img width="320" alt="変更後.png" src="https://qiita-image-store.s3.amazonaws.com/0/37319/0c00f64d-cb57-ba25-1a6c-dcf524ad5ce3.png">
tmux2.1でマウススクロール

# tmux2.1からマウスの設定が変わった

```
set -g mouse on
```

でもこれだけではスクロールしない。。

# マウスホイールの動作をbindする

```
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -t vi-copy    C-WheelUpPane   halfpage-up
bind -t vi-copy    C-WheelDownPane halfpage-down
bind -t emacs-copy C-WheelUpPane   halfpage-up
bind -t emacs-copy C-WheelDownPane halfpage-down
```

# 参考元
https://github.com/tmux/tmux/issues/145#issuecomment-171285429
Groongaで学ぶ全文検索2016-01-29


# ノーマライズと全文検索の文脈での形態素解析について

## ノーマライザー

* 異なるものを論理的に同じものとして正規化するもの<BR>
例)<BR>
全文検索の際に<br>
「ｶﾚｰ」と「カレー」<br>
「りんご」と「リンゴ」<br>
「PC」と「パソコン」<br>
を同じと扱って欲しい場合などに利用。
* インデックスを作る際と検索する際に同じものを使う事が大事
* 「りんご」=「リンゴ」にするには検索する際に<BR>「りんご」が入力された場合に「(りんご OR リンゴ)」というようにクエリを作成する事でも実現できる。<BR>
Groongaにはその機能がある、Mroongaには無いので自前のプログラムで実装する。 

## トークナイズする際に利用する形態素解析

* 日本語を辞書を用いて前後の文脈を加味してキーワードを抽出する<BR>
* 辞書を用いてキーワードを抽出する際に何パターンかに区切って一番適当と判断されたものが利用される<BR>
例)<BR>
渋谷/で/カレー/が/食べ/たい<BR>
渋谷で/カレーが/食べたい
* 辞書にはメタデータが登録されていてメタデータにある情報でどれが適当かを判断している<BR>
例)<BR>
渋谷,名詞,・・・<BR>
で,助詞,先頭には来ない<BR>
など
* 検索する文書によって何が適当かは異なるためどの辞書を使うかなどチューニングが必要<BR>
例)検索対象<br>
・新聞<br>
・tweet:省略されることが多い<br>
・女子高生の会話:新しい情報が多い<br>
* 辞書を変更したらインデックスを作り直す必要がある
* 辞書は最新のものに変えたくなるものなので、そのメンテナンスをどうするかも運用で問題になる
* Groongaではジャストシステムさんが提供しているJMATという「PC」と「パソコン」が同じという情報や、<br>「さしみ」と「お造り」が同じという情報を持っている辞書を利用できるプラグインがある

## その他メモ

Mysqlの全文検索には下記の2種類のモードがある。


1)自然言語検索<BR>
「渋谷でカレーが食べたい」のように自然言語で検索する
デフォルトの場合や IN NATURAL LANGUAGE MODE 修飾子が指定された場合にこちらが使われる

クエリの例

```
SELECT * FROM articles
    WHERE MATCH (title,body)
    AGAINST ('database' IN NATURAL LANGUAGE MODE);
``` 


2)ブール全文検索 

*「渋谷 カレー」のように単語で検索する
* MySQLはデフォルトOR


例)

```
SELECT * FROM articles WHERE MATCH (title,body)
    AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
    
```

* MySQLのノーマライザーでutf_unicode_ciを選ぶとカタカナとひらがなを同一とみなし、濁点も無視してしまう<BR>
例)<BR>
ブラック=ふらつく<BR>
パパ=はは

* Mroongaのバージョンアップはyumでできる(MySQLの再起動が必要な場合には自動で再起動するため要注意)
Upgrading Python module in OSX El Capitan


[要約] OSX El CapitanのPythonにおいて、`sudo pip --upgrade`が失敗する場合、`/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/`ある古いバージョンを削除しようとしているからである可能性があり、その場合`easy_install --upgrade`を代わりに使うことで回避できます。

---

To manage Python module globally, basically you want to do:

```
sudo easy_install pip
sudo pip install ...
```

However, pip tries to remove old version when executed with `--upgrade`.
This behavior is also the same on `/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/`, which is quite annoying with rootless.
In this case, `easy_install --upgrade` can be used as a workaround. Once after upgrading, pip do not complain anymore.

## PS

- I have upgraded matplotlib and numpy today. I'll report about next upgrade later.
- Perhaps useless information if you don't use [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) because you want to use MacPorts or Homebrew for usual case.
mac（iMac）でマウスの左クリックが効かなくなった

#iMacで突然マウスの左クリックが死んだ
Late 2013のiMac(OS X Yosemite 10.10.5)で
マウス（Magic Mouse）の左クリックがうんともすんとも効かなくなった。

スクロールや右クリックなど、左クリック以外は正常だけど
左クリックだけという地味に致命的なエラー（？）。
もちろん他のマウスでも、トラックパッドでも試してみたけどダメ。

昔、購入してすぐの頃にも一度この症状が出た。
２年間で２回目はさすがに怖いので、今回直った経緯ちゃんと書いとくます。
iMacはなりやすいの？なんなの？ノートでは一切ないのに…。

#きっかけ
昔のは忘れちゃったけど、
今回はiPad Proを非正規のライトニングケーブルで充電したら
急にマウスがおかしくなった。
きっかけといえばこれだけど、本当に原因がコレかは謎。

#試したこと
##SMCリセット
アプリケーションの強制終了や再起動、シャットダウンするもダメなので、
下記の記事を参考にさせてもらって、SMCリセットを３回くらいした。
しかしトラックパッドも修復せず。無念…。
http://qiita.com/hamichamp/items/51601d164316d94b8bca

##NVRAMリセット
前回はこれで直ったようなかすかな記憶があり、やってみた。
ちなみに前回はyosemiteではなくMavericks。

■Mac の NVRAM をリセットする方法
https://support.apple.com/ja-jp/HT204063
が、直らず…。
下記の記事のように奮発すれば直ったのかもしれない…。
http://ameblo.jp/kyouhagokigenda/entry-11438899613.html

##アクセス権の修復
アクセス権の修復でも直ったという声がちらほらあったので、期待してやろうとするが…。
クリックできないのにシステム環境から修復て無理やん！！！
できてる人は、**「繋げた瞬間だけ左クリック効く人」**とか、
**「トラックパッドはクリック使える人」**とか、
**「画面共有使って別のPCから操作できる人」**（共有設定しなかった）。

私みたいにリモート設定もしてなくて
ほんとに何もクリックする手立てがない人は普通にできない。
ので下記を参考にコマンドラインから修復。
http://blog.96color.com/mac-maintenance.html
が、直らず…（これで直る人もいるかも）

ちなみにリモートなら左クリックは正常に動くらしい。

##シングルユーザーモードでアクセス権修復
画面共有をなんとかコマンドラインでできないかと思って試してみたけど
挫折したのでアクセス権修復にかけた。

ただ、今回は念のため
シャットダウンして電源を抜き、２、3時間放置してから下記の手順を実行。

電源ボタンを押したらすぐに（ジャーンと鳴る前に）**【Command + S】**を押し続ける。
黒い画面に白文字が流れてくるので、そうなったら離す。
↓
テキストが止まるまで待機。
↓
`fsck -fy`
と入力してEnterキーを押す。
↓
実行が終わるまで待機。
↓
おわったら、
`reboot`で、再起動。

再起動後はアクセス権が修復されている状態とのこと。

おそるおそるクリックしてみると…
**なおってる！！！！！！！！！**

下記の記事を参考にさせてもらいました。助かった＞＜
http://www.webessentials.biz/mac-maintenance/singluser-mode/

#よかった…
2、3時間放置でなおったのかシングルユーザーモードのアクセス権修復で直ったのか、
その辺はよく分からないけど無事に使えるようになってよかった。

…

やろうとおもったたこと何も進んでないよ
全然よくないよ！！(´；ω；` )
Ruby on Rails 4 - compressorを指定しても、minifyされない時の対処法


## キャッシュクリア

```bash
bundle exec rake tmp:cache:clear
```

とか

```bash
rake tmp:cache:clear
```

でキャッシュをクリアする。

## `public/assets`配下のファイルを削除

``public/assets/*.js``を削除するか、``config/environments/production.rb`` で``config.assets.js_compressor``を変更する。

今回は
``public/assets``にファイルがある場合は、削除する。
の方針で、対処してみましたが、Rails 4では`public/assets`は作成されないようなので、特に何もしてません。


```bash
rm public/assets/*.js
```

キャッシュクリアのみでちゃんとminifyされました。



## 設定ファイル

開発環境の設定ファイル(`config/environments/development.rb`)で確認してみました。
設定は下記のようになっています。

```rb:config/environments/development.rb
  # From production
  # Compress JavaScripts and CSS.
  config.assets.js_compressor = :uglifier
  config.assets.css_compressor = :sass

  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = false

  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
  # yet still be able to expire them through the digest params.
  config.assets.digest = false

  # Adds additional error checking when serving assets at runtime.
  # Checks for improperly declared sprockets dependencies.
  # Raises helpful error messages.
  config.assets.raise_runtime_errors = true
```

## `config.assets.digest`について

`config.assets.digest`の設定がなんなのか最初良くわからなかったのですが、
これを`config.assets.digest = true`としておくと、アセットファイル名にハッシュ値（MD5）が付加されるようです。

例）application.css ⇒ application-908e25f4bf641868d8683022a5b62f54.css

ファイル名にハッシュ値がつくということは、内容が少しでも変わる度に別のファイル名で保存されるということです。
以前にプリコンパイルされた古いアセットファイルや古いキャッシュが残ってしまう可能性があるので（ここは未確認）、毎回、キャッシュクリア（`rake tmp:cache:clear`）して、プリコンパイル（`rake assets:precompile`）した方が良いかと思います。

```bash
#!/bin/bash
#
# キャッシュクリアしてプリコンパイルする
#

rake tmp:cache:clear
rake assets:precompile
```

みたいなスクリプトを組んでおくのも良いかもしれませんね。


## 参考URL

[Rails 4にアップグレードするとassets:precompile しても minify されない](http://shoken.hatenablog.com/entry/2014/05/20/200215)

[アセットパイプライン | Rails ガイド](http://railsguides.jp/asset_pipeline.html)

[5分でわかる!? アセットパイプライン（Assets Pipeline）](http://rails.hatenadiary.jp/entry/2013/03/03/125801)
underscoreコードリーディング（before）



underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##beforeとは


###[underscorejs.orgのbefore](http://underscorejs.org/#before)

こんな説明。
>####_.before(count, function) 
>Creates a version of the function that can be called no more than count times.
>The result of the last function call is memoized and returned when count has been reached.

```javascript
var monthlyMeeting = _.before(3, askForRaise);
monthlyMeeting();
monthlyMeeting();
monthlyMeeting();
// the result of any subsequent calls is the same as the second call
```
------------- 
count回数より多く呼ぶことができない関数を生成します。
最後に呼ばれた関数の結果を覚えておき、count回数になるまでその関数の結果がが返されます。

###[underscore.](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L885)
コード的にはこのあたり。

```javascript
 // Returns a function that will only be executed up to (but not including) the Nth call.
  _.before = function(times, func) {
    var memo;
    return function() {
      if (--times > 0) {
        memo = func.apply(this, arguments);
      }
      if (times <= 1) func = null;
      return memo;
    };
  };
```

timesを前置デクリメントし、0以上であればmemoにfuncを実行した結果を入れ返り値にする。
もしtimesが1以下になった場合にはfuncにnullを代入し、次回以降よばれても利用できないようにする。
[AWS] IAMユーザで請求書ページにアクセスするための罠

IAMのPermissionsでPolicyさえ書けばいけると思ったらそれだけじゃなかった

ちなみにUser PollicyはGenerateできるけど、こんな感じ
```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "xxxxxxxxxxxxxxxxxxx",
            "Effect": "Allow",
            "Action": [
                "aws-portal:*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

## rootアカウントでの設定が必要です
rootアカウントでAMCにログインして、アカウント設定画面を開きます。  
そこでここの*IAM User Access*の値を有効にしないとダメみたいです。

![スクリーンショット_2015-12-16_10.51.31.png](https://qiita-image-store.s3.amazonaws.com/0/22567/74a8506b-258d-2d19-194f-e5c7f007a6c2.png)


しかも設定が反映されるのに数分時間がかかりました。  
ちょっとハマったので共有です。
jqをカラーリングした状態でlessする

# jqをカラーリングした状態でlessする

`cat sample.json | jq . -C | less -R`

![スクリーンショット 2016-01-22 16.37.30.png](https://qiita-image-store.s3.amazonaws.com/0/22567/5f32142f-f16d-274b-4005-8f24234ae40a.png)

サンプルJSONはAWS Price List APIで取得したもの。