OmniAICreator/Qiita-1.07M huggingface dataset:
uint64型を[]bytes型に変換する

日本語の記事が見つからなかったのでメモしておきます．

http://stackoverflow.com/questions/35371385/how-can-i-convert-an-int64-into-a-byte-array-in-go

こちらを参考にしました．

[enconding/binary](https://golang.org/pkg/encoding/binary/)パッケージの[PutUint64](https://golang.org/pkg/encoding/binary/#ByteOrder)メソッドでuint64型から[]bytes型に変換出来ます．

## コード例

```go
package main

import (
	"fmt"
	"encoding/binary"
)

func main() {
	u := uint64(1000)
	b := make([]byte, 8)
	binary.LittleEndian.PutUint64(b, u)
	fmt.Printf("%T:%v  %T:%v", u, u, b, b)
}
```

## 実行結果

```
uint64:1000  []uint8:[232 3 0 0 0 0 0 0]
```

# まとめ

encoding/binaryパッケージを使うことで，uint64型を[]bytes型に変換できます．
2016年も残り僅か！最低限知っておきたいフロントエンド技術

2016年もあと残り少しですね。
今年も毎年恒例のようフロントエンド技術の移り変わりが激しかったと思います。
情報のキャッチアップ時間がない人、なにを学べかいいかわからない人のために、最低限知っておきたいフロントエンド技術をまとめました。
知っている技術もあるかと思いますが、知らない技術を見つける機会になればいいなと思います。



# Sass

![sass.jpg](https://qiita-image-store.s3.amazonaws.com/0/108073/10fa2809-133e-cf54-b579-8538b00240fd.jpeg)

Sassは既に定番になっていますが、まだまだ使っていない人が多いので紹介します。
SassとはCSSではできなかったことを実現することができます。
SassをCSSにコンパイルすることで、スタイルシートとして読み込むようになります。
少し進んだ時代に[PostCSS](https://github.com/postcss/postcss)もあるので、検索してみてください。

## 変数が扱える
![スクリーンショット 2016-12-02 18.10.32.png](https://qiita-image-store.s3.amazonaws.com/0/108073/704b7b80-4ab8-f081-eb45-989637aa9ee5.png)

Sassは上記のようにCSSで変数を扱うことが可能です。
上記の方法をとることで、テキストの色が変わった際にも一箇所変更するだけでよくなります。

## メディアクエリをまとめれる
![スクリーンショット 2016-12-02 18.12.19.png](https://qiita-image-store.s3.amazonaws.com/0/108073/b14685c8-c229-0328-af70-3c31bac90790.png)

タブレットやPCスタイルの分岐点をまとめることができます。
一括管理することで、分岐点が変更された際の対応も楽になります。

## ネストができる
![スクリーンショット 2016-12-02 18.13.41.png](https://qiita-image-store.s3.amazonaws.com/0/108073/897996f7-91a1-f10c-a889-c709eaeb47a3.png)

CSSでネストすることができます。こうすることで比較的見易いコードになります。
上記の画像では「&」を使用していますが、こうすることで親と文字列を繋げることができるので、[BEM](http://getbem.com/)を使用した命名規則でかなりの効果を発揮します。

## 複数のファイルを１つのファイルにまとれる
![スクリーンショット 2016-12-02 18.18.55.png](https://qiita-image-store.s3.amazonaws.com/0/108073/9a03595f-cfed-7bc2-4b1e-bf24709208a8.png)

SassにはPartial機能というものがあります、分割したファイルを1つのCSSにまとめることが可能なので、1つ１つのファイルの可読性があげることができます。
後ほど説明するCSS設計では欠かせない機能になります。

# gulp
![スクリーンショット 2016-12-02 18.22.49.png](https://qiita-image-store.s3.amazonaws.com/0/108073/fdb7aba7-f111-9eb6-7481-7690aea4bccd.png)

フロントエンド開発に関する面倒なこと自動化してくれるタスクランナーと呼ばれるツールです。
過去には[Grunt](http://gruntjs.com/)がありましたが、ここ数年はgulpが主流となってきている傾向にあります。

基本的には処理を書くときはJavaScriptになります。

## 自動化してくれる処理
- Sassのコンパイル
- JS,CSSの圧縮
- ファイル変更の監視
- ベンダープレフィックスの付与
- ブラウザ画面のリロード　　

上記の他にも様々な機能が2185個のプラグインで提供されているので、下記を参考にいろいろ試してみると良いと思います。
[gulpプラグイン一覧](http://gulpjs.com/plugins/)

# Flexbox
CSS3から登場したレイアウトモジュールです。
floatを使用した複数カラムの実装が多かったのですが、Flexboxは比較的わかりやすく実装ができるので、最近多くのところで紹介されているのを見かけます。

以前私が書いたがあるので、こちらを参考にして頂ければ大まかな実装方法は掴めると思います。
[CSSのfloatを使わずに、Flexboxを使用してwebサイトを作った話](http://qiita.com/mki_skt/items/a55c16856e7bdde58734)

# CSS設計(FLOCSS)
CSSは非常に脆く壊れやすいものです。この状況を改善する為に、命名規則やディレクトリ管理などに厳格なルールを設けて、チーム開発や大規模開発におけるスタイルの崩壊を防ぐのがCSS設計となります。
[SMACSS](https://smacss.com/)や[OOCSS](https://github.com/stubbornella/oocss)などCSS設計にも複数種類があります。この中から私は[FLOCSS](https://github.com/hiloki/flocss)を使用しているので、FLOCSSを用いたCSS設計をお伝えします。

## FLOCSSとは？
日本の方が考案したCSS設計になります。多くのCSS設計を元に考案され、ドキュメントも日本語の為、日本の方には馴染みやすいCSS設計かと思います。
命名規則には、[MindBEMding](https://github.com/hiloki/flocss)を採用しています。

## FLOCSSのディレクトリ管理
FLOCSS下記のようなディレクト管理をルールとして設けています。

- Foundation
- Layout
- Object
    - Component
    - Project
    - Utility 

上記のディレクトリの関係は[FLOCSS](https://github.com/hiloki/flocss)のgithubページに詳しく記載されているので、実践してみるといいでしょう。




# 最後に
今回紹介した技術は多くのフロントエンド技術の氷山の一角のようなものです。
今後上記の技術が廃れる可能性も0%ではありません。
日々のフロントエンド技術情報をキャッチアップし、自分に必要な技術を見つけて、この移り変わりが激しい現状を楽しみましょう！
Slackでhubotを運用している人に捧げる、hubotのscriptの作り方

# コードの書き方

`yo hubot:script`

Yeomanがhubotのscriptの雛形を生成してくれます。
生成された雛形はNode.jsのパッケージの形になっています。

![image](https://qiita-image-store.s3.amazonaws.com/0/102985/cafbe855-70f9-ec55-1ae5-f5e09e5d1eb8.png)

`src/*.coffee` スクリプトはここに書きます。
`test/*-test.coffee` テストコードはここに書きます。

# テストのやり方

`npm test`

![image](https://qiita-image-store.s3.amazonaws.com/0/102985/55e36183-f216-836d-14f4-52ede5888565.png)

最初からGruntとMochaが用意されていて、テストコードが書けます。
テストを書けば、毎回hubotを起動して何かを発言、レスポンスを確認なんて事をしなくて済むので便利ですね。

# デプロイ
運用しているHubotに、作ったパッケージをインストールします。
Yeomanで作ったスクリプト雛形はNode.jsのパッケージ雛形になっているので、npmコマンドでインストールできます。

`npm install 作成したパッケージ --save`

![image](https://qiita-image-store.s3.amazonaws.com/0/102985/d61bfd11-0848-bc00-8df9-e60a15b8bf5c.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/102985/16d7ef8c-13a7-8758-f38d-a40262df6cba.png)

なお、作成したパッケージをGithubに上げておけば
`npm install githubname/reponame`
なんてコマンドも使えるので便利です。
もちろんnpmにパッケージを公開してもいいと思いますし、フォルダからインストールも出来るようです。
マニュアルはこちら。[install | npm Documentation](https://docs.npmjs.com/cli/install)

----
パッケージをインストールするだけではHubotが読み込んでくれないので
![image](https://qiita-image-store.s3.amazonaws.com/0/102985/da874a64-3052-431b-4d14-2d83e3876560.png)
インストールしたパッケージを`external-scripts.json`に記述します。

![image](https://qiita-image-store.s3.amazonaws.com/0/102985/68c97ab0-9a51-228f-2576-07e96f3f3956.png)

手元で動作確認を行ってみました。
インストールしたパッケージは[hubot-webshot](https://github.com/naname000/hubot-webshot)です。手前味噌です。

#まとめ
いかがでしたでしょうか。`yo hubot:script`を使えば、hubot本体のscriptsディレクトリにコードが散乱せず、綺麗に統治分割出来ると思います。
特にテストを書けるのが良いと思います。
テストに対する初期の学習コストは高いと思いますが、手動デバッグをすることに比べて、長い目を見れば元を取れるでしょう。
![image](https://qiita-image-store.s3.amazonaws.com/0/102985/001ea750-1954-53ee-7615-cd8d9d6e0f02.png)

スノーボード行きたい。
PPAP + Kotlin

関数型言語の学習をしようと思ったのですがいいネタがなくて...
（結局PPAPに...）

## 関数型言語

考え方はこちらを参考に
[関数型プログラミングはまず考え方から理解しよう](http://qiita.com/stkdev/items/5c021d4e5d54d56b927c)

ちょっと自分には難しかったです:cry:w

## とりあえず実装&実行

```PPAP.kts
import java.util.*

val ppap = listOf("I have a ✏️", "I have a 🍍", "I have an 🍎", "I have a ✏️")

fun getPPAP(count : Int) : String {
	println(ppap[count])
	return ppap[count]
}

fun compile() {
	var list = mutableListOf("")
	while(true) {
		list.add(getPPAP(Math.abs(Random().nextInt() % 3)))
		if( list.takeLast(4).equals(ppap) ) {
			println("PEN_PINEAPPLE✏️🍍 , APPLE_PEN✏️🍎")
			break
		}
	}
}

compile()
```
これを関数型といっていいのかはわかりませんが....
オブジェクト指向を出るのをめざしてw

### list
```Kotlin
val ppap = listOf("I have a ✏️", "I have a 🍍", "I have an 🍎", "I have a ✏️"
```
ペンは使い回すので1つでいいかなと思ったんですが、後々つかうので、4つ定義しました

### getPPAP
```Kotlin
fun getPPAP(count : Int) : String {
    println(ppap[count])
    return ppap[count]
}
```
そのままですね
メソッド内でメンバー変数を変更すると関数型じゃないそうなので...メンバー変数の参照だけ

### compile
```Kotlin
fun compile() {
    var list = mutableListOf("")
    while(true) {
        list.add(getPPAP(Math.abs(Random().nextInt() % 3)))
        if( list.takeLast(4).equals(ppap) ) {
            println("PEN_PINEAPPLE✏️🍍 , APPLE_PEN✏️🍎")
            break
        }
    }
}
```
空のlist作って、addしていってます
（乱数は、0~2の間で出力します。マイナスも来るので絶対値にします）
最後から4つを調べて、PPAPだったら終了です
この終了の判断を簡単にするために、上のようなppaplistを作りました

### 結果
```
I have a ✏️
I have an 🍎
I have an 🍎
I have an 🍎
I have a 🍍
I have a 🍍
I have a ✏️
I have a ✏️
I have a ✏️
I have a 🍍
I have an 🍎
I have a ✏️
PEN_PINEAPPLE✏️🍍 , APPLE_PEN✏️🍎
[Finished in 3.1s]
```
ふむ！いい感じ

## レベルアップ
```PPAP_fixed.kts
import java.util.*

Random().let {
	val ppap = listOf("✏️", "🍍", "🍎", "✏️")
	generateSequence { ppap[Math.abs(it.nextInt() % 3)] }
			.fold(mutableListOf(""), { a, b ->
				println("I have " + (if (b.equals("🍎")) "an " else "a ") + b)
				a.add(b)
				if (a.takeLast(4).equals(ppap)) {
					println(ppap.reduce { a, b -> a + b })
					return@let
				}
				a
			})
}
```

### generateSequence
簡単にいうと次の値を渡してくれますw
今回は、「`papp[（乱数）]`をどんどん渡して行く」という感じです

### fold
イメージは引数付きの`reduce`です

```Kotlin
fold(mutableListOf(""), { a, b -> a}
```
今回のをわかりやすくするとこんな感じです
初期値で空list`mutableListOf("")`を渡しています
その空listが引数`a`に渡されます
引数`b`には先ほどの`papp[（乱数）]`の文字が渡されます
返り値として、最後に`a`を渡してあげます

### 三項演算子
javaで使いやすかった三項演算子がKotlinにはないらしく引っかかりました

```java
b.equals("🍎") ? "an " : "a "
// b = "🍎" -> an
// b != "🍎" -> a
```

Kotlinは、ifが式なので、三項演算子はないとのこと....

```Kotlin
if (b.equals("🍎")) "an " else "a "
```

### 終了
```Kotlin
if (a.takeLast(4).equals(ppap)) {
    println(ppap.reduce { a, b -> a + b })
    return@let
}
```
`return@let`で`Random().let`に戻り終了します

## 感想
レベルアップは、一旦コードを参考にさせてもらって、理解する方法をとりました
結局調べても`Random().let{}`の`let`がわからなかったですw
もしかしたら、理解のミスがあるかもしれないけれど、処理は追うことができたのでよかったです

## 参考
[Kotlinのリスト操作関数まとめ](http://kirimin.hatenablog.com/entry/2015/08/24/093646)
[Kotlinでズンドコキヨシ](http://qiita.com/shoma2da/items/89684c7b0a0c1c4b9289)
[ズンドコキヨシ Kotlin](http://qiita.com/sys1yagi/items/ee73400d7aa7973f2635)
Heroku で Node使うときは heroku local コマンドが便利


バッチ作成時、Nodeの非同期が色々便利だったりします。

メインのアプリケーションをPHPなどで作成している際でもBatchだけはNodeで回したいみたいなことがさっとできると便利なのですが、
環境変数周りが何かと不便だったりします。

通常Herokuアプリケーションでは、`.env`ファイルを使用して環境変数のセットアップを行うので、
node向けに用意されている、 [node-env-file](https://www.npmjs.com/package/node-env-file)などのモジュールを使用すれば、メインのアプリケーションと設定を共用できるのですが、
バッチ書くだけでそのモジュールを入れるのも何かと面倒です。

このようなケースでは、`heroku local `コマンドを利用すると便利です。
`heroku local`コマンド経由で Procfile 内定義のコマンドを実行する場合、`.env`ファイルが自動的に読み込まれるようです。

## .env ファイルの作成

すでにある場合は作成不要。リポジトリルートに置いてください。

Heroku の環境変数を.env ファイルに流し込む際は以下のコマンドで

````
$ heroku config -s >> .env 
````

## Procfile を作成する

`Procfile`に実行したいコマンドを名前付きで記述します。

````
# see https://devcenter.heroku.com/articles/custom-php-settings
web: vendor/bin/heroku-php-apache2 public/
check: node scripts/checker.js
````

## 実行ファイルを作成する

`Procfile`で記述した箇所に適当にJSの実行ファイルを設置します。

`.env`から読み込みたい値は `process.env`で参照可能です。

````
"use strict"

const pg = require("pg");

const connect = new Promise(()=>{
    pg.connect(process.env.DATABASE_URL+"?ssl=true",(err,client,done) => {
        if(err){
            throw err;
        }
        client.query("SELECT * FROM tbl_urls limit 5000",(err,result)=>{
            if(err){
                throw err;
            }
            done();
            resolve(result)
        })
    });
})

connect.then((result)=>{
    console.log("data loaded");
})
````

## heroku local で実行する

heroku local コマンドを利用して実行します。

````
$ heroku local check
````
docker でMACVLANを使い、ホストと同じIP空間のIPを割り当てる

# 概要

ホストと同じIP空間のIPを割り当てたい。

docker public ip とか docker static ip とか調べてみたが
docker networkで閉じた空間での固定IPの話が多い印象だった。


# 結論

docker 1.12.0 以降？でサポートされた MACVLANを使う。

参考情報に載せたところで見つかった。

## コマンド

オプションのparentについては、下の参考情報の中に、見つける方法があったと思うので、それを参照してください。

```
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 mcv
```

## できたか確認

```
docker network ls
```

結果できている

```
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
692afa5f3461        bridge              bridge              local
0a2012c60358        host                host                local
032e489b5816        mcv                 macvlan             local
ba30b9b4c185        none                null                local
```

## MACVLANを使って実際に試す

```
docker run --rm --net=mcv -it --rm alpine ping -c 4 8.8.8.8
docker run --rm --net=mcv -it --rm alpine ip -a
```

## 固定IPを割り振る

わりふれたことだけを確認する

```
docker run --rm \
  --net=mcv \
  --ip=192.168.1.100 \
  --rm alpine ip a
```

# まだできていないこと

* dockerコンテナにnginxを立てて、そこに、固定IP として振ったIPでアクセスできること

TODO
今度試す

# 参考情報

## ドキュメント

* [libnetwork/macvlan.md at master · docker/libnetwork](https://github.com/docker/libnetwork/blob/master/docs/macvlan.md)

## 調べていたら以下を見つけた


* [networking - Docker 1.10 container's IP in LAN - Stack Overflow](http://stackoverflow.com/questions/35742807/docker-1-10-containers-ip-in-lan/36470828#36470828)

以下のスライドのようなネットワーク構成の場合

* [Docker Networking with New Ipvlan and Macvlan Drivers](http://www.slideshare.net/bbsali0/docker-networking-with-new-ipvlan-and-macvlan-drivers/4)


作り方はこちらにかいてあった

* [Docker Networking with New Ipvlan and Macvlan Drivers](http://www.slideshare.net/bbsali0/docker-networking-with-new-ipvlan-and-macvlan-drivers/7)

### その他

* [Play with docker v1.12 | Feisky's Blog](http://feisky.xyz/2016/06/24/Play-with-docker-v1-12/)
[Javaの小枝] Javaを使っているのにプロトタイプベースのオブジェクトがうらやましい

# はじめに
Javaを使用している最中にプロトタイプベースのオブジェクトがうらやましくなったりすることがないだろうか。Propertiesのようなオブジェクトに文字列以外のものを入れたかったり、簡易言語の処理系を書いていたり、といったケースを想定している。Map\<Object, Object\> を生のまま使用しても良いのだが型安全でないのが少し気になる場合には以下のようなコードを使うと良いかもしれない。

```Utils.java
	public static class VarName<T> {
		@SuppressWarnings("unchecked") public T cast(Object obj) {return (T) obj;}
	}
	
	public static class PrototypicalObj {
		private final PrototypicalObj parent;
		private final Map<Object, Object> content = new HashMap<>();
		public PrototypicalObj() {parent = null;}
		public PrototypicalObj(PrototypicalObj parent_) {parent = parent_;}
		public <T> T get(VarName<T> var) {
			if (content.containsKey(var)) return var.cast(content.get(var));
			if (parent != null) return parent.get(var);
			return null;
		}
		public <T> PrototypicalObj put(VarName<T> var, T value) {content.put(var, value); return this;}
	}
```

# 使い方

使い方は簡単。

```Utils.java
	public static final VarName<String> FORENAME = new VarName<>();
	public static final VarName<String> SURNAME = new VarName<>();
	public static final VarName<Integer> AGE = new VarName<>();
	
	public static void main(String[] args) {
		PrototypicalObj p = new PrototypicalObj().put(FORENAME, "Tom").put(SURNAME, "Cruise").put(AGE, 55);
		PrototypicalObj c = new PrototypicalObj(p).put(FORENAME,  "Connor").put(AGE, 21);

		{
			String forename = p.get(FORENAME); // 型安全
			String surname = p.get(SURNAME);
			int age = p.get(AGE);
			System.out.println(forename + " " + surname + " is " + age + " years old.");
		}
		{
			String forename = c.get(FORENAME);
			String surname = c.get(SURNAME);
			int age = c.get(AGE);
			System.out.println(forename + " " + surname + " is " + age + " years old.");
		}
		
	}
```

おしまい。
最近、ほんと小技系しか書いてないな…
Google DocumentをGoogle Apps Scriptでコピーする方法


```Javascript
function createCopy() {
    //**********Documentによって要変更**********
    //ファイル名のベース
    //この後に"_日付"が入ります
    //例：会議_20160101
    var fileName = '会議';
    
    //コピー元となるドキュメントファイルのID
    //IDはドキュメントを開いたときのURLから取得可能
    //例：https://docs.google.com/document/d/AAAAAA/edit
    //この場合は"AAAAAA"がID
    var fileId = 'AAAAAA';
    //**********Documentによって要変更**********
        
    //ファイル名が全角で打てないので全角変換
    //ファイル名を全角にする必要がなければ削除
    fileName = fileName.replace(/[A-Za-z0-9]/g, function(s) {
		return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
	});
    
    //ファイル名の日付部分作成
    var date = new Date();
    date.setDate(date.getDate() + 7);
    var formattedDate = Utilities.formatDate(date, "JST", "yyyyMMdd");

    //コピー元のファイルを開く
    var f = DriveApp.getFileById(fileId);
    //コピーを作成。作成したコピーを参照。
    f = f.makeCopy(fileName + "_" + formattedDate);
    
    //コピー後のファイルの中身を書き換える
    //今回の場合「開催日時	： 」というあとに開催日を入れてるので、replaceで変更する
    var body = DocumentApp.openById(f.getId()).getBody();
    body.replaceText('開催日時	： ', '開催日時	：  ' + formattedDate)
}
```
Ruby初心者でも使える便利メソッド&小ネタ集

この記事は、[MKAK Advent Calendar 2016](http://www.adventar.org/calendars/1985)の2日目の記事です。

# はじめに

痒いところに手が届くRuby。
自前で頑張って実装していた機能も、調べてみたら既に存在していた、なんてこともあるかと思います。
そこで、今回は自分が見つけたRubyの便利メソッドや、小ネタを紹介したいと思います。
また、今回使用したRubyのバージョンは`2.2.2`です

# 配列のシャッフル

カードゲームなどを作るときに欠かせないのが配列のシャッフルだと思います。
C言語などで実装しようとするとそれなりに長い道のりを歩むことになりますが、Rubyの`shuffle`メソッドを使えば簡単にできます。

```rb
[1, 2, 3, 4, 5].shuffle #=> [3, 1, 2, 5, 4]
```

# 配列から中身をランダムに抽出

先程紹介した`shuffle`メソッドと、配列の先頭を参照する`first`メソッドを組み合わせれば、配列から中身をランダムに抽出することができます。

```rb
[1, 2, 3, 4, 5].shuffle.first #=> 3
```

と言う説明に納得した方は、まだまだ怠惰具合が足りません。
Rubyには`sample`というメソッドが用意されています。

```rb
[1, 2, 3, 4, 5].sample #=> 3
```

# 複雑なCSVを分割

```rb
'hoge,foo,bar'.split(',') #=> ["hoge", "foo", "bar"]
```

上記のようなプログラムを書くことがあると思いますが、これが通用するのは単純なCSVの場合のみです。
以下のような場合には、面倒臭がらずに`CSV.parse`を使ったほうがいいです。

```rb
'hoge,"foo,piyo,fuga",bar'.split(',') #=> ["hoge", "\"foo", "piyo", "fuga\"", "bar"]

require 'csv'
CSV.parse('hoge,"foo,piyo,fuga",bar') #=> [["hoge", "foo,piyo,fuga", "bar"]]
```

# 文字列の出現数のカウント

`"hoge foo bar hoge fuga"`という文字列から、`hoge`という文字列の出現数をカウントしたいと思います。
自分がまず頭に浮かべたのは以下のようなプログラムでしたが、これでは上手く行きませんでした。

```rb
"hoge foo bar hoge fuga".count('hoge') #=> 11
```

これは、`h`と`o`と`g`と`e`の出現数をカウントしているので、意図した動作ではありません。
`scan`メソッドと`count`メソッドを組み合わせることで、期待通りの動作となります。

```rb
"hoge foo bar hoge fuga".scan('hoge') #=> ["hoge", "hoge"]
"hoge foo bar hoge fuga".scan('hoge').count #=> 2
```

# おわりに

今回はRubyの便利メソッドや小ネタ集の紹介を行いました。
対象がRuby初心者だったり、少しニッチな使用方法の紹介だったので、少し物足りない方もいらっしゃるかもしれません。
Rubyは短く書けて、書いてて楽しい言語なので、みなさんも是非どうぞ！
CygwinからCentOS7.2（Vagrant Box)にrsyncできない時


# 問題発生
Vagrantで以下のbox使ってCentOS7.2の環境を作成
CentOS 7.2 x64 (Minimal, Puppet 4.2.3, Guest Additions 4.3.30) (http://www.vagrantbox.es/ )

Cygwinからsshできるように手元のid_rsa.pubをauthorized_keysに入れようとしてみた。

```bash
$ rsync /home/myname/.ssh/id_rsa.pub root@192.168.66.133:~/.ssh/authorized_keys
root@192.168.66.133's password: 
```

するとこんなエラー。

```bash
bash: rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.2]
```
なぜだろう。

# 解決編
答えは`rsyn: command not found`と書いてあるように、CentOSの仮想環境にrsyncが入ってないから。だから初期化処理で以下のスクリプトを実行するようにした。

```rb:Vagrantfile
     centos_72.vm.provision "shell", path: "provision/install_packages.sh"
```

```bash:provision/install_packages.sh
#!/usr/bin/env bash

yum -y update
yum -y install rsync
```
これで無事rsyncができるようになりました。

```bash
$ rsync /home/myname/.ssh/id_rsa.pub docker_test:~/.ssh/authorized_keys
root@192.168.66.133's password: 

myname@myhost : 2016/12/01 13:39:25
$
```
http_proxy環境変数からホスト名、ポート、ユーザー名、パスワードを抽出

# http_proxy環境変数からホスト名、ポート、ユーザー名、パスワードを抽出

bashのTIPSとして、bashでhttp_proxy環境変数からホスト名、ポート、ユーザー名、パスワードを分離する方法を紹介します。

CIなどでファイルにプロキシ設定する場合などにどうぞ

```bash
if [[ $http_proxy = *@* ]]; then
    ADDR=${http_proxy#*://}
    AUTH_INFO=${ADDR%@*}
    ADDR=${ADDR#*@}
    echo "ホスト名=${ADDR%:*}"
    echo "ポート番号=${ADDR#*:}"
    echo "ユーザー名=${AUTH_INFO%:*}"
    echo "パスワード=${AUTH_INFO#*:}"
else
    ADDR=${http_proxy#*://}
    echo "ホスト名=${ADDR%:*}"
    echo "パスワード=${ADDR#*:}"
fi
```

### ちょっと解説

`if [[ $http_proxy = *@* ]]`
これは、認証あり(`http://user:pass@host:port`)か
なし(`http://host:port`)かを判定しています。

その後は文字列の抜き出しです。

http://qiita.com/koara-local/items/04d3efd1031ea62d8db5

↑などを参考にしました。
fluentd で AWS Elasticsearchに長い間つないでいると"Cannot get new connection from pool."というエラーが出る件について

本記事は[Qiitaコミュニティガイドライン](http://help.qiita.com/ja/articles/qiita-community-guideline)に違反する可能性が否定できないため、以下のはてなブログ記事に移行しました。
http://tech.tanaka733.net/entry/cannot-get-new-connection-from-pool-error-during-sending-logs-to-aws-elasticsearch-with-fluentd
Dockerを利用してRStudio ServerでRStan環境を準備したあと。

この記事は，[RStudio Advent Calendar 2016](http://qiita.com/advent-calendar/2016/rstudio-ide)の二日目の記事です。

[Dockerを利用してRStudio ServerでRStan環境を準備する](http://qiita.com/kazutan/items/f1447cbabed8d4dd50b8) に関する補足記事です。なので先にそちらをご覧ください。
※本当は併用する予定だったのですが，Qiitaがアドカレを併用認めない仕様っぽいので，追記記事を作ることにしました。

## 運用について

DockerでRStudio Serverを立てた後ですが，コンテナを削除しない限り，変更などはそのまま継承されます。つまり，Rのパッケージを追加でインストールしていっても，コンテナがそのまま残していれば継続して使えます。

ただし，このような使い方はあまり向かないと思います。Dockerの利点はimageからコンテナという環境をさくっと構築できる点であり，長期的に運用するようなことを念頭においていません。**使い捨てや検証用，あるいは環境の共有**するような感じです。もし，長期的に色々と使っていくのであれば，Vagrantなどコンテナ型ではなくマシンとして仮想環境を整備するほうが柔軟でいいかなと思います。VagrantでRStudio Serverを構築するには，以前書いたので参考にしてもらえればと思いいます:

[Vagrantでローカルの仮想マシンにRStudioServer環境を作る](http://qiita.com/kazutan/items/6048fa8d46683dcad788)

## イメージの更新を当てるには

ベースにしているのがhadleyverseで，これはかなりの頻度で更新されています(数日くらい)。なので新しいイメージに更新したいなら，以下の手順を踏んでください。

1. 依存してるコンテナを停止
2. 依存してるコンテナを削除
3. `docker pull (イメージ名):(タグ名)

更新されていれば，新しく入ってくるはずです。

## 自分好みにRStudioをカスタマイズしたものを再利用していきたい

Dockerfileを自分好みに編集してイメージをBuildするか，あるいはコンテナを手元で修正してそれをcommit→pushすれば可能です。イメージを公開するにはDockerイメージ用のDockerHubリポジトリが必要になりますので，DockerHubアカウント作成が必要になります。以下のサイトが参考になるかもしれません:

[Docker イメージの働き](http://qiita.com/t-yotsu/items/559731aca6300eef78ec)

### Dockerfileを作成

Dockerfileを初めて触るのは難しいですから，参考になるものを見ながら修正していくといいかと思います。これをGitHubなどに設置して，DockerHubと連動するようにするとスムーズです。

### 手元のコンテナをPush

1. 事前にどこをどう設定して残すかをリストアップ
2. ベースになるイメージから新たにコンテナ作成
3. カスタマイズを実施
4. docker commitを実施

もし公開するのであれば，このコミットしたイメージをDockerHubにpushする作業が必要となります。細かい手続きについては，私がしろううというのがあるので省略します。すみません。

## 問い合わせについて

何かありましたら，Twitterの@kazutanもしくはここのコメント，Dockerfileに関することでしたらGitHubリポジトリのissueにおねがいします。
Entity Framework Code Firstでdecimalの桁数を設定する

## 自動的にdecimal(18,2)になってしまう
Code FirstでSQLServerに型にdecimalを指定したとき、自動的にdecimal(18,2)になってしまう。
Add-Migration後に作成されるファイルを修正すると変更できるけど、そんなことは大変めんどくさい。
Add-Migrationした段階で、すでに設定した桁数になってたらいいのに。

```C#
//percisionとscaleの値を変更してやればお望みの桁数にできる
decimaltest = c.Decimal(nullable: false, precision: 18, scale: 2)
```

![キャプチャ.GIF](https://qiita-image-store.s3.amazonaws.com/0/147093/4f417775-7fa3-f475-50b2-ae5f8a9c8ddb.gif)

このデフォルトをうまいこと制御できないか模索してみる。

## 先人様の力を借りる
http://stackoverflow.com/questions/3504660/decimal-precision-and-scale-in-ef-code-first
だいたい書いてあったので試してみる。しかしたくさんあるなあ。
斜め読みした感じ、`DBContext`の`OnModelCreating`をoverrideして`modelBuilder.Conventions`に作った規約をAddしてやると。
何かよくわからんがやってみましょう。

```C#
public class CustomAttributes
{
    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
    public sealed class DecimalPrecisionAttribute : Attribute
    {
        public DecimalPrecisionAttribute(byte precision, byte scale)
        {
            Precision = precision;
            Scale = scale;
        }

        public byte Precision { get; set; }
        public byte Scale { get; set; }
    }
}

public class DecimalPrecisionAttributeConvention
: PrimitivePropertyAttributeConfigurationConvention<DecimalPrecisionAttribute>
{
    public override void Apply(ConventionPrimitivePropertyConfiguration configuration, DecimalPrecisionAttribute attribute)
    {
        configuration.HasPrecision(attribute.Precision, attribute.Scale);
    }
}
```

`DecimalPrecisionAttributeConvention`が規約になるのかな。
では`OnModelCreating`の`modelBuilder.Conventions`にAddしましょう。

```C#
public class TestDataContext : DbContext
{
    public DbSet<testtable> testtable { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Add(new CustomAttributes.DecimalPrecisionAttributeConvention());
        base.OnModelCreating(modelBuilder);
    }
}
```

その上で定義してやって…

```C#
[CustomAttributes.DecimalPrecisionAttribute(3, 2)]
public decimal decimaltest { get; set; }
```

いざAdd-Migration！

![キャプチャ2.GIF](https://qiita-image-store.s3.amazonaws.com/0/147093/5ffc106e-1db1-2aed-71fb-592b84f996e1.gif)

おー！できてるじゃん！

`ConventionPrimitivePropertyConfiguration`見てたら他にも設定できる項目いくつかあったので結構いろんなことできそうですね。
Null許容にするとか順序とか型とか最大長とか、まあ普通に設定できるものだったんで使うかは置いといて。

もうちょっとがんばったらデフォルト値変更できないかなー。
という訳で次回はデフォルト値の設定の予定。

書きました。
[Entitiy Framework Code Firstでデフォルト値の設定](http://qiita.com/tomopy03/items/a8c30947f0753d89346a)
Groongaのカラム圧縮サポート、選ぶならどれ？(Zlib,LZ4,Zstd)

これは[Groonga Advent Calendar 2016](http://qiita.com/advent-calendar/2016/groonga)の3日目の記事です。

### はじめに

[Groonga 6.1.1のリリース](http://groonga.org/ja/blog/2016/11/29/groonga-6.1.1.html)から、カラムの値を圧縮するのに、[Zstandard](http://facebook.github.io/zstd/)(以下Zstd)が使えるようになりました。

例えば、メモ内容を `Memos` テーブルの `content` カラムにZstdで圧縮して格納したい場合には次のようにしてカラムを作成します。

```
column_create Memos content COLUMN_SCALAR|COMPRESS_ZSTD Text
```

カラムの値の圧縮には、これまでもZlib(COMPRESS_ZLIB)やLZ4(COMPRESS_LZ4)がサポートされていました。ではZstdはどんなときに使うとよいのでしょうか。

### どれを選んだらいいか？

Zstdのサイトのベンチマークだけから判断すると、Zstdは圧縮率もZlibに比べてやや良いようです、なので、ディスク容量を節約したいならZstdを選択するのが良さそうです。(Zstd > Zlib > LZ4)

一方、圧縮速度、展開速度に関して言うと、LZ4が他を引き離して圧倒的に良いと言えます。(LZ4 > Zstd > Zlib)
ディスク容量を節約することよりも、更新や検索性能を稼ぎたいならLZ4を選択するのが良さそうです。

### 使える環境は？

どくにこだわりがないならZstdを採用するのがおすすめです。
が、Zstdは後発のライブラリーでもあるので、パッケージが用意されていないディストリビューションもあります。

* Debian 現在の安定版(jessie)向けにパッケージは提供されていません。stretch以降には入ります。jessieの人はディスク容量を節約したいならZlib、そうでないならLZ4を使おう。
* Ubuntu 16.04(xenial)以降なら使えます。
* CentOS 6以降なら使えます。(epelを利用)
* Fedora 23以降なら使えます。

ただし環境によって採用されているバージョンがばらばらな点に注意が必要かもしれません。(バージョンによっては、圧縮・展開性能が逆転するということがあるかもしれない。)

### まとめ

* Groonga 6.1.1でZstandardによるカラムの値の圧縮がサポートされたよ
* 特にこだわりがないならZstdを使うと良いよ
* ディスクを節約したいならZstd、更新や検索性能を重視するならLZ4を使うと良いよ
* ↑は目安なので、そのまま鵜呑みにせず本番環境へ導入する前に自分の環境でベンチマークをとって評価してね
CakePHPでバージョン番号を取得して比較する

お疲れ様です。
GMOリサーチの石黒です。

CakePHPでバージョン番号を取得して比較する方法について、
以前調査したときは検索して見つけたのですが、
今検索しても記事にたどり着けなかったため共有します。

#バージョン

CakePHP2.x
CakePHP3.x

#コード

```php
// 第三引数を指定するとbooleanを返す
if (version_compare(Configure::version(), '2.7', '<'))
{
    // CakePHP2.7より前の場合の処理
}
```

###version_compare()について
[version_compare](http://php.net/manual/ja/function.version-compare.php)はPHPの標準関数です。
バージョンの数字だけでなく、以下のルールでバージョン番号を比較してくれます。
`ここにないすべての文字列 < dev < alpha = a < beta = b < RC = rc < # < pl = p`

###Cofigure::version()について
[Configure::version()](http://book.cakephp.org/2.0/ja/development/configuration.html#Configure::version)はCakePHPの関数です。
文字列で使用中のCakePHPのバージョンを返却します。
【備忘録】HTMLで同一階層のパスを指定する方法

#HTMLやCSSでうまく画像ファイルが読み込まない…
<p>コーディング初心者です。ご容赦ください。<br>
タイトルのような初歩的なことで困ってました。
</p>
###まずはみんな知ってる1つ上の階層のパスの指定の仕方

「../」(ドットドットスラッシュ)ですね

```
<a href = "../index.html">1つ上の階層のindexにアクセス</a>
```

###そして、同じ階層のパスの指定の仕方

```
<a href = "./image.jpg">同じ階層の画像ファイルを指定</a>
```
#####「./」(ドットスラッシュ)…これだけでよかったんですね

何かご指摘ありましたらよろしくお願いします。
MarkdownEditorを作る

# MarkdownEditorをつくる
既存のMarkdownEditorは拡張機能を持たせるのがきつそうだったので、EditorとMarkdownを表示させるコンポーネントを組み合わせて作りました。
その時のやり方を自分の頭整理するためにもざっと書きます。

# 使ったコンポーネント
- [Editorのコンポーネント https://github.com/securingsincity/react-ace](https://github.com/securingsincity/react-ace)
- [Markdownのコンポーネント https://github.com/rexxars/react-markdown](https://github.com/rexxars/react-markdown)

#  View
```js
onChangeCode = newValue =>
 this.props.onChageCode(newValue);
//newValueという値にすることで、AceEditorが新しいvalueを受け取ってくれるので、ここでevent.target.valueとする必要はないです
//後者のonChageCodeはActionからきてます

const { code } = this.props.createProblemPage;
//このcreateProblemPageは下のReducerからきてます

<AceEditor
 mode="markdown"
 theme="monokai"
 fontSize=16
 value={ code }
 onChange={ this.onChangeCode }
 />

<ReactMarkdown
 source={ code }
 onChange={ this.onChangeCode }
 />
```

# Reducer
```js
const initialState = {
  code: ''
};

function whenChangeCode(state, code) {
  return {
    ...state,
    code
  };
}

export default function createProblemPage(state = initialState, action) {
  switch (action.type) {
    case CREATE_PROBLEM_PAGE.CHANGE_CODE_CREATE_PROBLEM:
    return whenChangeCode(state, action.nextValue);
  default:
    return state;
  }
}
//この辺のactionTypeのところははだいぶはしょってます
```

# Action
```js
export function onChangeCode(nextValue) {
  return {
    type: CREATE_PROBLEM_PAGE.CHANGE_CODE_CREATE_PROBLEM,
    nextValue
  };
}
```

とりあえず主な部分はこんな感じです。こんな感じになります。
![1480655566tz9WqfmTokHPnJv1480655561.gif](https://qiita-image-store.s3.amazonaws.com/0/129548/60ef32f5-4939-5499-46af-8962126dfb93.gif)


Qiitaでどの辺まで書いたらいいのか微妙なところがあって、`View`のところのdispatchさせるとことかほかにもいろいろ省いてるのでもっと”もっとここも書けよ!!”ってのあったらどんどんお願いします!!
pythonでn次方程式の解を求める

#n次方程式って
```math
x^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0 =0
```
を解きたいシチュエーションに出会った。これは一般にn次方程式と呼ばれている気がする。（1変数の代数方程式ともいうのか）
これは5次以上のものについては代数的な解がないことが知られている。
とはいっても5次についてはいろんな特殊関数を使えば表現できるようだし、近似解については数値計算もできる。
4次以上についてはそもそも数値計算を用いるのが普通のようだ。
Matlabなんかではrootsという代数方程式の数値計算を行う関数が用意されているようだが、pythonでは特にライブラリが見当たらなかった。というわけで実装してみることにした。

#アルゴリズム
解を求めるとなるとNewton法が最初に思いつくように思われるが、n次方程式の解を求めるNewton法に近いアルゴリズムとしてDKA法というものが知られているようだ。ただこのアルゴリズムを実装するのは面倒だし、[Matlabの実装](https://jp.mathworks.com/help/matlab/ref/roots.html)をみると、固有値計算に帰着する方法を用いているらしい。今回はこれを用いることにした。
固有値を定義に沿って計算するときは

```math
 \mathrm{det}(sI-A)=0

```
を解くことになるわけだが、これは結局行列がn次の時n次方程式となる。固有値計算については様々な方法があるようで、numpyにおいてもnp.linalg.eigなる関数が用意されている。よって解を求めたい方程式を固有多項式としてもつ行列が分かればいいわけだが、これについてはコンパニオン行列という以下のようなものが知られている。

```math
A=
\left(
    \begin{array}{ccccc}
      0 & 1 & 0&\ldots&0  \\
      \vdots & \ddots & 1&\ddots&\vdots \\
      \vdots & \ldots & \ddots&\ddots&0\\
      0&\ldots&\ldots&0&1\\
-a_0&-a_1&\ldots&-a_{n-2}&-a_{n-1}
    \end{array}
  \right)

```

これの固有方程式は

```math

|sI-A| = s^n+a_{n-1}s^{n-1}+a_{n-2}s^{n-2}+\ldots+a_1s+a_0
```
となる。
よって任意係数をもつn次方程式について以上のコンパニオン行列の固有値をすべて計算してやれば、解が求まることになる。
なお最初に紹介したDKA法については[こちら](https://na-inet.jp/nasoft/chap13.pdf)を参照。[実装](http://code.activestate.com/recipes/577865-durand-kerner-method-for-solving-polynomial-equati/)も落ちていた。


#実装

```python3:n-poly.py
import numpy as np
def solve(vec,is_complex=False):
    dim =len(vec)
    if is_complex:
        A = np.zeros((dim,dim),dtype=complex)
    else:
        A = np.zeros((dim,dim))
    A[np.arange(dim-1),1+np.arange(dim-1)] =1
    A[-1,:] = -vec
    ans,vec = np.linalg.eig(A)
    return ans

vec0 =np.array([-120,274,-225,85,-15])
vec1 =np.array([1,0])
vec2 =np.array([-1,5,-10,10,-5])
print(solve(vec0))
print(solve(vec1))
print(solve(vec2))

```
```
[ 5.  4.  3.  2.  1.]
[ 0.+1.j  0.-1.j]
[ 1.00079742+0.00057977j  1.00079742-0.00057977j  0.99969502+0.00093688j
  0.99969502-0.00093688j  0.99901512+0.j        ]
```
係数が虚数を含む場合は、is_complexをTrueにしないと、勝手に係数が実数に変換されてしまうことに注意。なお常にdtype=complexとしていると、実数固有値が実数固有値として計算されにくくなるようなので、普段はfloatで計算している(dtypeによってアルゴリズムが違うのだろうか？）

例はそれぞれ

```math
(x-1)(x-2)(x-3)(x-4)(x-5)=x^5-15x^4+85x^3-225x^2+274x-120=0\\
x^2+1=(x-i)(x+i)=0\\
(x-1)^5=0
```
を計算している。解の公式のない5次方程式についても重解含めそれなりの精度で計算されていることが分かる。


#参考文献

[コンパニオン行列と特性多項式の関係の証明](http://www13.plala.or.jp/control/book/companion.pdf)
zabbix3.0 画面から監視対象サーバ上でコマンドを実行する（マップの自動作成編）

# zabbix3.0で自動登録されたホストをマップでも自動登録させる


## はじめに

同じ内容のzabbix2.0の手順を昨日公開しました。
手元にzabbix2.0しかなかったのですが、サポートに関する指摘が出ているようです。
同じ内容でzabbix3.0の手順も投稿しておきます。

## 環境

* Zabbix 3.0.3
* ServerOS CentOS 6.8

## アイコンのマッピングを登録する

「管理」→「一般設定」→「アイコンのマッピング」
「アイコンのマッピングの作成」
から新しいマッピングを作成する。

![2016-12-01_120318-mapping.png](https://qiita-image-store.s3.amazonaws.com/0/149632/6723301e-f473-2490-1c75-55ce9164febe.png)

→この設定は、インベントリを使用していない方は作るだけで良いです。
　関係しているのは、標準のアイコンなのでマップに表示させたいアイコンを選択してください。
※インベントリ条件でアイコンの種類を変える場合はルールを追加していく。

## マップを作成する

マップは、ホストグループ単位で作成します。
（1つのマップに表示させるホストのこと）

監視対象の台数によりますので、自分の都合の良いホストグループを選ぶ。

「監視データ」→「マップ」
「マップの作成」を選択。
※すでに複数のマップが作成してあり、任意のマップが表示される場合は「すべてのマップ」に切り替える。

![2016-12-02_131412-map01.png](https://qiita-image-store.s3.amazonaws.com/0/149632/fc6571d6-dc3f-4a39-859d-d18a187d81da.png)


デフォルト設定から変更するのは、

* 名前→お好みで
* アイコンの自動マッピング→作成したアイコンのマッピングを選ぶ
* 「アイコンのハイライト」～「障害が1つの時に詳細を展開」は必要な項目をチェックする（下記参照）

https://www.zabbix.com/documentation/3.0/manual/config/visualisation/maps/map

* アイコンラベルのタイプ→アイコン名を選ぶとホスト名で表示される

zabbix2.0との変更箇所は、

* 所有ユーザをしている可能になった
* 最小トリガー設定ができるようになった

です。

## 作成されたマップを編集する

作成したアイコンを表示したら、仮アイコンを一つ作成する。（アイコン＋）

![2016-11-30_143708-icon.png](https://qiita-image-store.s3.amazonaws.com/0/149632/7587f11d-4255-e07f-3af1-d49115ad849b.png)

作成されたアイコンを左クリックすると、↓の変更メニューが出てきます。

![2016-12-02_132510-map02.png](https://qiita-image-store.s3.amazonaws.com/0/149632/0a48b827-4b96-1e52-a491-809c3c0410f9.png)


主な変更箇所は、

* タイプ→ホストグループ
* 表示→ホストグループ内のホスト
* ホストグループ→マップ化したいホストグループを選択する

で適用した後に閉じる。

## 表示を確認する

「監視データ」→「マップ」
で作成したマップを選択すると、自動的に登録されているホストが配置されたマップになっています。

![2016-12-02_133945-map2.png](https://qiita-image-store.s3.amazonaws.com/0/149632/9d91de09-e0e2-040b-f195-653e718c329d.png)

次回、このマップでコマンド実行したいサーバ上で指定されたコマンドを実行して結果を確認する。
を書きたいと思います。

## 参考にしたサイトに感謝

[zabbix 2.0公式ドキュメント（一般設定）](https://www.zabbix.com/documentation/2.0/jp/manual/web_interface/frontend_sections/administration/general)
[zabbix 2.0公式ドキュメント（ネットワークマップの設定）](https://www.zabbix.com/documentation/2.0/jp/manual/config/visualisation/maps/map)
[全自動zabbix](http://www.zabbix.com/jp/img/zabconf2013/presentations/13-ito.pdf)
Intel JOULE 570X を動かす前に調べてみた

本家 Intel Developer Zone の Intel Joule Module User Guide Home は[こちら](https://software.intel.com/en-us/getting-started-on-joule "Intel Joule Module user Guide Home")です。

# JOULE 570X 概要

Joule 570X は、Atom T5700 という SoC を搭載し、内蔵の Intel HD Graphics を利用して 4K 出力が可能。メモリは 4GB で、16GB の eMMC をストレージとして持つ。無線は Wi-Fi(IEEE 802.11b/g/a/n/ac対応) と Bluetooth 4.1で、USB 3.0、CSI/DSI、GPIO、I2Cなどのインターフェイスを備えている。

**※日本国内においては、5GHz 帯は室内でのみ使用のこと**

# 同梱品

* JOULE 570X 本体
    * 基板裏面に Micro SDHC 16GB：起動用がある
* USB TYPE C ケーブル
    * このケーブルを使用して、開発プラットフォームのBIOSをフラッシュする
* スペーサー、ネジ
* ヒートシンク

# 動作に必要なもの

* DC Power Supply (LPS または Class2 適合品)
    * 12 VDC, 3A : センタープラス、外径 5.5mmφ、内径 2.1mmφ、長さ 9～10mm
        * LPS: Limited Power Source  IEC60950-1(H26):JIS C6950-1:2012 　2.５項
        * Class2: UL1310にて規定されている
* モニター接続用 HDMI ケーブル
    * JOULE 側は micro HDMI コネクタ
* マイクロ USB ケーブル（タイプB）
    * 開発プラットフォームとのシリアル通信およびデバッグ用
* オプション
    * 有線接続を使用して開発プラットフォームをネットワークに接続する場合は、USBイーサネット・アダプタとイーサネット・ケーブル
        * RTL8xxxチップセットを備えたアダプタを推奨
    * RTC (Real Time Clock) 用 CR1220 コイン電池
    * USB Powered Hub
    * USB キーボード
    * Bluetooth デバイス

# 外観（本体／同梱品）

![ヒートシンク](https://qiita-image-store.s3.amazonaws.com/0/152411/4355e800-32a4-87df-5572-0bbd9b14946d.jpeg)

![スペーサー／ネジ](https://qiita-image-store.s3.amazonaws.com/0/152411/e4b1ac17-6ca4-e7d2-640e-e612e8fe667a.jpeg)

![USB TYPE C ケーブル](https://qiita-image-store.s3.amazonaws.com/0/152411/e9ae8e48-05e6-6292-9d44-7bfb658e876c.jpeg)

本体（基板上のコネクタ種類）は[こちら](https://software.intel.com/en-us/node/667851 "Overview of ports and connectors on the expansion board")を参照してください。

# ヒートシンクを取り付ける

Joule の上にプラスチックのアダプタを載せます。爪がカチッとはまるように上から押さえます

![20161222_031015646_iOS.jpg](https://qiita-image-store.s3.amazonaws.com/0/152411/6397a77e-8d08-515c-8897-20f9c63b2233.jpeg)


ヒートシンクを真ん中に置きます。向きに注意してください

![20161222_031033465_iOS.jpg](https://qiita-image-store.s3.amazonaws.com/0/152411/702bcde6-9536-3a25-1164-20d7a82a7e88.jpeg)


ワイヤーストラップを取り付けます。向きに注意してください。ばらけているほうが J11 コネクタ側です

![20161222_031807582_iOS.jpg](https://qiita-image-store.s3.amazonaws.com/0/152411/eaf674ce-438f-8cb4-50e1-cd97ac0951ac.jpeg)
CSSで便利なセレクタ

何番目以降（例：5番目以降）
li:nth-child(n + 5) {}

何番目まで（例：5番目まで）
li:nth-child(-n + 5) {}

最後以外
li:not(:last-child)

奇数
li:nth-child(odd)

偶数
li:nth-child(even)
Android4.0でDatePickerDialogのDividerの色を変更する方法


#コード
結果から言うとこんな感じ

```Java
private void setDatePickerColor(){
  //まずはダイアログのタイトルの部分のDividerの色変更
  View titleDivider = getViewByIdName(null, "titleDivider");
  if (titleDivider != null) {
      titleDivider.setBackgroundColor(getResources().getColor(R.color.theme_green));
  }

  //DatePickerのDividerの色を変える
  DatePicker datePicker = (DatePicker) getViewByIdName(null, "datePicker");
  String[] numberPickerIdNameList = {"year", "month", "day"};
  for(String numberPickerIdName : numberPickerIdNameList){
      NumberPicker numberPicker = (NumberPicker) getViewByIdName(datePicker, numberPickerIdName);
      setNumberPickerDividerColor(numberPicker);
  }
}

private View getViewByIdName(View parentView, String idName){
  int viewId = getResources().getIdentifier(idName, "id", "android");
  if (parentView == null){
      return dialog.findViewById(viewId);
  }else{
      return parentView.findViewById(viewId);
  }
}

/**
* mSelectionDividerがNumberPickerのprivateとして
* 定義されている分け目のDrawableなので
* そこに対してDrawableをセットすれば色が変わる
* @param numberPicker
*/
private void setNumberPickerDividerColor(NumberPicker numberPicker){
  Field[] numberPickerFields = NumberPicker.class.getDeclaredFields();
  for (Field field : numberPickerFields) {
      if (field.getName().equals("mSelectionDivider")) {
          field.setAccessible(true);
          try {
              field.set(numberPicker, getResources().getDrawable(R.drawable.dialog_date_picker_divider));
          } catch (IllegalAccessException e) {
              e.printStackTrace();
          }
          break;
      }
  }
}
```

#タイトル部分のDividerに関して
まず、style_holo.xmlを見るとAlertDialog.Holoというスタイルに
alert_dialog_holoというLayoutがセットされているのがわかる

alert_dialog_holoを見るとタイトルのDividerのIDがtitleDividerだということがわかる。
ただ、ちょっとこの理由はわからないがandroid.R.idにはtitleDividerが無いので
android側でで定義されているidのintを引き出す必要がある。

そこで使用するのがResources.getIdentifier()。
これをこんな感じで使用する

```Java
//上記21行目
int titleDividerId = getResources().getIdentifier("titleDivider", "id", "android");
```

これでidが取得できるのであとはfindViewById()に突っ込むとViewが取得できる。
titleDividerはViewなので(LinearLayoutとかではない)
あとはsetBackgroundColorで色を指定するだけ。

---

#DatePickerDialogのDividerに関して
こちらもソースを読んでいく。

まず、DatePickerDialogは単純にAlertDialogにsetView()でDatePickerを指定しているだけで
idにR.id.datePickerを指定してるのでそれでDatePickerを取得。

そしてDatePickerの中身に関してはNumberPickerを3つ並べているだけで
それぞれのidとしてyear, month, dayとつけられているので
そのidでNumberPickerを取得。

NumberPicker内にはmSelectionDividerというDrawableがprivateで指定してあって
それでDividerの描画を行っている。

privateな値なので普通には指定できないということで
Reflectionを使って設定を行います。

なおReflectionで設定しているdrawableはshapeのxmlで
単純にrectangleでsolidの色として指定しているだけ。
(うまくやれば点線とかもできるかも？)
Android Studioで、APKの保存されるフォルダを変更する方法


```groovy
//APKのファイル名変更と保存されるフォルダの変更
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) {
            //APK名を変更
            def flavor = variant.flavorName
            def buildType = variant.buildType.name
            def date = new java.text.SimpleDateFormat("yyyyMMdd").format(new Date())
            def newName = "app-${flavor}-${buildType}${date}.apk"
            output.outputFile = new File("$output.outputFile.parent/$flavor/$buildType", newName)
        }
    }
}
```
changefinderライブラリを試してみた！

Qiita初投稿！！新卒1年目エンジニアのやすです(*´▽｀*)
参考サイト：[changefinder]
(http://argmax.jp/index.php?changefinder)
※使い方はすべてこちらのリンク先に載っています。

# 背景
「PVが急上昇しているかを知りたい！」という声を最近耳にし、やってみました。
そうというときは、変化点検出、外れ値検出を用いて計測するのが多いみたいです。
調べてるうちにchangefinderというモデルが使われている例がいくつかありました。

[「Ameba」と「Twitter」を用いた急上昇ワードの特定手法とシステムの紹介]
(https://www.cyberagent.co.jp/techinfo/techreport/report/id=9749)

RやPythonでパッケージがあるので、今回は触ったことのないpythonのパッケージのサンプルコードを試しました！

R:  [異常検知（変化点検出）のパッケージを作ってみた]
(http://d.hatena.ne.jp/yokkuns/20120930/1348978641)

Python: [changefinder]
(http://argmax.jp/index.php?changefinder)

# 実践
エディタは最近Python界隈で話題のjupyterを使いました。
jupyter nootbookのインストール方法は[こちら](http://www.task-notes.com/entry/20151129/1448794509)にまとまっています。
jupyterはインタラクティブにコード修正、データ取得、プロットができるおすすめのエディタです。

jupyterでサンプルコードを叩くと、こんな感じになります

![jupyter.PNG](https://qiita-image-store.s3.amazonaws.com/0/105197/08d0643f-67cb-d67f-066e-ea16ed93ee2f.png)


まずはchangefinderのパッケージのインストール
必要なライブラリをインストール

```
pip install changefinder
```

matplotlib.pyplotは、グラフプロットの標準的なライブラリです。
numpyは、乱数などを生む関数が色々は言っている便利なライブラリです。
pandasは、データフレームなどといった、データ操作が便利になる型などが入っております。

```
import changefinder as cf
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
```

分析対象のデータを作成します。平均値が低、高、低、高の乱数を作成し、格納しています。

```
data=np.concatenate([
np.random.normal(0.7, 0.05, 300),
np.random.normal(1.5, 0.05, 300),
np.random.normal(0.6, 0.05, 300),
np.random.normal(1.3, 0.05, 300)])
```

パラメーターをセットします。

```
cf = changefinder.ChangeFinder(r=0.01, order=1, smooth=100)
```

スコアを配列に入れて

```
ret = []
for i in data:
    score = cf.update(i)
    ret.append(score)
```

グラフプロットです。

```
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(ret)
ax2 = ax.twinx()
ax2.plot(data,'r')
plt.show()
```

# まとめ
jupyterだと、インタラクティブにできるので、簡単に色々なパッケージを試せます！
リリースされたばかりのAWS CodeBuildを使ってVAddyの脆弱性診断を自動実行

[VAddy Adventカレンダー](http://qiita.com/advent-calendar/2016/vaddy)2日目の記事です。
[VAddyは、継続的なWeb脆弱性診断が簡単に実現できるSaaSです。](https://vaddy.net/ja)

私が好きなビールの種類は、PaleAleやIPA(India Pale Ale)です。IPAは18世紀ごろ、イギリスからインドにビールを輸出する際に船で何日もかけて運んでいたため、途中でビールが劣化する問題があったために防腐作用のあるホップを大量にいれてアルコール度数も高めにしたことが始まりで、おっと話が長くなりそうなのでこのへんにしておきますね。

## AWS CodeBuildとは

![スクリーンショット 2016-12-02 10.29.15.png](https://qiita-image-store.s3.amazonaws.com/0/61278/85cebbfa-993d-705b-6e38-c994fbe89b12.png)

昨夜にre:Inventにて発表されたフルマネージドのビルドツールです。JenkinsやCircleCIのようなもので、何かをインストールしたりインスタンスを事前に用意する必要もなく、ビルドするタイミングでインスタンスが使われてビルドが終わると自動でインスタンスが破棄されます。
こちらのブログが詳しいので詳細を知りたい方はご覧ください。
http://dev.classmethod.jp/etc/reinvent-2016-codebuild/

## CodeBuild用のリポジトリをgithubに作成

githubのリポジトリを元に試しにビルドを実行してみます。
まずはgithubにリポジトリを作って、下記のようなbuildspec.ymlをコミットしておきます。
このbuildspec.ymlがリポジトリにある場合はそれに従ってビルドが進みます。今回は、post_build（ビルドが終わった後の処理）で[VAddyのCLIツール](https://github.com/vaddy/go-vaddy/blob/master/README_ja.md)をダウンロードして脆弱性検査の実行と確認を行うコマンドを実行しています。

````
version: 0.1

phases:
  install:
    commands:
      - echo Nothing to do in the install phase...
  pre_build:
    commands:
      - echo Nothing to do in the pre_build phase...
  build:
    commands:
      - echo Nothing to do in the build phase...
  post_build:
    commands:
      - git clone https://github.com/vaddy/go-vaddy.git govaddy ; govaddy/bin/vaddy-linux-64bit 
      - echo Build completed on `date`
````

## CodeBuildで試しにビルドしてみる
ここからAWS CodeBuildの管理画面の操作になります。現在、東京リージョンでは提供されていないため、USリージョンで試しています。
https://us-west-2.console.aws.amazon.com/codebuild

Create Projectボタンを押してプロジェクトを作成します。
リポジトリはgithubを選択するとgithubの認証画面が出るのでアクセス許可します。その後、githubリポジトリのリストが表示されますので選択してください。
![github.png](https://qiita-image-store.s3.amazonaws.com/0/61278/790ba75d-92ae-87c7-0cfa-2bb1f458aca6.png)

Current build specificationの項目は、Using buildspec.yml in the source code root directoryを選択します。これでリポジトリのbuilspec.ymlが利用されます。

この状態でビルドを実行すると、エラーになると思います。VAddyのCLIツールに必要なトークンやユーザ名を指定していないからです。

## CodeBuildのビルド実行後に、VAddyの脆弱性検査を実行する

VAddyのAPI経由で脆弱性検査を実行するための情報を環境変数にセットします。
先ほど作ったCodeBuildのプロジェクトの編集画面に行くと、下の方に「Show Advanced Settings」というメニューがありますのでそこをクリックしてVAddy APIを利用するのに必要な情報を「Environment Variables」にセットします。
![スクリーンショット 2016-12-02 16.31.05.png](https://qiita-image-store.s3.amazonaws.com/0/61278/c9751ca0-0e11-b380-b247-ae4d7ac8f28e.png)


ビルドを実行して脆弱性件数が0件であればビルドが全て成功します。
![all_pass.png](https://qiita-image-store.s3.amazonaws.com/0/61278/885806bb-d0be-73a4-9ae8-848e529014f2.png)

## 脆弱性が1件でも見つかった場合
もし脆弱性が一件でも見つかった場合は、[VAddy CLIツール](https://github.com/vaddy/go-vaddy/blob/master/README_ja.md)が異常終了するのでそこでビルドが失敗します。
![error.png](https://qiita-image-store.s3.amazonaws.com/0/61278/b3146691-a3fd-3586-1878-cbd7cfed63da.png)


## さいごに
AWS CodeBuildはリリースされたばかりのため、ブランチの指定など細かな対応はできませんが、すぐにアップデートされて対応すると思います。
現在VAddyの開発環境では、常にEC2インスタンスを立ち上げてJenkinsを稼働させているため、今後はこのような必要な時だけビルドしてインスタンス価格を減らす方向も考えていきたいと思います。
AzureのApp Service（Mobile App）でファイルをアップロード時に'request entity too large'が発生

##症状##

画像ファイルなど大きいファイルをアップロードしようとした際にタブレットアプリにて以下のエラーが発生する。

**'request entity too large'**

##前提##

Microsoft Azure の App Service (Mobile App)を新規で作成し利用。（以前のモバイルサービスから移行されたApp Serviceはこの症状は出ていません。）
ユニバーサルアプリ（Visual Studio 2015）にて開発。

##解決策##

App Service Editor にて編集。app.js内に以下の内容を追加します。

```app.js
var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '1mb'}));
app.use(bodyParser.urlencoded({limit: '1mb', extended: true})); 
```
1mbは適切なサイズに調整お願いします。


![1.gif](https://qiita-image-store.s3.amazonaws.com/0/133969/bf3f1953-a22c-f7c9-24c9-de9c97fa5847.gif)


##参考##

http://stackoverflow.com/questions/19917401/node-js-express-request-entity-too-large

※本件はマイクロソフトの公式での問い合わせは行っていませんのでご注意ください。
ひとり Slack Team の薦め

# 注意:  n 番煎じ

---

# 自分専用の Team を作ると幸せになれる

---

# Slack 使い込んでますか

- Integration いろいろありますよね
- 各種通知を受けるようにしてるとか
- Bot 飼ってる人もいるでしょう

---

# 本当に人同士で共有が必要？

- 会社のチームに入っている人がほとんどだと思いますけれども
- Slack はコミュニケーションツールではあるけれど、必ずしも会社という単位で使わなくていいのでは？
- 1人だけでも便利な機能は山ほどある

---

# そのチームを去るときのことを考えよう

- 退職とか
- 退職とか
- 退職とか

---

# 自分専用の諸々は自分専用のチームでやろう

- 自分1人しかいない Private Group を作ってそこで色々やってませんか？
- チームを去ったらそこで使い込んだ Integration も捨てざるを得ない

---

# Team の切り替えは超簡単

<img width="1153" alt="Screen Shot 2016-08-05 at 12.17.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/78376/6a3bf40e-d79d-8a94-aab4-025b3d037e46.png">

- Web ブラウザーのタブとほぼ同じ感覚
    - Ctrl + Tab
    - Ctrl + Shift + Tab
    - ⌘ + [1-9]
- もちろんモバイルアプリでも簡単

---

# 自分専用 Team オススメ Integrations

---

## RSS

> 現状、いちばん使い易い RSS リーダーは Slack

https://twitter.com/naoya_ito/status/740381075633901569

```
/feed subscribe https://example.com/atom.xml
/feed list
/feed remove <Feed ID>
```

---

## Mail

- Gmail のフィルターで Integration が発行するメアドに飛ばす
- メールに permalink が払い出されるのが嬉しい

---

## /todo, /remind

```
/todo 冷凍うどん買う
/todo list
/todo done <task id>
```

```
/remind me to buy frozen udon every wednesday at 8pm
```

---

# 有料プラン申し込みまである

---

## まだしてないけど

$6.67/month

- Unlimited searchable message archives
- 他にもいろいろ

---

# Slack 万歳
ORACLEの実行計画やチューニングの仕方について

#ORACLEのオプティマイザについて
ORACLEの実行計画を決める方法としてルールベースオプティマイザ(RBO)と
コストベースオプティマイザ(CBO)があります。
最近のORACLE(バージョン10以上)ではRBOはサポート外の為、
この記事は基本的にCBOでのチューニングについての内容になります。

#CBOとは
ORACLEがSQLを実行する前に、その要求データに対して
どのようにアクセスしたら効率的かを自動で判断してくれる機能になります。
また、テーブルのデータカラムに対してのアクセス増減までも自動で解析し、
実行計画を計算してくれます。

ただ、これは入力されたSQLに対して効率的にアクセス解析を行うといだけなので、
関係ないテーブルとかが指定されていた場合でも、CBOはSQLに書かれていたら
コストとして算出してしまいます。

>例
SELECT
　　E.member,
　　D.dept_id
FROM
　　EMP E,
　　DEPT D,
　　MEMBER M
WHERE
　　E.member_id = D.member_id


↑の場合などに、MENBERテーブルは参照してないが、
実行計画でCBOによってコストが加算されてしまったりする。

#チューニングの準備として
性能測定などをする場合は、
ALTER SYSTEM FLUSH SHARED_POOL;
ALTER SYSTEM FLUSH BUFFER_CACHE;
などのDDL文を流し、DBのキャッシュクリアを行った後に
改善前後のSQLでパフォーマンス測定をしなければなりません。

と、いうのもSQL一度発行した時に、実行文や抽出したデータブロックなどをキャッシュとして保持し、
次回実行時により高速に動かそうとする為、キャッシュのクリアが行われてないと
何も変更してないSQLなのに初回実行と二回目だと勝手にパフォーマンスが上がるなどがあるからです。

ちなみにキャッシュの確認は以下SQLで行えます。
>
select
　　b.obj,
　　o.object_name,
　　count(*) blocks,
　　b.lru_flag,
　　b.tch
from
　　x$bh b
left outer join dba_objects o
　　on b.obj = o.object_id
group by b.obj, o.object_name, b.lru_flag, b.tch

#実行計画の見方
実行計画は次のように表示されます。
![SAMPLESQL.png](https://qiita-image-store.s3.amazonaws.com/0/143636/3621b6c6-32f4-660e-656a-e2923be8c319.png)

↑の画像ですと、empテーブルに対して、TABLE ACCESS BY INDEX ROWIDでアクセスを行い
  INDEX UNIQUE SCAN で empテーブルのemp_pkの索引を使用して該当レコードを取得しています。

＃INDEXの見方(の一部)
>FULL SCAN → 索引からのすべての ROWID の取得
UNIQUE SCAN → ユニークキーを使用して１つの ROWID を取得する
RANGE SCAN → 索引から範囲（スタート・キー、ストップ・キー）をキーにして１または複数 ROWID の取得

などがあります。

#ROWIDとは
ROWIDはテーブルに格納されているデータを一意に決める事が出来る文字列で、
意図して取得しないとカラムとして見えませんが
>SELECT E.ROWID,E.EMP_ID FROM emp E;

とかやると取れる値です。
プライマリーとは別で、ORACLEがレコードを識別するのにつかわれたりするカラムで、
値は'OOOOOOFFFBBBBBBRRR'とかランダムな文字列が格納されています。

実際にその文字列をWHEREとかで指定して、レコードを取得する事もでき
単一レコードへのアクセスは最速ですが、ORACLEの機嫌で値が変わる(ALTERやCREATEなどのDDL実行とか)
ので、実際にプログラム上で安易にROWIDを指定したSQLは書けません。
(変更がない事が確定してたり、１Trunsactionが確定していたりする場合とか・・・？)

#INDEXを使えば必ず早くなるというわけでもない
SQLチューニングを行う場合にINDEXを使えば必ず早くなる、
というわけでもないらしいです。

実は違うパターンもあったりします。
例えば、上で書いたように、

UNIQUE SCANとかで絞り込みを行いデータを抽出する場合、
全体的なテーブルデータ量の２０％以上だと
FULL SCANの方が早かったりする。

っていうのをどっかの記事でみて、
実際に気になって試してみました。

テストデータとして３００万レコードをInsertしたテーブルにて、
INDEXと別のカラムを指定してSELECTをしてみました。
>SELECT
　　M.MEMBER_ID,
　　M.MEMBER_NAME
FROM
　　MEMBER M 
WHERE
　　M.MEMBER_ID >= '1000000'

MEMBERテーブルのIDは１−３００００００入っていて、
指定のWHEREだと全体の2/3を取得する事になります。
私の環境だと上記のSQLとWHEREの指定が無いSQLだと
WHEREが無いFULL SCANの方が実行結果は
1/2ほど早くなりました。

ただ、これはデータカラムの定義や、実際に格納されている値や環境の使用しているCPUなどでも
結構差が出てくるっぽいです。

FULL SCANのが早い理由として、WHERE指定ありだと一度INDEXのスキャンを行ったのちにサイドレコードをINDEXの指定で絞り込んでから表示するのに対し、
FULL SCANで最初からINDEXのスキャンなどを行わずにデータを表示するかららしいです。

SQLの組み方などでは、INDEXをあえて指定せずに、
データごっそり抜き出して後で、結合などでふるい落としたりしたほうが
早かったりするパターンなどもあるみたいです。

#結局どうしたらよいか
・SQLを解析し、コストが掛かっている部分を疑い別の表現で書き直せないか試す。
・必ずINDEXを使えば早くなるというわけでもない。
・SQLキャッシュのクリアを行い事前後で実測値を図りチューニングを行う。


などになるんでしょうか。
まだ、あやふやな部分が多いので勘違いしてたりする部分ばあればご指摘いただければと思います。

#参考サイト
実行計画について：http://www.magata.net/memo/index.php?%BC%C2%B9%D4%B7%D7%B2%E8%A4%CE%C6%C9%A4%DF%CA%FD(Oracle)

オプティマイザについて：http://www.oracle.com/jp/corporate/branch/20130417-yokata-cbo-1-1936862-ja.pdf
AtomのSnippetの追加方法

## AtomのSnippetについて

- デフォルトで組み込まれている機能
- 頻繁に使うコード・単語などを登録しておき、簡単に呼び出すことができる

## 追加方法

### 追加ファイル

- 「Atom > Snippet」で表示される「snippets.cson」が対象ファイル
- snippets.csonの場所は「~/.atom/snippets.cson」
- csonは「CoffeeScript-style JSON」の略。よってCoffeeScriptのルールにそったインデント設定が必要

### 追加手順

1. 「Atom > Snippet」で「snippets.cson」を開く
2. コードを追記・保存で完了

## 記述例

### その1：調整不要なコードを端的に呼び出す場合

#### デモ

![](https://qiita-image-store.s3.amazonaws.com/0/31885/ee57aff4-4e9d-f527-0734-d6196b651f40.gif)

#### コード

	'.text.html.basic':
	  'my css (Lato font)':
	    'prefix': 'lato'
	    'body': """
	@import url(http://fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700);
	body{font-family:Lato, sans-serif;font-weight:300;font-size:16px;line-height:150%;color:#000;padding:30px}
	h1{font-size:28px;font-weight:700}
	a{color:#000;background:#c5ced9;text-decoration:none;}
	a:hover{color:#000;background:#ff0;text-decoration:none}
	    """

#### 解説

- .text.html.basic：htmlファイル上で有効になるように設定。あらゆるファイルに対応するには「*」を設定。尚こちらの調べ方は以下の2つの方法がある
	- Snippetとして追加したい文字列を選択し、「alt+command+p」を実行
	- [Autocomplete Providers · atom/autocomplete-plus Wiki](https://github.com/atom/autocomplete-plus/wiki/Autocomplete-Providers)

- 'my css (Lato font)'：以下prefixで設定した文字列を入力した際の候補表示名
- 'prefix': 'lato'：呼び出す際の入力文字列。ここではhtmlファイル上で「lato」を入力すると表示される

### その2：tabで調整箇所をジャンプできるように設定する場合

#### デモ

![](https://qiita-image-store.s3.amazonaws.com/0/31885/d60fc26b-5854-bde7-ee8a-4c9c24be2cbf.gif)

#### コード

	'*':
	  'news template':
	    'prefix': 'news'
	    'body': """
	<!DOCTYPE html>
	<html><head>
	<title>${1:タイトル}</title>
	</head>
	<body>
	<h1>${2:記事タイトル}</h1>
	${3:本文}
	</body>
	</html>
	    """

#### 解説

- Sublime Text同様「${1:◯◯}」という形式で記述する

## 参考

- [Atom Flight Manual - Snippets](http://flight-manual.atom.io/using-atom/sections/snippets/)