OmniAICreator/Qiita-1.07M huggingface dataset:
Swift2でのautoresizingMaskの複数指定方法

# 経緯
Objective-CのコードをSwift2で書き直していた時に少しハマったのでメモ

# Objective-CとSwift1.2以前での指定方法
Objective-CやSwift1.2では以下のように指定していました。

``` objective-c
UIView *view = [[UIView alloc]init];
view.autoresizingMask 
    = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

```

``` swift:swift1.2

let view = UIView()
view.autoresizingMask = .FlexibleWidth | .FlexibleHeight

```

# Swift2.0での指定方法
それがSwift2.0では以下の様な指定方法になりました。

``` swift:swift2.0

let view = UIView()
view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]

```

# 参考
stack overflow(http://stackoverflow.com/questions/30867325/binary-operator-cannot-be-applied-to-two-uiviewautoresizing-operands)
[ chef ] roleを使うとき、roleのrun_listではなくnodeのrun_listにレシピを指定

###0.やりたいこと
よく目にするサンプルのroleファイルだと、roleにrun_listが書いてあってそれをnodeで指定して使っているが、nodeでは普通にレシピを指定しておいて、上書きしたい値だけを書いたroleファイルを読み込むようにしたい。

###1. roleファイルからrunlistの記述を削除
roleファイルからこの部分を削除します

```json
  "run_list": [
     "cookbook-name"
  ],

```

###2.　roleで指定するのをやめたレシピをnodeのrunlistに追加。

```bash

[ ~] knife node run_list add node-name recipe[cookbook-name]
node-name:
  run_list:
    role[test_role]
    recipe[cookbook-name]

```

###3.実行

```bash
knife zero converge 'name:node-name' -a knife_zero.host
(中略)
Chef Client finished, 1/1 resources updated in 02 seconds

```


出来ました。
パスワード > 暗号化についての検討 > 再起動する / 外部サービスを利用時にパスワードを使用

**(追記 2017/08/30): 「復号化」から「復号」に訂正しました。**

以下の条件のシステムで使うパスワードについて検討

- 再起動後もシステムが動き続ける
  - 再起動後にパスワードの再入力はできない場合がある
- 適宜、パスワードを使う
  - ある外部サービスに接続する
  
パスワードは暗号化され、外部に漏れないようにしないといけない。
一方で、復号できないと外部サービスに接続できない。
再起動も考慮するため、メモリ上にのみ存在させる、という手は使えない。


SHA-256などの暗号化を使うとした場合も「ハッシュパスワード」をどう管理するか？という問題になっていきそう。

- ハッシュパスワードの管理
  - ソフトで固定 : ソースプログラムが漏洩しない限り、ハッシュパスワードも漏えいしない?
  - ユーザ入力 : 元のパスワードと同じく、ハッシュパスワードの管理機構が必要になる
  
以下も有効だろうか?

- ハッシュ暗号化に加えて、独自の変換をかぶせる
  - 独自変換部分はプログラムの解析をしない限りわからない。
  - その場合、ハッシュ暗号化は必要なのか?? 独自変換だけでもいいのだろうか?
  - 独自変換をするのと、ソフト固定のハッシュパスワードを使ったハッシュ変換をするのと、それぞれの長所短所が未消化
Xcode 6.4 で発生する Interface Builder のエラーを回避する


MacOS X のアップデート時なのか、Xcode 7 インストール時なのか、何時からか Xcode 6.4 でビルドが行えなくなっていました。

# 問題
Xcode 6.4 でビルド時にエラーが発生したり、xib や storyboard を開こうとするとクラッシュする。

```
2015/11/06 12:07:07.370 ibtoold[84766]: Init failed: Error Domain=IBMessageChannelErrorDomain Code=1 "Failed to communicate with Interface Builder" UserInfo=0x7f87c069ddb0 {IBAbstractPlatformToolCrashLog=

Dyld Error Message:
  Library not loaded: /System/Library/PrivateFrameworks/PepperUICore.framework/PepperUICore
  Referenced from: /Applications/Xcode6.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Overlays/Interface Builder WatchKit Tool
  Reason: image not found


Application Specific Information:
dyld: launch, loading dependent libraries
DYLD_FRAMEWORK_PATH=/Applications/Xcode6.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Overlays
DYLD_LIBRARY_PATH=
DYLD_ROOT_PATH=/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 9.0.simruntime/Contents/Resources/RuntimeRoot
DYLD_FALLBACK_LIBRARY_PATH=
, NSLocalizedDescription=Failed to communicate with Interface Builder, NSLocalizedFailureReason=Interface Builder Cocoa Touch Tool crashed: dyld: launch, loading dependent libraries
DYLD_FRAMEWORK_PATH=/Applications/Xcode6.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Overlays
DYLD_LIBRARY_PATH=
DYLD_ROOT_PATH=/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 9.0.simruntime/Contents/Resources/RuntimeRoot
DYLD_FALLBACK_LIBRARY_PATH=
}
```

# 原因
watchOS 関連のフレームワークが読み込めずにエラーが発生している。

# 対策
Xcode 6.4 に含まれる、**PepperUICore.framework** と **SockPuppetGizmo.framework** のシンボリックリンクを作成する。

```
sudo ln -s "/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 8.4.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/PepperUICore.framework" /System/Library/PrivateFrameworks/PepperUICore.framework

sudo ln -s "/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 8.4.simruntime/Contents/Resources/RuntimeRoot/System/Library/PrivateFrameworks/SockPuppetGizmo.framework" /System/Library/PrivateFrameworks/SockPuppetGizmo.framework
```

# 備考
Command Line Tools のバージョンを変更することでビルドは行えるが、Xcode 6 の `ibtool` でビルドを行いたかったのでシンボリックリンクの対策にした。 

ただし、`DYLD_ROOT_PATH` が iOS 9 のシミュレータランタイムとなっているのでこの対策で良いのか疑問が残る…。


どなたか、他に Xcode 7 と Xcode 6 を共存させるいい方法があれば教えて下さい。

# 追記
## 2015/12/03
別問題に遭遇しました。
Asset Catalog(xcassets) を使用していると圧縮アルゴリズムが変更されているようで、iOS 9 未満で実行すると画像が読み込めないようです。

https://developer.apple.com/library/prerelease/ios/documentation/Performance/Reference/Compression/index.html

```
2015-12-03 18:37:20.971 IBCocoaTouchImageCatalogTool[41965:12363149] CoreUI(DEBUG): CSIGenerator using 'LZFSE' Compression coreui version (358.200000)
```

Xcode 7 で追加されているオプションを Build Settings に追加してみましたが、Xcode 6.4 の actool では定義されておらずエラーとなりました。

大人しく Xcode 7 へ移行した方が良さそうです。
Rails enum_help keyとvalueを入れ替える

enum_helpは便利なgem。
おしりに`_i18n`をつけるだけで日本語を出してくれる。

```
Human.star_signs_i18n
# => {"aries"=>"牡羊座",
 "taursu"=>"牡牛座",
 "gemini"=>"双子座",
 "cancer"=>"蟹座",
 "leo"=>"獅子座",
 "virgo"=>"乙女座",
 "libra"=>"天秤座",
 "scorpio"=>"蠍座",
 "sagittarius"=>"射手座",
 "capricorn"=>"山羊座",
 "aquarius"=>"水瓶座",
 "pisces"=>"魚座"}
```

キーとバリューを入れ替えたい時は`invert`メソッド。

```
Human.star_signs_i18n.invert
# => {"牡羊座"=>"aries",
 "牡牛座"=>"taursu",
 "双子座"=>"gemini",
 "蟹座"=>"cancer",
 "獅子座"=>"leo",
 "乙女座"=>"virgo",
 "天秤座"=>"libra",
 "蠍座"=>"scorpio",
 "射手座"=>"sagittarius",
 "山羊座"=>"capricorn",
 "水瓶座"=>"aquarius",
 "魚座"=>"pisces"}
```

いつ使うの？

```
= f.select :star_sign, Human.star_signs_i18n.invert

```
古いWebアプリを最近の環境で動かす時のひとつの可能性

# 経緯
最近かなりハマった内容を書きます。数年前に開発した Java + struts の Web アプリケーションを最近の環境(Java8 + Tomcat8)へ移行した際のこと。JSP が真っ白のまま何も表示されませんでした。

# 解析
`${TOMCAT_HOME}/logs/localhost.yyyy-mm-dd.log` を見たら、エラーが出ていました。

```
The method getDispatcherType() is undefined for the type HttpServletRequest
``` 

直訳すると「`HttpServletRequest` 型では `getDispatcherType()` メソッドは未定義なんだぜ」ということです。なんでこんなエラーが出たのかというと、

* なぜかサーブレットの jar ファイルを自分のアプリケーションの中に抱え持っていた。
* この jar ファイルが古かった(サーブレット 2.5 の時代のもの)。
* JSP から *.java ファイルの変換は新しい Tomcat がやった(と思っている)。
* *.java から *.class へのコンパイル時は抱え持っていた古いサーブレットの jar ファイルが参照された。
* よって新しいメソッド `getDispatcherType()` が古いサーブレットの jar ファイルでコンパイルできず。

# 対応
新しい jar に入れ替えた。
DSCを試してみる

最近 windows server を扱うようになり、管理も面倒になってきたので重い腰を上げて面倒な設定の簡略化を図る。
Linuxに関しては今まで puppet / shef / ansible / opsworks などを扱ってきたが、windows に関してはそれらの製品を使う前にとりあえず windows に標準である DSC を利用してみることに。

##1.構成

サーバーから変更をクライアントノードにプッシュする
サーバー : 10.0.0.1
クライアントノード : 10.0.0.2
OS : windows server 2012
PowerShell : 4.0

* windows server 2012　(Not R2) では DSC が使用できる PowerShell 4.0 ではないのでアップグレードする

[Windows Management Framework 4.0](https://www.microsoft.com/ja-jp/download/details.aspx?id=40855)

* 今回使用する Module を配置

```
$env:ProgramFiles\WindowsPowerShell\Modules
```
PowerShell Version 4 において、DSC は x64 のみの対応のため、
*C:\Program Files (x86)\WindowsPowerShell\Modules*
は参照しない

[xNetworking Module](https://gallery.technet.microsoft.com/scriptcenter/xNetworking-Module-818b3583)


##2. 準備


1.サーバーからの設定変更を受け入れる(ノード側作業)

DSC を利用するには、DSC サーバーとノードがお互いにリモート処理できる必要があるのでサーバを許可

```
Set-Item wsman:\localhost\Client\TrustedHosts -Value 10.0.0.1 -Force
```

2.LCM設定の確認(ノード側作業)

プッシュ型であることを確認

```
Get-DscLocalConfigurationManager 
```

##3.設定変更(サーバー側)

#*作業例*
*FireWall Rule の変更*
*ICMP echo を反応させる*
*Module 配置済み(サーバー/ノード両方に必要)*
 

#PowerShell ISEを起動
Windows PowerShell（powershell.exe）を管理者モードで起動した状態で「ise」と入力すれば起動

#Configuration を作成

*Configuration: 任意のConfiguration名*
*Node: 反映対象ノード*
*Resource: 処理内容*

```
configuration Add_FirewallRuleToExistingGroupICMP
{ 
    param  
    ( 
        [string[]]$nodeName
    ) 

    Import-DSCResource -ModuleName xNetworking 

    Node $NodeName 
    { 
        xFirewall Firewall
        { 
            Name = "MyFirewallRule" 
            DisplayName = "ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" 
            Ensure = "Present" 
            Access = "Allow" 
            State = "Enabled" 
        } 
   } 
}

```

構成ファイル.mofの生成 = Configuration(コンパイルのような処理)を実行
オプション指定をしないと、カレントディレクトリ配下に Configuration 名のフォルダが作成され、その配下にファイルが生成

```
$outputPath = "C:Add_FirewallRuleDSC" 
Add_FirewallRuleToExistingGroupICMP -OutputPath $outputPath -nodeName 10.0.0.2
```

プッシュ型で適用に使うのが、Start-DSCConfiguration コマンドレット
このコマンドレットの"-Path"パラメーターに.mofを生成したフォルダーを指定すると、
フォルダーの中にある.mofファイル名のノードに対してサーバーから接続し、適用を試みる

```
Start-DscConfiguration -Path $outputPath -Wait -Verbose 
```

下記のように特にエラーが表示されなければOK

![DSC1.PNG](https://qiita-image-store.s3.amazonaws.com/0/99475/0b05a5cf-bfb1-aa1f-439e-43446053a5a4.png)


次作業予定
GPOもDSCからいじりたい
(PolicyFileEditor とか使う必要がありそう)
c++ builder XE4, 10.2 Tokyo > MessageDlg() > 全部の文字を表示してくれない > 改行を入れる / 横は36文字 (49文字?)

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
```

MessageDlg()は表示文字を途中までしか表示しないようだ。


```Unit1.cpp
void __fastcall TForm1::Button1Click(TObject *Sender)
{

	String msg =
		L"3.1415196535897932384626"
		L"3.1415196535897932384626"
		L"3.1415196535897932384626"
		L"3.1415196535897932384626"
		L"3.1415196535897932384626"
		L"3.1415196535897932384626"
		L"3.1415196535897932384626"
		L"3.1415196535897932384626"
		L"3.1415196535897932384626"
		L"3.1415196535897932384626"
		L"3.1415196535897932384626"
		;

	MessageDlg(msg, mtWarning, TMsgDlgButtons() << mbOK, 0);

}
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/5dc90b7b-2c09-3be2-4f08-69ac2b46ce1d.png)

## 分かったこと

String型文字列に`<CR><LF>`を入れれば次の行に表示はできる。

横の文字数は数値の場合36文字まではいけるようだ。
(10.2 Tokyo + Win 10 Proの場合、49文字になる?)
![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/7f79c7db-901b-db0f-6acf-e5e9f551e010.png)


```
void __fastcall TForm1::Button1Click(TObject *Sender)
{

	String msg =
		L"3.1415196535897932384626" L"\r\n"
		L"3.2415196535897932384626" L"\r\n"
		L"3.3415196535897932384626" L"\r\n"
		L"3.4415196535897932384626" L"\r\n"
		L"3.5415196535897932384626" L"\r\n"
		L"3.6415196535897932384626" L"\r\n"
		L"3.7415196535897932384626" L"\r\n"
		L"3.8415196535897932384626" L"\r\n"
		L"3.9415196535897932384626" L"\r\n"
		L"3.0415196535897932384626" L"\r\n"
		L"3.1415196535897932384626" L"\r\n"
		L"3.2415196535897932384626" L"\r\n"
		L"3.3415196535897932384626" L"\r\n"
		L"3.4415196535897932384626" L"\r\n"
		L"3.5415196535897932384626" L"\r\n"
		L"3.6415196535897932384626" L"\r\n"
		L"3.7415196535897932384626" L"\r\n"
		L"3.8415196535897932384626" L"\r\n"
		L"3.9415196535897932384626" L"\r\n"
		L"3.0415196535897932384626" L"\r\n"
		;

	MessageDlg(msg, mtWarning, TMsgDlgButtons() << mbOK, 0);

}
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/f5c6ebab-73f8-bedc-4ad0-0653075cb2df.png)
[tmux 2.3対応] tmuxの最新をソースからビルドする

tmuxの最新を入れたいのでソースからビルドする

# 検証環境

Ubuntu 14.04

# ビルド手順
## tmuxの最新ソースの取得

ソースはGitHubからcloneできます。

https://github.com/tmux/tmux

## 依存パッケージのインストール

libeventに依存しているのでdevelパッケージを取得する

```bash:apt
# ビルドツール
sudo apt-get install automake

# 依存モジュール
sudo apt-get install libevent-dev libncurses5-dev

# クリップボード共有用
sudo apt-get install xsel
```

```bash:RedHat系用(yum)
# ビルドツール
sudo yum install automake

# 依存モジュール
sudo yum install libevent-devel ncurses-devel

# クリップボード共有用
sudo yum install xsel
```

## ビルド実施

以下ビルドスクリプト

```bash:build.sh
#!/bin/bash -xeu

if [ ! -d tmux ]; then
    git clone https://github.com/tmux/tmux.git
fi

cd tmux

# checkout latest tag
git checkout $(git tag | sort -V | tail -n 1)

sh autogen.sh

./configure

make -j4

sudo make install
```

https://github.com/koara-local/dotfiles/tree/master/build/tmux

`git clone` してそのままだと `tmux -V` の結果がt `tmux master` になってしまうため、最新タグでチェックアウトするのをおすすめします。

# バージョンアップによる既知の不具合
## mouse設定関連でエラーが出る(2.1~)

[tmux v2.1からmouse関連の設定が変わった](http://qiita.com/jyotti/items/70a3a8035d767f99f93d)

## vi-copy周りでエラーが出る(2.3~)
[tmux 2.3 にしたら "unknown key table: vi-copy" というエラーがでるようになった - @blog = Blog.new(author: "nyangry")](http://nyangryy.hatenablog.com/entry/2016/10/18/180944)
JavaScriptでユニークな文字列をさくっと生成する

コード書いてるとたまに被らない値が必要なことがあります。

例えばDOMを生成する際にIDが必要だけど被らないようにしないといけない、ユーザ情報に利用する、など・・・

逆にいうとそういった時ぐらいにしか使わないので毎度忘れてしまいます。
そんなわけでメモっておきます。

※UUIDの仕様にそってないものはUUIDとして書くべきじゃない、という指摘があったので修正しました。

## 考え方

ユニークなIDをつくる時、乱数で生成すると被る可能性が若干あり、ちょっと不安です。

ユニークな文字列をさくっと作りたい時、Dateから生成すると被らない乱数を手軽に生成することができます。


## ソース

```js:getUniqueStr
function getUniqueStr(myStrong){
 var strong = 1000;
 if (myStrong) strong = myStrong;
 return new Date().getTime().toString(16)  + Math.floor(strong*Math.random()).toString(16)
}
````

マイクロ秒単位で乱数が変化するので大丈夫だと思うのですが、もし万が一かぶってしまった場合のことを考えて、念のため乱数を最後につけています。

## 使い方

シンプルです。乱数の桁を増やしたい場合は引数に値を指定します。

```js
var uuid = getUniqueStr()
```

使いたいときにぺたっとどこかにはってもらえばと思います。

## 追記

いろんな人に読んでもらえるので typescript に書き換えたものを追記しておきます。

```typescript

function getUniqueStr(myStrong?: number): string {
  let strong = 1000;
  if (myStrong) strong = myStrong;
  return (
    new Date().getTime().toString(16) +
    Math.floor(strong * Math.random()).toString(16)
  );
}
```
[スキル交換] 多言語について教えますので、かわりになにか教えてください

知人が最近、教え合いでいい機会があったということを聞いたので、さっそくQittaでアカウントを作って投稿してみます。

# 教えられること
- 多言語展開を踏まえたアプリ画面のデザイン時に、気をつけるべき10のこと
- 世界にはどんな文字があるか
- 英語の発音訓練
- 英語を語順を変えずに流れるように翻訳する技術
- 中国語の基礎、発音訓練
- 中国語の繁体字と簡体字の違い
- ハングルの書き方
- Google翻訳の小技50撰
- インドの多言語事情、インド系の文字の書き方
- アラビア語の基礎、アラビア文字の書き方
- HTML/CSSのbidi関連タグの使い方
- Z語の基礎(Zには任意の外国語を入れてください。先に勉強して、文字、発音、文法をかいつまんで教えます)


# 教えてほしいこと
- 機械学習
- コーパス言語学
- 最短距離アルゴリズムの基礎、乗り換え案内システムのサンプルプログラム
- 動画編集


# 連絡方法
tanquar.g◎gmail.com にメールください。
[Sublime]Sublimeで簡単にファイル比較

以前はWindowsユーザでファイル比較といえばDFをもっぱら利用していた。
Macユーザになってファイル比較する必要が出てきた時にDFのようなシンプルアプリがなかったのでサブライムで代用。
代用とはいいつつ、シンプルな機能およびUIなので非常に気に入っている。

みなさんも是非、試してみてください。

1. 「Command Palettes」から「Package Control:Install Package」を選択
2. 「Sublimerge」を入力してインストール
3. 比較したいファイルを２つ開いた状態で、「Command Palettes」から「Sublimerge:Compare to View…」を選択
401HW > 接続している端末リストを見る > 設定 > LAN Wi-Fi > MACアドレスフィルタリング

```txt:動作確認
Y! mobile 401HW
```

モバイルルータ401HWにどの端末が現在接続しているか知りたい。

手順
1. 401HWのIPアドレスに接続する（パスワード入力有)
2. [設定]-[LAN Wi-Fi]-[MACアドレスフィルタリング]を選択

「接続中の機器」として、IPアドレス、ホスト名、MACアドレス、通信時間が表示される。
非公開アドベントカレンダーを動かしてみる、あるいはイチからRuby on Railsアプリを動かしてみるまでの軌跡

そろそろアドベントカレンダーの季節ですね。

ただ、インターネット上に公開するには色々問題があるけど、イントラネットの中でなら共有してくれる人もいるかなと思って、非公開アドベントカレンダー（社内アドベントカレンダーとか研究室アドベントカレンダーとか）とかどうだろう、とSlackに投げてみたら「やってみよう」という声があがったのでやってみました。

使ったのは[radvent](http://koyamay.hatenablog.com/entry/2015/01/16/121031)です。
[レポジトリ](https://github.com/nanonanomachine/radvent)見てみたら、どうもRuby on Railsで動いているらしい・・・？が、私はウェブ屋さんではないので使い方がよく分かりません。

なので同じような人たちのためのメモも兼ねて残しておきます。
OSはUbuntu 4.9.2-10ubuntu13です。元々、みんなで共有のGPUがささってるワークステーションを流用したので何も入っていない環境・・・のはずです。
たぶん大いに間違ってる＆抜けがあるはずなので、どしどし<del>マサカリ</del>編集リクエスト投げてくれると嬉しいです。

0. 適当なところにradventを持ってきます。``git clone https://github.com/nanonanomachine/radvent.git && cd radvent``
1. Rubyすら入ってないので入れます。``sudo apt-get install ruby``
2. Rubyが動くのを確認します。``ruby -v``です。私の環境では``ruby 2.1.2p95 (2014-05-08) [x86_64-linux-gnu]``でした。
3. Gemが動くのを確認します。``gem -v``です。私の環境では``2.5.0``でした。
4. Gemを更新します。``sudo gem update --system``
5. Gemが更新されたことを確認します。``gem -v``でさっきより上がってたらOKです。
6. Railsを入れます。``sudo gem install rails``
7. Railsが動くのを確認します。``rails -v``ですが、私の環境では動きませんでした。動く人は以下は飛ばして良いと思います。
8. エラーを順に処理していきます。まず、``sudo apt-get install libsqlite3-dev``でSQLiteを入れておきます。
9. ``sudo gem install sqlite3``
10. ``bundle install``
11. これで``rails -v``が動きました。私の環境では``Rails 4.1.7``でした。
12. secret keyを作ります。``rake secret``で出てくる長い文字列がそれです。
13. secret keyを登録します。``export SECRET_KEY_BASE=（さっき出てきた長い文字列）``
14. config/secrets.ymlに以下の内容でファイルを追加します。
``production:``
``  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>``

1. データベースを作ります。``bundle exec rake db:create RAILS_ENV=production``と``bundle exec rake db:migrate RAILS_ENV=production``
2. 起動します。``bundle exec rails server -e production``
3. ポート3000番で接続できるようです。http://[実行マシンIPアドレスとか]:3000
4. この状態で動くには動くんですが、なぜか静的ファイル（CSSとか）が読み込まれませんでした。いろいろ調べて、最終的に``config/environments/production.rb``ファイルのとこで``config.assets.compile = true``にしたら動きました。

適当すぎる・・・（特に最後）。
256年後ぐらいの世界で、2015年にこんなことやってるやつがいたんだという歴史的文書にでもなれば幸いです。

## 参考文献
* http://www.rubylife.jp/install/
* http://www.rubylife.jp/railsinstall/
* http://qiita.com/kanpe777/items/cb11dc88ced544d10bd5

## 更新

↑のままだと、public以下の画像添付が見えなくなってしまっていました。
これを回避する方法ですが、色々試した結果、``config/environments/production.rb``で``config.serve_static_assets = true``にすればうまくいきました。

また適当すぎることやってる気がする・・・。
エクセルのマクロをバッチから呼ぶ


>
Dim excl
Set excl = CreateObject("Excel.Application")
excl.Visible = False
excl.Workbooks.Open "path of excel file"
excl.Run "macroToExecute"
excl.Quit


をhoge.vbsとかで保存して、fuga.batに
>
cscript hoge.vbs


とかって書く。
ネットワーク内のデバイスIPの調べ方　(MAC)

# Goal

  sshで Raspberryとか同じネットワークでつながっている機器のアドレスを調べたい
　一応MACを利用しているので、MACで楽な方法がいい

# Solutions

* install

          sudo brew install arp-scan     

* Using the following command:

         arp-scan --interface スキャンを行うネットワークアダプタ(eth0など) -l

* Using ifconfig to specify network_adapter (自分の場合  en6)
* 以下は実行サンプル

```
sudo arp-scan --interface en6 -l
Interface: en6, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
xxx.xxx.xxx.xxx	xx:xx:xx:xx:xx:xx	Philips Lighting BV
xxx.xxx.xxx.xxx	xx:xx:xx:xx:xx:xx	Raspberry Pi Foundation
```
CNNの前処理としてOpenCVでBINGを使ってみた

# 概要
こんにちは、初の投稿となります。
最近Deep Learningへの注目が高まると同時に、
QiitaでもDeep Learning(CNN) に関する投稿が急激に増えています。
しかし、それらの多くはCaffeやChainerといったフレームワークの導入やサンプルを実行してみたものが多く、実際にどう使うのか？という投稿は少ないように見えます。
例えば、CNNを使うにしても愚直にSliding Windowでサーチを行うのは膨大な処理時間がかかってしまい実用的ではありません。
特にマシンビジョンの現場では複雑な形状のものを複数検出するといったことが多く、CNNを使う前に出来るだけ候補のオブジェクトを絞り込みたいという状況がよく発生します。これはR-CNN（Region Convolution Neural Network）と呼ばれています。
手法としてはいくつかありますが、今回はOpenCVのContributionにあるBING(Objectness)を使用してCNNを使う前の候補（オブジェクト）を検出してみたいと思います。

# BINGとは
BING(Binarized Normed Gradients for Objectness Estimation)
BINGはオブジェクトっぽいものを矩形領域として高速に抽出してくれる手法です。
詳しくは南開大學の[ホームページ](http://mmcheng.net/bing/)を参照してください。
こちらの記事によると300fpsのスピードで検出ができるようです。
**[注意] 64bitバージョンでないとこのスピードは出ないようです。**


# 手順
試した環境：Windows7 (64bit), Visual Studio 2013 Community
適当に下記のものをダウンロードして、インストールしてください。
OpenCV3.0の[ダウンロード](http://opencv.org/downloads.html)
Contribution3.0の[ダウンロード] (https://github.com/Itseez/opencv_contrib/releases/tag/3.0.0)
Cmakeの[ダウンロード](https://cmake.org/)

CmakeでConfigureボタンを押して自身のVisualStudioのバージョンを選択します。次に[OPENCV_EXTRA_MODULE_PATH]にインストールしたcontributionのmoduleフォルダをパス指定します。後は生成されたソルーションをビルド、インストールして出来上がったライブラリにパスを通してください。
※Cmakeを使ったことがない方は[このへんのページ](http://www.buildinsider.net/small/opencv/02)を参考にしてインストールしてください。


# 結果
今回学習済みモデルは付属のObjectnessTrainedModelを使いました。
下図は空港画像の結果です。（※検出したすべてを表示すると良く分からないため、検出したオブジェクトの中でサイズを限定して描画しています）
![uuk.jpg](https://qiita-image-store.s3.amazonaws.com/0/99765/92ef04d3-0950-46fb-2740-806249f511fc.jpeg)
うーん、それほど位置は正確ではありませんが、なかなかオブジェクトっぽいところを検出しているようです。では次にもっと複雑な画像で試してみましょう。
下図は交差点画像の結果です。
![intersection.jpg](https://qiita-image-store.s3.amazonaws.com/0/99765/4520f688-6c6e-d58e-9336-8fb3b462bac2.jpeg)
変な所を多々検出していますね。。。
しかし、贔屓目にみれば割りと人と車に集中して矩形が描かれています。


# まとめ
あまり複雑でない画像や速度が求められる場合においてはそれなりの結果を得られると思います。一方、正確なオブジェクトの輪郭を求めたい場合には不向きだと思います。
ただ、BINGも学習する画像次第で大きく結果は変わりそうです。
**=誰かBINGの学習方法を教えて下さい=**

また、R-CNNではBINGの他に最近流行りのSelective SearchやCPMC,Object proposals,Randomized Prim’s (RP)などがあるので近いうちに他のものも試して見たいと思います。


# 参考文献
>南開大學ホームページ(http://mmcheng.net/bing/)
>Generating Object Proposals(https://pdollar.wordpress.com/2013/12/22/generating-object-proposals/)
>ディープラーニングにおける様々な物体領域検出のアプローチ方法(R-CNN)
(http://qiita.com/t-hiroyoshi/items/e9def50ba2c2249db04b)
PHPのちょっとしたデバッグを簡単に。PsySH の使い方

![psysh.org_.png](https://qiita-image-store.s3.amazonaws.com/0/38342/20e53ef8-e9ac-26c3-e9af-39e5ae5b57a5.png)


## はじめに
```
皆さんは、簡単な PHP の文法や動作確認をどのような方法で確認していますか？ 

PsySH という PHP をインタラクティブに実行出来るシェルが簡単に使えて便利だったので、デバッグ作業や、ちょっとした文法、関数の確認で役に立ちそうでしたの備忘録も兼ねてご紹介

PsySH はPHP用のシェルですが、実装は Python でされています

現在はメンテナンスは行われていないようです。既にご存知の方は、いまさらって感じもありますが、、、少しでも誰かの参考になればと思います
```

## PsySHのインストール

![スクリーンショット（2015-11-09 0.14.40）.png](https://qiita-image-store.s3.amazonaws.com/0/38342/d6726ef2-cfae-4a70-8fe6-ff6719ec0369.png)

wget や composer でインストールすることが出来ます。
今回は composer を使ってインストールしてみます。（composerのインストールがお済みでない方は composer 設定後、もしくは wget でお願いします）

### composerでインストール

```
$ php composer.phar require psy/psysh
```

```
$ ./vendor/bin/psysh
```

psyshが起動したらPHPを記述してみます

![スクリーンショット（2015-11-09 0.24.15）.png](https://qiita-image-store.s3.amazonaws.com/0/38342/08bd7675-7fe4-e795-5b82-b92dbb2ee4d5.png)


簡単なデバッグ等の確認であれば、確認用のphpファイル等をわざわざ用意しなくても、 PsySH を使ってある程度のものは確認出来るので、一度使ってみてはいかがでしょうか :kissing_heart: :bulb: 

## 参考リンク

http://psysh.org/
https://github.com/facebookarchive/phpsh
http://www.moongift.jp/2010/02/phpsh-2/
datetime > Middle Endian Forms > アメリカ式の日付 > 月 日 年 > 09/04/2011 / 09-04-2011

日付表記の名前がmiddleなんとかだったという自分の記事をQiitaで探しても見つからなかった。
実は、そういう記事をまだ書いてなかった。

自分のプライベートメモの方にあったので転載しておく。

> DateTime > Middle Endian forms > アメリカ式の日付 / 月 日 年 / Sep. 4, 2011 / 09/04/2011 / 09-04-2011 / など

https://en.wikipedia.org/wiki/Date_format_by_country
> B – Big-endian (year, month, day), e.g. 1996-04-22
L – Little-endian (day, month, year), e.g. 22.04.96 or 22/04/96 or 22 April 1996
M – <font color=red>Middle-endian</font> (month, day, year), e.g. 04/22/96 or April 22, 1996


これで、キーワード「user:7of9 datetime」ですぐに引き出せる。
Yosemite + HWD12  上手く設定メモ

# Topic

  MACを新しく買って、今まで使った HWD12 4GLTE が初期化でうまく自動インストールできなくなったため、調べて試して、うまくいきましたので、メモします！

# 環境

HWD12 4GLTE
MAC (OS10.10.5 Yosemite)

# Solutions

Terminalで以下のコマンド実行

       sudo ln -s /bin/bash /usr/libexec/StartupItemContext

sudoなので、管理者のPWを入れたら完了！

# Why?

StartupItemContext がnot foundってなってたので、bashにリンクすることで解決。
StartupItemContextはYosemiteからなくなったよう！

# 参考

http://pblog.fiz.jp/?p=404
jsのクリックイベントをインラインと外部ファイルから同じ要素に指定した場会

案件で以下のようなHTMLがあった。
aタグ毎にカスタムリンク（解析用）のタグ(onclick)を埋め込まなければならない。
だがこちらでも、aタグにclickイベントを仕込んである。普通に書いたら、後で書いた方で上書きされてしまい、解析用のイベントはなくなってしまうのではないかと。。

```lang:index.html
<!DOCTYPE html>
<html lang="jp">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
<script src="script.js"></script>
</head>
<body>
<a href="http://www.yahoo.co.jp/" target="_blank" id="a" onclick="var param = 'abcde'; analysis(param);">click</a>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="script2.js"></script>
</body>
</html>
```

script.jsには解析用の関数が定義してある。

```lang:script.js
function analysis(a){
  alert(a);
}
```
script2.jsで色々検証してみた
**jqueryのバージョンは1.11.1**

**[jquery click]　　abcde => jquery => ページ遷移　（OK）**

```lang:script2.js
$(function(){
  $("a").click(function(e){
      alert("jquery");
  });
});
// 
```

**[jquery on]　　abcde => jquery => ページ遷移　（OK）**

```lang:script2.js
$(function(){
  $("a").on("click",function(e){
      alert("jquery");
  });
});

```

**[js onclick]　　js => ページ遷移　（駄目）**

```lang:script2.js
var a = document.getElementById("a");
a.onclick = function(){
      alert("js");
// 
}
```

**[js addEventListener]　　abcde => js => ページ遷移　（OK）**

```lang:script2.js
var a = document.getElementById("a");
function js(e){
      alert("js");
}
a.addEventListener("click", js, false);

```
GroongaのC APIでオブジェクトの中身を調べるのはgrn_inspect/grn_pが便利

Groongaの C APIではほとんどのオブジェクトがgrn_objで抽象化されており、何者かよくわかりません。

そんなときは以下のようにして``grn_inspect``を使うのが便利です。

```c

    {
      grn_obj buf;
      GRN_TEXT_INIT(&buf, 0);
      GRN_BULK_REWIND(&buf);
      grn_inspect(ctx, &buf, obj);
      printf("inspect=%.*s", GRN_TEXT_LEN(&buf), GRN_TEXT_VALUE(&buf));
      grn_obj_unlink(ctx, &buf);
    }
```

これでgrn_objの中身が何者か調べることができます。さらに、[lib/util.c](https://github.com/groonga/groonga/blob/master/lib/util.c)の各inspect関数を見れば、そのgrn_objからデータを取り出す方法までわかっちゃいます。

### 追記  
printfするだけなら、以下でも行けるようです。バッファの確保もやってくれて楽チン

```c
  grn_p(ctx, obj);
```

```
[#<element record:#<record:pat:Tags id:3 key:"Groonga" index:1 synonym:#<record:pat:Tags id:0(nonexistent)>>, weight:0>]
[#<element record:#<record:pat:Tags id:3 key:"Groonga" index:4 synonym:#<record:pat:Tags id:0(nonexistent)>>, weight:0>, #<element record:#<record:pat:Tags id:2 key:"Rroonga" index:1 synonym:#<record:pat:Tags id:0(nonexistent)>>, weight:0>]
```
CakePHP3のbelongsToメモ

リレーション絡みで調べたのでメモ

# 同一テーブル内の異なるカラムに同一テーブルへのリレーションをはる

日本語難しいね。要するに以下のようなテーブルの場合。
2つ以上のカラムがどっちもuserテーブルを指している場合。

|テーブル|
|:--|
|id|
|created_user_id|
|modified_user_id|

```php:TestTable.php
$this->belongsTo('CreatedUsers', [     // containで指定する名前
    'className' => 'Users',            // リレーション先のTable
    'foreignKey' => 'created_user_id', // FK
    'propertyName' => 'created_user',  // オブジェクトを入れるキー名
]);
$this->belongsTo('ModifiedUsers', [     // containで指定する名前
    'className' => 'Users',            // リレーション先のTable
    'foreignKey' => 'modified_user_id', // FK
    'propertyName' => 'modified_user',  // オブジェクトを入れるキー名
]);
```

# ID以外でリレーションをはる

codeでリレーションを貼りたい場合。

|テーブル|
|:--|
|id|
|user_code|

```php:TestTable.php
$this->belongsTo('Users', [      // containで指定する名前
    'bindingKey' => 'code',      // リレーション先のカラム名
    'foreignKey' => 'user_code', // FK
]);
```

# リレーション先のリレーションテーブルを持ってきたい

これも日本語難しい。
以下のテーブル構成でテーブルAからcompaniesテーブルを持ってきたい場合。

|テーブルA|
|:--|
|id|
|user_id|

|usersテーブル|
|:--|
|id|
|company_id|

|companiesテーブル|
|:--|
|id|

```php:TestController.php
$this->TableA->find('all')
    ->contain('Users', 'Users.Companies');
```
CakePHPを複数台のサーバへDeployerでデプロイするときにはキャッシュエンジンに気をつける


Deployerというデプロイツールを使って、CakePHPのアプリケーションを複数台のサーバへデプロイするときにハマった話。Deployerに限らずデプロイツールなら何でもあり得る話だと思う。

Webサーバをスケーラブルな構成にした時に、セッションやキャッシュ情報などを共有して使いたいので、RedisやMemcachedのキャッシュエンジンを使用すると思うけどCakePHPの一部の情報は **共有させてはいけない** ということが分かった…。

## _cake_core_ は各サーバでキャッシュする

`Config/core.php`の下の方にキャッシュに関する記述があるけど、デフォルトで存在している`_cake_core_`。こいつは複数台で共有してはいけない。

### _cake_core_ の中身

```
"a:67:{s:9:\"Configure\";s:82:\"/var/www/example.com/releases/20151028025606/lib/Cake/Core/Configure.php\";s:4:\"Hash\";s:80:\"/var/www/example.com/releases/20151028025606/lib/Cake/Utility/Hash.php\";s:5:\"Cache\";s:79:\"/var/www/example.com/releases/20151028025606/lib/Cake/Cache/Cache.php\";s:11:\"RedisEngine\";s:92:\"/var/www/example.com/releases/20151028025606/lib/Cake/Cache/Engine/RedisEngine.php\";s:11:\"CacheEngine\";s:85:\"/var/www/example.com/releases/20151028025606/lib/Cake/Cache/CacheEngine.php\";s:12:\"ErrorHandler\";s:86:\"/var/www/example.com/releases/20151028025606/lib/Cake/Error/ErrorHandler.php\";s:7:\"CakeLog\";s:79:\"/var/www/example.com/releases/20151028025606/lib/Cake/Log/CakeLog.php\";s:19:\"LogEngineCollection\";s:91:\"/var/www/example.com/releases/20151028025606/lib/
```

こんな感じでCakePHPライブラリへのファイルパスがキャッシュされている。

Deployerでデプロイすると（capistaranoもそうだけど）、/releases/の下にタイムスタンプでディレクトリを作成し、実ファイルを配置する。これが複数台にデプロイすると若干ずれることがある。

・サーバA : /releases/20151028025606/
・サーバB : /releases/20151028025607/

みたいに。

つまり、先にアクセスがあった方のサーバのファイルパスがキャッシュされ、別のサーバからアクセスがあった際に、そんなファイルないよーといってInternalServerErrorを引き起こす。

```php
Cache::config('_cake_core_', array(
	'engine' => 'File',
	'prefix' => $prefix . 'cake_core_',
	'path' => CACHE . 'persistent' . DS,
	'serialize' => ($engine === 'File'),
	'duration' => $duration
));
```

そういったわけで、`_cake_core_`のキャッシュ設定はなにがあっても`File`もしくは`Apc`とか各サーバで完結するようなキャッシュ方式を採用しよう。

はー…、分かっていれば常識レベルなんだろうけどなー。
CapsLockでイライラするあなたに（for Windows）

最近舌打ちが多いことに気づいたので、なにかと思ったらCapsLockキーを押してしまいせっかくの英字入力ムードがぶち壊しになったのが主な原因だと判明しました。
そんなあなたのために。

# CapsLockをCtrlキーにしましょう
Microsoftの方がツールを作ってくださっていました。
[Windows Sysinternals > ダウンロード > その他 > Ctrl2cap](https://technet.microsoft.com/ja-jp/sysinternals/bb897578.aspx?f=255&MSPPError=-2147217396)

> UNIX から Windows NT に移行したユーザーは、標準的な PC 用キーボードでは CapsLock キーが存在する場所に Ctrl キーが存在することに慣れているので、このようなユーティリティは快適に編集するうえで不可欠です。

## インストール
1. Ctrl2Capのダウンロード
2. ダウンロードしたファイルを解凍
3. cmdを管理者として開く
4. cd <解答した場所>
5. 実行：`ctrl2cap /install`
6. 再起動

```
C:\Windows\system32>cd C:\Users\<YOU>\Downloads\Ctrl2Cap

C:\Users\<YOU>\Downloads\Ctrl2Cap>ctrl2cap /install

Ctrl2cap Installation Applet
Copyright (C) 1999-2006 Mark Russinovich
Sysinternals - www.sysinternals.com

Ctrl2cap successfully installed. You must reboot for it to take effect.

```

再起動か。。（チッ）
Raspberry Pi 2 ✕ Arduino ✕ Xbee ✕ myThings = ？（IDCFクラウドの設定 Ⅰ）


[myThings](http://mythings.yahoo.co.jp)と自作のデバイスを繋げるには、IDCFクラウドを利用しないといけないので、まずはその仮想サーバーの設定から行います。
基本的には、「[めちゃ楽ガイド](http://www.idcf.jp/cloud/pdf/IDCFCloud_installation_guide_nonreg.pdf)」と「[myThingsをはじめよう](http://www.idcf.jp/cloud/iot/detail01.html)」ここを見ればだいたたできるような仕組みになっています。ただ、初心者の私は必ずどこかで穴に落ちると思うので、これを見ながらもう少し詳細に手順を追ってみたいと思います。

# IDCFクラウド　仮想マシンの作成
## ユーザー登録
まずは、IDCFクラウドの[ユーザー登録](https://console.idcfcloud.com/signup/)が必要になります。
<div align="center">
![IDCFクラウド_新規登録.png](https://qiita-image-store.s3.amazonaws.com/0/87230/8a8856d5-1e8a-f2ea-cc74-e8d6b533ed5a.png)
</div>

必要事項を入力して、電話番号認証→メール認証と進み、ユーザー登録が完了します。
次に、支払情報を登録をして下さい。
<div align="center">
![IDCFクラウド_支払い方法.png](https://qiita-image-store.s3.amazonaws.com/0/87230/736c6d15-4545-feae-12a2-1c298a4fec48.png)
</div>

これで、仮想マシンを作成する準備ができました。

## 仮想マシンの作成
いよいよ[myThings](http://mythings.yahoo.co.jp)のためのサーバーを作成します。
<div align="center">
![IDCFクラウド_仮想マシン作成_0.png](https://qiita-image-store.s3.amazonaws.com/0/87230/befeea30-0814-91a5-707d-4f389d96cadc.png)
</div>

基本的には、[めちゃ楽ガイド](http://www.idcf.jp/cloud/pdf/IDCFCloud_installation_guide_nonreg.pdf)これ通りにすすめればOK。
<div align="center">
![IDCFクラウド_仮想マシン作成.png](https://qiita-image-store.s3.amazonaws.com/0/87230/556e8628-3dba-5f5b-c730-81a02be77146.png)
</div>


- イメージは、Ubuntu Server 14.04 LTS 64-bit　を選択

- SSH　KEYは初回は、「作成」のタブを押して、適当な名前を入力して「作成(緑)」を押すと自動で作ってくれます。その後、<名前>.txtの秘密鍵がダウンロードされるので、大切に保存して下さい。

- マシン名やグループ名も適当な名前をつけて下さい。

入力が完了したら、「確認画面へ」をクリックして、確認画面で内容を確認してから「作成」をクリックすると、すぐにサーバーが構築されます。早いですねぇ〜。

ここまでくれば、もうあと一息。
次は、IDCFクラウドのネットワーク設定です。
Octave/Matlab で Date文字列をUnix timestampに変換する

octaveで日付を扱いたい時に、浮動小数点形式のmatlab timestamp(?)がやっていることの都合で不便だったのでUnix timestampに変換する関数を作った.
調べてもすぐには見つけられなかったので、ここにメモしておく.

```matlab
function timestamps = conv_datestr_timestamp(date_strs)
    if ischar(date_strs) == 1
        date_strs = cellstr(date_strs);
    end

    date_strs  = date_strs(:);
    sz         = size(date_strs, 1);
    timestamps = zeros(sz, 1);

    for n = 1:sz
        timestamps(n) = str2num(['int32(' strftime("%s", strptime(date_strs{n}, '%Y/%m/%d %T')) ')']);
    end
end


% Test code
date_strs = {"2015/10/31 14:46:59"; "2015/1/1 14:46:59"; "2018/1/1 14:46:59"};
expects = [1446270419; 1420091219; 1514785619];
assert(conv_datestr_timestamp(date_strs), expects);

assert(conv_datestr_timestamp("2015/10/31 14:46:59"), 1446270419);
```

書いたあとに気づいたがmktime関数でも似たようなことができるっぽい？
#参照リンク
[In GNU Octave, get the date and time](http://stackoverflow.com/questions/12514269/in-gnu-octave-get-the-date-and-time)
nginxでApacheのMaxRequestsPerChild相当の機能を実現する

ついカッとなって書いた。

https://github.com/cubicdaiya/ngx_bumpylife

タイトルにもある通り、[ngx_bumpylife](https://github.com/cubicdaiya/ngx_bumpylife)はnginxでApache HTTP Serverの`MaxRequestsPerChild`に相当する挙動を実現するための拡張モジュールです。


さらに言うと[ap-mod_bumpy_life](https://github.com/hirose31/ap-mod_bumpy_life)がやってるような`MaxRequestsPerChild`の値を一定範囲内でランダムにする機能も合わせて提供します。`bumpylife`という名前はこちらのモジュールから来ています。

## 使い方と動作解説

こんな感じで設定します。

```nginx
http {
    bumpylife on;
    bumpylife_min 500;
    bumpylife_max 800;
    ...
}
```

`ngx_bumpylife`は以下の3つのディレクティブを提供します。

 * `bumpylife` -> `ngx_bumpylife`を有効／無効にする
 * `bumpylife_min` -> nginxの各ワーカプロセスが終了するまでに処理するリクエスト数の下限値
 * `bumpylife_max` -> nginxの各ワーカプロセスが終了するまでに処理するリクエスト数の上限値

`ngx_bumpylife`を有効にするとnginxの各ワーカープロセスは`bumpylife_min`と`bumpylife_max`の範囲内でランダムに決定された値(`ngx_http_bumpylife_limit`)を持つようになります。ワーカープロセスは処理したリクエスト数が`ngx_http_bumpylife_limit`を越えるとgraceful shutdown modeに移行し、ゆるやかに終了します。nginxはワーカープロセスが終了するとマスタプロセスが勝手に新しいワーカープロセスを起動してくれるので、起動したまま放っておくだけでどんどんワーカープロセスが入れ替わっていく、というわけです。


ただ、複数のワーカープロセスが一斉にgraceful shutdown modeに移行してしまうとリクエストを捌くワーカープロセスが1つもない状態になってしまう可能性があるので、`ngx_bumpylife`では共有メモリ上にワーカープロセス間で次に終了させるワーカープロセスのIDを保持することで、ある瞬間にgraceful shutdown modeに移行できるワーカープロセスは常に1つになるようにしています。このため、ワーカープロセスが処理したリクエスト数が`ngx_http_bumpylife_limit`を越えてもある程度動き続ける場合があります。


例えば、あるワーカープロセスAの処理したリクエスト数が`ngx_http_bumpylife_limit`を越えても、既にgraceful shutdown modeに移行中でまだ入れ替わってないワーカープロセスBが存在している場合、ワーカープロセスAの入れ替え処理は次のリクエスト処理時まで延期されます。

## で、このモジュールって要るの？

まず最初に言っておくと、ほとんどの場合においてnginxに`MaxRequestsPerChild`相当の機能は不要です。しかし、以下のようにワーカプロセスが大量のメモリを消費しやすい、あるいはメモリリークが起こりやすい場面では「案外有用かも？」と思ってサクッと作ってみた次第です。


 * ImageMagick等の画像変換ライブラリを内包したnginxモジュール(e.g. [ngx_small_light](https://github.com/cubicdaiya/ngx_small_light))を利用する場面
 * [ngx_lua](https://github.com/openresty/lua-nginx-module)や[ngx_mruby](https://github.com/matsumoto-r/ngx_mruby)等の軽量スクリプト言語でnginx上にそれなりに大きめのアプリケーションを構築する場面

一プログラマとしてメモリの肥大化やリークを許容するのはなんだか負けた気分ですが、現実問題として外部のライブラリやモジュールでリークしてたりすると調査・解決にとても時間がかかったりするので一種のワークアラウンドとしてはまぁ、ありなのかなと思います。（実際、いろんなHTTPサーバでMaxRequestsPerChild相当の機能が実装されているわけですし）


なお、今のところ自分は使う予定はない。

## 余談

nginxはイベント駆動やノンブロッキングI/Oといったテクニックを駆使することで、個々のワーカープロセスはシングルスレッドでありながらprefork型のHTTPサーバと比べて非常に少ないプロセス数で大量の同時接続を捌くことができるアーキテクチャになっています。なので、通常はワーカープロセス数はCPUのコア数と同じくらいかその整数倍で十分です。しかし、上記の場面ではnginxが極端にCPUバウンドなワークロードを示す可能性があり、ワーカープロセス数を多めに設定する必要が出てきます。こうなってくるとnginxは徐々にprefork型のHTTPサーバとあまり変わらないワークロードを示すようになります。
【調査】Trello にデータをインポートする方法

# Trello にデータをインポートする方法

Trello にデータをインポートする方法を調査。

「下記2つのことが行えるか」「方法の当りをつける」を本調査のゴールとした。

* 【共有しやすさから】 Google Docs からのインポート
* 【汎用性から】 CSV からのインポート

インポートしたいデータは最低限、以下。

* タスク名複数 ⇒ Trelloのカード群に相当
* タスクの詳細 ⇒ Trello のカードの description に相当
* タスクの種別は「ToDo」 ⇒ Trelloの1リスト に相当。ボードは指定のもの。

# 調査結果

* × **コピペ**: 複数行のコピペすると、各行を分割して登録してくれるようだ。 ([公式Help]より)

    「タスク名」だけのインポート、かつ手動ならこれでもよい。
    詳細も一括インポートしたいので今回は、無し。

* **API** : import専用APIは用意されていない。
    
    指針としては 

    * [GET /1/members/me] でボード一覧を取得し、カードを追加したいボードの id を得ておく。
        引数: なし
    * [GET /1/boards/$board_id/lists] で、リスト一覧を取得し、「ToDo」リストの id を得ておく。
        引数: なし
    * 「Todo」リストがなければ、 [POST /1/lists] で 「ToDo」 List を作る。
        引数: `{name: "ToDo", idBoard: ボードid }`
    * [POST /1/cards] で1つカードを作る。
        引数: `{name: $タスク名, desc: $タスクの詳細, due: null, idList: $ToDoリストのid, urlSource: null }`
    * 必要なぶんだけカードを作る。
    
    RESTっぽいAPIのせいか、URLとメソッドの種類(GETやPOST)を見るとなんとなく使い方がわかる。

    [APIのテストはブラウザ上でできる](https://developers.trello.com/sandbox) (要API Key取得)

    これらを、ユーザーの動作環境や Webサービスから(Google App Script など)から叩けばよい。 
(todo: お試しは後述)


    上記は ([公式Help]より)

* **Zapierを使う** : Google Spread Sheets と連携とれるらしい。 ([公式Help]より)

    これかな？ [Create Trello cards from new Google Sheet spreadsheet rows](https://zapier.com/zapbook/zaps/124/create-trello-cards-from-google-spreadsheet-rows/)

    ⇒ 利用してみたところ、即座に反映されない？。定期的に非同期で行う形で利用する形になるか。
    (データを Google Spreadsheet に追加して反映されなくても、慌てない利用形態なら OKか)

    1. インポート元の Google Spread Sheet を作っておく。
        +. 一行目を Name, Description とした2列を作成
        *. 2行目以降は、 タスク名, 詳細(markdown形式) で書いていく
    2. インポート先の Trello のボードとリストを作っておく
    4. [Create Trello cards from new Google Sheet spreadsheet rows](https://zapier.com/zapbook/zaps/124/create-trello-cards-from-google-spreadsheet-rows/) から順に設定
    5. 気長に待つ


# todo: APIのお試し


[公式Help]: http://help.trello.com/article/751-importing-data-into-trello
[PUT /1/members/me]: https://developers.trello.com/advanced-reference/member#get-1-members-idmember-or-username-boards
[GET /1/boards/$board_id/lists]: https://developers.trello.com/advanced-reference/board#get-1-boards-board-id-lists
[POST /1/lists]: https://developers.trello.com/advanced-reference/list#post-1-lists
[POST /1/cards]: https://developers.trello.com/advanced-reference/card#post-1-cards
データフローオーケストレーションツールApache NiFiとは？

最近データフローオーケストレーションツールである[Apache NiFi](https://nifi.apache.org/)が面白いため、実際どういうものなのか、の概要をまとめてみます。

## Apache NiFiとは？
一言で言うと、データフローオーケストレーションツール、となります。
元々は米国家安全保障局（NSA）が開発していた「Niagrafiles」というプロダクトで、2014年11月にオープンソースとして寄贈されました。
下記の画像のように、画面上でストリーム処理を行うデータフローを定義し、動作させることが出来ます。
参照：https://nifi.apache.org/
<img width="800" alt="flow.png" src="https://qiita-image-store.s3.amazonaws.com/0/9616/36d0a805-87e2-e086-f6aa-ff30f0ec6b75.png">


2015年7月にApacheのTopレベルプロジェクトになり、開発が進められています。
また、2015年8月下旬には、NiFiを手がける企業Onyaraが、Hortonworksによって買収され、HortonWorksからNiFiの独自ディストリビューションである「HortonWorks DataFlow」が提供されています。
"移動するデータ"であるNiFiと、"静止しているデータ"であるHadoopを組み合わせることで、より広い範囲のデータを扱えるようにしよう・・という狙いのようです。

## Apache NiFiの特長
[Apache NiFi](https://nifi.apache.org/)のトップページより、NiFiには下記のような特長があります。
NiFiは、スケーラブルなデータフローを有向グラフとして定義し、データのルーティング、変換、中間ロジックを組み合わせることが出来ます。
下記のような機能を有しています。

- WebベースUI
    - 設計、制御、フィードバックや監視がシームレスに実行可能
- 高い設定性
    - 信頼性と速度をどちらを取るかの調整
    - 低レイテンシと高スループットの調整
    - 動的な優先順位付け
    - フローを動作中に変更可能
    - バックプレッシャー機構
- データ由来の明確化
    - データフローをはじめから最後までトラッキング
- 拡張に対して開かれた設計
    - 自前でプロセッサを開発可能
    - 高速な開発と容易なテストが可能
- セキュア
    - SSL、SSH、HTTPS等暗号化方式をサポート
    - プラガブルなロールベースの認証／認可

と、言う感じで概要を見れば見る程わくわくしてくる要素満載になっています。
以前この手のデータ変換処理を[Apache Camel](http://camel.apache.org/)等で書いていたことがあるのですが、それが画面から定義できるようになり、かつスケーラブルに動作させることができるというのは相当大きいと思います。

## とりあえずNiFiを起動させてみる(Windows)

まず手始めにとりあえずNiFiを起動させてみます。

といっても起動するだけなら[DownloadPage](https://nifi.apache.org/download.html)からNiFiのアーカイブをダウンロードし、展開して下記のバッチを実行するだけです。
![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/9616/1fefc429-3ba0-3c6c-1eeb-837f4e0ab784.jpeg)

実行後、下記のアドレスにアクセスすると、NiFiの画面が表示されます。
データフローを定義できるメニューがそろっていますね。
http://localhost:8080/nifi/
![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/9616/cc160bf5-5365-1e67-802b-5863d5b3b5e1.jpeg)

## 最後に
NiFiとは何か、のさわりのさわりだけをまとめて、後は実際に起動だけさせてみました。
次回以降はまずは一パターン動作させてみて、その後NiFiのOverviewやアーキテクチャを見てみようと思います。
技術英語 > xxx,  if I'm not mistaken. > Correct me if I'm wrong,  / If my remember is correct, 

@ Star Trek Voyager > THE 37's

エピソードの中である物を見つけたJaneway艦長が発した言葉

> xxx,  <font color=red>if I'm not mistaken</font>.

「私が間違ってなければ、xxxね」
というような訳がつくのだろう。
(字幕では訳が省略されていた。)

<hr>
関連して思い出したのは1

> <font color=red>Correct me if I'm wrong,</font> but Neelix is a cat.

Voyagerのどこかのエピソードでトム・パリスが発した言葉。夢の中?で出てきたNeelixという猫の話をしている場面。

<hr>
関連して思い出したのは2

http://lkml.iu.edu/hypermail/linux/kernel/1205.0/00514.html
> <font color=red>If my remember is correct,</font> the reproducer of past thread is misleading.

「私の記憶が正しければ」というような訳がつく。

これもVoyagerで出てきたのだが、どのエピソードか失念した。
Riot.js + Webpackを少しだけ便利にするloaderを書きました

結論。styleタグ内で import, url() を使えるようにしたWebpack用のloaderを書きました。全てをtagファイル内に収めたい方には便利なものだと思うので、ぜひ使ってみてください。-> [riotjs-style-plus-loader](https://github.com/dekimasoon/riotjs-style-plus-loader)

***

[Riot.js](http://riotjs.com/)をお使い／興味をお持ちの皆様こんにちは。 
先日2.3.0がリリースされ、よりパワーアップ／安定感の増してきたRiot.js、日本からは@cognitom様がContributorとして活躍されています。この機会にぜひぜひ手を伸ばしてみてはいかがでしょうか。

さて、そんなRiot.jsの魅力といえば、以下のような直感的な記述でcomponentが作れることですよね！

```html:welcome.tag
<welcome>

  <p>Welcome to Riot!</p>
  <button onclick={ showMessage }>Click Me!</button>
  
  <script type="es6">
    this.showMessage = () => {
      console.log('Excuse me from the console.')
    }
  </script>

  <style type="text/stylus" scoped>
    :scope
      font-size 16px
      height 200px
      background url('./background.png')
  </style>

</welcome>
```

全てがwelcome.tagという1ファイルに収まっていて気持ちが良いですね…？（好み、規模にもよると思います）。しかし唯一残念に感じていたのが、styleタグ内でimportを使えないことです。特にStylusやSassをお使いの人は、泣く泣くStyle部分を外出しにして、

```html:welcome.tag
require('./welcome.styl')

<welcome>

  <p>Welcome to Riot!</p>
  <button onclick={ showMessage }>Click Me!</button>
  
  <script type="es6">
    this.showMessage = () => {
      console.log('Excuse me from the console.')
    }
  </script>

</welcome>
```

などとしていたのではないでしょうか。style部分はRiot.jsのcompilerで文字列にされてしまうので、どうしたものかと悩んでいたのですが、先ほど良い方法を思いついたのでloaderにしてみました。-> [riotjs-style-plus-loader](https://github.com/dekimasoon/riotjs-style-plus-loader)

処理内容は、Riot.jsのcompilerにはstyle部分を削ったタグを渡して、別途style部分のみ取り出したものを適切なCSS系のloaderに渡してやる、という感じです。エディタのハイライト以外はうまく動いているので、1ファイルにまとめたい派の方は是非使ってみてください。webpack-dev-serverのlive reloadingも期待通りに動作すると思います。

なお折角のScoped CSSには未対応です。基本的にはstylus等を用いて、

```html:goodbye.tag
<goodbye>
  <p>GoodBye!<p>
  <style type="text/stylus">
    @import "common.styl"
    goodbye
      p
        background url('./background.png')
  </style>
</goodbye>
```

という感じに使われると思います。バグ／英語がやばい箇所などあればぜひぜひご連絡ください。Rioterが増えることを願って！
PHP で Redmine に添付画像付のチケットを登録する


WEBアプリケーションのユーザーからの不具合の報告フォーム & [Html2Canvas](http://html2canvas.hertzen.com/) と連携して自動でチケットに起票するなど利用価値はありそうです。

利用したライブラリはこちら
[Redmine API](http://www.redmine.org/projects/redmine/wiki/Rest_api/)

```php
require_once 'php-redmine-api-1.5.1/lib/autoload.php';

$image = file_get_contents('image_path');

$client = new \Redmine\Client('REDMINE URL'
	, 'REDMINEユーザー名'
	, 'REDMINEパスワード'
);

$upload = json_decode($client->api('attachment')->upload($image));
$client->api('issue')->create([
	'project_id' => '1',
	'subject' => $strSubject,
	'description' => $strBody,
	'uploads' => [
		[
			'token' => $upload->upload->token,
			'filename' => 'screenshot.png',
			'description' => 'スクリーンショット',
			'content_type' => 'image/png'
		]
	]
]);
```
格安SIMを選ぶときに注意すべき2つの速度制限タイプ

## はじめに
格安SIM（MVNO）が当たり前になってきました。格安SIMを選ぶとき、利用できるデータ量や価格をもとに選ぶと思いますが、意外な落とし穴が、通信速度制限。せっかく大容量の通信量プランを契約しても、規制されたのでは意味がありません。

ここでは、通信量の規制のされ方によって2タイプに分類してみました。自分の使っている/使おうとしているMVNOがどちらのタイプなのかを知って、うまく活用していきましょう。

## 前提
- 高速通信とは、おおむね100Mbpsを超える通信を指します。多くの場合、プランに応じて上限が設けられています。
- 低速通信とは、おおむね200kbps程度の通信を指します。アプリ等で高速通信と切り替えて使うことができ、使用量の上限がないことが多いです。

## 2つのタイプ
大きく分けて、高速通信を制限するタイプと、低速通信を制限するタイプがあります。

## ①高速通信制限タイプ
これは、「一人当たりの分け前は決まってんだよ」タイプです。
多くの場合、3日間での上限値が決まっており、上限値を超えると通信規制がかかります。例えば10GBとか、いくら大容量のSIMを契約してしまっていても、1日で10GB枠をすべて使い切るといった使い方をすることができません。

### このタイプに向いている人
- 毎日少しずつ使用する人（毎日の使用量に偏りが少ない人）
- 通信量節約のために、よく低速通信に切り替える人

### このタイプのMVNO
- NifMo
- 楽天モバイル
- BIGLOBE SIM（音声通話スタートプラン、エントリープラン）
- b-mobile
- Wonderlink LTE
- So-net モバイル LTE
- UQ mobile
- U-mobile

## ②低速通信制限タイプ
これは、「無料枠ばっかり使ってんじゃねーよ」タイプです。
高速通信と低速通信がアプリ等で切り替えることのできるMVNOで、低速通信での使用量が一定値を超えると規制がかかります。低速通信は無料で無制限に使えることが多いため、このような規制がかかっています。

このタイプは、逆に無料枠でない高速通信に切り替えれば規制に関係なく使えることが多いです。

### このタイプに向いている人
- 使う量に偏りがある人
- 制限に引っかかったら、追加で容量を購入してもよい人

### このタイプのMVNO
- IIJ mio
- DMM mobile

## 通信速度制限？うっとおしい！！という人は
通信速度のないMVNOを選びましょう。

- ぷららモバイルLTE
- OCN モバイル ONE
- freetel mobile
- mineo
- BIGLOBE SIM（ライトSプラン、12ギガプラン）

## まとめ
MVNOは、使用量の多い人をいかに減らして、同時に使える人数を増やすことで、コストを削減しています。ですから、何らかの制限がかかって使いにくくなる分、価格も抑制されています。
自分の使い方にあったMVNOをうまく選んで、低価格ながらも快適に使えるMVNOを探しましょう。

## 補足
上記にいくつかMVNOを挙げましたが、制限がかかりはじめる量や計算式は各社違いますし、それらを公開していないところもあります。また、制限が確実にかかるか、時間帯によってかかる"場合がある"というケースもあり、各社まちまちです。契約前によく調べましょう。
UnityのAsset紹介

## 概要
所持しているアセットや今後購入したいアセットをまとめます。
※数が多かったので種類ごとにページ分けすることにしました。

## 3Dモデル
http://qiita.com/takesuke/items/35c3e994a889397f7102

## エディタ拡張
http://qiita.com/takesuke/items/e3f801cea104c01e2e38

## 完成プロジェクト
http://qiita.com/takesuke/items/19668a08517cbe1dd2fc

## シェーダー
http://qiita.com/takesuke/items/b4f84bd61c4edb31d5b1

## スクリプト
http://qiita.com/takesuke/items/3571af0d00990d5b2e68

## particleシステム
http://qiita.com/takesuke/items/ba4664e2c99ce518a779

## テクスチャ＆マテリアル
http://qiita.com/takesuke/items/f30197d19397d59f6d95

## メモ
http://qiita.com/tempura/items/856e369d3e953e5829e6
http://qiita.com/ayumegu/items/ae498a4801e1718214eb

## アセット紹介サイト
http://assetsale.hateblo.jp/
Nginx + WordPress を 1分で構築する CHEFクックブック 

# 概要
SoftLayer上のサーバーで、WordPressを約1分で設定するクックブック(GitHub https://github.com/takara9/wordpress01) の紹介です。

CHEFをできるだけ簡単に利用する方向で見直すと、こんな事が出来ました。 knife や chef server も使っていません。curl と git で取得して、chefコマンドを実行するだけの超簡単作業で、プロビジョニング完了後、約３分でWordPressを使い始める事が出来ます。

# 作業手順と実績時間

仮想サーバーをオーダーして、プロビジョニングが完了したら、root でログインして、以下のコマンドを実行します。

```
# apt-get install -y curl git
# curl -L https://www.opscode.com/chef/install.sh | bash
# knife cookbook create dummy -o /var/chef/cookbooks
# git -C /var/chef/cookbooks clone https://github.com/takara9/wordpress01
# chef-solo -o wordpress01
<中略>
Running handlers complete
Chef Client finished, 34/43 resources updated in 01 minutes 00 seconds
```

このクックブックを利用した場合、sshでログインしてから、CHEFで設定して、WordPressのページが利用出来るまでの実績時間は、約3分でした。

このクックブックの適用が完了すると、以下のページにアクセスする事ができます。
http://サーバーのIPアドレス/wordpress/

![スクリーンショット 2015-11-09 0.40.21.png](https://qiita-image-store.s3.amazonaws.com/0/42829/7c42cbcf-3b09-1bb6-f91f-fec4f750be92.png)

# 前提条件

最小実行条件を次の表に書きます。 最初は最小条件で稼働させておき、アクセス量などの負荷に応じてCPUコア数やメモリ量など増設すると良いでしょう。

<table>
  <tr>
    <th>項目</th>
    <th>数量／種類</th>
    <th>備考</th>
  </tr>
  <tr>
    <td>CPUコア数</td>
    <td>1 x 2.0 GHz Core</td>
    <td></td>
  </tr>
  <tr>
    <td>メモリ(RAM)</td>
    <td>1GB</td>
    <td></td>
  </tr>
  <tr>
    <td>First Disk</td>
    <td>25GB (LOCAL)</td>
    <td></td>
  </tr>
  <tr>
    <td>OS</td>
    <td>Ubuntu Linux 14.04 LTS Trusty Tahr - Minimal Install (64 bit) </td>
    <td></td>
  </tr>
</table>

# クックブックの説明
レシピ (https://github.com/takara9/wordpress01/tree/master/recipes) を読まないで、概要を知りたい方のために、箇条書きでご紹介します。

- リポジトリから最新状態に更新
- Nginx と php-fpm の導入とWordPressの実行用設定
- MySQL の導入とユーザー作成、アクセス権作成、DB作成などの設定
- Wordpressの最新版の導入

これだけの設定を実施するには、Linuxに慣れていても数時間は必要かもしれません。しかし、このレシピは、約１分で作業を間違いなく完了させるものです。


# ファイアウォール設定も含めて早くする方法
サーバーのオーダー時に、ファイアウォール設定、日本語環境設定、日本時間のタイムゾーン設定を実施して、WordPressまでを導入する便利なプロビジョニング・スクリプトの例を用意しました。 このスクリプトは、https://github.com/takara9/ProvisioningScript/blob/master/ubuntu_chef_config においてあります。
サーバーのオーダー時に、プロビジョニング・スクリプトを実行する方法は、ソフトレイヤー活用ガイドの 1.2.2 設定スクリプトの自動実行 (https://www.change-makers.jp/post/10294) を参照願います。

https://github.com/takara9/ProvisioningScript の "ubuntu_chef_config" では、プロビジョニング・スクリプトの中から、CHEFを実行して、WordPressの実行環境を設定する方法を紹介しています。
Arduino で昇圧チョッパー回路


Arduino の電源(5V)から昇圧チョッパー回路でもっと高い電圧を得たい。方法は

- http://kamiya.hatenadiary.jp/entry/2015/01/15/130902
- http://circuitcellar.com/ee-tips/arduino-based-diy-voltage-booster-ee-tip-117/

等にあるとおり、昇圧チョッパーで電圧を上げ、抵抗分圧で目的の電圧になるよう制御する。Arduino の ADC は 5V 以下を 0~1023 で取得できるので、その値を見つつ、トランジスタ(MOSFET)へデューティー比を考慮して PWM で出力する。

![20151109-DSC04589.jpg](https://qiita-image-store.s3.amazonaws.com/0/5330/348a2ad3-bb6e-60f5-2137-6da4ed988845.jpeg "20151109-DSC04589.jpg")


今回は手元に MOSFET が無いため、トランジスタは手元にあった2SC1815を使用。高い電圧にするとトランジスタ死にそうなので、控えめの昇圧になるように。R2 を 47K, R1 を 30K の抵抗にしたので、ADC で 1023(=5V) になる電圧は 5V / (30 / (30 + 47)) = 12.83V なので、約12.8V へ昇圧されれば成功。

Arduino の昇圧するためのコードは

- http://kamiya.hatenadiary.jp/entry/2015/01/15/130902

にかかれてるコードそのままで。回路図はこんな感じで作った。

![スクリーンショット 2015-11-09 1.15.23.png](https://qiita-image-store.s3.amazonaws.com/0/5330/37e96ffd-9a0a-b797-357f-8e56b3483906.png "スクリーンショット 2015-11-09 1.15.23.png")

実行したところだいたい 12.5V で安定してる。

![20151109-DSC04594.jpg](https://qiita-image-store.s3.amazonaws.com/0/5330/8cc8bcb2-85b6-325d-1028-bab2b2e12eb9.jpeg "20151109-DSC04594.jpg")
Elastic Beanstalkで安全なsshを設定する

* Elastic Beanstalkでは、インスタンス起動時に自動的に生成され紐付けられるSecurityGroupがある
* このSecurityGroupではまず80番ポートがSource any(0.0.0.0/0)で開放されており
* さらにkeypairを設定するとさらにssh(22)番ポートがSource anyで開放されるルールが自動的に付与されてしまう。
  * アクセス元を制限したい(bastion経由onlyなど)

次のようにすると対策できる

1. Environmentを作るときにkeypairをセットしない
2. 起動時に.ebextensionsでkeypairをセットする
3. 自分で指定するSecurityGroupの方で、sshに関する許可ルールを記述する

## 2. 起動時に.ebextensionsでkeypairをセットする

* ``hoge`` の部分は自分のkeypair に置き換え。

```yaml:.ebextensions/00_set_keypair.config 
option_settings:
  - namespace: aws:cloudformation:template:resource:property
    resource_name: AWSEBAutoScalingLaunchConfiguration
    option_name: KeyName
    value: hoge
``` 

なお、オフィシャルでみても、``aws:autoscaling:launchconfiguration``で設定できる、と書いてあるんだけど、何回やってもダメだった。
Ionicフレームワークの開発情報

# Ionic Framework
- 基盤フレームワーク
    - CSS：SCSS
    - JS：AngularJS v1.4.3
    - Device Util : Cordova 
    - Dependencies : Bower.js
    - Build : Gulp.js
- 提供されるもの
    - CSS Components : CSSモバイル部品
    - JavaScript : AngularJSの拡張したソースコード
    - The Ionic Book : Ionic Frameworkの簡単なガイドブック
    - Ionicons : 500個以上のアイコン
    - HTML5 Input Types : モバイルの入力タイプ
    - Community Forum : 色々なQAすることが可能。
    - Demos : デモ、例、テンプレートなど
    - CLI FAQ : よく使われるコマンド(Cordova, Node, NPM,Androidなど)

# AngularJS
- 学ぶAngularJS : [Tutorial](https://code.angularjs.org/1.4.7/docs/tutorial)文書
- Online講座 : CodeSchoolの[Shaping up with Angular.js](http://campus.codeschool.com/courses/shaping-up-with-angular-js/intro)