OmniAICreator/Qiita-1.07M huggingface dataset:
GitLabの芝をブログに表示する方法

ブログに書いたコードが動かなかったのでこちらにも書いておきます。

http://syui.github.io/blog/2016/06/04/calheatmap-jquery-ajax/

`find`を使ってたのですが、`filter`を使わないと動かなくなってた。GitLab側の変更かも。

```html
<script src="/bower_components/jquery.ajax/jquery.min.js"></script>
<script src="/bower_components/jquery.xdomainajax/jquery.xdomainajax.js"></script>
<script src="/bower_components/d3/d3.min.js" charset="utf-8"></script>
<script src="/bower_components/cal-heatmap/cal-heatmap.min.js"></script>
<link rel="stylesheet" href="/bower_components/cal-heatmap/cal-heatmap.css" />

<h3>Calendar Activities</h3>
<div id="cal-heatmap"></div>
<div id="example-heatmap"></div>

<script>
jQuery(function ($) {
	var json;
    	$.ajax({
        type: 'GET',
        url: 'https://gitlab.com/u/syui/calendar',
        dataType: 'html',
    	async: false,
    	cache: false,
    	success: function(data) {
		var content = $(data.responseText).filter('script').html();
		var tmp = content.replace("<![CDATA[", "").replace("]]>", "");
		var s = tmp.indexOf( "{" );
		var e = tmp.indexOf( "}" );
		json = tmp.substring( s, e+1 );
		$('#gitlab-calendar-activities').text(json);
    	}
	});
	setTimeout( $('#example-heatmap').each(function () {
	//setTimeout( function() {
	    if( json != null ){
		var obj = $.parseJSON(json);
  		var now = new Date();
  		new CalHeatMap().init({
  		  data: obj,
  		  domain: 'month',
  		  domainLabelFormat: '%Y-%m',
  		  itemSelector: '#example-heatmap',
  		  legend: [1, 3, 5, 7],
  		  legendColors: {
  		  	min: "#efefef",
  		  	max: "steelblue",
  		  	empty: "#efefef"
  		  },
        	  tooltip: true,
  		  start: new Date(now.getFullYear(), now.getMonth() - 9)
  		});
	    } else {
	        setTimeout( arguments.callee, 100 );
	    }
	}));
});
</script>

<!--
<div id="gitlab-calendar-activities" style="display:none;"></div>
-->
```

こんな感じで使えます。

簡単に説明すると、クロスドメイン経由でGitLabのカレンダー情報(HTML)をスクレイピングして、JSONに変換し、それを`cal-heatmap`で表示するというものです。
fluentdは送らない先のconf(label)をインクルードするだけでheartbeat通信する模様


fluentdは送らない先のconf(label)をインクルードするだけでheartbeat通信するなんて知らなかったので以下のようなのを最初のほうにinclueしておいてました。

```
<label @forward>
  <match ** >
    @type forward
    heartbeat_type tcp
    heartbeat_interval 2s
    #phi_threshold 32
    #hard_timeout 60s
    #send_timeout 60s
    flush_interval 1s
    buffer_queue_limit 3072
    buffer_chunk_limit 10m
    buffer_type file
    buffer_path /var/tmp/fluent_buf/forward
    expire_dns_cache 10
    #require_ack_response
    <server>
      host log1-direct.mng.hoge.local
      port 24224
      weight 50
    </server>
    <server>
      host log2-direct.mng.hoge.local
      port 24224
      weight 50
    </server>
  </match>
</label>
```

で、実際送るとこに書いてたのがこんな感じ。（chefで配るやつなので見づらいですが）

```
<match catalina.out.**>
 type copy
<% if @include_s3up %>  #### chef的にこの変数をtemplateリソースで受け取ったら下のが書かれるtemplate。
  <store>
    @type relabel     ####　ここでさっきのラベルの内容が呼ばれる
    @label @forward
  </store>
<%= @include_s3up %>
～略～
<% end %>
</match>
```

しかしあるひlogサーバ側にきてるはずのない、s3にだけ送りたいホストからのclose_wait（port24224)を発見。
たぶん冒頭のconfを無条件でincludeしてるせいでラベルは使ってないけどtcpでheartbeat_intervalおきに通信がきてるせいかなあと思いました。それ以外に思いつかないし。
なので、送りたくない送り先の情報をincludeしないほうがいいんだなと思いました。
includeしないように改修中。きもちclose_wait減った気がします。対応した台数分、200くらい。（まだまだある）
Recv-Q は0とか大きくはない感じだったのでどれだけ意味があるのかはわからないけど無駄な通信があるとキモいというかclose_wait激増とかはもうあんまり見たくない気がする次第です。

こういうの↓が数百行でていました。

```text:netstatの結果の1行
tcp        1      0 10.1xx.xxx.230:24224          10.15x.x4.xx1:48044         CLOSE_WAIT
```

以上です。
Atomにatom-beautifyを入れてPHPのソースコードを整形する

## 環境

- Mac osx v10.9.5
- Atom v1.8.0
- atom-beautify v0.29.9
- php-cs-fixer v1.11.4
- php 7.0.8

## やること

- Laravel5(PHPフレームワーク)のソースコードを自動でsymfonyのコーディング規約に準じたフォーマットに整形したい。
- CodeSnifferは手動でプログラムを修正しないといけないので急いでるときとかめんどくさい。

## atom-beautifyのインストール

Atom(メニュー) > Preferences... > Install で「atom-beautify」と検索してインストールする。

