OmniAICreator/Qiita-1.07M huggingface dataset:
VBAHaskellの紹介 その12 （1時間以内に解けなければプログラマ失格がなんたら）

今日、表題の記事が話題になっていた。
[1時間以内に解けなければプログラマ失格となってしまう5つの問題が話題に](http://www.softantenna.com/wp/software/5-programming-problems/)
5問あるうち、最後の「問題5」をVBAHaskellでやってみようと思った。

```
問題5
1,2,…,9の数字をこの順序で、”+”、”-“、またはななにもせず結果が100となるあらゆる組合せを出力するプログラムを記述せよ。例えば、1 + 2 + 34 – 5 + 67 – 8 + 9 = 100となる
```

再帰的なプログラムになるし、けっこうややこしいので「ループなし。イミディエイトペインだけで片付ける。」という訳にはいかなかった。ベタな再帰とループを使ったプログラムがこちら。

```vbnet
'数字の列の全ての組み合わせからなる配列の配列を作成
Function Question5_array(ByVal num As String) As Variant
    Dim i As Long, nval As Long, substr As String
    Dim ret As Variant, recur As Variant, tmpPlus As Variant, tmpMinus As Variant
    If Len(num) = 0 Then        'もう文字が残っていない
        Question5_array = Array(Array())
    Else                        '文字が残っている
        ret = Array()
        '先頭i文字と残りの文字に分けて、残りに対して再帰
        For i = 1 To Len(num) Step 1
            nval = val(Left(num, i))    '先頭i文字を数値化
            substr = Right(num, Len(num) - i)  '残りの文字
            recur = Question5_array(substr)   ' 再帰呼び出し
            ' 配列をつなげていく（内側）
            tmpPlus = mapF(p_catV(Array(nval)), recur)   '  A
            tmpMinus = mapF(p_catV(Array(-nval)), recur) '  A
            ' 配列をつなげていく（外側）
            ret = catV(ret, catV(tmpPlus, tmpMinus))     '  B
        Next i
        Question5_array = moveVariant(ret)
    End If
End Function

'上の関数で生成した配列のうち、合計値が特定の値になるものを抽出
Function Question5(ByVal num As String, ByVal target As Long) As Variant
    Dim arr As Variant, flag As Variant, i As Long
    arr = Question5_array(num)     ' 上の関数で配列の配列を生成
    flag = repeat(0, sizeof(arr))  ' フラグ列
    For i = 0 To UBound(arr) Step 1
        If foldl1(p_plus, arr(i)) = target Then flag(i) = 1  '  A
    Next i
    'フラグでフィルタリング                                       B
    Question5 = filterR(arr, flag)
End Function
```

上記AとコメントしたのはVBAHaskellの典型的な関数であるmapFとかfoldl1を使っている部分で、Bは配列ユーティリティ関数だ。
これで出来上がりなので、さっそくやってみる。

```vbnet
m = Question5("123456789", 100)
printS m
[Dim1]: 0 -> 11  : Total Size = 12     ' 12個あるようだ
for each z in m : printM z : next z
  1  2  3  -4  5  6  78  9
  1  2  34  -5  67  -8  9
  1  23  -4  5  6  78  -9
  1  23  -4  56  7  8  9
  -1  2  -3  4  5  6  78  9     '  <= これ
  12  3  4  5  -6  -7  89
  12  3  -4  5  67  8  9
  12  -3  -4  5  -6  7  89
  123  4  -5  67  -89
  123  -4  -5  -6  -7  8  -9
  123  45  -67  8  -9
  123  -45  -67  89
```

何かおかしい。[答えのページ](https://blog.svpino.com/2015/05/08/solution-to-problem-5-and-some-other-thoughts-about-this-type-of-questions)には11個の解があると書いてあるのに、12個の解が出てきてしまった。
確認してみると、コメントで示した上から5番目のもの
 -1  2  -3  4  5  6  78  9
が漏れているようだ。先頭にマイナスを付けてはいけないとは書いていないので、これは確かに解になっていると思う。
それはいいのだが、1時間以上かかってしまった。

[VBAHaskellの紹介 その11（木構造）](http://qiita.com/mmYYmmdd/items/6f746e0440be58ff9bc9)
[VBAHaskellの紹介 その1（最初はmapF）](http://qiita.com/mmYYmmdd/items/c731edf943acc0a0ebe9)
ObjC to Swift : Updating propaties of structs throughout an array


Objective-C

```Objective-C
[objectArray enumerateObjectsUsingBlock: ^( Object * object,
                                            NSUInteger index,
                                            BOOL * stop )
{
	object.name = @"same name";
}
```

Swift (Indirectly access objects using index)

```Swift
struct Object
{
	var name: Name?
}

for index in 0..<objectArray.count
{
	var object = objectArray[index]
	object.name = "same name"
}

```

Swift *** Error ***
"Cannot assign to 'name' in 'object'"

```Swift
for object in objectArray
{
	object.name = "same name"
}
```
Unity+iOSでitunes connectに申請用アップロードする時にERROR ITMS-90086 Missing 64-bit supportが出た時の対処

##Unity+iOSでitunes connectに申請用アップロードする時にERROR ITMS-90086 Missing 64-bit supportが出た時の対処

こんな感じのエラーが出た時の対処法
http://stackoverflow.com/questions/29567690/error-itms-90086-submitting-app


Build Settingsの
・ArchitecturesをStandard architectures(armv7,arm64)にする
・Build Active Architecture OnlyをNOにする

これでエラーが取れる。
Statusbarのサイズ(高さ)を取得する。

#やりたいこと
Androidで`Statusbar`の高さが必要なことがあります。例えば`Statusbar`を透過させてそのサイズだけ下のViewにPaddingを追加したりするときなどです。そんなときは以下のコードを適当なユーティリティクラスに書いておけばOKです!

###コード

```java
     /**
     * Return Statusbar size.
     * @param activity Activity
     * @return Statusbar size
     */
    public static int getStatusBarHeight(Activity activity){
        final Rect rect = new Rect();
        Window window = activity.getWindow();
        window.getDecorView().getWindowVisibleDisplayFrame(rect);
        return rect.top;
    }
```

これで`Statusbar`の高さを取得できます。

##注意点
これをActivityで実行するときは`onCreate`で呼び出すとまだViewの計算が終わってないので0になってしまいます。したがって`onWindowFocusChanged()`内で呼び出すようにしましょう。
論理 logic の基礎

# 基本的な概念
## 命題とは
真偽が定まる数学的主張
命題の間の演算が定義でき,演算の結果も命題である.
「p⇒q」という形の命題のとき,pをこの命題の仮定,qを結論と言う.
記号論理学では真偽の定まった言明を命題と言う.
命題とは真か偽かの2つの値しか取らない変数だと考える.
このとき命題の事を命題変数ともいう.

## 誤解しやすい論理の基礎  
pとqが命題であるとき,「pまたは (or,∨)q」には注意が必要
それは,pとqの少なくとも一方が真のときに真であり,　　
両方が偽であるときにのみ偽となる命題のこと.  

日常語で,
「A君は社会または理科の試験が満点だった」
と言うと,両方の試験が満点の場合は除外されているように聞こえる.
しかし,数学の論理としては,両方とも満点の意味も含まれる.
たとえば,
「整数nは2の倍数であるか,または3の倍数である」
と言うときには,nが6の倍数であっても構わない.  

##「ならば」が私たちの常識とは少しズレている理由
個別の命題の真偽について私たちが持っている様々な情報が,複合命題としてのならばの意味の解釈を邪魔しているという側面があるから.
##「ならば」の日常語と論理学との使い方の違い
pとqが命題であるとき,
「pならば(if p, then q,⇒)q」の否定文を「p⇒￢q」
と言う人がとても多いが,これは誤りで,
「p⇒q」が主張していることは,「pが真のときはqも真になる」ということだけであって,
pが偽の場合は,qについてはどちらでも構わない.
したがって,
「p⇒q」の否定文は「pかつ(and,∧)￢q」

* 日常的な例  
「体温が38℃以上ならば病院に行く」  
というと,  
体温が37℃で病院に行く  
のは除外されるように聞こえる.  
しかし,数学の論理としては,37℃で病院に行っても構わない.

ある人が「この仕事が成功しなければ辞表を出す」と言ったとする.
命題 p =「この仕事が成功しない」  
⇒ ならば  
命題 q =「辞表を出す」

この言葉が偽となるのは
「仕事が成功しない」(pが真)にもかかわらず,「辞表を出さない」(qが偽)の場合のみ.
「仕事が成功しない」(Pが真)かつ「辞表を出す」(qが真)ならば,約束を守ったのであるし,
「仕事が成功」(Pが偽)かつ「辞表を出さない」(qが偽)ならば,やはりその人は嘘を言わなかったことになる.
「仕事が成功」(Pが偽)かつ「辞表を出す」(qが真)場合も,嘘を言ったとはみなされないであろう.  
すなわち,先の言明では「仕事が成功」(Pが偽)の場合のことは何も言っていないのであるから,辞表を出しても出さなくても真である.  

「この仕事が成功しなければ辞表を出す」は, 「仕事が成功 (Pが偽)と 辞表を出す (qが真) の少なくとも一方が正しい,の短い言い換えであり,
論理学における「p ならば q」は,「p でない,と q である,の少なくとも一方が正しい」の短い言い換えなのである.

数学用語としての,"ならば"は時間経過を含まない.
"ならば"という言葉は日常経験では因果関係を表す.  
因果関係である原因と結果は,常識として,原因は結果の前にあり,時間経過も含んでいることに注意.
記号論理用語の"ならば"は数学として因果関係を表さなくてもよい.

"あるいは"は日本語としても時間経過を含んでいない.
***
## 必要条件,十分条件 の覚え方
それは最低限「必要」なこと
それだけやれば「十分」 
必要も積もれば十分となる  
***
# トートロジー
トートロジーとは,内容を問わず形式的にいつでもただしくなるほかはない命題.
一般に,ある複合命題が,その中に含まれている命題変数の真偽のいかんに関わらず,いつでも正くなるとき,その複合命題をトートロジー(恒真式)という.
トートロジーを同義語反復ということがあるが,内容の如何に関わらずいつでも形式として正しいということになれば,トートロジーを「正しさ」の1つの判断基準として採用することができる.
すなわち,万人が認める正しさとはその命題がトートロジーになっていることだとする.  

## 演繹とは
正しいと認めた事実(公理)から出発して論理を組みあげ,物事を理解する考え方のこと
ある一定の事柄を真であると認め,それだけを根拠にして様々なことを論理的に証明するという考え方.
演繹と言う思考法は,多様な個人の間で正しさを共有する可能性を探るためのもの.
***
## 三段論法とは
p が真 と, p⇒q が真 であることから, q が真 がわかる
p⇒q が真 だからといって, p が真 と q が真 は無関係.
冷静さを失うとこれらのことを混同しがちなので注意.
***
## 公理もしくは公準  
推論の基礎となる規則のこと.
個人の間で共有できる最低限の正しいこと.
数学では1番初めに,いくつかの命題を証明なしに真であると認めて議論を展開していく,特別な命題のこと
***
## 定義とは
対話を誤解なく進めるための言葉の取り決め
***
定義や公理に含まれないことは,すべて論理的に証明されなければならない.
すべての命題を公理と認めてしまえば何も証明しなくて済むだろうと思われるかもしれない.
しかしそれは,何を正しいと思っているのかを私たちひとり一人が過不足なく完全に共有していると仮定するようなもの.
この仮定は,他者が独自の価値観や信念を持つことを認めない危険な考え方だと言える.
個人の間で共有できている（正しいこと）は少ないと仮定する方が現実的.
それはまた,他者の考え方を尊重するという事でもある.
したがって,公理と定義だけから出発して,論理的に議論を進めていけば,議論の参加者全員が納得できる結論を得られるだろう.
***
### 参考文献
1) 戸川, 中嶋, 杉原, 野寺:『[インターネット時代の数学](http://amzn.to/1KpdK1i)』共立出版, 1997.
2) 芳沢光雄:『[算数・数学が得意になる本](http://amzn.to/1L0SCZF)』講談社現代新書,2006.
3) 結城浩:『[数学ガール/ゲーデルの不完全性定理](http://amzn.to/1igutaD)』ソフトバンククリエイティブ,2009.
4) 竹山美宏:『[日常に活かす数学的思考法](http://amzn.to/1fTmIWa)』化学同人, 2011.
5) 瀬山 士郎:『[なっとくする数学の証明](http://amzn.to/1hRfEeE)』講談社, 2013.
6) 沢田 允茂:『[現代論理学入門](http://amzn.to/1iNlFtc)』岩波書店, 1962.
Bluetooth 4.2 サマリー

# Bluetoothって何？
近接距離（大体数mから数十m程度）が主用途の無線規格（OSI参照モデルの、第1層）
IEEE802.15.1とも表せる。

# Bluetooth4.2
## Bluetooth4.2の新機能
- IPv6/6LoWPANを用いてインターネット接続可能に

![ipv6](http://4.bp.blogspot.com/-GC5FznL4dx8/VIqBUVDkiNI/AAAAAAAAGWg/ie_cZrG8AU8/s1600/snap7606_m.png)

- スループットが2.5倍高速になり、650kbpsに

![speed](http://www.bluetooth.com/SiteCollectionDocuments/4-2/img/bars.jpg)

＊BLE（Bluetooth Low Energy）は、Bluetooth4.0の省電力化規格であり、Bluetooth4.2とは異なる

## Bluetooth4.2とIoTの関係

今までのBluetoothはデバイス同士の近距離通信に限られており（IPを持ってない為）、一方でWiFiはインターネットに繋げられるものの、電力消費が大きく、省電力のセンサデバイスを個別にインターネットに繋げることは容易ではありませんでした。

それが、Bluetooth4.2で6LoWPANの利用が可能になり、低消費電力でインターネットにそこそこの通信速度で直接繋げることが可能になったわけです。

「世にあふれるモノ1つ1つが、インターネットと簡単に直接通信可能になる = IoT時代の到来」、という図式のようです

http://eetimes.jp/ee/articles/1501/26/news063.html

# 参考
http://qiita.com/kazuph/items/966b0652ac4144be5aa0
http://qiita.com/kazuph/items/6235c090cbfa18db3347
http://www.bluetooth.com/SiteCollectionDocuments/4-2/bluetooth4-2.aspx
Sublime Text 3 Documentation: column_selection 長方形選択

# Column Selection　長方形選択について
[Contents](http://qiita.com/Akki20/items/09c8e3635c5e01e6f38a)

## Overview　概要
Column Selection can be used to select a rectangular area of a file. 
長方形選択はファイル内の文章を長方形に選択することができます。
Column selection doesn't operate via a separate mode, instead it makes use of multiple selections.
長方形選択は別々のモードでは動かない代わりに、複数選択を利用します。
You can use additive selections to select multiple blocks of text, or subtractive selections to remove a block.
ファイル内の文章を複数選択することができますし、選択から外すこともできます。

## Using the Mouse　マウスを使った方法
Different mouse buttons are used on each platform:
使っている環境によって、マウスのボタンは違います。

### OS X
Left Mouse Button + Option または Middle Mouse Button
Add to selection: Command
長方形選択箇所を追加するとき: Command
Subtract from selection: Command+Shift
長方形選択箇所を除外するとき: Command+Shift

### Windows
Right Mouse Button + Shift または Middle Mouse Button
Add to selection: Ctrl
長方形選択箇所を追加するとき: Ctrl
Subtract from selection: Alt
長方形選択箇所を除外するとき: Alt

### Linux
Right Mouse Button + Shift
Add to selection: Ctrl
長方形選択箇所を追加するとき: Ctrl
Subtract from selection: Alt
長方形選択箇所を除外するとき: Alt

## Using the Keyboard　キーボードを使った方法
### OS X
Ctrl + Shift + Up
Ctrl + Shift + Down

### Windows
Ctrl + Alt + Up
Ctrl + Alt + Down

### Linux
Ctrl + Alt + Up
Ctrl + Alt + Down

# 参考サイト
http://www.sublimetext.com/docs/3/column_selection.html
UnityOSCではまる

oFなどの外部プログラムからOSCを受け取ってUnityを動かす場合、[UnityOSC](https://github.com/jorgegarcia/UnityOSC)が有名っぽいので使ってみたがハマったのでメモ。

# 同じイベントを拾い続ける

マニュアルを読む限り、`Update()`の内部で`OSCHandler.Instance.UpdateLogs()`を呼んで新しいメッセージを取得しろということらしいが、内部的にはキューになっておらず`UpdateLogs()`を呼んでも古いメッセージが残ったままになっているので新着メッセージがどれだか分からない。Timestampを使おうと思っても全部0になっているので比較できない。

（このへんは[Issue](https://github.com/jorgegarcia/UnityOSC/issues/6)として取り上げられている模様）

# メッセージをこぼす

内部構造上`UpdateLogs()`で更新されるメッセージは最後に到着した1つだけなので、更新の間にメッセージが複数到着すると最後のメッセージ以外は取りこぼす。センサーデータとかだとこれは致命的。

# OSCMessageとOSCBundle

ofxOscSenderを使ってメッセージを送ると、単発のメッセージでもOSCBundleとして投げられるっぽいので、受け手側はふつうのOSCMessageとして受けようとするとはまる。

# 対策

本体直してプルリクしろよという話なのですがとりあえずのワークアラウンドとして。

UnityOSC側：

```csharp:OSCHandler.cs
public class OSCHandler : MonoBehaviour
{
	public event PacketReceivedEventHandler PacketReceivedEvent;

	void OnPacketReceived(OSCServer server, OSCPacket packet)
	{
		// パケット受信時にイベントを投げる
		PacketReceivedEvent(server, packet);
	}
```

使用するController側：

```csharp:OSCController.cs

using UnityEngine;
using System.Collections;
using UnityOSC;

public class OSCController : MonoBehaviour {

	private Queue queue;

	void Start () {
		queue = new Queue();
		queue = Queue.Synchronized(queue);

		OSCHandler.Instance.Init();
		// パケット受信時のイベントハンドラを登録
		OSCHandler.Instance.PacketReceivedEvent += OnPacketReceived;
	}

	void OnPacketReceived(OSCServer server, OSCPacket packet) {
		// 来たパケットをキューに積んでおく
		queue.Enqueue(packet);
	}

	void Update () {
		while (0 < queue.Count) {
			OSCPacket packet = queue.Dequeue() as OSCPacket;
			if (packet.IsBundle()) {
				// OSCBundleの場合
				OSCBundle bundle = packet as OSCBundle;
				foreach (OSCMessage msg in bundle.Data) {
					// メッセージの中身にあわせた処理
				}
			} else {
				// OSCMessageの場合はそのまま変換
				OSCMessage msg = packet as OSCMessage;
				// メッセージの中身にあわせた処理
		}
	}
}
```

一応これでopenFrameworksからUnityへのメッセージ送信はうまく行きました。
var_dumpに色が付かない　そんな時

PHPでvar_dumpして、その結果をブラウザで確認した際に色がついていない。
見覚えのある赤い文字ではなく、プレーンテキストで出力されることがある。

会社で用意されている共有の開発サーバーやXAMPPなどに頼っている私のような弱小エンジニアは、当たり前だと思っていることにも実は設定が必要だったことを、改めて自分で開発環境を建てる時などに知るのである。

#Xdebugのインストール

調べたところによると、Xdebugというものが必要らしい。
ということで、入れてみる。

```
sudo pecl install Xdebug
```

#php.iniの編集

改めて、php.iniを開き、以下の行を追加

```lang:php.ini
extension=xdebug.so
```
##php.iniの場所が分からない時の調べ方
var_dumpで色がつかないと気づかれたのであれば、var_dumpしたそのファイルで以下の行を記述し、再度ブラウザで表示させてみる。

```lang:php
phpinfo();
```
Loaded Configuration File の記述部分にphp.iniの場所が書いてある。

#警告文が出てきた場合

このままであると、phpの何かしらのコマンドを実行したタイミングでとある警告文が出てくる。
私の場合、laravelを使用していたため、php artisan env を実行したタイミングで出た。
以下のような警告文である。

```
PHP Warning:  Xdebug MUST be loaded as a Zend extension in Unknown on line 0
```
```
XdebugはZend extensionとして読み込まれなければなりません。
```
鵜呑みにして書き換えるだけ。

php.iniの以下の記述を修正

```lang:php.ini
extension=xdebug.so
```
↓

```lang:php.ini
zend_extension=xdebug.so
```

に書き換える。

参考：
http://d.hatena.ne.jp/tenkoma/20071020/1192906729
6LoWPANについて

# サマリー


- 6LoWPANは、低電力/IPv6規格なので、センサデバイスネットワークに最適
- Bluetooth4.2はIPv6/6LoWPANをサポートし、センサデバイスを直接インターネット接続可能に



# 6LoWPAN（IPv6 over Low-power Wireless Personal Area Networks）とは

IETFが策定した、[IEEE802.15.4](http://qiita.com/takuma_yoshida/items/dfdd637b7675813219cd)の規格にIPv6のパケットを通せるようにした通信プロトコル（OSI参照モデルの、第3層）。従来規格のイーサネット/Wi-Fi/Sub-1GHz ISMなども使えます

![6LoWPAN Network](http://www.ti.com/lsds/media/images/wireless_connectivity/20979_6LowPan_mesh.jpg "http://www.tij.co.jp/lsds/ti_ja/wireless_connectivity/6lowpan/overview.page　より")


## IPv6と何が違うの？

IPv6のMTU（最大データ量）は1280B（ヘッダーは40B）です。
一方、物理層の規格であるIEEE802.15.4では、フレームサイズが127Bであり、通常のIPv6のデータ量では大きすぎて入りません。そこで以下に挙げる通り、「そもそも不要なデータ削除して圧縮する」、「入りきらない分は分割する」の2方面作戦で対応しています。

- IPv6のヘッダー圧縮: prefix / version など
- 分割送信（フラグメント化）

＊IEEE802.15.4gではフレームサイズが2047Bであり、IPv6のMTUがまるっと入ってしまいます。つまり6LoWPAN要らなくなる疑惑...

# 参考
http://www.tij.co.jp/lsds/ti_ja/wireless_connectivity/6lowpan/overview.page
http://www.skyley.com/about_stack_20130229.pdf
docomo APIで雑話を楽しんでみるAJAXサンプル

## はじめに
HTMLのサンプルが少なかったため、AJAXのサンプルをまとめました。

## docomo APIとは
[docomo Developer support](https://dev.smt.docomo.ne.jp/)で提供しているAPI。
会員登録後、画像認識、音声合成、文字認識などいろいろ試せます。

[API一覧はこちら](https://dev.smt.docomo.ne.jp/?p=docs.api.index)

## サンプル
### HTML（jQueryを読み込んで、あとはお好きに）
```html
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
```

### JavaScript
```js
var apiUrl = 'https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=';
var apiKey = '<提供されたKey>';
var api = apiUrl + apiKey;

var apiJson = {
    'utt' : '' // ←ここに雑話キーワードを入れる。テキスト入力ができるといいかも
}

// API送受信関数
function callBot(){
    $.ajax({
        type : 'post',
        url : api,
        data : JSON.stringify(apiJson),
        contentType: 'application/JSON',
        dataType : 'JSON',
        scriptCharset: 'utf-8'
    })
    .done(function(data){
        console.log(data.yomi); // ←いろんな雑話が返ってくる
    })
    .fail(function(data){
        console.log(data.responseText); // ←エラー時の処理
    })
}

// あとは色んなタイミングで実行
callBot();
// 例：やっほー => やっほっほー
// ※毎回同じとは限らない。結構いろんな回答が返ってきます
```

## 感想
上記さえできてしまえば、いろいろカスタマイズできると思います。
例えば、HTML5 Web Speech APIを使用して、キーボード入力無しで雑話をできるチャットを作ったり。
（ちなみに、現在作成中）

他にも色んなAPIがあるので、複合しておもしろいアプリが作れますね！
【iOS】開発スピードアップ!! Xcodeお役立ちTips


自分用にまとめてたので公開します
・よく使う便利なショートカット
・デバッグを高速化できるBreakPointの活用法

## よく使う便利なショートカット

###【shift + Command + O】プロジェクト内のファイル検索機能
ファイル増えてきたらね、必須です。
![スクリーンショット_2015-05-11_12_31_44.png](https://qiita-image-store.s3.amazonaws.com/0/53303/6130ad4f-27b1-34da-0ac0-6c15543c2b14.png "スクリーンショット_2015-05-11_12_31_44.png")

###【Command + Control + ←】履歴を戻る /【Command + Control + →】 履歴を進む
もしくは【3本指←へスワイプ(履歴を戻る) / 3本指→へスワイプ(履歴を戻る)】


###【Command + Control + j】カーソル下にある変数/メソッドの定義場所に移動
もしくは【Command + マウスクリック】でも移動可能！

###【Ctrl + 6】 表示中のクラスのメソッド一覧
テキスト入力でインクリメンタルサーチ(絞り込み)も可能。

###【Command + F】ファイル内検索 /【Shift + Command + F】全ファイル検索
虫メガネクリックで検索履歴もたどれます。
![スクリーンショット_2015-05-11_12_47_48.png](https://qiita-image-store.s3.amazonaws.com/0/53303/dcf480e6-4a7c-3bac-56a4-61db411ca146.png "スクリーンショット_2015-05-11_12_47_48.png")

###【Command + 0】左ペイン出し入れ / 【Command + alt + 0】右ペイン出し入れ
ディレクトリ構造とか表示してくれているアレのことです
画面が狭いときにはさっと出し入れしましょう

###(ファイル名、検索結果、定義等を)【ダブルクリック】新しいウィンドウで開く
ファイルを比較したり、類似ファイルを作成するときは便利

もっとショートカットを知りたい方はこちらが参考になるかと
http://qiita.com/snow_richisland/items/0df7764938e59a8572b3

## Break Pointの活用
コードを修正してからビルドするまでの時間・・イライラしますよね。
BreakPointをうまく使えば、再ビルドしなくても様々な検証が可能です！
これを知ってるのと知らないのとでは開発スピードに雲泥の差が出ます。
機能盛りだくさんのようですが、下記2つだけでも最初は十分ではと。

### アプリ起動中に変数の編集ができる
Breakすると、画面左下に現在保持している変数と中身(簡易版)が表示されます。
右クリック→ EditValue で値の編集が可能です。
![スクリーンショット_2015-05-11_14_02_18.png](https://qiita-image-store.s3.amazonaws.com/0/53303/858e07ee-723e-26dc-1512-b3af6ecc1ab0.png "スクリーンショット_2015-05-11_14_02_18.png")

※画面の「SW」という変数は画面幅を指定するものですが、
　値を+100したところ、見事にはみ出て表示されました!

**分岐ルートを強制的に変えたいとき**も便利ですね！

### BreakPointは編集できる！

BreakPoint上でNSLogを書いたり、メッセージをログに出力する記述ができます！
NSLogを書いてもう1回ビルド・・なんて手間にサヨナラしましょう！

![スクリーンショット 2015-05-11 20.29.33.png](https://qiita-image-store.s3.amazonaws.com/0/53303/de724947-45b5-fa94-40ed-9d6fde6f3b5c.png "スクリーンショット 2015-05-11 20.29.33.png")


BreakPointの上で右クリック → Edit BreakPoint

#### Condition - ストップする条件を指定

`path==@""`
pathの中身が空のときだけストップします

#### DebuggerCommand - NSLogを出す
DebuggerCommandを選択して、
`expr (void)NSLog(@"パスは %@",path);`

```Log
パスは sample
```

#### LogMessage メッセージを記述
`パスは@path@`

```Log
パスは@"sample"
```

ストリングであれば出力可能ですが、NSArray等では`1 object`のようにしか表示されないので、中身がみたければDebugger Commandを使いましょう。


参考：
http://blog.oneworld-inc.com/entry/2013/03/12/131929
http://qiita.com/edo_m18/items/1ad3f81a3081f34d6151
Qiitaのグラフをおっきくする

既知でしょうか？

![Screen Shot 2015-05-11 at 20.51.52.png](https://qiita-image-store.s3.amazonaws.com/0/73113/9bd2a9a8-9050-23a2-28a4-2eb5778c6e51.png)

### やり方
* マウスオーバーで円グラフを拡大
* マウスアウトさせて小さくなる前にマウスオーバーで更に円グラフを拡大

上記を繰り返し

### なぜやったのか
EC-CUBE3のデザイン融合した後のRoutingが通るかどうかのUnitTestを回してる最中、  
なんかポインポインなるなー楽しいなーと思い、高速でポインポインさせていたらなった。
Windows でも homesick で dotfiles 管理がしたい！

# homesick について

[homesick](https://github.com/technicalpickles/homesick) は Ruby で書かれた dotfiles 管理の便利ツールです。
Windows 以外での動作については [Qiita の記事](http://qiita.com/ktz47/items/650ff995e6906bdecc17) 参照のこと。

で、Ruby で書いてあるのなら Windows でも動くんじゃないか・・・と思って試したところちょっとだけ駄目だったので修正してみた。

# 修正点

案の定というかなんというか、symlink の作成でこけていた。FileUtils.ln_s が Windows だと not implemented だよ、と返すので上手く動かない。

適当にググると、[適当な対処の仕方](http://stackoverflow.com/questions/21511347/how-to-create-a-symlink-on-windows-via-ruby/27969841#27969841) が見つかる。

このままだとなんか上手く行かないのでちょっとアレンジして github から Fork してみた。[kounoike/homesick](https://github.com/kounoike/homesick)

# 使い方

[gem installでGitHubリポジトリにある最新版をインストールする](http://qiita.com/yuku_t/items/5ab4fbe404b718999a35) にあるように github から Gem をインストールするには一手間かかる。

ということで、以下のようにする。

```shell-session
> gem install specific_install
> gem specific_install -l https://github.com/kounoike/homesick.git
```

これで、以下のように `homesick symlink` がとりあえず動作する。

```
C:\Users\kounoike>homesick symlink dotfiles
     symlink  C:/Users/kounoike/.homesick/repos/dotfiles/home/.gvimrc to C:/Users/kounoike/.gvimrc
     symlink  C:/Users/kounoike/.homesick/repos/dotfiles/home/.vimrc to C:/Users/kounoike/.vimrc
```

# 追記

忘れてた。mklink を呼ぶ都合上、管理者権限で立ち上げたコンソールで `homesick symlink` すること。
Ruby(aws-sdk)から、S3にファイルをアップロードする

`aws-cli` でやろうとすると、 Python をインストール(しかも`2.6.3`以降とか求められたりする…)する → pip(Pythonのパッケージ管理ツール)をインストールする → `pip install awscli` と手順を踏まなければならず、なかなか面倒だったりするので…

* http://docs.aws.amazon.com/cli/latest/userguide/installing.html

Ruby＋`gem install`なら、ワンステップでinstallが終わる(Ruby＋gemが入ってる前提だけど…)ので、こちらの方が手早い場合が多い。(Rubyist的には)

```sh
$ gem install aws-sdk
$ irb -r 'aws-sdk'
```

```ruby
bucket_name = 'my-bucket'
s3_path = 's3-path/to'
upload_file_path = 'path/to'
file_name = 'file'

AWS.config(
  :access_key_id => 'YOUR_ACCESS_KEY_ID',
  :secret_access_key => 'YOUR_SECRET_ACCESS_KEY')

s3 = AWS::S3.new
bucket = s3.buckets[bucket_name]
o = bucket.objects[s3_path + '/' + file_name]

o.write(file: upload_file_path + '/' + file_name)
```

必要な場所を適当書き換えてネ。
IEEE802.15.4の仕様について

IEEE802.15.4は[IEEE](http://web.archive.org/web/20080209192052/http://www.ieee802.org/15/pub/TG4Expert.html)により策定された無線規格（OSI参照モデルの、第1層）

特徴として

- ナローバンド（狭帯域）: 使用帯域を小さくして、多数のノードがあっても輻輳を抑える。IoT時代に多数の端末が無線を使う時に有効
- 16ch同時通信可能
- ノイズに強い: 変調方式にO-QPSK(cdmaOneと同じ)。拡散方式にDSSSを採用
- 世界中で利用可能な2.4GHz周波数帯
- 250kbpsの伝送速度: 従来のWiFiなどと違い、通信速度を抑制している。高伝送速度を必要としないセンサーデバイスに最適化
- 低消費電力: [32mA前後](http://www.nxp.com/documents/application_note/JN-AN-1001.pdf)
- 高セキュリティ: AES-128を採用

シンプルなセンサデバイスで、無線使いたい場合にとても嬉しい感じですね。ZigBeeにも使われているそうです

# 参考
http://www.ieee802.org/15/pub/TG4.html
http://en.wikipedia.org/wiki/IEEE_802.15.4
http://monoist.atmarkit.co.jp/mn/articles/1003/03/news101.html
http://tocos-wireless.com/jp/tech/802_15_4.html
SSH : 踏み台サーバを経由してSSH接続する設定ファイルの書き方いろいろ

**ローカルユーザはニックネームで作っていたが踏み台と接続先のサーバでは本名でユーザが作られていて、どう設定ファイルを書けば繋がるのか試してみた**

### **前提条件**
ローカルのユーザ名 ： taiga
踏み台のユーザ名 ：　yamada-taro

踏み台サーバのIPアドレス : XXX.XXX.XXX.XXX
port : AA
踏み台を経由して接続するサーバのIPアドレス　： YYY.YYY.YYY.YYY
port : AA

秘密鍵（ローカル） : ~/.ssh/id_rsa
秘密鍵（踏み台） : ~/.ssh/id_rsa

### **サーバの接続イメージ**
![接続イメージ図](https://qiita-image-store.s3.amazonaws.com/0/53164/113f95c4-404d-8fff-37c8-ac2382371d2f.jpeg)

`ssh hoge` と入力してlocalから接続先につなげる場合のssh/configの設定

### **パターン１**
```bash:~/.ssh/config
host hoge1
    user yamada-taro
    hostname YYY.YYY.YYY.YYY
    port AA
    identityfile ~/.ssh/id_rsa
    ProxyCommand ssh -i ~/.ssh/id_rsa XXX.XXX.XXX.XXX nc %h %p
```

### **パターン２**
```bash:~/.ssh/config
host hoge2
    user yamada-taro
    hostname YYY.YYY.YYY.YYY
    port AA
    ProxyCommand ssh -i ~/.ssh/id_rsa XXX.XXX.XXX.XXX -l yamada-taro nc %h %p
```

### **パターン３**
```bash:~/.ssh/config
host fumidai
    user yamada-taro
    hostname XXX.XXX.XXX.XXX
    Identityfile ~/.ssh/id_rsa
    port AA

host hoge3
    user yamada-taro
    hostname YYY.YYY.YYY.YYY
    port AA
    ProxyCommand ssh fumidai nc %h %p
```

### **繋がらないパターン**
```bash:~/.ssh/config
host hogex
    user yamada-taro
    hostname YYY.YYY.YYY.YYY
    port AA
    ProxyCommand ssh -i ~/.ssh/id_rsa XXX.XXX.XXX.XXX nc %h %p
```

※「yamada-taro」ではなく「taiga」として接続しようとするので繋がらない
stub, mocksでインスタンスメソッドの返り値を指定しようとしたときにハマった話

# stub, mocksでインスタンスメソッドの返り値を指定しようとしたときにハマった話。

Object.stub(:method).and_return(return value)で
depricate warningがでる。

ここ見る（mocksを使えばいい）
http://qiita.com/runamoon@github/items/1113656a02c0552cbba1

mocksがわからないのでここ見る（rspec-mocksのレポジトリ）
https://github.com/rspec/rspec-mocks

doubleが何なのかわからない

次にここ見る（テストdoubleについての説明）
http://web-k.github.io/blog/2012/10/02/rspec-mock/

まとめるとdoubleとはダミーオブジェクトを作成するもの。なんでdoubleという命名かはあまりわからない。

自分のよう”後からテストを書く人間”にとっては無関係。
そんな怠惰な人間にとって必要なのは、

allow(Object).to receive(:method) {return value}
ではなく、
allow_any_instance_of(Object).to reveive(:method) {return value}
だった。

ダミーオブジェクトでもないObjectに前者の記述をしたところで無視されてハマっていた。
Unityのif (Application.platform == RuntimePlatform.Android)と#if UNITY_ANDROIDどっちがいいか

##Unityのif (Application.platform == RuntimePlatform.Android)と#if UNITY_ANDROIDどっちがいいか

結論
```#if UNITY_**** ```
みたいなプラットフォーム依存コンパイルを使ったほうがいいです。

理由
\#ifだとUnityEditorから再生してもifの中にいけるから。
if(Application.platform==RuntimePlatform.Android)でUnityEditorから再生するとifの中にいけない


if(Application.platform==RuntimePlatform.Android)は手軽にかけるから好きだけどね。
Microsoft Office 2011 for Macが正常に起動しない場合に試したこと

Yosemiteをクリーンインストールしてあれこれしていたら、なぜかOffice 2011 for Mac（Office 365版）が全く立ち上がらなくなり、それを解決した際のメモ。

## 症状

* Wordがスプラッシュ画面で固まる
* 起動したとしても即時クラッシュ
* Excelは起動して数秒でフリーズしレインボーカーソル
* PowerPointは文字入力まではできるのだが、フォントメニュー表示のタイミングでレインボーカーソル

## 試したこと

* 追加インストールしたフォントの全削除　→　ダメ
* 重複フォントの削除　→　ダメ
* キャッシュファイル・設定ファイルの削除　→　ダメ
* Onyxでフォントキャッシュの削除　→　ダメ
* セーフブート　→　セーフブート中は立ち上がるが、通常起動に戻すとダメ
* 再インストール　→　ダメ

## 結局の原因

何となくFinderの日本語フォルダ名が嫌になって、[この記事](http://qiita.com/is0me/items/0b7b846f1f0860629950)を参考にフォルダを英語表記にしていたのが原因の可能性が高い。

`SystemFolderLocalizations.strings`を元に戻したところ、あっさり起動。
Unity5系 アセットバンドルメモ

# ■Unity5.0

**・１つのアセットバンドルにまとめる事ができる。**

```lang:filename
    [MenuItem("Assets/Export Unity5.x Build AllAssetBundle")]
    static void ExportAllAssetBundleIntoOneFile()
    {
        Debug.Log("Target=" + EditorUserBuildSettings.activeBuildTarget.ToString());

        // PlatForm名をそのまま出力フォルダとして使用する。
        string OutPutPath = Application.streamingAssetsPath + "/" + EditorUserBuildSettings.activeBuildTarget.ToString();

        // 指定フォルダ存在チェック
        if (Directory.Exists(OutPutPath) == false)
        {
            Directory.CreateDirectory(OutPutPath);
        }

        string[] allbunlename = AssetDatabase.GetAllAssetBundleNames();

        AssetBundleBuild[] BundleData = new AssetBundleBuild[1];
        BundleData[0].assetBundleName = EditorUserBuildSettings.activeBuildTarget.ToString() + "_Bundle";
        string[] allbundlestring = new string[allbunlename.Length];
        for (int i = 0; i < allbunlename.Length; i++)
        {
            string[] assetname = AssetDatabase.GetAssetPathsFromAssetBundle(allbunlename[i]);
//            allbundlestring[i] = allbunlename[i];
            allbundlestring[i] = assetname[0];
        }
        BundleData[0].assetNames = allbundlestring;


        // プラットフォーム名(Android・iOS)のマニフェストのアセットバンドルが作られる。
        BuildPipeline.BuildAssetBundles(OutPutPath, BundleData,BuildAssetBundleOptions.None, EditorUserBuildSettings.activeBuildTarget);
        Debug.Log("AllFileIn End");
    }
```

**・使ってないアセットバンドル名は消さなければならない**
　AssetDatabase.GetAllAssetBundleNames()にヒットする。
　消し方は右下アセット名入力のところのRemove UnUsed Names で削除する事

**・フォルダにもアセットバンドル名を付けることができる。**
　フォルダにAssetBundle名をつけてAssetBundleを作成した場合、
　フォルダ直下にあるサブフォルダも含めた全てのファイルが
　このAssetBundleに含まれる。


# ■5.3.0f4
**・*.mp3、*.wavのLoadTypeがStreamingの時、アセットバンドル命名でエラーになる**
　*.mp3、*.wavのLoadTypeがStreamingの時、
　AssetImporterのassetBundleNameを設定しようとすると下記エラーになった。

　Cannot create resource file for asset: '**/**/**/**/**/**/****.wav
　Connect to CacheServer 
-- No matching cache server file found on server '**/**/**/**/**/**/**.wav

　●解決方法
　*.mp3、*.wavのLoadTypeを**Streaming**から**DecompressOnLoad**にして
　再度**Streaming**に戻すとエラーが起こらなくなった。

　*.mp3、*.wavが中途半端な状態だったのかな、わからんけど一応解決・・・いや・・してなかった
ターミナルのカーソルをスイスイ動かしたい

rails c上でも使えます
長いラインでも移動が楽にできます

|キー|動き|
|---|---|
|ctrl+A|カーソルを行頭に移動|
|ctrl+E|カーソルを行末に移動|
|esc+B|左方向へ文字毎に移動|
|esc+F|右方向へ文字毎に移動|
|ctrl+U|カーソルより前を消す|
|ctrl+K|カーソルより後ろを消す|
|ctrl+Y|↑で消したものをペースト|
textra apiを使って英日翻訳

#作業手順#
2. PHPを動かすためにWebサーバを用意する。（[MAMP](https://www.mamp.info/en/downloads/)なら便利）
4. [API一覧](https://mt-auto-minhon-mlt.ucri.jgn-x.jp/content/mt/)のURLをクリックすればパラメータとコードが見られる。ここでは英日翻訳APIを試すので、『みんなの : 英語 - 日本語』を使う。<br>
3. サンプルコードをhtdocs以下に配置する。<br>
4. 以下のパラメータに与えを入れる<br>
define("NAME",   "");<br>
define("KEY",    "");<br>
define("SECRET", "");<br>
define("URL",    "");<br>
1. [oauth-php](https://code.google.com/p/oauth-php/downloads/detail?name=oauth-php-175.tar.gz&can=2&q=)ライブラリもhtdocs以下に設置し、ソースの中身を書き換える。
include("oauth-php/library/OAuthStore.php");
include("oauth-php/library/OAuthRequester.php");
5. Default原文（"Hello World!!"）は翻訳されない場合があるようで、違う英語に置き換えましょう。<br>
~~"text" => "Hello World!!",~~<br>
"text" => "I live in Japan.",<br>
<hr/>
(終わり)
他のブランチへ特定のコミットをマージする

<b>cherry-pick</b>を使用すると、他のブランチをマージするのではなく、
特定のコミットだけをマージする事が出来る。

```
$ git cherry-pick
usage: git cherry-pick [options] <commit-ish>...
   or: git cherry-pick <subcommand>

    --quit                end revert or cherry-pick sequence
    --continue            resume revert or cherry-pick sequence
    --abort               cancel revert or cherry-pick sequence
    -n, --no-commit       don't automatically commit
    -e, --edit            edit the commit message
    -s, --signoff         add Signed-off-by:
    -m, --mainline <n>    parent number
    --rerere-autoupdate   update the index with reused conflict resolution if possible
    --strategy <strategy>
                          merge strategy
    -X, --strategy-option <option>
                          option for merge strategy
    -x                    append commit name
    --ff                  allow fast-forward
    --allow-empty         preserve initially empty commits
    --allow-empty-message
                          allow commits with empty messages
    --keep-redundant-commits
                          keep redundant, empty commits

```

例えば、masterブランチに特定のコミットをマージしたい場合はこんな感じ。

```
$ git checkout master
$ git cherry-pick 965e5f980e4d7ee848c2163fc75def15d88d3524 
```
Haml 初入门


从一开始,咱们说好一个事情, 就是等你看完这个介绍之后, 最好能够拿过来一个`erb` 文件,开始试着把它改成`haml` 格式. 趁热打铁,要练习. 可能刚开始的时候觉得很怪, 不过熟悉了之后会发现它会快起来~


#开始

首先,` haml` 它是作为一个` gem` 的形式存在的. 只要是 ruby 的项目,都可以通过` bundle` 或者` gem` 命令来安装这个 gem. 本文假设你在使用` rails` 框架. 当然可以套用到任何需要视图的 ruby 项目中. 这里, 你可以尝试的就是把` views` 下的文件全部替换成` haml` 格式的文件.

> app/views/account/login.html.erb → app/views/account/login.html.haml

##怎么转换

让我们来尝试把一些简单的`erb` 代码段转换为` haml`.

- ERB

```
<strong><%= item.title %></strong>
```
- Haml

```
%strong= item.title
```

在` haml` 中,当我们书写一个`html` 标签的时候,需要一个**百分号 %** 然后跟` tag` 名,像这样子的: `%string`, `%div`, `%body`, `%html`. 还有其他任何你想要的 tag. 之后,是一个`等号 = `. 这样就是告诉` haml`, 需要执行一段` ruby 代码`,然后把结果值作为 tag 的内容显示.和 ERB 不一样的是, Haml 将会会自动的判断是否需要换行,格式化 tag.

## 添加属性

简单的 tag 好说, 而那些复杂的需要追加属性到 tag 上的转换怎么写呢?

- HTML
```
<strong class="code" id="message">Hello, World!</strong>
```
- Haml

```
%strong{:class => "code", :id => "message"} Hello, World!
```

可以看出,属性就是作为一个` hash` 传递给这个 tag 的.然后这里并没有使用`=`,即后面的` hello world` 就只是作为 string 来对待,而不是` ruby code`.
由于` class` 和` id` 属性都是非常常见的,所以我们可以采取更加简单的方式来书写:

> %string.code#message hello, world!

看到了吗, `.code` 也就是类似 css 里的类 rule, 而`# message` 就是好比 id 类.
另外由于` div` 太过常见.我们完全就可以省略`%`号了. 这样:

> .content Hello, world!

对应生成的 html 就是:

> <div class='content'>Hello, World!</div>

#进阶


看看这样的` erb` 文件:

```
<div class='item' id='item<%= item.id %>'>
  <%= item.body %>
</div>

```

怎么转换呢?

> .item{:id => "item#{item.id}"}= item.body

酷吧! 嵌套在 haml 就是通过空白来表示的.

这个呢?


```
<div id='content'>
  <div class='left column'>
    <h2>Welcome to our site!</h2>
    <p><%= print_information %></p>
  </div>
  <div class="right column">
    <%= render :partial => "sidebar" %>
  </div>
</div>

```


转换成 haml 之后的样子是这样的:


```

#content
  .left.column
    %h2 Welcome to our site!
    %p= print_information
  .right.column
    = render :partial => "sidebar"

```

你是不是爽到了.就这么酷.

但是还有更多的需要学习呢. 看这里 http://haml.info/docs/yardoc/file.REFERENCE.html ;
[JAWS-UG CLI] SNS:#7 CloudWatch Logsからの通知 (IAM変更の検知)

AWS CLIを利用して、CloudWatch Logsからの通知用トピックを作成してみます
。


前提条件
========


SNSへの権限
-----------

* SNSに対してフル権限があること。


AWS CLIのバージョン
-------------------

* 以下のバージョンで動作確認済

  * AWS CLI 1.7.26

```bash:コマンド:
aws --version
```

結果(例):

      aws-cli/1.7.26 Python/2.7.5 Darwin/13.4.0


0. 準備
=======


0.1. リージョンの決定
---------------------

トピックを作成するリージョンを決めます。

(カレントユーザが利用するカレントリージョンも切り変わります。)

```bash:コマンド(アイルランドリージョンの場合):
export AWS_DEFAULT_REGION='eu-west-1'
```


0.2. 変数の確認
---------------

プロファイルとリージョンが想定のものになっていることを確認します。

```bash:変数の確認:
aws configure list
```

結果(例):

            Name                    Value             Type    Location
            ----                    -----             ----    --------
         profile       snsFull-prjZ-mbp13iamFull-prjZ-mbp13              env    AWS_DEFAULT_PROFILE
      access_key     ****************XXXX shared-credentials-file
      secret_key     ****************XXXX shared-credentials-file
          region                eu-west-1              env    AWS_DEFAULT_REGION


0.3. AWS IDの確認
-----------------

```bash:変数の確認:
cat << ETX

        AWS_ID: ${AWS_ID}

ETX
```


1. 事前作業
===========


トピック名の決定
----------------

通知先を登録するトピック名を決定します。

```bash:コマンド:
SNS_TOPIC_NAME="trail-alarm"
```

同名のトピックが存在しないことを確認します。

```bash:コマンド:
SNS_TOPIC_ARN=$(aws sns list-topics --query "Topics[?contains(TopicArn,\`${SNS_TOPIC_NAME}\`)].TopicArn" --output text) \
        && echo ${SNS_TOPIC_ARN}
```

結果:

      (戻り値なし)


2. 本作業
=========


2.1. SNSトピックの作成
----------------------

手順: http://qiita.com/tcsh/items/e05e21e7338668cbf3b8


2.2. トピックポリシーの確認
---------------------------

SNSトピックのトピックポリシーを確認します。

```bash:コマンド:
aws sns get-topic-attributes --topic-arn ${SNS_TOPIC_ARN}
```

結果:

      {
        "Attributes": {
          "SubscriptionsConfirmed": "1",
          "DisplayName": "",
          "SubscriptionsDeleted": "0",
          "EffectiveDeliveryPolicy": "{\"http\":{\"defaultHealthyRetryPolicy\":{\"minDelayTarget\":20,\"maxDelayTarget\":20,\"numRetries\":3,\"numMaxDelayRetries\":0,\"numNoDelayRetries\":0,\"numMinDelayRetries\":0,\"backoffFunction\":\"linear\"},\"disableSubscriptionOverrides\":false}}",
          "Policy": "{\"Version\":\"2008-10-17\",\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__default_statement_ID\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":[\"SNS:Publish\",\"SNS:RemovePermission\",\"SNS:SetTopicAttributes\",\"SNS:DeleteTopic\",\"SNS:ListSubscriptionsByTopic\",\"SNS:GetTopicAttributes\",\"SNS:Receive\",\"SNS:AddPermission\",\"SNS:Subscribe\"],\"Resource\":\"arn:aws:sns:eu-west-1:XXXXXXXXXXXX:trail-alarm\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"XXXXXXXXXXXX\"}}}]}",
          "Owner": "XXXXXXXXXXXX",
          "TopicArn": "arn:aws:sns:eu-west-1:XXXXXXXXXXXX:trail-alarm",
          "SubscriptionsPending": "0"
        }
      }


3. 事後作業
===========


トピックの購読
--------------

CloudTrailの動作確認のため、SNSトピックを購読しておきましょう。

手順: http://qiita.com/tcsh/items/ca81576b0018bfa32cbe


完了
====
FuelPHPのQuery Builderでjoinした表のカラム名の重複をうまく解決する方法

Fuelphpで結合表(joinした表)から値を取得する際にORマッパーを用いると重複するカラム名があってもよしなに処理してくれるのですが、Query Builderの場合は一方のテーブルのカラムの値しか出力されないため、重複するカラム名に対してエイリアスを付加する必要があります。

しかし、カラム名やエイリアスを１つ１つ手で指定するのは非常に面倒で保守性も良くないため、今回はDB::list_columns関数でテーブルのカラム名を取得して、それをもとにエイリアスを作成して対応することにしました。

# カラム名とエイリアスを出力するコードの例
```php
$cols = array(
    'users' => DB::list_columns('users'),
    'user_infos' => DB::list_columns('user_infos')
);

foreach ($cols as $tbl => $col) {
    foreach ($col as $val) {
        $cols_name[$tbl . '.' . $val['name']] = array($tbl . '.' . $val['name'], $tbl . '_' . $val['name']);
    }

}
```

必要のないカラム名は、foreachの中にswitch文で条件分岐させて取り除くか、foreach前あるいは後にunset関数で除けば良いでしょう。

上記コードより取得したカラム名をもとにselectする方法は以下の通りとなります。
通常は素直に例１の方法を用いれば良いと思います。
（FuelPHPにはDB::select_array関数があるので、例２のようにcall_user_func_array関数で頑張って配列を引数化する必要はありませんが、まあこんな方法もあるよということで）

# 使用例
## 例１：DB::select_array関数で配列の値を引数として用いる
```php
public static function get_user_list() {
	$cols = array(
	    'users' => DB::list_columns('users'),
	    'user_infos' => DB::list_columns('user_infos')
	);

	foreach ($cols as $tbl => $col) {
	    foreach ($col as $val) {
	        $cols_name[] = array($tbl . '.' . $val['name'], $tbl . '_' . $val['name']);
	    }

	}

	$query = call_user_func_array('DB::select',$cols_name);
	$query->from('users');
	$query->join('user_infos','LEFT');
	$query->on('users.id','=','user_infos.id');
	$result = $query->execute()->as_array();
	return $result;
}
```

## 例２：call_user_func_array関数で配列の値を引数として用いる
```php
public static function get_user_list() {
	$cols = array(
	    'users' => DB::list_columns('users'),
	    'user_infos' => DB::list_columns('user_infos')
	);

	foreach ($cols as $tbl => $col) {
	    foreach ($col as $val) {
	        $cols_name[] = array($tbl . '.' . $val['name'], $tbl . '_' . $val['name']);
	    }

	}

	$query = call_user_func_array('DB::select',$cols_name);
	$query->from('users');
	$query->join('user_infos','LEFT');
	$query->on('users.id','=','user_infos.id');
	$result = $query->execute()->as_array();
	return $result;
}
```
PostgreSQLで別のテーブルに列を移動する

# 目的: 既にデータの入った列を別のテーブルに移動させる

プログラムの変更に伴って、ある列を別のテーブルに移動させたくなった。
検索するとデータベースまるごとの移行とかの
情報が多くて調べにくかったので、簡単だけどメモ。

# 前提条件
- WalletテーブルからBankテーブルにmonney列を移動する
- ただし、2つのテーブルで同じidをもったものだけを移動すれば良い  
(親テーブル<-->従属テーブルのような移動を想定している)

# 初期状態

```sql
-- 初期テーブル定義
CREATE TABLE Wallet (
  id INTEGER NOT NULL,
  monney INTEGER NOT NULL,
  CONSTRAINT wallet_pkey PRIMARY KEY (id)
);
CREATE TABLE Bank (
  id INTEGER NOT NULL,
  CONSTRAINT bank_pkey PRIMARY KEY (id)
);

-- 適当にデータが入っているものとする
INSERT INTO Wallet 
  (id, monney)
  VALUES
  (1, 100),
  (2, 500),
  (3, -1000),
  (4, 10000),
  (5, 0);
INSERT INTO Bank
  (id)
  VALUES
  (1), (3), (4), (5);
```

# 移動の実行

```sql
-- Monney列をBankテーブルに作成
ALTER TABLE Bank
  ADD COLUMN monney integer;

-- WalletテーブルからBankテーブルにmonneyの内容をコピー
UPDATE Bank
  SET monney = 
    (SELECT monney 
     FROM Wallet
     WHERE Wallet.id = Bank.id
    );

-- 動作を確認したら、必要に応じて元のテーブルからmonney列削除
ALTER TABLE Wallet
  drop monney;
```

以上。
bind前にViewが見えてしまう問題への解決方法


Knockout.jsにしろ、それ以外のJavaScriptのMVVMにしろ、bind前にViewがチラッと見えてしまうことがありますね。あれをなんとかしたいなーと思っていたので、その解決方法についてです。

## アプローチ1: ViewModelがbindされるまで隠す(View単位)

`.ko-hidden`というcssのクラスを作って、隠してしまう作戦です。

```css
.ko-hidden {
  display: none;
}
```

これを、該当するViewに当てておきます。

```slim
.ko-hidden data-bind="with: fooViewModel"
```

これに対して、bindingし終えたら表示するというものです。

```coffee
window.load ->
  ko.applyBindings(app_view_model)
  $('.ko-hidden').removeClass('ko-hidden')
```

上記の方法だと、いきなりバッと表示されてしまうので、フェードインで表示したい場合は、こう。

```coffee
window.load ->
  ko.applyBindings(app_view_model)
  $('.ko-hidden').fadeIn().removeClass('ko-hidden')
```

## アプローチ2: ViewModelがbindされるまで隠す(全体)

bindingが終わるまで、body自体を非表示にするという方法。

cssは同じ。

```css
.ko-hidden {
  display: none;
}
```

これをbodyタグにあてます。

```slim
body.ko-hidden
```

そして、bindingし終えたら表示。

```coffee
window.load ->
  ko.applyBindings(app_view_model)
  $('body').removeClass('ko-hidden')
```

## それぞれのメリットとデメリットについて

### View単位

#### メリット

1. 対象のView以外は表示されるため、体感速度的には速いんじゃないだろうか
2. SEO的な問題が発生しない
3. あとからでも導入しやすい

#### デメリット

1. 全ての一時的に非表示にしたいViewに対して作業を行う必要がある。

### 全体

#### メリット

1. 1回の作業でいい

#### デメリット

1. 体感速度的に遅いと感じるかもしれない
2. SEO的な問題が発生しうる（最初真っ白だから）
3. 要素の大きさを計算したりするようなJSを組んでいると、初期表示で要素が非表示のため、計算がうまくいかない。そのため、あとから導入しづらい。

## まとめ

簡単なのは全体を隠すほうだけれど、複雑な条件に対応できるのはView単位に対応するほうかなと思う。
私はView単位で対応する方法をとった。
wicked pdfで画像サイズをリサイズして表示


## 忙しい人向けに
sizeのハッシュを付けてやれば良い

```
<%= wicked_pdf_image_tag("image_file.jpg", {size: "200x50"}) %>
```

## 詳しく
PDFを出力してくれるgemであるwicked_pdfは大変便利だ。
他のPrawnのように独自DSLを使うことなくErbやHamlでPDFを生成出来て非常に効率がよい

wicked_pdfを使って画像を読み込ませる場合はimage_tagではなく、
独自のwicked_pdf_image_tagを使用する必要がある

例えばこんなふうに使うことができる。

```erb
<%= wicked_pdf_image_tag("image_file.jpg" %>
```

しかしこれだと、画像がそのままの大きさで表示されてしまい、画像の大きさを調整した場合には有効ではない。


wicked_pdf_image_tagメソッドのコードを読んで確認すると以下のようである。

```wicked_pdf_helper.rb
 def wicked_pdf_image_tag(img, options = {})
    image_tag "file:///#{WickedPdfHelper.root_path.join('public', 'images', img)}", options
  end
``` 
  
ref: https://github.com/mileszs/wicked_pdf/blob/5fa2d705c650751d2cea1dc85ea0d2a1416b48a4/lib/wicked_pdf/wicked_pdf_helper.rb
 

要するにimage_tagを内部的に呼んでいて、optionsはimage_tagメソッドに直接渡しているようだ。
そこでimage_tagの使い方を見ると

> image_tag(画像ファイルへのパス, [, (オプション or HTMLオプション)])
>:size	画像サイズ(幅x高さ)   


ref: http://railsdoc.com/references/image_tag


つまり、こんな感じでオプションを付けてsizeシンボルのハッシュに縦横のピクセルを記した文字列を追加してやればよいのだ

```
<%= wicked_pdf_image_tag("image_file.jpg", {size: "200x50"}) %>
```
アイコンフォントをicomoonで生成してサクっと導入するよメモメモ

デザイナーのわたしが、icomoonで生成したアイコンフォントをさくっと導入するよメモ。

## icomoonからWebIconをジェネレートする

今回マテリアルデザインのアイコンフォントを導入したかったので、icomoonにお世話になった。
プリセットされていてすぐに使いたいフォントだけをジェネレートすることができた。
ステキやで。

### [icomoon](https://icomoon.io/)

![スクリーンショット 2015-05-11 16.57.27.png](https://qiita-image-store.s3.amazonaws.com/0/19094/e8992d78-68e3-c821-a007-020ddeb79010.png "スクリーンショット 2015-05-11 16.57.27.png")
> "Add Icon From Library..." から

![スクリーンショット 2015-05-11 16.57.47.png](https://qiita-image-store.s3.amazonaws.com/0/19094/aab9abc3-9520-845c-15ce-954f71b03453.png "スクリーンショット 2015-05-11 16.57.47.png")
> Material Design Icons を選択すればOK！


## fontファイルを移動する

zipファイルが生成されるので、利用するファイルだけガツガツ移動していく。
まずメインのフォントファイルから。

![スクリーンショット 2015-05-11 17.04.09.png](https://qiita-image-store.s3.amazonaws.com/0/19094/1404a334-04a8-a6ca-db2a-aae1a68c781f.png "スクリーンショット 2015-05-11 17.04.09.png")

fonts以下にあるものを、そのまま
` public/fonts` 
もしくは
` app/assets/fonts` 
にぶっこむ。

## font用CSS
生成された ` style.css` と ` variables.scss` の中身を、
` stylesheets/font.scss` とかにまとめてコピペしちゃう。

その際、` style.css`に記述されている、
以下のコードのpassをちゃんと変えるよ。

``` css
@font-face {
  font-family: 'google-icon';
  src:url('fonts/google-icon.eot?-lx9xkg');
  src:url('fonts/google-icon.eot?#iefix-lx9xkg') format('embedded-opentype'),
      url('fonts/google-icon.woff?-lx9xkg') format('woff'),
      url('fonts/google-icon.ttf?-lx9xkg') format('truetype'),
      url('fonts/google-icon.svg?-lx9xkg#google-icon') format('svg');
  font-weight: normal;
  font-style: normal;
}
```

## 利用したいViewにてCSSを呼ぶ
``` ruby
<% @stylesheets += ['fonts'] %>
```

こう書けば効くようになった。
汎用性無さそうなので、今後カスタマイズしていきたす。
とりあえずはこれでOKかなと。
postfix2->3に上げて起動しなくなったらdaemon_directoryの修正すること

[archLinux - pacman -Syu で ハマった点 - Qiita](http://qiita.com/tukiyo3/items/4ac825c5f34ec88c405f)で書きましたが重要なことなので別記事立てた。

## エラー

```bash:
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since 月 2015-05-11 17:16:10 JST; 4min 35s ago
  Process: 662 ExecStart=/usr/bin/postfix start (code=exited, status=1/FAILURE)
```

## 修正方法

```diff:/etc/postfix/main.cf
- daemon_directory = /usr/lib/postfix
+ daemon_directory = /usr/lib/postfix/bin
```

## 起動確認

```bash:
systemctl restart postfix
systemctl status postfix
```
sinatra でデータ分析結果を可視化するためのシンプルで汎用的なアプリケーションを作る

久しぶりの更新ですが今日は Ruby のアプリケーションフレームワーク [Sinatra](http://www.sinatrarb.com/intro-ja.html) を利用してデータを表示するアプリケーションを作る話です。

### データ分析処理とウェブアプリケーションを分離する

データ分析には、複雑な数理計算、特定目的の科学計算、機械学習などの高度な計算を駆使することもあります。このような分野には科学技術計算に向いた R や Python などのプログラム言語を用いることが通例ですが、必ずしもウェブアプリケーションの部分までこれらを利用する必要はないでしょう。どう可視化するよりも何を可視化するかのほうがずっと大切だからです。プレゼンテーション層としてのウェブアプリケーション部分と、ビジネスロジック層としてのデータ分析処理部分は、それぞれ分かれていても良いはずです。むしろウェブアプリケーションで統計などの処理まで担うのは、ある意味ビューにロジックを書いてしまうようなものと考えることもできるかもしれません。このように割り切るならば、ウェブの部分は Ruby などの手軽な言語を用いて実装しても良いですし、あるいは D3.js などによってインタラクションを実装しても良いでしょう。

### インタラクションの向き不向き

探索的データ分析ではインタラクションによって多角的なデータの探索を可能にします。インタラクションはポインティングデバイスなどによる操作で対話的にデータを閲覧することになります。これは対話的にデータを読み解いていこうという場面では威力を発揮します。反面、一目で全体像を把握したい、あるいはチェックする項目が決まっていてそこだけ迅速に確認したい、といったニーズにはやや不向きな面があります。たとえば数十社、数百社の経営情報を閲覧したいというニーズがあったとします。このとき、一社ごとの詳細情報表示画面でいちいちポインティングデバイスを利用して情報を追っていたのでは、全社分を閲覧するのに時間と労力がかかってしまうことになります。また全体の概況をインタラクションで表示するにしても、見た瞬間に全体がわかるという迅速性のほうが重視されることになるでしょう。インタラクションは見た目がスマートで見栄えがするのですが、どのような場面にも向いているというわけではないことに注意が必要です。

### どんなデータの可視化にも使えるシンプルな可視化

たとえば経営情報の分析とその可視化を考えてみます。この場合では、全体の概況一覧と個別の財務諸表の詳細を可視化するような形になるでしょう。あるいは業界のトレンドを可視化するなら業界全体の動向と各社の戦略についての詳細を用意するでしょう。このように、トップに全体の一覧や要約の画面を用意し、そこから各個別の詳細画面に飛ぶといったスタイルは、可視化の中でも定番ともいえる見せ方です。ここでは一覧と詳細画面から構成されるシンプルなウェブアプリケーションを用意することを考えてみましょう。

## Sinatra でシンプルな可視化アプリケーションを実装する

Sinatra の最低限のルーティングと Haml を利用して上記の要件を満たすサイトが手軽に作れます。

### ルーティングを実装する

```ruby
get '/' do
  @data = open_file(index_file)
  haml :index
end

get '/:param' do
  @data = open_file(@params[:param])
  redirect '/' if @data.length == 0
  haml :detail
end
```

いかがでしょう。記述はきわめて簡潔です。それぞれ、 / にアクセスしたらインデックスを構築するためのサマリーとなるデータファイルを、各詳細画面に飛ぼうとしたらそれに対応したデータファイルを開くという処理をしているだけにすぎません。

上の例では一様に同じ詳細画面に飛ばしていますが

```ruby
  haml @params[:param].to_sym
```

というふうに分岐先を個別の画面にすることもできます。

### データファイルを開くための関数を用意する

次に上で登場するデータファイルを開くメソッドを用意しておきます。

```ruby
def open_file(filename, &block)
  open(filename) do |file|
    file.each_line do |line|
      block.call(line)
    end
  end
end
```

これでファイル名とブロックを渡せばファイルを開けるようになります。

あとはデータファイルがどういう形式かにあわせてブロックを用意します。いわゆる Key と Value 形式で Value に JSON オブジェクトが入っているなら

```ruby
parse_json = lambda {|line|
  hash  = {}
  # キーとバリューに分割
  hash['key'], hash['tag'], json = line.strip.split("\t")
  # バリューを JSON パーサーで処理する
  begin
    hash['value'] = JSON.parse(json)
  rescue JSON::ParserError
    hash['value'] = json
  end
  array << hash
}
```

などのようにブロックを用意しておいて

```ruby
open_file(filename, &parse_json) if File.exist?(filename) if /\.json\Z/ =~ filename
```

のようにブロックを渡します。

## データ分析処理を実装する

あとは好きなように分析をします。これは上述したように R や Python で深夜などに定期実行するといった形で良いでしょう。

## まとめ

今回のようにシンプルなウェブアプリケーションを用意しておけばなにかと応用が効くので便利です。
【Swift】Storyboardの画面遷移(push)をコードから呼ぶ

# はじめに

テキストや画像の配置といったデザインはStoryboardで実装したいけど、そのテキストなど中身とかはコードの方で設定したい場合があります。この場合は、Storyboardのsegueに名前をつけて、ボタンタップなどのイベントを受けた時にこのsegueを呼ぶようにすることで、デザインはStoryboard、画面遷移はコードで実装することができます。

# 環境

 * MacOS 10.10.2
 * Xcode 6.3
 * iOS 8.3
 * Swift 1.2

# Storyboard

今回はPushで実装するという前提で行きます。Modalだとまた多少変わってきますので注意してください。
まずはStoryboardの方の設定です。

## 画面遷移の作成

通常のように、ViewControllerからViewControllerに右クリックで矢印を伸ばして、Segueを引きます。種類は「show」を選択します。

![スクリーンショット 2015-05-11 16.16.03.png](https://qiita-image-store.s3.amazonaws.com/0/29024/6a658eab-31cd-3fa4-8b42-8753a27d0d32.png)

## Segueに名前をつける

Segueを選択した状態で下の図のように Storyboard Segue の Identifier として適当な名前をつけます。今回は PushShopDetail としました。

![スクリーンショット 2015-05-11 16.17.55.png](https://qiita-image-store.s3.amazonaws.com/0/29024/c2aa63e6-7310-c908-ba02-58067721b8c6.png)

Stroyboardでする操作は以上となります。


# コードからSegueを参照する

先ほどSegueに名前をつけたので、今度はそのSegueをコードから参照します。こうすることにより、遷移先のViewControllerインスタンスを参照できたりします。仮に今回は、UIButtonをタップして画面遷移するとします。


## performSegueWithIdentifier を呼ぶ

まずは普通にボタンをタップした時に呼ばれる関数を定義します。この中でperformSegueWithIdentifier関数をびます。1番目の引数は先ほどつけたSegueのIdentifierです。2つ目は画面遷移のsenderです。これについては後に説明します。

```swift
func buttonTapped(sender: UIButton){
    performSegueWithIdentifier("PushShopDetail", sender: button)
}
```

## prepareForSegueを定義する

続いて、prepareForSegueという関数を定義します。このsenderが先ほどperformSegueWithIdentifierで引数にしたsenderとなります。

```swift
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if sender is UIButton {
            if let shop = sender as! UIButton {
                let viewController = segue.destinationViewController as! ViewController
                // ここでなんらかの処理を書く
            }
        }
    }
```

ここで sequeのdestinationViewControllerが遷移先の画面となります。
prepareForSegueは、performSegueWithIdentifierとか関係なく、Segueによる画面遷移の際には必ず呼ばれることになる（気がする）ので、複数のSegueが設定されている場合には注意してください。

# おわりに

かなり雑な解説で申し訳ありません。ここが違う、ここがうまく動かない、ここが分からないなどありましたらご指摘してくださるとありがたいです。
[WordPress]ユーザーログインのアクションフック

何度も忘れてしまうので備忘録。

ユーザーログイン後に何か処理をしたい場合には、wp_login のアクションフックを使う。

```php:functions.php
add_action( 'wp_login', 'hoge_func', 10, 2 );
function hoge_func ( $user_login , $current_user ) {
  /* 何かしらの処理 */
}
```

ログ出力して確認してみたところ、引数の user_login と current_user にはそれぞれ以下の情報が渡されてくる模様。

user_login: ユーザー名（wp_users テーブルの "user_login" と同じ値）
current_user: ログインしたユーザーのWP_Userクラス
smallbasicでRS232C

#シリアル
rs232cです。
エクステンションが必要です。
エクステンションは、LitDevがあります。
このコードは、自前のエクステンションです。

#コード
```
class1.OpenPort("COM5", 9600)
TextWindow.WriteLine(">open com5")
while a <> "H"
  a = TextWindow.readkey()
  class1.TXString(a)
  Program.Delay(100)
  s = Class1.RXAll()
  TextWindow.WriteLine(s)
endwhile
TextWindow.WriteLine(">end")
```
コントローラのユニットテストでHTMLを描画しようとするとAssetファイルが正常の読み込まれない



例えば以下のようなテストを書いた場合。

```php:hogehoge_test.php
public function test_index()
{
    $request = \Fuel\Core\Request::forge('/');
    $response = $request->execute()->response();
    
    // この行のrender()メソッドでエラーが出る。
    $html = $response->body()->render();
    $pattern = '/' . preg_quote('トップページ', '/') . '/u';
    $this->assertRegExp($pattern, $body);
}
```

以下のようなエラーが出る。

```bash:メッセージ
Fuel\Core\FuelException: Could not find asset: bootstrap.css
```

原因は、Assetファイルを探索する際の処理で、
カレントディレクトリがドキュメントルート(public/)になっていることが想定されているから。
これはデフォルトの挙動で、設定すれば変更することができる。

Assetクラスのオプションを設定するので、
以下のような内容の`fuel/app/config/test/asset.php`というファイルを設置する。

```php:
<?php
return array(
    'paths' => [DOCROOT.'public/assets/']
);
```

これで無事にAssetファイルが読み込まれるようになった。
複数のタグをサクッと追加できるjQueryプラグイン「Input_Tag」を作りました

テキストフィールドに入力すると、自動補完で選択肢がでてきて、タグが追加されるような仕組みを入れたかったのですが、既存のもので使い勝手がよさそうなものがなかったので作ってプラグインとしてgithubで公開してみました。
[Input_Tagのデモ](http://iritec.github.io/Input_Tag/)

![sample1.png](https://qiita-image-store.s3.amazonaws.com/0/72150/645be128-0119-1f79-2e78-00fccae24132.png)

# 設置方法
## jQueryとjQuery UI、CSSを読み込む

```
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<link rel="stylesheet" href="style.css">
```

## タグ入力表示部分
```
<div id="tagwaku">
  <div id="tags"></div>
  <input type="text" id="tag-input">
  <input type="hidden" name="skills" id="skills">
</div>
```
選択されたタグは、inputのskillsにカンマ区切りで入力されます。

## 自動補完の選択肢を配列に保存
```
<script>
var dataTags = [
"日本",
"Iceland",
"Ireland"
];
</script>
```

## Input_Tagを読み込む
```
<script src="input_tag.js"></script>
```

自動補完部分についてはjQuery UIのautocompleteを利用しました。そこから、選択されたものをタグとしてペタッと貼り付けたりするところを追加で作りました。

下のように、タグは選択された時にdivで追加。その後ろにinputがあります。タグがどんどん追加されたら、inputは後ろに下がっていきます。

![kaisetu.png](https://qiita-image-store.s3.amazonaws.com/0/72150/5cc4551c-122a-add0-b4b3-d96ec3459204.png)

[Input_Tagのダウンロードはこちら](https://github.com/iritec/Input_Tag)