![スクリーンショット 2016-07-06 15.59.07.png](https://qiita-image-store.s3.amazonaws.com/0/81353/04bbf380-3676-40a1-796a-bd77f44b5aa9.png)
※スクリーンショットは既にインストール済みです。

## php-cs-fixerをインストール

下記コマンドでインストールできます。必要であればroot権限で実行してください。

```bash
$ curl -L https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v1.11.4/php-cs-fixer.phar -o php-cs-fixer
$ chmod a+x php-cs-fixer
$ mv php-cs-fixer /usr/local/bin/php-cs-fixer
$ php-cs-fixer --version
PHP CS Fixer version 1.11.4 by Fabien Potencier (eeb280e)
```

> https://github.com/FriendsOfPHP/PHP-CS-Fixer

## Laravel用に設定

Atom(メニュー) > Preferences... > Packages > atom-beautify > Settings > PHP で下記のように設定。

![スクリーンショット 2016-07-06 16.08.34.png](https://qiita-image-store.s3.amazonaws.com/0/81353/f70aa99e-71d0-08cd-50e7-b8690392f11f.png)

> http://kore1server.com/334/Laravel%E3%81%A7CS+Fixer%E3%82%92%E4%BD%BF%E3%81%86

## コードを整形する

右クリックコンテキストメニュー > Beautify editor contentsをクリックするとコードが整形される。

![スクリーンショット 2016-07-06 16.32.24.png](https://qiita-image-store.s3.amazonaws.com/0/81353/360876d6-ccd8-f81e-e356-7f869580da35.png)

ちなみに、整形後はこちら。

![スクリーンショット 2016-07-06 16.32.45.png](https://qiita-image-store.s3.amazonaws.com/0/81353/aa039863-4938-5ddb-1f02-5a506be1709f.png)

※デフォルトは「symfony」レベルが設定されています。用意されているレベルに関しては下記サイトを参考。

> https://github.com/FriendsOfPHP/PHP-CS-Fixer

## まとめ

- 導入はとても簡単でした。
- 時々「Beautify editor contents」を押しても何も変わらないことがあるけど何だろう?
中途半端な罫線付き見出しの実装（CSS）

こんな風に、見出し文字の右側に貫く横線が現れるようなデザイン。

![image](https://qiita-image-store.s3.amazonaws.com/0/6117/afedf79c-5920-f5b6-0a82-de7e9ec151b6.png)

HTML的にはこのような構成。

```html
<h2>
    <span>はじめに</span>
</h2>

<p>
    こんな風に見出し文字の右側に横線が現れる見出しを作りたい。
</p>
```

まず、こんな風に組んでみる。

```scss:type-1.scss
$main-color: #666;
$font-size: 24px;

.type-1 {
    $h: $font-size;
    $bw: 2px;

    h2 {
        position: relative;

        height: $h;
        line-height: $h;
        
        font-size: $h;

        &::after {
            content: "";

            display: block;
            position:absolute;
                
            width: 330px;
            height: $bw;

            right: 0;
            top: $h / 2;

            margin-top: -$bw / 2;
                
            background-color: $main-color;
        }
    }
}
```

再掲ですが、以下のように表示されます。横線の長さが決め打ちなのでこれは意図通りではありません。

![image](https://qiita-image-store.s3.amazonaws.com/0/6117/afedf79c-5920-f5b6-0a82-de7e9ec151b6.png)

## 【解決策1】 table-cellを使った方法

```scss:type-2.scss
$main-color: #666;
$font-size: 24px;

.type-2 {
    $h: $font-size;
    $bw: 2px;

    h2 {
        display: table;
        
        position: relative;

        height: $h;
        line-height: $h;
        
        font-size: $h;
        
        span {
            display: table-cell;
            
            white-space: nowrap;
            
            padding-right: 10px;
        }
        
        &::after {
            content: "";

            position: relative;
            display: table-cell;

            width: 100%;

            background-color: $main-color;

            transform: scaleY($bw / $h);
        }
    }
}
```

``white-space: nowrap;``で改行を抑えられます。

黒い線は長方形のセルをtransform (scaleY)で無理矢理縮めてます。

tranform前:

![image](https://qiita-image-store.s3.amazonaws.com/0/6117/3bedd832-2b24-dc04-1921-69892ae3469a.png)

scaleYを付けて、意図通りのレイアウトができました。

![image](https://qiita-image-store.s3.amazonaws.com/0/6117/20b558ce-558e-c0b1-0806-bb7b04bec5e8.png)

## 【解決策2】 overflow:hiddenを使った方法

```scss:type-3.scss
$main-color: #666;
$font-size: 24px;

.type-3 {
    $h: $font-size;
    $bw: 2px;

    h2 {
        position: relative;

        font-size: $h;

        line-height: $h;

        white-space: nowrap;
        
        overflow: hidden;
        
        &::after {
            content: "";

            display: inline-block;

            position: relative;

            width: 100%;
            height: $bw;
            
            left: 0;
            bottom: $h / 2 - $bw;
            
            background-color: $main-color;
        }
    }
}
```

inline-blockを繋げて、右側の線要素はwidthを100%にし、
``overflow: hidden``にすることによりはみ出さないようにします。

これでも意図通りの結果が得られました。

![image](https://qiita-image-store.s3.amazonaws.com/0/6117/da053b28-ee01-340f-9de3-7bc695e9d95e.png)


デモは[こちら](http://jsdo.it/butchi/QUQu)。


謝辞: 解決策2のアイデアをくれた[T. Itabashi](http://codepen.io/reprise/)氏に感謝します。
【Node.js】コード修正を自動検知してプロセス再起動

コードの修正を自動検知してプロセス再起動してくれるnodemonの使い方です。

nodemon
http://nodemon.io/

コードを修正するとき、一度プロセスを停めて、再度開始する必要があります。
nodemonを入れると、コードの修正を自動検知し、自動でプロセスを再起動してくれます。


### インストール方法
```
npm install -g nodemon
```

### 使い方①
```
nodemon start
```

`npm start` の代わりに上記のコマンドを打ってプロセスを起動すればOKです。
コードを修正すると自動的にプロセスが再起動します。


### 使い方②
package.jsonを編集することで、`npm start`という同じコマンドでnodemonを実行することができます。

```package.json
"scripts": {
    "start": "nodemon ./bin/www"
}
```
プロジェクト運営、管理で使う製品


# 製品
ここでいうプロジェクト運営はIT系システム開発プロジェクトを指します。
特に私はWeb系プロジェクトに携わる事が多いため、Web系のプロジェクト運営や管理で使う製品を紹介したいと思います。

探してみてもニュース記事だと用途が一目で分からないことが多いです。
種類が多いため、以下のカテゴリに分けました。

* 統合管理
　スケジュール、タスク管理等のプロジェクト進捗状況や課題を見える化する製品。
　

* 継続的CI
　ビルドやテストを頻繁に繰り返し行うのをサポートする製品。
　
* 構成管理
　ファイルバージョン、更新履歴等のバージョン管理する製品。
　
* 自動試験
　試験の自動化、デグレート確認、大量データ試験等をサポートする製品。
　
* プラットフォーム
　OS等を置く場所を提供してくれる製品。
　
* 仮想
　場所をとらないように仮想化する製品。
　
* 環境
　DBやWebサーバ等の環境を自動生成する製品。
　
* ビルド／デプロイ
　プログラムソースをビルドし、Webサーバにデプロイする製品。　
　

以下はカテゴリに製品を配置して、サービス開始時期をはめた図です。

開発プロジェクトの製品
![開発プロジェクトの製品.png](https://qiita-image-store.s3.amazonaws.com/0/111073/5d48319b-2cea-2948-5277-4c4a62ab7bcf.png)

Redmineが2006年か・・・そりゃ、おっさんにもなります（笑）
python-zbarを使って画面表示無しでWebカメラを利用する

ネットワーク上のRaspberry PiでSSH経由でWebカメラを利用する時に、サンプル通りに`proc.init(device)`としてしまうと、画面表示が出来ないためエラーが発生する。

```
 proc.init(device)
 zbar.SystemError: ERROR: zbar processor in zbar_processor_init():
 system error: spawning input thread: Invalid argument (22)
```

SSHに`-X`オプションを付けると大丈夫だけれど、そもそもアプリケーションとして画面表示が必要ないことも多いので、そういう場合の対処方法のメモ。

```Python
import zbar
proc = zbar.Processor()
device = '/dev/video0'
proc.init(device, False)
```
[この記事](http://stackoverflow.com/questions/27143692/zbarcam-raspberry-pi "Zbarcam-Raspberry Pi")によると、ドキュメントには載っていないものの、Processorの初期化にデバイス名と、Falseを与えてあげればいいとのこと。

## 参考
+ [python - Zbarcam-Raspberry Pi - Stack Overflow](http://stackoverflow.com/questions/27143692/zbarcam-raspberry-pi "Zbarcam-Raspberry Pi")
チューリング賞受賞者が語るビッグデータの未来

![IMG_1339.JPG](https://qiita-image-store.s3.amazonaws.com/0/64623/5e5648bb-b53d-116d-f549-fd6d85b67f91.jpeg)

僕が夏休みのインターンとして働いているIBM・アルマデン研究所で、[マイケル・ストーンブレーカー](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%A4%E3%82%B1%E3%83%AB%E3%83%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%83%B3%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AB%E3%83%BC)氏がこれからのビッグデータの過去、現在とその未来についてプレゼンテーションをしてくれました。彼はマサチューセッツ工科大学(MIT)の教授でもあり、データベースシステムに関する数多いスタートアップにも関わり、チューリング賞受賞者でもあります。

この記事はそのプレゼンからの主な要点を紹介していきます。（所々バラバラで申し訳ございません、メモ的なまとめなので・・・）

マイケルさんのプレゼンテーションでは、ビッグデータの主な問題点と課題、その**３V**を元にその問題点とその解決方の提案を紹介してくれました。その３Vとは：
- **Volume (ボリューム)**:　巨大なデータ量のことを示す
- **Velocity (ベロシティ)**:　高速度；リアルタイムでプロセシングと分析を行えるか
- **Variety (バラエティ)**:　様々な情報源からデータ分析を行う

# **Volume (ボリューム)**
ビッグデータによる、巨大データ量の単純分析手法はもう既に解決されている問題である。過去にはSQLでその分析を行っているが、これからの時代は統計学や機械学習などでデータ予言のモデルを使っていくとよい。そこで以下のワークフロープロセスでの分析方法を利用するのに現在あるデータ分析キットやツールで分析を行う。しかし、現在のデータベースの技術のほとんどは行ストアとカラムストア式の構造になっており、***機械学習などの分析（主に外積など）に必要なのは線型代数学のルーティーンを効率に行えるアレイ式のデータベース構造***が巨大データ量分析の問題を解決する鍵だと語る。

そこでマイケルさんはビッグデータの分析に今よく使われているHadoopとSparkについて、各テクノロジーの弱点をあげていきました。
###Hadoop
- マップ・リデュースは基本的にはSQLマーケット向け
- グーグル社（アルファベット）はすでにこれを見捨てた
- 単純に言うと、Hadoopはファイルシステムの上にSQLを乗せたもの

###Spark
- メモリを使うが、その点、データの持続性がない
- データ共有が難しい；主にネットーワークで送信に時間かかるし、バッファープールもない
- これもまたSQL版もある→SparkSQL、なのでこれもまたSQLマーケット向け

###**Volumeのまとめ**
- 機械学習などの分析を利用
- 行ストアとカラムストア構造より、UDFを使ったアレイ式構造を利用する
- 上の二つにより、HadoopとSparkからの問題点と共に、分析エンジン（線型代数学エンジン）をデータベースに仕込む
- 要するに、分析とデータをストアを両方するプラットフォームが必要

#**Velocity (ベロシティ)**
今の時代はIoTなどのセンサーやサーバーのログなどからリアルタイムでデータが来るので、これを処理できるシステムが必要とされる。現在、リアルタイムのデータ処理はApache StormやApache Kafkaなどがよく使われていることが多いそうだと。

そこで、リアルタイムのデータ処理に関するいくつかの問題点はリアルタイムでのデータロスのリスクを抑制についてこう語る：
- データの存続性が必要
- ハイパフォーマンスOLTP（オンラインでの取引処理)などを使うこと
- なるべく潜在を抑え、データのレプリケーション、フェイルバックと冗長性を維持すること
- 主なOLTPのシステム例：VoltDB, NeoDB, MemSQL

そして、その問題点に対する提案された解決法：
- RDMA（リモートダイレクトメモリアクセス）を同時実行コントロールメカニズムとして使う
- 広範囲のネットワークでデータの冗長性を維持し、そこでレプリケーションも行う

#**Variety (バラエティ)**
現在よく使われているビッグデータの構造は、データをサイロに入れる感じで保存してる物が多い。ここで鍵となるのがエンタープライズ内で保存しているプライベートのデータと政府やオープンソースで公開されているデータを両方組み合わせて分析を行うことが鍵だと語る。しかし、データが多くなるほど、それに対するプリプロセス作業とデータクレンジングが大変だと。これは最初からグローバルスキーマが提案されておらず、ほとんどのデータが一定化されてないことが問題とされる。しかしスキーマを提案し、それを実際にビッグデータに実施するのがとても難しい。

ここで重要なのが「Human-in-the-Loop」、データのプリプロセス作業を人間が操作の一環に組み込まれている環境を作り上げないといけないこと。ここが現在のビッグデータのボトルネックであると言われている。

解決提案としては、ビッグデータのプリプロセス作業を機会学習プロセスと「Human-in-the-Loop」モデルを組み合わせることによって管理が素早くなるとのこと。
ーーー

以上、マイケル氏によるプレゼンテーションのまとめでした。

#**個人的な感想**
- 問題点は色々と指摘したが、効果的な解決法とはなるような物は詳しく教えてくれなかった。
- 結局、自分のスタートアップのサービスの広告的なプレゼンでもあったw
- 個人的な考えでは、P２P式のブロックチェーンなどの構造でデータの保存とプロセスを編み込むのが一番だと思う。ブロックチェーン構造は提案した解決法と結構当てはまる部分が多いと思う。（今、個人のサイドプロジェクトとしてブロックチェーン構造を利用したP２Pディープラーニングプラットフォームを開発中、完成次第その時に記事を書きます・・・）
らずぱい: OpenCV+MMALのサンプル(rpi-mmal-opencv-modetect)


## 概要

- らずぱいのCSIでつながってるカメラは、MMAL(Multi-Media Abstraction Layer)というAPIで使うらしい。
- OpenCVと一緒に組み合わせると、なかなか、いいフレームレートでなんかできそう？
- とりあえず、**詳しいことはいいから**、↓のサンプルを試す。
- https://github.com/sodnpoo/rpi-mmal-opencv-modetect<br>OpenCVの動体検出と組み合わせてる。


## 環境
- Raspberry Pi 3
- らずぱい Camera V1 (OmniVision CMOS 5MP OV5647)
- らずぱい Camera V2 (Sony CMOS 8MP IMX219)
- `2016-05-27-raspbian-jessie.img`
- `sudo raspi-config`でカメラ使えるようにしとく

## 手順
0. `sudo raspi-config`<br>でカメラ使えるようにしとく.GPU_MEMも多めにしとく？
1. `sudo apt-get install cmake libopencv-dev git`
2. READMEに沿って。そのままだとエラー出るので、ちょいとパッチを当てる。

    ```bash
mkdir -p /home/pi/src/raspberrypi
cd /home/pi/src/raspberrypi
git clone --depth 1 https://github.com/raspberrypi/userland.git
make -C /opt/vc/src/hello_pi/libs/vgfont
git clone https://github.com/sodnpoo/rpi-mmal-opencv-modetect
cd rpi-mmal-opencv-modetect
```

3. vi ./opencv_modect.c
パッチ

    ```c:opencv_modect.c
...
#include <opencv2/core/core_c.h>
//コメントアウト-#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/highgui/highgui_c.h>
//コメントアウト-#include <opencv2/imgproc/imgproc.hpp>
//コメントアウト-#include <opencv2/video/video.hpp>
#include <opencv2/imgproc/imgproc_c.h>  //追加.
...
```

4. ビルド

    ```bash
mkdir build
cd build
cmake ../
make
```

5. `./mmal_opencv_modect > video.h264`<br>実行。<br>物体の動きを検出すると、標準出力に h264のストリームを出力、メッセージは標準エラー出力.
`video.h264`は、VLCとかで再生できる

    ```shell-session:実行例
pi@raspberrypi:~/src/raspberrypi/rpi-mmal-opencv-modetect/build$ ./mmal_opencv_modect > video.h264 
VIDEO_WIDTH : 1280
VIDEO_HEIGHT: 720
VIDEO_FPS   : 30
camera video buffer_size = 2764800
camera video buffer_num = 2
camera created
encoder input buffer_size = 1382400
encoder input buffer_num = 2
encoder output buffer_size = 65536
encoder output buffer_num = 1
encoder input pool has been created
encoder output pool has been created
encoder has been created
FPS: OpenCV = 26.93, Video = 30.56
MOTION DETECTED (28)
MOTION DETECTED (712)
KEYFRAME (1467786643:1)
MOTION DETECTED (1530)
MOTION DETECTED (1578)
MOTION DETECTED (2419)
MOTION DETECTED (2361)
MOTION DETECTED (2976)
MOTION DETECTED (1767)
MOTION DETECTED (2269)
MOTION DETECTED (1598)
MOTION DETECTED (987)
MOTION DETECTED (536)
MOTION DETECTED (367)
MOTION DETECTED (458)
MOTION DETECTED (422)
MOTION DETECTED (350)
MOTION DETECTED (1063)
FPS: OpenCV = 28.38, Video = 30.28
FPS: OpenCV = 28.90, Video = 30.19
FPS: OpenCV = 29.17, Video = 30.14
FPS: OpenCV = 29.34, Video = 30.11
^C
130 pi@raspberrypi:~/src/raspberrypi/rpi-mmal-opencv-modetect/build$
```
=> いい感じのフレームレート



## その他
### オプション
- `-r` : rotation(0, 90, 180, 270)
- `-w` : width (default 1280)
- `-h` : height (default 720)
- `-f` : fps (default 30)
- `-s` : still filename --  `//every 60 seconds`というのがあるので、60秒毎??

### vlcで rtspできるんじゃね？(>>[[メモ] らずぱいカメラ VLCでストリーミング](http://qiita.com/mt08/items/108bbc6d982b42c11e3a))
- らずぱい<br>`./mmal_opencv_modect | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264`
- Windowsで、VLC立ち上げて、Media>OpenNetworkStream> `rtsp://らずぱいIP:8554` で `[Play]`
- カメラを動かして、h264を吐き出させると、画像が出る。
- 前と同様、3秒ぐらいの遅延
Ansibleでタスク実行中に「y/n」などの回答を求められた際に自動返答する方法

## 概要
ansibleから自動返答するためにはpexpectモジュールが必要。  
pexpectは[expect - Executes a command and responds to prompts](http://docs.ansible.com/ansible/expect_module.html)を見ると「pexpect >= 3.3」なのでpipからインストールする必要がある。  
`yum info pexpect`でインストール出来るpexpectを調べたがバージョン2.3だったため、pipで導入した。   
キモとなるのは下記の部分で`Please enter ～`の問いかけに対して自動で`"{{ input_file_path }}"`や`"test"`を自動返答している。「y」や「n」を求められる場合はこの返答部分を`"y"`などにすれば良い。

```yaml
      expect:
        command: /bin/bash -lc "ansible-playbook -i hosts playbook2.yml"
        responses:
          'Please enter input_file_path': "{{ playbook_dir }}"
          'Please enter input_file_body': "test"
```

## pipからpexpectモジュールを導入する
- `sudo yum install -y python-pip`
- `sudo pip install pexpect`

## 実際に「playbook.yml」から「playbook2.yml」を起動し、自動返答を試してみる
- 下記の内容の「hosts」ファイルを作成  
※IPは適宜変更ください

```text
[targets]
192.168.33.11
```
- 下記の内容の「playbook.yml」ファイルを作成

```yaml
- hosts: targets
  user: vagrant

  tasks:
    - name: "playbook2.ymlを実行"
      expect:
        command: /bin/bash -lc "ansible-playbook -i hosts playbook2.yml"
        responses:
          'Please enter input_file_path': "{{ playbook_dir }}"
          'Please enter input_file_body': "test"
      args:
        # {{ playbook_dir }}でこのplaybookが走っているカレントディレクトリを参照（ex./home/vagrant/nas_vagrant/ansible/expect_test）
        chdir: "{{ playbook_dir }}"
```
- 下記の内容の「playbook2.yml」ファイルを作成

```yaml
- hosts: targets
  user: vagrant
  vars_prompt:
    - name: "input_file_path"
      prompt: "Please enter input_file_path"
      private: no

    - name: "input_file_body"
      prompt: "Please enter input_file_body"
      private: no

  tasks:
    - name: "空のinput_fileファイル作成"
      file:
        path: "{{ input_file_path }}/test_file"
        state: touch

    - name: "input_fileファイルに追記"
      lineinfile:
        dest: "{{ input_file_path }}/test_file"
        state: present
        insertafter: EOF
        line: "{{  input_file_body  }}"
```
- `ansible-playbook -i hosts playbook.yml`で実行すると「playbook.yml」と同じフォルダ内に「test_file」というファイルが生成される

## 変更履歴
- 2016/07/07:サンプルスクリプトを分かりやすく修正した

## 参考
- [expect - Executes a command and responds to prompts](http://docs.ansible.com/ansible/expect_module.html)
- [Playbook 実行時に任意の値を指定する](http://d.hatena.ne.jp/akishin999/20130818/1376824640)
draw.ioを試してみよう

## はじめに

図があったほうがわかりやすいかもと思い、ドローツールを探してみたところ便利なツールを見つけたので紹介します。

https://www.draw.io/

無料で使えます。

## 日本語表示

右上の地球儀のようなアイコンをクリックして日本語を選択して、画面を更新すると日本語で表示されるようになります。

<img width="1265" alt="スクリーンショット 2016-07-06 15.24.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/29884/e157eb73-6943-12e6-e063-1668a9c00346.png">

## テンプレート

メニューのファイルをクリックして、新規作成を選択するとモーダルが開かれます。

<img width="1275" alt="スクリーンショット 2016-07-06 15.23.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/29884/3a932f8b-c81e-bb9e-3152-e0081c962a48.png">

<img width="691" alt="スクリーンショット 2016-07-06 15.26.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/29884/a7ceedfe-7dfc-3689-3b2c-e876f4530693.png">

基本には「白紙ダイアグラム」がありますが、ソフトウェアデザインなどにはテンプレートがあります。それらを元に編集すると、なんとなく作業が進んだ感じになりお得です。

<img width="689" alt="スクリーンショット 2016-07-06 15.30.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/29884/9d73f6f0-33dc-75dc-46fb-37c896e31e64.png">

## 保存＆開く

保存したい場合は、メニューのファイルをクリックして、保存を選択するとxmlファイルをダウンロードします。

ダウンロードしたファイルを編集したい場合は、メニューのファイルをクリックして、開くを選択し、デバイスを選択し、ダウンロードしたファイルを選択すればできます。

## エクスポート

xmlファイルではなく画像ファイルが欲しい場合は、メニューのファイルをクリックして、エクスポートを選択すればできます。

<img width="1275" alt="スクリーンショット 2016-07-06 15.37.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/29884/43a34c59-cbc7-4929-1046-19c40eb8021a.png">

## まとめ

ドローツールを簡単に紹介しました :coffee:
エンジニア5年目にして初めてサーバを借りてみた

# 筆者のスペック
#### 経歴
* 某ネットベンチャーに新卒入社
* → 5ヶ月、エンジニア研修
* → 6ヶ月、サーバサイドエンジニア
* → 1年間、サービス企画：サーバサイドエンジニア=5:5
* → 1年間、新サービスの立ち上げプロデューサー
* → 1年間、広告ビジネス:サーバサイドエンジニア=4:6
* → 別業界にビジネス側の人間として転職

#### 趣向
* エンジニアを名乗っているがサービス企画のほうが好き
* 新規Webサービス動向には強いが、エンジニア的な情報にはギークな方々ほど興味なし
* 一番好きなことは金儲け。最近は株でがっぽり儲けている（含み損は含まない、ここ重要。塩漬けで今泣きそう）
* その記録をブログにして残そうと検討中。

# 契約前に調べたこと
#### サーバの種類
* レンタルサーバ
    * 設定や条件が全て決まっていて、その上で一部領域を使う形式
    * ApacheやMysqlはもちろん、FTPなどが全て設定されていて、サーバを借りてhtmlファイルをアップロードするだけでWebページを閲覧することができる
    * Wordpressなどの主要CMSはインストール用の機能が装備されている場合が多く、簡単に導入できたりする
* VPS
    * 仮想専用サーバ（Virtual Private Server）とはサーバの一部領域を専用サーバのように使う(仮想)ことができる
    * 設定等は全てユーザー側で行う必要がある
    * OSから全て自由に設定できるので、サーバの高速化処理をしたり、最新技術を取り入れることができる

→ 【結論】 もちろんVPS。支配からは卒業しないといけないと尾崎豊パイセンが言ってたから。あと、WordPressだけに使うわけではないから。

#### 主なVPSサーバ会社
* 比較表（各社メモリ1GBで比較）

    |会社|月額|初期費用|CPU|ディスク容量|メモリ|補足|
|:--|:--|:--|:--|:--|:--|:--|
|[さくらインターネットのVPS](http://vps.sakura.ad.jp/)|972円|1620円|仮想2Core|100GB|1GB|2週間無料|
|[GMOクラウドのVPS](https://vps.gmocloud.com/?id=a8)|780円|4000円|仮想2Core|50GB|1GB|15日無料, amazonギフト券4000円分（〜2016/08/05）|
| [CloudCore VPS](http://www.cloudcore.jp/)|1296円|無料|仮想2Core|100GB|2GB|12ヶ月契約一括前払いの場合の料金|


→ 【結論】 金額やスペックは特に差はないので、使ってる人の多い[さくらインターネットのVPS](http://vps.sakura.ad.jp/)を選んだ。極めて日本人的発想だが、ネット上に知見が多いのは嬉しい。あと、dotinstallに動画があるから。

#### 契約プラン
* メモリ: 512MB or 1GB
* CPU:　1Core or 2Core
* ディスク容量:　HDD 100GB or SSD 30GB

→ 【結論】 さくらのVPS 512プラン [東京 第2ゾーン]
    <img width="995" alt="スクリーンショット 2016-07-06 16.45.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/15820/1a4d21fc-01b5-a17a-9f67-897ea5969df0.png">



# 契約後の作業
#### 別スレッドにて



# 参考サイト
* [VPSサーバとレンタルサーバの違いを比較してまとめてみた](http://blog.nzakr.com/server-comparison/)
HMACをいろんな言語で

HMAC SHA-256 のサンプル。暇があったら他も書きます。

秘密鍵 `secret key`・対象 `This is a pen.` で HMAC SHA-256 でサイン。
出力は`b4197908ed255480db6bbedb27426c89520bcd3b79c81006f70a94f415b43a43`になります。

まずJava。

```java
package example.misc;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

public class HmacDemo {

    private static final String SECRET = "secret key";
    private static final String TEXT = "This is a pen.";

    public static void main(String[] args) throws Exception {
        String algo = "HMacSHA256";
        final SecretKeySpec keySpec = new SecretKeySpec(SECRET.getBytes(),
                algo);
        final Mac mac = Mac.getInstance(algo);
        mac.init(keySpec);
        final byte[] signBytes = mac.doFinal(TEXT.getBytes());
        for (byte signByte : signBytes) {
            System.out.printf("%02x", signByte & 0xff);
        }
        System.out.print("\n");

    }
}
```
アルゴリズムの指定が冗長なんだけどこういう書き方しかないのか。byte列の16進出力もうちょっときれいにできるとうれしいのだが。Base64エンコードのライブラリはbyte列をそのまま受け付けるこの場合はいいのかもしれない。

次はPython

```python3
#!/usr/bin/python3

import hashlib
import hmac

SECRET = "secret key"
TEXT = "This is a pen."

print(hmac.new(bytes(SECRET, 'ascii'), bytes(TEXT, 'ascii'), hashlib.sha256).hexdigest())
```


次Ruby。

```ruby
#!/usr/bin/ruby

require 'openssl'

SECRET = "secret key"
TEXT = "This is a pen."

puts OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'),
  SECRET, TEXT).unpack("H*")
```
Rubyを勉強したJava系エンジニアが「ほわっ！？」となったこと一覧


##前提
Java, C#といったお堅い言語をメインに勉強してきた私が、オライリーの「初めてのRuby」を勉強していてオッタマゲタことを、備忘録がてら記していきます。
Java系の文化に慣れている方が、Rubyというカルチャーギャップを体験するのに役立てばと思います。

(※)驚きを伝えるためにおどけた表現をすることはありますが、Rubyを貶すような意図は一切ありませんので、あしからず。
(※※)Rubyを勉強するにつれ、少しずつ増やしていく予定です。


##驚愕その1.定数は変更できる
Rubyにおいては、 **定数は変数**です。
もう一度言います。
**定数は変数**です。
より詳しくは、変更しようとすると警告が出る変数です。
警告が出るだけで、変更しようと思えばできてしまいます。
**何と言っても変数ですから。**

(例)

```ruby
CONST = 1
CONST = 2 #=>警告が出るだけで、変更は可能
```

もはや定数ではなく不定数です。
Rubyは柔軟だと聞いてはいましたが、まさかここまでとは。。。

###意図せずに定数が変更される恐れはないのか？

気づいたら定数が変更されてた、なんてのは登ったハシゴを壊されるのにも似た所業です。
しかし実際にこういうことが起きることは稀だといえます。
というのも、Rubyでは変数名の先頭を大文字にすると自動的に定数になるため、定数かどうかの見分けがすぐにつくからです。
定数であることを知っていて変更するような捻くれ者は、きっとあなたのチームにはいないことでしょう。

##驚愕その2.組み込みクラスを変更できる
Rubyでは、Stringクラスのような組み込みのクラスでも、挙動が気に食わなければ好きに変更することが許されます。
例えば下のように、lengthメソッドが必ず0を返すように書き換えることも可能なのです。

```ruby
class String
	def length
		0		#どんな文字列でもlengthが0になる
	end
end
```

クラスはプログラマにとっての道具。
**ハンマーだと思って振り下ろしたらこんにゃくになっていた**、なんてことが有り得るのがRubyの世界なのです。

継承もしない。ミックスインもしない。拡張もしない。
ただ目の前のクラスを跡形もなくオーバーライドしてしまえばいいのです。
Javascriptのようなプロトタイプベースならともかく、クラスベースのオブジェクト指向の言語にあってこの仕様は本当に衝撃でした。
一応クラスを変更不能にするfreezeキーワードというものもあるのですが、 **組み込みクラスにはfreezeは施されていません。**

##驚愕その3.予約語をメソッド名にできる

予約語といえば、ifとかclassとかreturnといった、組み込み制御に使用されるキーワードです。
大抵の言語では予約語は使用できないのですが、Rubyではそのようなタブーはありません。
「初めてのRuby」によれば、Railsの内部ではifとかendという名前のメソッドが乱舞しているのだとか。
魔窟ですね。。。

##驚愕その4.クラスはオブジェクトである

より正確に言うと、「全てのクラスはClassクラスのインスタンスである」ということです。
この説明を初めて知った時に、頭の中がクエスチョンマークでいっぱいになったのは決して私だけではないと思います。
JavaやC#では、クラスは実体を持たないただの設計書であり、実体を持ったオブジェクト（インスタンス）とは全く別物と教わります。
クラスはオブジェクトを抽象化したものであり、クラスより抽象的な概念は存在しません。

しかしRubyではクラスを更に抽象化したClassクラスというものがあり、クラスの上部に君臨しているというのです。
幽遊白書でいうと、戸愚呂弟がB級妖怪だと聞かされた時の衝撃に似ています。

まあよく考えれば「共通の挙動をするものは、同じクラスに所属するオブジェクトとみなす」というオブジェクト指向の根本的哲学に立ち返れば、「クラスそのものもまた上位のクラスに属するオブジェクトである」という考えは非常に自然であると言えます。
Rubyが一貫性の高いオブジェクト指向言語であると言われる所以の一つでしょう。

本当はここから特異クラスの話とかメタプログラミングの話とかが始まるのですが、それらの概念を私がまだ把握しきれていないので、ここではやめておきます。
理解が進んだら改めてここに追記したいと思うような、興味深い話題ではあります。


##赤魔道士への道（まとめ的な何か）

こういったRubyの仕様を知るにつれ、Rubyの哲学の一端がおぼろげながら見えてきた気がします。
それは、「白魔道士になるも黒魔道士になるも君の自由」という考え方です。

Rubyは、オブジェクト指向言語として非常に完成されています。Javaのようにプリミティブ型のことなんて考えなくてもよいし、getterやsetterも簡単に作れます。
よって、伝統的なオブジェクト指向言語の流儀に則り、お行儀の良いプログラミング（白魔術）をするにはうってつけの環境が整っています。

その一方、言語仕様を自分流にガリガリ書き換えてしまうことも可能です。そのようなプログラミング流儀は俗に黒魔術と呼ばれ、一部では熱狂的に支持され、一部では忌避されているようです。

白魔術で清く正しくやるもよし、黒魔術で自分だけのアナザーワールドを構築するもよし。
そういう自由が与えられていることが、Rubyの妖しい魅力につながっているんだと感じます。

とはいえ、せっかくこれだけ柔軟な言語なら、白魔術だけでRubyをやるのはなんとなく物足りない気もします。逆に、黒魔術に走りすぎれば自滅は必至でしょう。
両者のバランスを上手くとった"赤魔術"的な書き方を目指すことこそ、Rubyistの第一歩なのかもしれません（Rubyだけに）。
Ruby | String#next は存在するけど String#prev は存在しない？

# next

Aの次はB。

```rb
'A'.next
```

Zの次は AA。

```rb
'Z'.next

# => "AA"
```

# prev

だが Bの前は A じゃない。

```rb
'B'.prev

# => NoMethodError: undefined method `prev' for "B":String
```

# 理由

- StackOverflow には「構造的に出来ない」ふうな図が乗っていた、がちゃんと調べたわけではないので定かではない。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/6432b103-5a91-2942-e7fc-2d8667905a82.png)

`String#ord` を取って引き算するやり方も載っていたが、1バイトの文字の場合にしか対応していない。

>```rb
>('B'.ord-1).chr # => 'A'
>('$'.ord-1).chr # => '#'
>```

# 環境

- ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]

# 参考

- http://stackoverflow.com/questions/20413391/next-and-previous-for-letters-and-symbols-array








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
PHPで600MBほどのSJISのCSVを読み込んでUTF-8として処理する場合のサンプルコード


2012年ごろに書いたもののうろ覚え版。

ファイルサイズがデカすぎてmod_phpで扱うには問題があったことと、「全てのテキストを一括でエンコーディング変換しないと、変換ミスが発生する」ケースがあったため、この様な強硬策を取った。

```php
// SJISじゃなくてSJIS-win、EUC-JPじゃなくてeucJP-winを使うべき
$from_encoding = 'SJIS-win';
$to_encoding = 'UTF-8';
$file_path = '/path_to_csv/file.csv';

// PHPコマンドで一括変換するという暴挙
$command = sprintf("echo mb_convert_encoding(file_get_contents('%s'), '%s', '%s');", $file_path, $to_encoding, $from_encoding);

// 変換済みの"出力"をプロセスハンドルとして握る
$handle = popen(sprintf('%s -r %s', escapeshellarg(sprintf('%s/php', PHP_BINDIR)), escapeshellarg($command)), 'rb');

// 後は普通のCSV処理
$in_body = false;    // フラグとしか使わないならフラグでよくね
while (($row = fgetcsv($handle, 4000)) !== FALSE) {
	if ($in_body === false) {
		$in_body = true;
		continue;
	}

	if ($row === [null]) {
		continue;
	}

	if (count($row) !== 3) {
		throw new \RuntimeException('Unexpected number of column');
	}

	var_dump($row);
}
fclose($handle);
```
linux > Link > netconsole > dmesg出力をUDP送信

http://blogs.itmedia.co.jp/komata/2016/07/linux_1.html
にて紹介されているnetconsole。
問題の特定時に便利かもしれない。

実際の使い方は以下が分かりやすい。
http://d.hatena.ne.jp/syuu1228/20130424/1366834414

(追記　2016/07/07)
WiFiで使う場合はpollingをサポートするWiFiカードが必要とのこと。
http://askubuntu.com/questions/6090/netconsole-wont-start-says-wlan0-doesnt-exist-aborting
> Netconsole needs a driver that supports polling which isn't the case with your wireless card. Could you try it with one of your Ethernet cards?
CakePHP2、Authで認証項目を追加したい時

ログイン認証で、普通はIDとパスワードだけだが、ここになんか例えば学校コードみたいのも入れたい、なんて話になった時にどうするか？
学校に所属する生徒＝ユーザーという設定で考えてみる。
とりあえず学校（Schoolモデル）にコードという項目を追加して、Userモデルでアソシエーションを貼っておく。

```php:User.php
	public $belongsTo = array(
		'School' => array(
			'className' => 'School',
			'foreignKey' => 'school_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		),
    )
```

これでどうだろ。
SchoolとUserを紐付けているのはUserテーブル上のschool_idだが、ログインする時はA001みたいな学校コード（これはSchoolテーブル側）を使いたい、ということだと思ってくれ。

で、ビューにフォームを追加。

```php:login_ctp
	<?php
		echo $this->Form->input('School.code', array('label' => array('text' => '学校コード')));
		echo $this->Form->input('username', array('label' => array('text' => 'ユーザーID')));
		echo $this->Form->input('password', array('label' => array('text' => 'パスワード')));
	?>
```

こんな感じか。

で。コントローラにbeforeFilterで、

```php:UsersConttoller.php
	public function beforeFilter() {
		parent::beforeFilter();
		$this->Auth->allow('logout');
        if ($this->request->is('post') && isset($this->request->data['School']['code'])) {
            $code = $this->request->data['School']['code'];
            $this->Auth->authenticate = array(
                'Form' => array('passwordHasher' => 'Blowfish', 'scope' => array('School.code' => $code))
            );
        }
	}
```

scopeで学校コードを追加する。
Authの設定として、AppController.phpの方で、以下のような指定をしていると思うが、

```php:AppController.php
	public $components = array(
		'Paginator', 'Flash', 'Session', 'Security',
		'Auth' => array(
			'logoutRedirect' => array(
				'controller' => 'users',
				'action' => 'login'
			),
			'authenticate' => array(
				'Form' => array(
                    'passwordHasher' => 'Blowfish'
				)
			)
		)
	);
```

それを部分的に上書きしているような感じである。
コントローラ側ではbeforeFilterの中に書くのが味噌だ。
【Git】 rebaseするときにいちいちstashしなくてもよくなる autostash設定


## rebaseするときに、いちいちstashするの面倒

rebaseするときにいちいちstashするの面倒だなーと思って調べていたら、以下のようなコマンドがあるようです。

```
$ git rebase <branch> --autostash
```

また、autostashを常にしたい場合は


```
$ git config --global rebase.autostash true 
```

で毎回のrebase操作で自動でstashしてくれるようになります。

これで、Git pullするときに ```$ git stash```→```$ git pull``````$ git stash pop```から解放されそうです。

また、autostashをtrueにした状態の時に自動でstashしたくない場合は、

```
$ git rebase <branch> --no-autostash
```

とするといけます。

メモ程度にまとめておきました。

## 参考

- http://japan.blogs.atlassian.com/2016/01/git-2-7-release/
Vim — 複数行をコピー&ペーストする ( 3行コピーするなら 3yy → p )

# 3行コピーしたい場合

## コピー

```
3yy
```

## ペースト

```
p
```

# 環境

- vim 7.3

# あわせて読みたい？

- [Vim — 複数行をカット&ペーストする ( 3行カットするなら 3dd → p ) - Qiita](https://qiita.com/YumaInaura/items/05a07fae4c62b7c1fc9e)
- [Qiitaに記事を書く動機は「ググりにくい記事を、ググりやすく」するためでOK - Qiita](https://qiita.com/YumaInaura/items/e83df9a45836f7b2929b)









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
今まで役に立ったGITコマンド

Addした物をキャンセルする場合


`$ git reset HEAD filename`


コミットを取り消し

`$ git reset --soft HEAD~2`
`$ git reset --hard HEAD~2`



GitをAddした後に以前のソースと比べる（diff）

 `$ git diff --cached filename`


コミットlogの表示

 `$ git log`

コミット以外の物も含めてのlogの表示

 `$ git reflog`
Treasure Data 新コンソール機能の紹介

先月より、Treasure Dataの新しいWeb管理コンソールがベータ版として利用可能になっています。
[New Treasure Data Console in Public Beta](https://blog.treasuredata.com/blog/2016/06/20/public-beta-release-new-data-management-console/)

全体的なデザイン変更と処理高速化（サクサク動きます)がなされており、かつ、上記リンクにあるように「a full-featured Integrated Development Environment (IDE) for processing and analyzing data」（データ処理と分析の統合開発環境）を目指した機能が追加されています。

今回はその中でも、SQLによるアドホック分析作業の効率化をサポートする新機能について、いくつか簡単に紹介したいと思います。


# 新コンソールの利用方法
<img src="https://qiita-image-store.s3.amazonaws.com/0/89695/e5ce2bd7-3d5b-4e87-932c-1ed368f35403.png" width="500"/>
まずは新コンソールを利用する方法ですが、既存のコンソール画面上部にある「TRY NEW VERSION」をクリックすることで、新コンソール画面に切り替わります。


<img src="https://qiita-image-store.s3.amazonaws.com/0/89695/b0c0c9d7-6713-2d86-bdeb-d20e14bba05c.png" width="1000"/>
新コンソールのトップ画面

旧コンソールに戻る場合は、新コンソールトップ画面の右上「RETURN TO OLD CONSOLE」をクリックすれば戻ることができます。


# クエリ編集画面内でのテーブルプレビュー表示
左メニューの「Queries」の「+」ボタンを押して、新しいSQLを作成する画面に行き、データベース名「sample_datasets」とテーブル名「nasdaq」を選択すると、該当テーブルのデータプレビューが編集画面の下段に表示されるようになりました。実際のデータや型を眺めながらSQLの編集作業ができるというのは、非常にありがたいですね。
<img src="https://qiita-image-store.s3.amazonaws.com/0/89695/f022af2c-24e1-4e57-a86f-b9007dffd4ed.png" width="1000"/>

# カラム名入力補完機能
ユーザ様からご要望の多かったカラム名の入力補完機能が実装されました。長いカラム名を利用している場合はかなり作業が効率化されますね。テーブル名はもちろんですが、キーワードの入力補完機能についても強化されて便利になっています。
![column_completion.gif](https://qiita-image-store.s3.amazonaws.com/0/89695/8a4ad7e4-56fe-f22a-a74c-026efdc69e95.gif)

# カラム名のダブルクリック入力
左側テーブル情報のカラム名をダブルクリックすることでも、カラム名を自動入力できるようになっています。より直感的に編集作業ができますね。
![column_doubleclick.gif](https://qiita-image-store.s3.amazonaws.com/0/89695/5ba04c0e-3460-4390-98bc-3f818cb502a5.gif)

# 関数名入力補完機能
カラム名でなく関数についても入力補完機能が実装されています。よく利用するTD_TIME_XXX関数についてももちろん対応しています。関数名を忘れそうになっても、入力補完のサジェストをみれば思い出すことができるので、ドキュメントを参照する手間が減りますね。
![function_completion.gif](https://qiita-image-store.s3.amazonaws.com/0/89695/297f5951-9278-f366-ee87-fa6d2250c4af.gif)

# クエリーフォーマット機能
こちらも要望が多かった機能かと思いますが、編集中のSQLクエリをフォーマットできるようになりました。編集ボックス上部にある「Reformat」をクリックすることで、編集中のSQLを綺麗にフォーマットしてくれます。構文ミスなども見つけやすくなるので便利な機能ですね。
![query_format.gif](https://qiita-image-store.s3.amazonaws.com/0/89695/9eaf2df0-5f98-00aa-0ce9-f3f5823d2608.gif)

# ショートカットキーによる作業の効率化
SQL実行を「コマンドボタン + リターン」で即実行可能になっています。こちらは地味ながら、アドホックにSQLの編集と実行を繰り返す場合には、確実に作業効率が上がる機能ですね。

# クエリー結果をその場で確認可能、クエリの編集と結果確認をよりインタラクティブに
SQLの実行結果が、SQL編集ページの下記に表示されます。結果が期待通りかすぐ確認でき、間違っていたらそのままSQLをその場で修正し再実行可能、またさらに深堀して分析する際にもSQLを再編集して即実行できます。ページ遷移が発生しないので、ストレスがなく、よりインタラクティブな分析が可能となっています。

# 結果のページ閲覧が可能に
こちらもアドホックな分析作業を効率化させる機能となっています。従来のコンソールでは、SQL結果についてはコンソール上では100件プレビュー表示でしたが、新コンソールではSQLの結果について、より多くのデータを眺めて、考察することができるようになりました。
![paging.gif](https://qiita-image-store.s3.amazonaws.com/0/89695/237baf47-1055-4314-7405-ab4d4cd11a65.gif)

# まとめ
以上、簡単にTreasure Data新コンソールの機能について一部紹介しました。まだベータ版というステータスですが、ぜひ試していただければと思います。そして、お気付きの点や要望などあれば、サポートまでフィードバックしてくださいね。
他の機能についても後日紹介したいと思います。
Ruby | ダブルクオートの中でも gsub で名前付きキャプチャを使う

# シングルクオートの場合

第一引数では `(?<capture_name>正規表現)` でキャプチャする。
第二引数には `\k<capture_name>` でそれを使う。

```rb
'I Want You Back'.gsub(/(?<capture_name>Want)/, 'Really \k<capture_name>')

# => "I Really Want You Back"
```

# ダブルクオートの場合

シングルクオートの場合に比べて、バックスラッシュが一個増える。
`\\k<capture_name>` 

```rb
'I Want You Back'.gsub(/(?<capture_name>Want)/, "Really \\k<capture_name>")

# => "I Really Want You Back"
```

# 環境

- ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]

# 参考

- http://qiita.com/jnchito/items/cceb669cb06fc044f411








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
CakePHP2で、アソシエーションを動的に変更する

動的にというか、コントローラ側で一時的に条件を変えてアソシエートしたい、というケース。
例えばOfficeモデルに複数のUserがいる、という場合で、OfficeモデルにhasManyでUserが設定されている、というような場合、bakeを使って生成すると、

```php:Office.php
	public $hasMany = array(
		'User' => array(
			'className' => 'User',
			'foreignKey' => 'office_id',
			'dependent' => false,
			'conditions' => '',
			'fields' => '',
			'order' => '',
			'limit' => '',
			'offset' => '',
			'exclusive' => '',
			'finderQuery' => '',
			'counterQuery' => ''
		)
	);
```

というようになっているはずである。特に条件は指定していないので、同じoffice_idを持つUserのうち最初のuserが取り出される。
これをある時だけ、Userのstatusが1のものだけを引っ張りたい、という時どうすればいいか？
コントローラの使いたい場所でbindModelを使えば良い。そこにアソシエーションの設定を好きなように書けば良い。

```php:OfficesController.php
    $this->Office->bindModel(
        array('hasMany' => array(
            'User' => array(
                'className' => 'User',
                'foreignKey' => 'office_id',
                'dependent' => false,
                'conditions' => array('User.status' => '1'),
                'fields' => '',
                'order' => '',
                'limit' => '',
                'offset' => '',
                'exclusive' => '',
                'finderQuery' => '',
                'counterQuery' => ''
            ))
        )
    );
    $options = array('conditions' => array('Office.' . $this->Office->primaryKey => $id));
    $this->request->data = $this->Office->find('first', $options);
```
nginx

intra-martをnginxで建てる必要が発生したのでとりあえず構築メモ。
intra-martさんのマニュアルを見ると、サポートしているwebサーバはIISとApacheだけみたい。

* [intra-mart Accel Platform セットアップガイド(Apache HTTP Server)](http://www.intra-mart.jp/download/product/iap/setup/iap_setup_guide/texts/install/apache_dso.html)
* [intra-mart Accel Platform セットアップガイド(Internet Information Services（IIS)](http://www.intra-mart.jp/download/product/iap/setup/iap_setup_guide/texts/install/windows/iis_arr.html)

設定を見た感じ、多分以下のようなことをやっている（と思う）

* %2F（スラッシュ）をデコードせず渡すように
* 画像ファイルやテキストファイルをwebサーバーで処理
 * ただし、URLが/imart/reverse_proxy/, /imart/kibana/配下のものに関しては、webサーバーで処理しない
 * 上記以外はアプリケーションサーバーで処理
     * その際にタイムアウトを1200秒に設定
     * リダイレクト時にも書き換え(ProxyPassReverse)
* アクセスログのためにX-Forwarded-Forを設定
* webサーバーとアプリケーションサーバー間でKeep-aliveをオフ

というわけで、頑張ってnginxの設定を書いてみた。

```nginx:nginx.conf
    server {
        listen       80;
        server_name  localhost;

        location ~* ^/imart/(?!reverse_proxy/)(?!kibana/)(.*\.gif|.*\.png|.*\.jpg|.*\.css|.*\.js|.*\.swf|.*\.ico|.*\.json|.*\.jar|.*\.xml|.*\.yaml|.*\.txt|.*\.html|.*\.htm)$ {
        }

        location /imart {
            proxy_read_timeout 1200s;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://192.168.1.1:8080/imart;
            client_max_body_size 64m;
        }
    }
```

とは言っても大した事はやっていない。
多分、locationとかは一個で書いたり（その分正規表現がややこしくなる）もしくはもっと分けて書いたり（正規表現は分かりやすくなる）とかはできると思うけど、とりあえずこんな感じで書いてみた。
ファイルアップロードは64MBまでできるようにしてみた。
Keep-aliveは何も設定しなくてもcloseになる模様。

ちょろっと動確してみた感じ、上の箇条書き部分は動いていそう。
ここまで書いて以下の記事を発見！

[弊社の社内システムについて](http://dev.intra-mart.jp/post_23/)
> IMBoxの各ユーザのアイコンが出なくなってしまったので、深追いはやめました。

試した感じ、この設定でユーザのアイコンは表示されているみたい。もしかして違う所かな、それとも何か見落としているかな。
とりあえず、Cometも動いてるっぽいのでこの記事でも深追いせずこれで良しとする。

まぁ当面はなんとなくでも動けばいいのでとりあえずはこれで！
Javaのinstanceof演算子

# instanceof演算子とは？
オブジェクトの型を判定する演算子。

```java
A instanceof B
```

* AがBと同じクラスのオブジェクトのインスタンスである場合
* AがインターフェースBの実装クラスのオブジェクトのインスタンスである場合

にtrueを返す。

# instanceof演算子を利用する上での注意点

1.右辺・左辺に指定されたクラスには継承関係がなければならない。

```java
public class Sample {
    public static void main(String[] args) {
        System.out.println(new Hoge() instanceof Piyo); // コンパイルエラー
    }
}

class Hoge {}
class Piyo {}
```

HogeとPiyoとの間に継承関係がないためコンパイルエラーとなる。

2.（1に関連して）右辺にインターフェースを指定する場合は左辺がその実装クラスのオブジェクトのインスタンスでなくとも可

```java
public class Sample {
    public static void main(String[] args) {
        System.out.println(new Hoge() instanceof Piyo); // false
    }
}

class Hoge {}
interface Piyo {}
```

HogegはPiyoの実装クラスではないがコンパイルエラーは発生しない。
（私はなぜ1はコンパイルできず、こっちはOKなのかが最初納得がいかなかった）

3.左辺にnullが指定されていた場合はfalse

```java
public class Sample {
    public static void main(String[] args) {
        Hoge hoge = null;

        System.out.println(null instanceof Hoge);   // false
        System.out.println(hoge instanceof Hoge);   // false
    }
}

class Hoge {}
```
主要な6つのプログラミング言語について、とくに説明もなく紹介

流行なので。これが最終的な結論ですよ!

http://nobkz.hatenadiary.jp/entry/2016/07/01/173824

を転載しているだけ。

# プログラミング言語を紹介する

世の中には、いろいろなプログラミング言語があり、どれを選べばいいか分からない! って人達が結構います。なので、その人達のために、
僕がよく使っている
良く使われている<b>メジャーな言語</b>を紹介します。以下のプログラミング言語を学ぶのが普通のプログラマーだと思います。

あ、説明はしないです。適当にリンクだけ張るからサイト見てね。

## Pony

http://www.ponylang.org


## Nim 


http://nim-lang.org/index.html



## Nemerle


http://nemerle.org/About


## J



http://www.jsoftware.com



## Haxe

http://haxe.org/



## Shen 

http://shenlanguage.org

Shenは神です。
MacでWiresharkを使う


## インストール

現在は、brewで入るらしい。

```bash
$ brew install wireshark --with-qt
```

なんか、インターフェイスリストが空になってしまうバグが有るらしいので、以下のコマンドを打って直す。

```bash
$ curl 'https://bugs.wireshark.org/bugzilla/attachment.cgi?id=3373' -o ChmodBPF.tar.gz
$ tar zxvf ChmodBPF.tar.gz
$ open ChmodBPF/Install\ ChmodBPF.app
```

## 起動してみる

```bash
$ wireshark
```

でGUIが開く。


## 特定の通信を見てみる

例として、`https://api.github.com`への通信を見てみる

### 準備

```bash
$ nslookup api.github.com
```

をして、`api.github.com`のIP Addressを取得する。

```
Name:	api.github.com
Address: 192.30.252.125
```

とわかる。

パケットフィルタとして、こことの通信だけを見たいので

```
ip.dst==192.30.252.125||ip.src==192.30.252.125
```

とすれば良いことがわかる。

実は、api.github.comのipはすぐ変わってしまうので、ホスト名指定の`ip.dst_host`とかを使いたかったが上手くいかなかった。ipで指定しておくのが無難そう。

### 実践

この状態で

```bash
$ curl https://api.github.com
```

と打つと以下のようになる

![Kobito.ZHtbIb.png](https://qiita-image-store.s3.amazonaws.com/0/6664/93daa37f-2567-cd85-8968-7483c27bfd33.png "Kobito.ZHtbIb.png")

上の部分だけ頑張って切り貼りした画像作った。通信の流れの一覧は以下のようになっている。

![Kobito.XE7tT5.png](https://qiita-image-store.s3.amazonaws.com/0/6664/2143ab07-0bd7-fe6b-7cca-71aec8421bce.png "Kobito.XE7tT5.png")

TCPの3ウェイ・ハンドシェイクやHTTPSの鍵交換などが行われているのもよく分かる。
最後の方にRSTパケットが送られているが、FINを送った後ずっと定期的にRSTを送る仕様になってるみたい。2回目に同じことをやったら個々の部分だけ少しだけ順番が違った。

![Kobito.i4uV56.png](https://qiita-image-store.s3.amazonaws.com/0/6664/6ff55598-0d86-8c47-de6d-0ad9ce3b60f3.png "Kobito.i4uV56.png")


これは練習なので、ここまでで終わりとしますが、httpsの通信の詳細や、ここで最後にエラーが出ているのは「SSLキャッシュが効いているから」みたいな話は以下のブログが詳しかったです。
http://d.hatena.ne.jp/ozuma/20140413/1397397632
プログラマが知っておくべき、メモリ/ディスク/ネットワークの速度まとめ


2016年で日本で流通しているものを基準とした、大体の速度です。
桁が大事なので上の桁は1に揃えました。単位はビットではなくバイトです。

(SSDのシーケンシャルだけ400MB/sぐらいだったのでちょっと心苦しかったですが、速度を切り上げるとその速度を前提とした設計をされると問題が起こるので低い側に倒しています。)


| 名前                        | 読込速度    | 読込速度(MB/s) |
|-----------------------------|-------------:|----------------:|
| メモリ                      | 10GB/s      | 10000MB/s      |
| 有線ネットワーク            | 1GB/s       | 1000MB/s       |
| SSD(シーケンシャルアクセス) | 100MB/s     | 100MB/s        |
| HDD(シーケンシャルアクセス) | 100MB/s     | 100MB/s        |
| SSD(ランダムアクセス)       | 10MB/s      | 10MB/s         |
| HDD(ランダムアクセス)       | 1MB/s       | 1MB/s          |
| 4Gネットワーク              | 1MB-10MB/s  | 1MB-10MB/s     |
| 3Gネットワーク              | 100kB-1MB/s | 0.1MB-1MB/s    |

注: 無線ネットワークは干渉などによりこの数値より遅くなる状況も十分ありえます。

## ポイント

- メモリからの読み込みとディスクからの読み込みはランダムアクセスで1000倍程度違う
 - とは言え、最近はディスクも結構速い
- きちんと繋がれた有線ネットワークからの読み込みは、ディスクより速い
 - つまり、ディスクから読むより、同じデータセンターのマシンのメモリから読んだほうが速い
- モバイルネットワークだと100キロバイトのデータでも1秒以上かかることがある
- メモリからの読込速度の遅さは、CPUのクロック数も10G/s程度なのと、本来はL1/L2キャッシュなどがあることを考えると通常意識しなくて良い


## 何故この参考値をまとめたか

プログラミングをする際、どのくらいの時間でどのくらいのサイズ感の処理が出来るのかを考えられることが、ある一定規模以上のサービスを開発するときは必須条件になってくると思います。
なにより、知ってるだけで1つ上のレベルの議論ができるので超お得だと思います。

具体的には、

- そのプログラムは秒間何人のユーザーをさばけるのか
- 何台のサーバーを用意したら良いのか
- 画像のサイズはどのくらいまでが適切か

などを見積もるときに、必要になってくると思います。
最終的には計測したり、他社と比較したりして決定するにしても、作る時の概算で大きくはずさないことも大事なので。

## 速度の参考値の出典

- メモリ速度
 - 読み方: http://bto-pc.jp/btopc-com/repair/ddr3-pc3-12800-10600.html
 - 最近の人気のメモリ: http://kakaku.com/item/K0000799289/
- SSD/HDD速度
 - http://pssection9.com/archives/2-5-sata3-ssd-spec.html
- 有線LAN/イーサネット
 - https://en.wikipedia.org/wiki/10_Gigabit_Ethernet
- 3G, 4Gなどのネットワーク
 - https://flets.com/customer/column/0315/0315cl_01.html

### 注意

ネットワーク周りはbyteではなくbitの単位系になっており、8倍の差があります。ここの表では、桁の概算を表しているので、例えば10Gbitイーサネットの速度は1GB/sと表しています。

### お願い

こういう値も載せたら？この値おかしくない？というものがありましたら、是非コメントか編集リクエストで教えて下さい。

### ちなみに

- http://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html

こういうサイトもあります。よく出来ているけど意外とわかりにくい気もw
DynamoDB LocalのDockerイメージまとめ

## iJJi/docker-dynamodb-local

[GitHub: iJJi/docker-dynamodb-local](https://github.com/iJJi/docker-dynamodb-local)
[DockerHub: fingershock/dynamodb-local](https://hub.docker.com/r/fingershock/dynamodb-local/)

* Alpine Linuxベース
* 2016-05-17の最新版に追従
* rootではなくnobodyユーザで実行
* CIあり

## trautonen/docker-dynamodb-local

[GitHub: trautonen/docker-dynamodb-local](https://github.com/trautonen/docker-dynamodb-local)
DockerHub: なし

* 公式java:8イメージベース(debian)
* rootではなくdynamodbユーザで実行
* gosuのインストール時にgpgで検証
* docker-entrypoint.shでちゃんとexecしてるので無駄なプロセス階層化なし(initはないけどね)

## trayio/dynamodb-local

[GitHub: trayio/dynamodb-local](https://github.com/trayio/dynamodb-local/blob/master/Dockerfile)
[DockerHub: tray/dynamodb-local](https://hub.docker.com/r/tray/dynamodb-local/)

* [独自のjava:8-jreイメージ](https://github.com/trayio/docker-java)ベース(debian:jessie)
* rootで実行
* ENTRYPOINTでjavaコマンドを直接実行
* 最もシンプル
ThrowingStreamを使ってみる

# ThrowingStreamを使ってみる

## ThrowingStreamについて

Java 8で追加されたStream APIのfilterやmapなどのメソッドでは、チェック例外（Exceptionの派生クラス）をスローするような処理は書けませんが、面白いAPIを見つけました。

* [JeffreyFalgout/ThrowingStream](https://github.com/JeffreyFalgout/ThrowingStream)

このAPIを使ってみました。

## サンプルのAクラス

変なサンプルですが、Aクラスを用意します。

```java:A.java
class A {
	public static String s2(String s) throws IOException {
		if("a".equals(s)){
			throw new IOException("Bad!");
		}
		return s + s;
	}
	public static String s3(String s) {
		return s + s + s;
	}
}
```

## 通常のStream APIを使うと…

A#s2()はIOExceptionをスローするため、次のように書く必要があり、コードが読みづらいです。

```java:java
	Stream.of("a", "b")
		.map(s->{
			try{
				return A.s2(s);
			}catch(IOException e){
				throw new UncheckedIOException(e);
			}
		}).forEach(System.out::println);
```

## ThrowingStreamを使うと…

ThrowingStreamを使うと、次のようにコードがすっきりします。

```java:java
	try {
		ThrowingStream.of(Stream.of("a", "b"), IOException.class)
			.map(A::s2)
			.forEach(System.out::println);
	} catch (IOException ex) {
		ex.printStackTrace(System.err);
	}
```

## ThrowingFunctionを活用してみる…

次は、A#s2()の呼び出しでIOExceptionがスローされたら、代わりにA#s3()を呼び出すコードです。
try～catchを使わないのが特徴ですが、可読性はどうなんですかね…

```java:java
class B {
	public static String go(String s){
		final ThrowingFunction<String, String, IOException> func = A::s2;
		return func.fallbackTo(A::s3).apply(s);
	}
}
```

```B.go("a")``` を実行すると、 ```aaa``` が返ってきます。
例外の出力は一切ありません。
Ubuntu に typesafe-activator のインストール


環境
--

```fish
cat /etc/lsb-release
# DISTRIB_ID=Ubuntu
# DISTRIB_RELEASE=14.04
# DISTRIB_CODENAME=trusty
# DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"
arch
# x86_64
echo $SHELL
# /usr/bin/fish
```

typesafe-activator のインストール
--
Scala のビルドツール
version は[ここ](http://www.lightbend.com/activator/download)で確認 (2016/7/6 現在 version 1.3.10)

```fish
wget https://downloads.typesafe.com/typesafe-activator/1.3.10/typesafe-activator-1.3.10-minimal.zip
unzip typesafe-activator-1.3.10-minimal.zip
mv typesafe-activator-1.3.10-minimal.zip
sudo mv activator-1.3.10-minimal /opt/
sudo ln -sf /opt/activator-1.3.10-minimal/bin/activator /usr/local/bin/activator
```
Bootstrapのcarouselをスワイプできるようにする

<a href="http://www.arides.jp/mobi/">ARマガジン</a>のモバイルサイトをBootstrapでリニューアルして2週間。

carouselをスワイプ出来たら良いなぁと思い、ToucheSwipte.jsで実現する方法を見つめました。

紹介されているサイト（本家かなぁ？）が
http://labs.rampinteractive.co.uk/touchSwipe/demos/
です。

お目当てのToucheSwipte.jsのダウンロードは
https://github.com/mattbryson/TouchSwipe-Jquery-Plugin
から行いました。

ToucheSwipte.js　をインクルードして

	$(document).ready(function(){
	});

の中に書くのは

	$(".carousel-inner").swipe( {
		swipeLeft:function(event, direction, distance, duration, fingerCount) {
			$(this).parent().carousel('next'); 
		},
		swipeRight:function(event, direction, distance, duration, fingerCount) {
			$(this).parent().carousel('prev'); 
		}
	});

だけ、英語のサンプルではswipeLeftのアクションがcarousel('prev');になっていたけど、めくる感じより、引っ張る感じの方が良いと多数決でcarousel('next'); にしました。

実際の実装結果<a href="http://www.arides.jp/mobi/detail.php?shop_id=233">文壇ビストロ　ELSKA（エルスカ）</a>で確認できます。
safariのtransform時の残像を消す

備忘録的に書いておこうと思いました。
safariでホバーアニメーションを作った時に出てしまう(かもしれない)謎の残像に苦しめられました。

##問題
具体的にはこんな残像です。
***
![スクリーンショット 2016-07-06 11.32.27.png](https://qiita-image-store.s3.amazonaws.com/0/114495/61ddb1ad-76d2-dbd4-364e-765ba63cd9e9.png)
***
![スクリーンショット 2016-07-06 11.32.34.png](https://qiita-image-store.s3.amazonaws.com/0/114495/4fe52f2c-51d3-7e3b-2cf9-e1f436aa17d6.png)
***
![スクリーンショット 2016-07-06 11.32.41.png](https://qiita-image-store.s3.amazonaws.com/0/114495/f5b1833a-78b1-d7ef-8539-659dc82e0c98.png)
***


ホバー後に矢印になって残像が残ってしまう...

##対策

どうしたものかと調べたところ

`transform: translate3d(0, 0, 0);`
を突っ込んであげればいいとの事

なんとも腑に落ちないですが、回避できました。
Node.js / JSOPレスポンスをコマンドラインで確認

JSONP形式で戻されるGETリクエスト結果、callbacked_func(data)をJSON.stringifyで整形して出力するだけのツールを作りました。

以下URLを参考にしています。
[Node.js: request モジュールを使って GET リクエストを行う](http://blog.sarabande.jp/post/52095868617)

Node.js 6.2.0, request 2.72.0の環境で動作を確認しています。

```
#!/usr/bin/env node

var request = require('request');
var console = require('console');

var url = 'http://jsonp.callback.url/?callback=callbacked_func';
function callbacked_func(body) {
    console.log(JSON.stringify(body, null, "    "));
}

request(url, function (error, response, body) {
  if (!error && response.statusCode == 200) {
    eval(body);
  } else {
    console.log('error: '+ response.statusCode);
  }
});
```
MySQLで先月のデータを絞り込む

### 結論
```sql
SELECT * 
FROM books
WHERE buy_time >= DATE_ADD(DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY), INTERVAL -2 MONTH)
  AND buy_time <  DATE_ADD(DATE_ADD(LAST_DAY(NOW()), INTERVAL 1 DAY), INTERVAL -1 MONTH);
```
### 関数について
NOW() … 現時点の日時を取得
LAST_DAY(日時) ：最終日を取得
DATE_ADD(日時, INTERVAL 3 DAY)：3日後の日時を取得

### コピペしてためしてみる用
結論に書いてあるコードはテーブルがないと動かないので、MySQLで実行すれば動くコードを以下に貼っておきます

```sql
SELECT NOW() AS 現時刻, LAST_DAY(NOW()) AS 月末, DATE_ADD(NOW(), INTERVAL 3 DAY) AS 3日後
```

### 参考
- MySQL 逆引きリファレンス http://mysql.javarou.com/category/228.html