OmniAICreator/Qiita-1.07M huggingface dataset:
【備忘録】initの動作検証

#意味のある検証かどうかは置いておいて・・・

スーパークラスのイニシャライザはsuper.init()を明示しなくても自動的に呼ばれる。
ただし、この時の呼び出し順はサブクラス→スーパークラスの順番。

```swift（オーバーライド時にsuper.init()なし）
class Parent {
    let name:String = "Parent"
    init(){
        print("\(name)")
    }
}

class Child : Parent {

    let childname:String = "Child"
    override init(){
        print("\(childname)")
    }

}

class Grandson : Child {
    
    let grandsonname:String = "Grandson"
    override init(){
        print("\(grandsonname)")
    }
}

let grandson = Grandson()


//結果： Grandson
//      Child
//      Parent
```

オーバーライドでinitの直後にsuper.init()を入れた場合、スーパークラス→サブクラスの順に呼び出される。当たり前か。


```swift（オーバーライド時にsuper.init()あり）
class Parent {
    let name:String = "Parent"
    init(){
        print("\(name)")
    }
}

class Child : Parent {

    let childname:String = "Child"
    override init(){
        super.init() //追加
        print("\(childname)")
    }

}

class Grandson : Child {
    
    let grandsonname:String = "Grandson"
    override init(){
        super.init() //追加
        print("\(grandsonname)")
    }
}

let grandson = Grandson()


// 結果：Parent
//      Child
//      Grandson

```

試しにGrandsonクラスのsuper.init()の位置を入れ替えてみた。
super.init()がイニシャライザを明示的に呼び出している。当たり前か。

```swift（super.init()位置を入れ替え）
（省略）
class Grandson : Child {
    
    let grandsonname:String = "Grandson"
    override init(){
        print("\(grandsonname)")
        super.init() //上から移動
    }
}

let grandson = Grandson()

// 結果：Grandson
//      Parent
//      Child
```
super.init()を思い切って消してみた。
するとsuper.init()の位置を入れ替えた時と同じ結果になった。当たり前か。
もしかして、super.init()を省略しても、イニシャライザの最後に自動的に組み込まれているのかも？

```swift（super.init()を削除）
（省略）
class Grandson : Child {
    
    let grandsonname:String = "Grandson"
    override init(){
        print("\(grandsonname)")
    }
}

let grandson = Grandson()

// 結果：Grandson
//      Parent
//      Child
```
Python でデータ可視化 - カッコいいヒートマップを描こう


#Pythonでのグラフ描画

Pythonチャートを描く場合の定番は「matplotlib」ですが、その見た目のやや野暮ったい感じと、
表記法のややこしさが指摘されています。

そこで、この記事ではMatplotlibの機能をより美しく、またより簡単に実現するためのラッパー的存在である、「Seaborn」の使い方を取り上げます。
Seabornについてと、初歩的な使い方については下記リンクをご覧ください。

◆pythonで美しいグラフ描画 -seabornを使えばデータ分析と可視化が捗る その1
http://qiita.com/hik0107/items/3dc541158fceb3156ee0


#ヒートマップ

seabornでは下記のように美しいヒートマップを描くことが出来ます
（SeabornのTutorialサイトより抜粋）

見た目にもインパクトがあり、数字があまり得意でない人にもウケがよかったりするので、重宝します。
使い方を覚えておいて損はないと思います。

![image](https://qiita-image-store.s3.amazonaws.com/0/68432/842b671a-2858-627b-ccd9-7e81adb3c716.png)

>参考)
http://stanford.edu/~mwaskom/software/seaborn/examples/many_pairwise_correlations.html


#やり方

ではやり方を説明していきます。
必要な下記のライブラリをインポートしておきます

```python:prepare.py
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
```

データを用意し、読みこませる形式に変換します。
seabornにはいくつかのデータセットがデフォルトでバンドルされているのでそれを使っていきましょう。
今回は『flights』というデータを使ってみます

```python:data.py
df_flights = sns.load_dataset('flights')
df_flights.head(5)
```

headでみてみると、yearとmonthでひたすら縦に伸びたデータであることがわかります。

```python:data.py
	year	month	    passengers
0	1949	January	    112
1	1949	February    118
2	1949	March	    132
3	1949	April	    129
4	1949	May         121
```

ここで仮に、yearとmonthの2軸でpassengersにどのような傾向があるか興味があるとしましょう。
つまり、x-year,y-monthのヒートマップを描くことにします。

ヒートマップはsns.heatmap という関数で描けますが、喰わせるデータに工夫が必要です。
xに持ってきたい軸をindexに、yに持ってきたい軸をcolumnに持つPivot形式に直してやる必要があります

```python:data.py
df_flights_pivot = pd.pivot_table(data=df_flights, values='passengers', 
                                  columns='year', index='month', aggfunc=np.mean)
```

Python Pandasでのデータ加工に馴染みがない方は下記あたりを参考にしてみてください。

##参考：Pythonによるデータ加工
Python Pandasでのデータ操作の初歩まとめ − 前半＆後半
http://qiita.com/hik0107/items/d991cc44c2d1778bb82e
http://qiita.com/hik0107/items/0ae69131e5317b62c3b7



あとは、Pivot形式にしたdataframeをseabornに与えるだけです

```python:draw.py
sns.heatmap(df_flights_pivot)
```

こんな感じの図が表示されます。
1949年から年を追うごとに全体的に乗客数が増加し、特に7~8月あたりは
特に乗客数が多いことが一発で見て取れます。
また、毎年11月はやや客数が落ち着き、12月はまた増加するようですね。

![image](https://qiita-image-store.s3.amazonaws.com/0/68432/3b433f8d-c0d7-30e6-ebe6-3d809e5f302d.png)



#もう少しお化粧

上記図のままでもいいのですが、もう少し見せ方を変えるためにお化粧を施してみましょう。
例えばこんな感じです

```python:draw.py
plt.figure(figsize=(12, 9))
sns.heatmap(df_flights_pivot, annot=True, fmt='g', cmap='Blues')
```

annotは数値をセルに書き込む引数、fmtは数値の桁の調整、cmapはColour_mapのことで、
グラディエーションの色のパレットを指定します。

このようになります。具体的な数値を見ながら議論したいときはこっちのほうがよいでしょう。

![image](https://qiita-image-store.s3.amazonaws.com/0/68432/390fc30d-9541-807e-11a0-b10a6412c85d.png)


#こちらの記事も
pythonで美しいグラフ描画 -seabornを使えばデータ分析と可視化が捗る その1
http://qiita.com/hik0107/items/3dc541158fceb3156ee0

pythonで美しいグラフ描画 -seabornを使えばデータ分析と可視化が捗る その2
http://qiita.com/hik0107/items/7233ca334b2a5e1ca924

データサイエンティストに興味があるならまずこの辺りを見ておきな、って文献・動画のまとめ
http://qiita.com/hik0107/items/ef5e044d2f47940ba712
VBAHaskellの紹介 その25（乱数生成：メルセンヌ・ツイスタ mt19937）

(2016/1/5)　新しく追加した discrete_dist と random_shuffle の説明を追記。

***
VBAHaskellに乱数列を生成するモジュールを追加した。
擬似乱数列生成器の1つであるメルセンヌ・ツイスタ、正確に言うとC++11の標準ライブラリ`std::default_random_engine` の実装として今の Visual C++ が採用している`mt19937`を使った。
VBAのRnd関数よりも高品質な乱数を高速に得ることを目的としている。

新規ファイルとしてC++側に [VBA_Random.cpp](https://github.com/mYmd/VBA/blob/master/VBA_Random.cpp)、VBA側に [misc_random.bas](https://github.com/mYmd/VBA/blob/master/misc_random.bas) を追加した。
今のところ実装しているのは乱数ジェネレータと５つの分布と２つのユーティリティだけだ。

|関数名|機能|引数|返り値|
|:----|:------|:---|:----|
|seed_Engine| 乱数ジェネレータを初期化 |シード値整数(Optional)|シード値|
|uniform_int_dist|一様整数乱数の生成|個数、from、to|乱数値（スカラ/配列）|
|uniform_real_dist|一様実数乱数の生成|個数、from、to|乱数値（スカラ/配列）|
|normal_dist|正規分布乱数の生成|個数、平均、標準偏差|乱数値（スカラ/配列）|
|bernoulli_dist|ベルヌーイ乱数の生成|個数、true確率|乱数値（スカラ/配列）|
|discrete_dist|離散分布の生成|個数、発生比率配列|乱数値（スカラ/配列）|
|random_iota|iotaのランダム版|スタート、エンド|ランダムに並んだiota|
|random_shuffle|配列のランダムな並べ替え|配列|並べ替え後の配列|

分布関数は引数の「個数」が1以上の時は配列を返し、1未満の場合は単一の値を返すようにしている。疑似乱数なので seed_Engine に同じシード値を代入すると同じ乱数列を再現することもできる。通常はシード値を省略してデフォルトの（その度に違う）値を使えばよい。
random_iota はスタートからエンドまでの整数がランダムに並んだ配列を返す。
random_shuffle は引数に渡した配列の要素をランダムに並べ替えた配列を返す。

**サンプルプログラム**

```vbnet
?seed_Engine()     ' デフォルトの初期化(std::random_deviceを使用)
 1889001354        ' 結果的に使われたシード値
N = 1000000
m = normal_dist(N, 0, 1)     ' 標準正規分布列を 1,000,000 個生成（けっこう速い！）
' 平均値
mean = foldl1(p_plus, m) / N 
' 標準偏差
stddev = (foldl1(p_plus, mapF(p_mult, mapF(p_minus(, mean), m))) / N) ^ 0.5
' 累積密度
density = foldl1(p_plus, mapF(p_less(, 1.0), m)) / N
?mean  stddev  density
 2.75740534904507E-04  1.00073839053398  0.84098 
```

標準正規分布における 1σ（片側） は0.8413447...だが、100万個だとこんなものなのだろう。
乱数列の生成はあっけないほど速い。それに対してVBAHaskellで求めた平均値や標準偏差は非常に遅い。これらを求める関数は別途作ることになるかもしれない。

次にサイコロの出目を作ってみる。

```vbnet
?seed_Engine()     ' デフォルトの初期化(std::random_deviceを使用)
 1593330603        ' 結果的に使われたシード値
' サイコロを100万回振る
m = uniform_int_dist(1000000, 1, 6)
' 出目=1,2,3,4,5,6に等しいかそれぞれ判定
eachN = mapF(p_mapF(p_equal(yield_1), m), Array(1, 2, 3, 4, 5, 6))
' 2次元配列にバラして(unzip)横方向に加算する
printM foldl1(p_plus, unzip(eachN,2), 2)
  166501  166990  166108  167039  166455  166907
?1000000 / 6      ' 確率は1/6
 166666.666666667 
```

次は **discrete_dist** を使って離散分布を作り、モールス符号のような文字列を作成してみる。

```vbnet
' (0, 1, 2)が順に出現比率 3:1:2 で離散分布する長さ48の配列
m = discrete_dist(48, Array(3, 1, 2))
printM m
  2  0  0  0  1  2  2  2  0  2  2  2  0  1  2  0  1  2  0  2  1  2  0  0  1  0  2  0  2  2  0  0  0  2  0  2  0  0  1  0  2  0  1  1  2  2  0  0
' m を Array("・"," ","-") から要素を取得するインデックスとして使って
' 0 => "・",  1 => " ",   2 => "-"  にそれぞれマップする
s = mapF(p_getNth(, Array("・"," ","-")), m)
?Join(s, "")
-・・・ ---・---・ -・ -・- -・・ ・-・--・・・-・-・・ ・-・  --・・
```

次は **random_shuffle** を使って配列をランダムにシャッフルする。

```vbnet
m = iota(1, 20)
printM m
  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20
m = random_shuffle(m)
printM m
  13  20  4  1  5  6  12  14  16  17  18  7  10  15  11  19  8  3  9  2
```

* * *
[VBAHaskellの紹介 その24（yield式の導入～lambdaExprの廃止）](http://qiita.com/mmYYmmdd/items/a24c21e7d17f8f300327)
[VBAHaskellの紹介　その1　（最初はmapF）](http://qiita.com/mmYYmmdd/items/c731edf943acc0a0ebe9)
[GitHub VBAHaskell](https://github.com/mYmd/VBA)
LaTeX用 Makefile作成計画


---
MakefileおよびLaTeXテンプレート管理手法のアイデアまとめました。
[こちら](http://qiita.com/inon3135/items/71ba84c32fedf870ca98 "[TeX][Makefile] アイデア")

---

とりあえず版、できました。[inon3135@MakeTeX](https://github.com/inon3135/MakeTeX "MakeTeX")

---
---

正直syncとかあんまりいらない。
そもそも編集しているところ以外はコンパイルしないから殆ど探すことがない。
むしろ似たような名前で大量のファイルがゴチャッとしているのが許せない。
あとPDF用の画像やtexファイルは一つのディレクトリにまとめたいけど、
画像は元データフォルダにも欲しいからコピー、ついでにログを出力して欲しい。
あと書いてて追加したpackageやnewcommandなんかは個人的なテンプレートとして同期したい。

# 要求

+ ファイルを種類別にフォルダ分けする。
+ 画像ファイルは別の場所からコピーして使い、コピー元のログを作成する。
+ backnumberを簡単に作成する。
+ check用コンパイルとsubmit用コンパイルを簡単に切り替えられるようにする。
+ aux更新による再コンパイルはある程度自動でやってくれる。

## ファイルを種類別にフォルダ分けする

戦犯 = latex
同名異拡張子のファイルいくつ作っているのがわかりゃしない。
なんで既存の$\mathrm{\TeX}$ editorはそれを問題視しないのか。
で、`latex --help`みてみたら案の定いる`-output-directory=DIR`のオプション。
今時dviファイルでチェックもしないのでdvipdfmxでpdf化するときに
pdfだけ.texファイルと同じにして、他のファイルは子ディレクトリに移してしまえばいい。

## 画像ファイルは別の場所からコピーして使い、コピー元のログを作成する。

研究データを可視化して論文を書くとき、プロットなんかはepsやpdfにして貼り付ける。
論文や文章ドキュメントに貼り付けた画像は、元のデータがどこかを知りたい。
またデータを漁っている時、そこに可視化された画像ファイルがあると助かる。

以上のことから、データの可視化画像はデータフォルダに。
$\mathrm{\TeX}$用画像はそのコピーとして生成され、**コピー元のログを記録**すること。

この機能はコンパイル時ではなくコピー時に必要なので、shellから実行可能なスクリプトとして作成する。
\>\>
とりあえずバージョンだけど[できました](http://qiita.com/h-nozomu/items/75062dbac2a936aec508 "copy with log: coding by python")
- - -
- - -

## backnumberを簡単に作成する。

gitで管理すれば手動バージョン管理なんていかない、なんてことはイカの塩辛。
コードと違って文章はそう簡単にmargeなんかしたくないことが多々あるのです。
それに言い回しを考えている時にbranchやcommit commentなんて考えたくない。

## check用コンパイルとsubmit用コンパイルを簡単に切り替えられるようにする。

意外と$\mathrm{\TeX}$のコンパイルは時間がかかる。画像なんて貼るとそれはそれは。
加えて自分がcheckしたい時用の体裁と、誰かに観てもらうための体裁は異なる。
(もちろん観てもらう形式でも最後にチェックするけど)
書いているときは書いている場所だけ気軽に書きたい。

## aux更新による再コンパイルはある程度自動でやってくれる。

なんで$\mathrm{\TeX}$って.auxファイル作成するコンパイルと
.auxファイル使うコンパイルが同時に行われるんだろうね。
とりあえず定番だけど、.logファイルあさって2回までは自動でコンパイルするようにしたい。
理想としては

```sh:bibcompile=on
    $ latex <file>.tex
    $ bibtex <file>.aux   # if needed
    $ latex <file>.tex    # if needed
    $ latex <file>.tex    # if needed
    $ dvipdfmx <file>.dvi
```

```sh:bibcompile=off
    $ latex <file>.tex
    $ latex <file>.tex # if needed
    $ dvipdfmx <file>.dvi
```

ぐらいのスマートな奴が欲しい。
【備忘録】NavigationControllerの下線を削除する

# 結論
下記処理を記載すると、アプリ内で使用するNavigationBarは下線が削除される。

```swift

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
        UINavigationBar.appearance().shadowImage = UIImage()
        return true
    }

```

# 背景
NavigationBarの下線を消したくて、情報探しましたが、少し手こずったので備忘録を
・・・。

# 余談
`UINavigationBar.appearance()`で取得されるインスタンスは何なんだろう？？？'appearance()'に設定を行うとアプリ内全体に反映されるようでした。

その為、**結論**で記載した内容は、`AppDelegate#didFinishLaunchingWithOptions`に処理（アプリ起動時に実行されているところ）を書いておきました。
MockeryでoverloadをつかってテストしたらCould not load mockとか言われる件


# 問題
Mockeryでoverloadを使うことで、比較的依存度の高いクラスをテストすることができるようになります。Mockeryについては下の記事を参照ください。

- [PHP - Mockeryでメソッドをoverloadするサンプル（別メソッドでMockを作成する） - Qiita](http://qiita.com/kadoyau/items/48413245386b6b21a073)

Mockeryを使って **Hoge** クラスをテストする **HogeTest** クラスを作成し、phpunitを実行したところ、次のようなエラーに出くわしました。

```エラー内容
1) path\to\HogeTest::fooTest
Mockery\Exception\RuntimeException: Could not load mock path\to\ClassUsedInTest, class already exists
```

# 解決策
メソッドの前に以下のアノテーションを追加する。[アノテーションの説明はドキュメントを読んでね](https://phpunit.de/manual/current/ja/appendixes.annotations.html#appendixes.annotations.preserveGlobalState)。

```php:HogeTest.php
class HogeTest extends \TestCase
{
	/**
	 * @runInSeparateProcess
	 * @preserveGlobalState disabled
	 */
	public function fooTest()
	{
		// Hogeクラスで利用している、ClassUsedInTestクラスのモックを作る
		$mock = \Mockery::mock('overload:' . \path\to\ClassUsedInTest::class);
		// 以下、テストの具体的な処理が続く...
	}
}
```

# 原因
> This works best when using an autoloader in your tests. If any code is encountered that uses a class that hasn’t yet been loaded, it invokes the autoloader to load the class. Mockery allows you to overload this behavior by injecting a class with the same name, so that when the class is encountered in your code, it is already loaded, and the autoloader doesn’t try to load your real class. If you’re usingComposer’s autoloader with your tests, you’re all set.

> This is not without some problems, though. If previous tests have already autoloaded the class, then Mockery won’t be able to inject a class with the same name. This will result in an error:

引用元：http://devzone.zend.com/6073/mocking-hard-dependencies-in-legacy-code/

## 日本語でおｋ
Mockeryでoverloadすると、オートローディングする際にDIすることができます。でも、もし前のテストがモック対象のクラスをオートロードしていると（つまり、テスト対象のクラスをnewしたりしていると）DIに失敗してしまいます。

つまり、 **HogeTest** クラスで利用している **ClassUsedInTest** クラスを、どこかこれ以外のテストで既に使っていることが原因です。例えば **ClassUsedInTest** クラス自体に対するテストで`new ClassUsedInTest`をしているかも？

この状況は、Staticメソッドをモックする際にもおこります。
オブジェクト志向言語(Ruby)の復習

```
今日、インターフェースと継承に関して質問され、正しく答えられなかったため、復習
そういえば、Rubyでインターフェースって？？て感じだな。
```



```
オブジェクト = データ + メソッド

データとオブジェクトを操作する関数を１つのくくりにする。という意味。
```

```
class/クラス


クラス = 設計図から、実体 = インスタンスを生成する。そのインスタンスに実際の処理を行う。

class Car
  def initialize(carname)
    @name = carname
  end

  def dispName
    print(@name)
  end
end

car = Car.new("crown")
car.dispName

クラスは実体(インスタンス)を作成する元になる設計図です。

先ほどの簡単な例では車を作るためのクラスを定義しました。定義したクラスからオブジェクトを作成し、そのインスタンスに実際の処理をさせます。



```

```
interface/インターフェース 

Rubyにインターフェースは存在しない
インターフェースとはメソッドの宣言だけを集めたもの

簡単に言えば、オブジェクトがどんなメソッドをもつのかを指定する。つまり、どのように扱いたいかを指定。

インターフェースの意味 => 境界面 物と物との間を仲介する部分

#現実の物体を例とする

PCと周辺機器をつなぐ場合、どのような物理媒体を用いて、どういう信号で送るかをの規約を決める。
このような約束事に基づいて作られたケーブルやコネクタ、USBのことをインターフェース

#オブジェクト志向のプログラミングの例

インターフェース = クラスが実装すべき規約 

「どういうメソッドにどういう引数を指定し渡すか」を定めたもの。

すなわち、クラス設計者とクラス利用者の間の仲介役をになうのがインターフェース

インターフェースはメソッドの書式だけを集めた『仕様書』であると言えるんだ。 この例では引き数が無いchargeメソッドが1つ宣言されているだけなので、ありがたみがあまり判らないかもしれない。 しかし、複雑なクラスでは名前と引数構成がよく吟味されたインターフェースがうまく用意されていれば、プログラマーは要求されたメソッドを記述していくだけで望ましいクラス構成が実現できるわけだ

初めにインターフェースをきちんと設計しておき、それを実装する形でプログラムを書くのが優れた開発方法であると言われているんだよ
```

```
継承
すでに定義されたクラスの機能を引き継いで、新しいクラスを定義することを継承と言います。

親のクラスの変数やメソッドを子のクラスで引き継いで使う。 さらに子のクラス固有の機能を付加することができる。
JavaScriptで言えばプロトタイプチェーンのこと。
```
【Ruby】ちょっとおしゃれな"Hello,World"

初投稿です。
学生プログラマのdrumathと申します。

# おしゃれなHello,World?
初心者なので、初心者なりにHello,World書いてみました。
Rubyは私の6つ目の言語なので、そろそろ
**ただのHello,Worldじゃつまんない！！**
みたいな心が生まれてきました。ただの反抗期です。

そこでRubyで、ちょっとおしゃれなHello,Worldを書いてみましょう！


コードはこんな感じ

```rb:Hello.rb
class Speaker
  def show(str)
    len=str.length
    for i in 0..len-1 do
      print str[i]
      sleep(0.1)
    end

  end
end
speak=Speaker.new
speak.show("Hello,World!\nHello,Ruby!\n")
```

実行するとお分かりになるかと思いますが、一文字表示するのに0.1秒間おいて文字列が流れてきます。なんだかゲーム風みたいなｗ

##  exeにしてみたくなった
これもまた反抗期なのですが、rubyの環境に依存したこのプログラムを気分でexeファイルにしてみようかなって思いました。
Ruby環境をお持ちの方でしたら、```gem install ocra```とコマンドプロンプトに入力すればocraというパッケージがインストールされます。
そしてRubyファイルのあるディレクトリに移動してもらって
例えば

```
ocra Hello.rb
```

と入力すればそのディレクトリにRubyのアイコンでexeファイルが生成されますので、

```
Hello.exe
```
と入力すればexeファイルが動きます。
Cordovaを使って、Androidの実機実行するまで


以前「PhoneGap」と呼ばれていたのが、Apacheプロジェクトの一部になり「[Cordova](http://cordova.apache.org/)」と改名されています。最近、改めて注目が集まっているようなそうでもないような...? どうなんでしょう。Ionicほか、Cordova上でAngularを使うフレームワークがいくつも出ています。そのあたりと、React Nativeに挑戦するかどうか、悩んでいる人もいるかもしれません。個人的には、ReactもAngularも使わない方向で行きたいので、とりあえずCordovaでサンプルアプリを作って、実機で動かすところまでやってみようと思います。

想定する環境は次のとおり。

- Mac OS X El Capitan
- Nodeはインストール済み

## 事前準備

[ここを参考](http://cordova.apache.org/docs/en/edge/guide/platforms/android/index.html)に、環境を整備します。

### CLIツールの準備

0. Cordova CLIのインストール: `$ npm install -g cordova`
0. [JDKをダウンロード](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html)して、インストール (GUIに従うだけ)
0. [Android SDKをダウンロード](http://developer.android.com/sdk/index.html#Other)
0. 解凍後、フォルダ名を`sdk`に変更して`~/Library/Android/`に置く (SDKの置き場所は、他の場所でも構わない)

SDKについては、次のような感じでパスを通しておくと良いです。

```bash
export PATH=$HOME/Library/Android/sdk/platform-tools:$PATH
export PATH=$HOME/Library/Android/sdk/tools:$PATH
```

### Androidライブラリの追加

`$ android sdk` コマンドで、SDK Managerを起動します。GUIが起動します。デフォルトで選択されているものと、使いたいバージョンを選んでおけばOKです。

## アプリケーションの作成

### 空のアプリを作成

```bash
$ cordova create hello-app
```

これだけで、必要なファイルが生成されます。`hello-app`フォルダが生成されるので、その中を覗いてみます。`www`フォルダの`index.html`を開けば、こんなページが表示されるはず。

![Hello World.png](https://qiita-image-store.s3.amazonaws.com/0/1858/72085e1d-842c-524b-08b1-73ba62726825.png "Hello World.png")


### プラットフォームの追加

ここでは、browserとandroidを追加。必要に応じて他のプラットフォームも。

```bash
$ cd hello-app
$ cordova platform add browser
$ cordova platform add android
```

`platforms`以下に、ファイルがいろいろ生成されるのですが、これをGitに含めてしまうと邪魔なので、`.gitignore`でこの辺を無視しておいた方が良さそうです。その上で、npmのスクリプトで上記インストールを自動化しておけばOK。

```gitignore
platforms/*
!platforms/platforms.json
plugins
```

## エミュレータでの検証

公式のエミュレータは遅すぎて使えないので、[ここからGenymotionをダウンロード](https://www.genymotion.com/#!/download)。GenymotionはVirtualBoxベースのAndroidに特化したエミュレータで、個人利用であればフリー。

0. Genymotion.appを起動
0. アプリケーション内で、VMをダウンロード (もしまだなければ)
0. VMを起動
0. Cordovaから起動 `$ cordova run android`

## 実機で検証

0. Android実機のUSBデバッグ機能をONに
0. MacにAndroid実機をUSB接続 (USBケーブルが充電専用だとNGなので注意)
0. 次のコマンドで接続確認して、表示されればOK `$ adb devices`
0. Cordovaから起動 `$ cordova run android`
0. ビルドを待つ...
0. 実機でアプリが起動!

ふう、動いた。

## まとめ

簡単に動かすとこまで行けますね。若干わかりにくいのはCordova自体ではなくて、

- JDKのインストール
- Android SDKのインストール

の2点くらい。あと、

- 公式エミュレータは遅すぎて誰も使ってない(特にMac上では)
- USBが充電専用ケーブルだった...

とかの罠にハマらなければ大丈夫です。今日、OSSCafeで悩んでいたら解決に導いてくれた方々に感謝します。

(ちなみに、作業は最近の薄小さいMacBookでやりましたが、スペック的にビルドで困るということもありませんでした。Genymotionでのエミュレータ起動も特に問題無し。案外出来る子です)
[Unity]ゲームオブジェクトへのアクセスを楽にする自作ライブラリの紹介

自作のライブラリである`HierarchyNode`の紹介をします.
特に調査せずに作ったのでもしかしたら既に同じようなものがあるかもしれませんが.
[https://github.com/yaegaki/HierarchyNode](https://github.com/yaegaki/HierarchyNode)


## 作った背景
Unityでゲームを使用する上で`Transform.Find`をよく使うと思いますがこれが正直に言うと使いにくいです.
文字列で指定するため大文字や小文字は区別されるし，スペースがはいっているかどうかで結果が変わるなど.
実際に実行していみてエラーが出て初めてタイポに気が付くなどがよくあり，結構な時間が無駄になりました.

## HierarchyNodeの機能
![hierarchy.png](https://qiita-image-store.s3.amazonaws.com/0/42193/b906ca8b-d7b4-b20c-343d-5cd475f5d59b.png)

上の画像の`Character1_LeftUpLeg`の`SpringCollider.radius`にアクセスしたい場合，
下のgifのようにコード補完を使用することができます.

![coding.gif](https://qiita-image-store.s3.amazonaws.com/0/42193/ba890485-ce7a-e69b-9fef-f77402d0d016.gif)


実際に書いたコードはこれです.

```csharp
void Start ()
{
    var node = new HierarchyNode.Generated.Unitychan_DynamicNode(this);
    var radius = node.c.Character1_Reference.c.Character1_Hips.c.Character1_LeftUpLeg.SpringCollider.radius;
}
```

## 導入
[https://github.com/yaegaki/HierarchyNode](https://github.com/yaegaki/HierarchyNode)からクローンしてプロジェクトに入れるか，
[HierarchyNode.unitypackage](https://raw.githubusercontent.com/wiki/yaegaki/HierarchyNode/packages/HierarchyNode.unitypackage)をダウンロードしてインポートしてください.

## 構成
`HierarchyNode`はゲームオブジェクトからクラスを自動生成するエディタースクリプトと，自動生成されるクラスのベースとなるクラスからなります.

## 使い方
ヒエラルキーで対象のゲームオブジェクトを選択した状態でメニューの`GameObject > HierarchyNode > Generate`を実行します.
![menu.png](https://qiita-image-store.s3.amazonaws.com/0/42193/40389d5f-e7e7-1321-1b48-047e079bba7f.png)

ヒエラルキーのゲームオブジェクトだけではなくプロジェクトのPrefabを選択することもできます.

Generateを実行すると`HierarchyNode/Scripts/Generated`配下に下のようなクラスが生成されます.

![generated.png](https://qiita-image-store.s3.amazonaws.com/0/42193/853e2a80-42f6-314e-7099-4357d8b9f91a.png)

自動生成されたクラスは対象の`GameObject`か`Transform`か`NonoBehaviour`で初期化することができます.
もし対象のゲームオブジェクトに配下のオブジェクトがある場合，`Children`プロパティーからアクセスすることができます.
`Children`プロパティーには別名の`c`が存在します.

## 最後に
issuesやpull requestなど大歓迎です!
Python - Ubuntu12.04にPython3.4をインストールする方法

 Ubuntu12.04にpython3をインストールしてバージョンを確認したところ「python3.2.3」だったのでpython3.4系のインストール方法を調査したのでメモ

#### インストールコマンド

```
sudo add-apt-repository ppa:fkrull/deadsnakes
sudo apt-get upgrade
sudo apt-get install python3.4
```

自分の環境では「/usr/bin/python3.4」にインストールされました

#### ※参考
http://makaaso.hatenablog.com/entry/2015/10/07/105820
Chainer が GPU で動いた日 CentOS 編 (CPUまで)

感動した．実働にして約一週間は頑張っていたと思う．
結論として重要なことを先に書いておきます．

・Nvidiaのドライバーを最新の状態にする．
・pythonのライブラリ群をはじめにすべて入れておく．

以下詳細に述べていきたいと思います.

#行ったこと

1.python2.7.4の導入
　
**問題点**
　python 2.6.6がインストールされてたので2.7.4の導入を行う必要があった．

**解決法**

```
$ su 
$ yum install zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel
$ wget http://python.org/ftp/python/2.7.2/Python-2.7.4.tgz
$ tar zxvf Python-2.7.4.tgz　
$ cd Python-2.7.4
$ ./configure --with-threads --enable-shared
$ make
$ make install
$ ln -s /usr/local/lib/libpython2.7.so.1.0 /lib64/
```

**一言**
しっかりとシンボリックリンクを張ること
make install を行うこと
いろいろ入れているが分かっていないことが多い

**補足**
make altinstall を行うと既存のバージョンを変えずに入れることができるらしい

**参考にしました**
http://qiita.com/fuzzy31u/items/c35f2f4db5f3a48d86a7
http://a-records.info/2014/10/25/34/

2.python各種ライブラリの導入

**問題点**
Chainerを入れる際にいろいろライブラリが足りないことが分かったので入れてみました．
pipも入っていなかったのでそれも含めていれてみました．

**解決法**

```
$ su
$ yum install python-setuptools
$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ /usr/local/bin/python ez_setup.py
$ easy_install pip
$ easy_install numpy
$ easy_install six
$ easy_install Mako
$ easy_install scipy
$ pip install scikit-learn
```

**一言**
easy_installを入れるときはez_setup.pyから入れましょう
/usr/bin/python はcentosもともとのpythonであるので
のちのち，pythonのバージョンで悩むでしょう

easy_install でも pip install でもよいですが
scikit-learnだけはpip install で入りました

**参考にしました**
http://www.tomoyan.net/dokuwiki/python/easy_install
http://inoccu.net/blog/2013/04/16/075618.html

3.chainerの導入

**問題点**
chainerを入れる

**解決法**

```
$ su
$ pip install chainer
$ git clone  https://github.com/pfnet/chainer
$ cd chainer/examples/mnist/
$ python train_mnist.py
```

**一言**
git clone  https://github.com/pfnet/chainerには
サンプルファイルが入っています．
これで一応cpu版での実行はできるようになります．
次からはGPUを使った学習を解説していきたいと思います．
入力可能なTextFieldにカンマ区切りの数値を表示する




#やりたいこと#
TextFieldに数字をキー入力するたびに、3桁ごとのカンマ区切りの数字として表示させる。
例：1234567と入力 → 1,234,567と表示、続けて8を入力すると12,345,678と表示
→*キーイベント発生時にNSNumberFormatterでテキスト整形すればOK*
参考：[[Swift]数字を三桁ごとにカンマ区切りにする](http://qiita.com/ktanaka117/items/57c43c897fb7040e0980)

と同時に、TextFieldの値を用いて数値計算を行う。
→*整形した表示用テキストとは別に、数値をカンマ区切りでない状態で計算し、計算結果は別のTextFieldにカンマ区切り表示させる*

![cammaTextField.png](https://qiita-image-store.s3.amazonaws.com/0/96633/6ef29b28-ddf3-e7e7-2d10-06f3b912aea4.png)

#実装#
Storyboard上に3つのTextFieldを置いてtextField1,2,3としてアウトレット化、それぞれのEditingChanged発生時に共通のIBAction（任意のメソッド名editingChangedとしておく）の指定もした状態で

```swift:ViewController.swift
import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var textField1: UITextField!
    @IBOutlet weak var textField2: UITextField!
    @IBOutlet weak var textField3: UITextField!
    
    //上2段のTextFieldのEditingChangedに下の関数を設定
    @IBAction func editingChanged(sender: UITextField) {
        sender.text = addComma(removeComma(sender.text!))
        //計算してみる
        calc()
    }
    
    let formatter = NSNumberFormatter()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //キーボードを数値入力に固定
        textField1.keyboardType = UIKeyboardType.DecimalPad
        textField2.keyboardType = UIKeyboardType.DecimalPad
        textField3.keyboardType = UIKeyboardType.DecimalPad
        
        //3桁ごとにカンマ区切りするフォーマット
        formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
        formatter.groupingSeparator = ","
        formatter.groupingSize = 3
    }
    
    //カンマ区切りに変換（表示用）
    func addComma(str:String) -> String{
        if(str != "") {
            return formatter.stringFromNumber(Double(str)!)!
        }else{
            return ""
        }
    }
    //カンマ区切りを削除（計算用）
    func removeComma(str:String) -> String{
        let tmp = str.stringByReplacingOccurrencesOfString(",", withString: "")
        return tmp
    }
    
    //1,2段目の和を3段目に表示
    func calc() {
        //1,2段目が空でない（=数値）の時のみ計算する
        if(textField1.text != "" && textField2.text != ""){
            let sum = Double(removeComma(textField1.text!))! + Double(removeComma(textField2.text!))!
            textField3.text = addComma(String(sum))
        }
    }
}

```

#注意#
- キー入力できる最大の桁数についてはここではサポートしていません。
- この実装だと小数点が入力できません。
- コピペ機能等を用いて数値以外を入力させないようにする対策についてもサポートしていません。
- XCodeシミュレーター上でMacのキーボードから数値入力すると
```Can't find keyplane that supports type 8 for keyboard iPhone-Portrait-DecimalPad; using 2617181025_Portrait_iPhone-Simple-Pad_Default```
というエラーログが表示されるが、シミュレーターメニューのHardware>Keyboardから、シミュレーター上キーボードで入力するようにすればエラーにはならないのでOK。[参考リンク](http://stackoverflow.com/questions/24871532/xcode-ios-8-keyboard-types-not-supported)
はじめてのGo言語 2.変数


前回の記事はこちら
[はじめてのGo言語 1.環境構築](http://qiita.com/Im0_3/items/aacc2307d0fca3983219)

JavaScriptをやってる身からすると、型を定義するというのがなれなくてちょいちょいつっかかるところがあったので知識定着のためにメモ。

# 変数の宣言

Goの変数は`var`で宣言をすることができます。
また変数を宣言する際は一緒に型を指定する必要があります。

以下がその例です。

```Go:main.go
var x int = 1
```

`x`という変数に対して1という数値を代入しています。
型はint型です。
int型は整数を扱うことができます。

型を定義した後に変数に代入する場合は型に合わせたものを入れる必要があります。
以下のように文字列を入れようとするとエラーが発生します。

```Go:main.go
var x int = 1
x = "hoge" //cannot use "hoge" (type string) as type int in assignment
```

# 省略した宣言方法
変数は一度に複数宣言することができます。
複数宣言する場合はカンマで区切り最後に型を指定します。

```Go:main.go
var x, y, z int = 1, 2, 3
```

また以下のような宣言も可能です。

```Go:main.go
var (
	x int = 1
	y     = 2
	z     = 3
)
```
`var`の後にカッコをつけて、中に記述していきます。

最初の変数に型を指定することであとの変数も同じ型を指定することができます。

こちらの方が変数に何が入っているのか見通しがよいのでよさげです。

上記の方法を使うとこんな変則的な宣言もできます。

```
var (
	x int    = 1
	y        = 2
	z string = "hoge"
)
```


# 関数内での変数宣言について

関数内部では`var`を省略することができます。

```Go:main.go
func main(){
	var x int = 1
	x++
	fmt.printf(x)
}
```

上記のコードは以下のように書くこともできます。

関数内では`var`と型の省略をすることが可能です。
`:=`を使用することで型を推測して自動に型を定義してくれます。

```Go:main.go
func main() {
	x := 1
	x++
	fmt.Println(x)
}
```

# 定数

`var`ではなく`const`をしようすると定数として定義することができます。
定数は再代入することが不可能です。再代入をしようとするとエラーになります。

```Go:main.go
const x = 1
x = 2 //cannot assign to x
```


***
追記（2015.10.15）

# 初期化子
変数は初期化子を与えると勝手に型を予測してくれる。

```Go:main.go
var x = 1 //int型
var y = 1.234 //float64型
var flag = true //bool型
var hoge = "fuga" //string型

x = false //cannot use false (type bool) as type int in assignment
```
AmazonSESでPHPからsend_emailしたときに成功したか知りたかったです。

AmazonSESでsend_email()を読んだ時にメールが飛んだか確認したくなりました＼(^o^)／

# レスポンスをisOK();する

```php:emailの成功判定
$response = $email->send_email(
    'no-reply@amazon.com', // Source (aka From)
    array('ToAddresses' => array( // Destination (aka To)
        'nobody@amazon.co
        ... 略

# 送信判定
var_dump($response->isOK());
```
`isOK()`を呼ぶとtrueかfalseが返ります。

メールが送信されていなかったのがわかりました(☝ ՞ਊ ՞)


# 参考
http://docs.aws.amazon.com/AWSSDKforPHP/latest/index.html#m=AmazonSES/send_email
Rocket.ChatをDocker Composeで使う

# 概要

Docker Compose コマンド１つで Rocket.Chat が動く環境を構築します。ソースコードからの構築や Docker コマンドの操作は面倒ですが、それらの課題を Compose を使って解決します。

# Rocket.Chat とは？　「これは Slack ですか？」

Rocket.Chat ( https://rocket.chat/ ) は、オープンソースなウェブ・チャット・プラットフォームです。[GitHub](https://github.com/RocketChat/Rocket.Chat) で有志による開発が行われており、MIT ライセンスで配布されています。ぶっちゃけ Slack クローンです。


## 動機

Docker や Docker Compose の実演（デモ）では Word Press が比較的多用される。しかし、Blog を書かない方にとっては興味対象外であることと、毎回デモに WordPress というのはベタすぎる。そこで、WordPress にかわり、アプリ＋データベースの構成でありながら、実用度が高く Docker で利用可能なものを探し出した。……という極めて不純な理由です。

## 動作環境

* Docker daemon が稼働中の環境
* Docker Compose がセットアップ済み

# 手順

任意のディレクトリを作成し、`docker-compose.yml`を作成します。以下の例は[ドキュメント](https://github.com/RocketChat/Rocket.Chat/blob/master/docker-compose.yml)のもので、「rocketchat」と「mongodb」の２つのコンテナを作成・リンクするものです。また、ホスト側のポート 80 番をコンテナのポート 80 に割り当てています。

```
rocketchat:
  image: rocketchat/rocket.chat
  environment:
    - MONGO_URL=mongodb://mongodb/rocketchat
    - ROOT_URL=http://localhost:80
  links:
    - mongodb
  ports:
    - 80:80

mongodb:
   image: mongo
   ports:
     - 27017
```

起動するには、`docker-compose up` コマンドを使います。

```
$ docker-compose up -d
Starting rkt_mongodb_1...
Starting rkt_rocketchat_1...
```

暫く待つと、Rocket.Chat が起動します。`docker-compose ps`コマンドで状況を確認します。

```
$ docker-compose ps
      Name                    Command               State            Ports
------------------------------------------------------------------------------------
rkt_mongodb_1      /entrypoint.sh mongod            Up      0.0.0.0:32775->27017/tcp
rkt_rocketchat_1   /bin/sh -c bash $METEORD_D ...   Up      0.0.0.0:80->80/tcp
```

あとは、ブラウザから対象サーバのポート 80 にアクセスすると、次の画面が開かれます。「新しいアカウントを登録」をクリックします。

![rocker1.png](https://qiita-image-store.s3.amazonaws.com/0/13002/41ade96f-f223-cad1-f969-bb5ed27e6101.png)

それからユーザ情報を登録していくと、最終的に次のような（どこかで見たような）画面が見えます。「#general」等をクリックすると、いわゆるチャットルームのような操作が可能です。


![rocket-chat.png](https://qiita-image-store.s3.amazonaws.com/0/13002/60dcc8b1-8ddf-0370-39ef-9430c79b4deb.png)

停止と起動は`stop`と`start`です。データはローカルの`/data/db`という名称のボリュームを使用しますので、再起動後もそのまま使えます。

```
$ docker-compose stop
Stopping rkt_rocketchat_1... done
Stopping rkt_mongodb_1... done
$ docker-compose start
Starting rkt_mongodb_1...
Starting rkt_rocketchat_1...
```

最後にもうこれ以上使わない場合は、停止して削除します（`-v` オプションは、ボリュームもまとめて削除するオプションです）

```
$ docker-compose rm -v
No stopped containers
$ docker-compose stop
Stopping rkt_rocketchat_1... done
Stopping rkt_mongodb_1... done
```
JAVA引数と戻り値-三角形、円の面積を求める

▪️問題1
___________________________________________________________
メソッド名:calcTriangleArea
戻り値の型:三角形の面積(double)
引数リスト:三角形の底辺の長さ、単位はcm(double bottom)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三角形の高さ、単位はcm(double height)
処理内容:引数を使用して面積を求め、それを戻す
___________________________________________________________
___________________________________________________________
メソッド名:calcCircleArea
戻り値の型:円の面積(double)
引数リスト:円の半径、単位はcm(double radius)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三角形の高さ、単位はcm(double height)
処理内容:引数を使用して面積を求め、それを戻す
___________________________________________________________
mainメソッドからそれぞれのメソッドに適当な引数を渡して呼び出し、戻り値を出力して正しい面積が表示されるかを確認して下さい。

▪️問題1ソースコード

```java
public class test35 {
	public static void main(String[] args) {
		double triangleArea = calcTriangleArea(10.0, 5.0);
		System.out.println("三角形の面積:" + triangleArea + "平方cm");
	}

	public static double calcTriangleArea(double bottom, double height) {
		double area = (bottom * height) / 2;
		return area;
	}
}
```

▪️問題1 実行結果
三角形の面積:25.0平方cm
Twitterアプリケーションの作成に必要な登録

## 参考

* [Twitterアプリケーションの作成（Consumer key、Consumer secret、Access token、Access token secretの確認方法）](http://website-planner.com/twitter%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90%EF%BC%88consumer-key%E3%80%81consumer-secret%E3%80%81access-token%E3%80%81access-token-secret/)
* [TwitterのAPIを使用するために必要なキーを取得する手順 - Hello API](http://hello-apis.blogspot.jp/2013/03/twitterapi.html)

## 新しいアプリの登録

* twitterアカウントに携帯電話を紐付けしておく必要がある。
* https://dev.twitter.com/apps/new にアクセス
* 必要事項を記入

## key取得

* consumer_key
* consumer_secret
* access_token
* access_token_secret

を用いることで[Ruby - sinatra/unicorn/nginxでTwitterハッシュタグの画像一覧を表示する - Qiita](http://qiita.com/zaru/items/c6dab5848ec679a09c32)のサンプルが実行できるようになる。
WordPressで難しかったところをメモ

# WordPressのメモ
## ヘッダーやフッターなどの基本的な部分はインクルードタグでサポートされている.
* get_header()や,get_footer()のことをインクルードタグといい,これらを実行することで,header.php, footer.phpを実行してくれる. 

* 今回使用したインクルードタグ
*      get_header(), get_footer(), get_sidebar()

## テンプレート階層によってサポートされている。
### テンプレート階層
* 特定のページを開くときにそれを実際に表示するためのプログラムを階層的に探して表示する仕組みのことで,WordPressでは[テンプレート階層の画像](https://wpdocs.osdn.jp/wiki/images/wp-template-hierarchy.jpg)(WordPress Codexより)のようになっている. 

* 今回作成したファイル
*      index.php, header.php, sidebar.php, footer.php, single.php, page.php, functions.php

* functions.phpは特殊でWordPress自身の機能を使うことを宣言するファイルでメニューなどの外観をWordPressのGUIで操作できるように設定したりすることができる.
WordPressでレスポンシブなテーマを作る時、タブレットの場合だけPCサイトを見せる方法

# 前提
FoundationやBootstrapを使ってレスポンシブなテーマを作るとき、 `<meta name="viewport" content="width=device-width">` を指定していると、タブレットサイズも考慮してCSSを書かなければいけないですがそれなりにデザイン/コーディングの工数がかかります。
タブレットはPC表示でいいよ、という場合も多いのでその場合にサクッと対応する方法です。

# 手順
1. [WP Mobile Detect](https://wordpress.org/plugins/wp-mobile-detect/)をインストールして有効化
2. テーマのviewport周りを修正

```php:header.php
<?php if( class_exists( 'Mobile_Detect' ) && wpmd_is_tablet() ): // widthはデザインに合わせて調整 ?>
  <meta name="viewport" content="width=1080">
<?php else: ?>
  <meta name="viewport" content="width=device-width">
<?php endif; ?>
```

わりと現場で使えるテクニックかと思います。
{rstan}を最新版に！＆並列化処理

{rstan}を使いこなしていたら格好良いですよね。


chainの計算を並列化できたら早くなるな〜と思って調べていたら、メッチャ簡単にできるようじゃないですか！

```
rstan_options(auto_write=TRUE)
options(mc.cores=parallel::detectCores())
```
と2行書くだけ!!
http://heartruptcy.blog.fc2.com/

ところが、自分のRでやってみたら全く並列化しない。
原因は{rstan}のバージョンが2.2な事にあると辺りをつけ更新する事に。

まず、現版を消す。

```
library(rstan)
set_cppo('fast')
detach("package:rstan", unload = TRUE)
remove.packages('rstan')
```

 次。
GuitHubから{rstan}をゲットしよう。
パッケージをGuitHubからRにブッコムには{devtools}が必要。

```
install.packages(“devtools”)
```

次。
最新版rstanは、{StanHeders}, {ggplot2}, {gridExtra}を求めている。
この3つは、CRANにあるけれど、普通にinstall.packages()だと、バイナリ版が優先して入る。ところが、バイナリ版だとバージョンが古くて怒られる。
なので、ソースからコンパイルする。

```
install.packages(“StanHeaders”, type=“source”)
install.packages(“ggplot2”, type=“source”)
install.packages(“gridExtra”, type=“source”)
```

準備完了。
GutHubから{rstan}をブッコム。

```
devtools::install_github(“stan-dev/stan”, subdir=“rstan/rstan”, ref=“develop”)
```
色々エラーが出て不安になるけれど、待っていたら

>DONE(rstan)

と出ればOK。

codeの書き方は変わらず。
並列化の指定は

```
rstan_options(auto_write=TRUE)
options(mc.cores=parallel::detectCores())
```
とする。
並列化した場合、走り出すとエスケープできないので、codeがちゃんと動く事を確認してから並列化にした方がいい。

で、適当なコードを組んで

![スクリーンショット 2015-10-14 19.15.03.png](https://qiita-image-store.s3.amazonaws.com/0/92401/d156cd38-31d8-46f5-57b5-4707644995a4.png)


おお。
E-Cell4開発におけるGit運用方針

以下, GitおよびGitHubを運用する上でのポリシーの試案.

基本的にはGitHub Flowに従うが, 部分的にGitLab Flowの要素をとりいれる. 目的は, 開発者のハードルを下げることと, リリース管理者が複数環境でコードを確認する負担を軽減すること.

https://gist.github.com/Gab-km/3705015
https://about.gitlab.com/2014/09/29/gitlab-flow/

常に存在する主要なブランチは``master``と``develop``である. ``master``は常に``develop``の後方にいる. 理想は``master``と``develop``が同期している状況である(GitHub Flow).

* ``master``ブランチはいつでも**全ての**環境においてリリース可能である.
* 基本的に``master``には直接コミットしない.
* 新しい何かに取り組む際は, 新しく課題を立てて, 必要であれば説明的な名前のブランチを``develop``から作成する.
* コミットメッセージの最初に関連する課題番号を付与する(例: ``git commit -m "#24 Fix a typo"``).
* 作成したブランチにローカルでコミットし, サーバー上の同じ名前のブランチにも定期的に作業内容をpushする.
* フィードバックや助言が欲しい時, ブランチをマージしてもよいと思ったときは, ``develop``ブランチへPull Requestを作成する.
* Pull Requestを出した後はそこで他の作業はしない(レビューに対する修正は可). 必要であればここから派生したブランチを作成してそこで作業する.
* 他の誰かがレビューをして機能にOKを出してくれたら, コードを``develop``へマージすることができる.
* ``develop``ブランチへのマージは**特定の**環境においてリリース可能であることが確認されていればして構わない(例: [Travis CI](https://travis-ci.org/)がパスしている).
* ``develop``ブランチが全ての環境においてリリース可能であることが確認された時点で, ``master``ブランチをそこまで進める. つまり, リリース管理者は``develop``ブランチだけを監視していれば良い.
* ``develop``が何らかの環境でリリースできない状態である場合には, バグとして課題を立てる.
* リリースは``master``ブランチの任意の時点においてタグ付けすることで行う. これはリリース可能かどうかというよりも, 時期と進行中の課題によって決定する.

以下, ハリセン:

* いずれの課題にも割り当てられていないか, 課題に関連するコミットも作業コメントもない人はハリセン.
* Pull Requestを出したブランチが特定の環境においてビルドできなければ, Pull Request出した人にハリセン.
* ``develop``が特定の環境においてビルドできなければ, 最後にコミットした人にハリセン.
* ``master``が全ての環境においてビルドできなければ(リリース可能でなければ), リリース管理者にハリセン.
* ``develop``が特定の環境**以外**でビルドできなくても, 誰の責任でもない. 課題を立てて皆でがんばる.

デメリット:

* プロダクション用のブランチを``master``から分岐することができない. リリース可能にみえてその実バグがあった場合, ``develop``の先頭までいかないとリリースできない.
【iOS】MDCSwipeToChooseを使ってTinderUIと戯れてみた


会社の後輩Dに **TinderUI**をやってみたいのですがと質問されたので、簡単なライブラリを使って所感を伝えました。

ライブラリは[monocache/MDCSwipeToChoose](https://github.com/modocache/MDCSwipeToChoose)を使ってみました。

![animation](https://github.com/ryokosuge/SampleTinderUI/raw/master/Resources/animation.gif)

以下備忘録。

## MDCSwipeToChoose

**cocoapods**で簡単に導入できます。

```sh:
% pod search MDCSwipeToChoose

-> MDCSwipeToChoose (0.2.3)
   Swipe to "like" or "dislike" any view, just like Tinder.app. Build a
   flashcard app, a photo viewer, and more, in minutes, not hours!
   pod 'MDCSwipeToChoose', '~> 0.2.3'
   - Homepage: https://github.com/modocache/MDCSwipeToChoose
   - Source:   https://github.com/modocache/MDCSwipeToChoose.git
   - Versions: 0.2.3, 0.2.2, 0.2.1, 0.2.0, 0.1.0 [master repo]
```

使い方は[monocache/MDCSwipeToChoose](https://github.com/modocache/MDCSwipeToChoose)か実装したやつをあげたので、それを見てもらえればと思います。

[ryokosuge/SampleTinderUI](https://github.com/ryokosuge/SampleTinderUI)

## MDCSwipeToChooseについて

とっても使いやすかったです。

ただ`MDCSwipeToChooseView`を継承すると`border`と`cornerRadius`か勝手につくので選ばせて欲しかったなと。

## TinderUIについて

簡単なSwipeGestureといえばそこまでですが、いろいろ考える必要が出てくるなと。

Swipeで動かすViewだけでなく、その下にあるViewなど気にしないといけないなと。

でも２択、あるいはあるコンテンツに集中させたいとなると良いUIなのかなと思いました。

## 終わりに

後輩にありがとうございますを言われると嬉しいものですね。

以上になります。
javaで"1.234e5"みたいなやつの読み方

職場でjavaの勉強してる新人さんに質問されたのに、その場でうまく回答できなかった事を後から調べて書きました。

***

######質問
"1.234e3"みたいなやつ...これ何なの...

######回答
浮動小数点数の指数表記(Exponential notation)です。
1.234e3 = 1.234 × 10の3乗 = 1234 です。
"1.234"の部分を仮数部(mantissa/fixed point)と呼び、"3"の部分を指数部(exponent)と呼びます。

######参考資料
[浮動小数点数 - Wikipedia]
(https://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0)

[指数表記 - Wikipedia]
(https://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E8%A1%A8%E8%A8%98)

***

######質問
".3e1"みたいなのもあるんだけど...

######回答
javaの言語仕様において、浮動小数点数を宣言するのには整数部か小数部どちらか一方でもあれば良いらしいです。
>at least one digit (in either the whole number or the fraction part)

が、省略した時にどうなるかは書いていないですね。0で扱われると思いますが。

######参考資料
[Java Language Specification - 3.10.2. Floating-Point Literals](https://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.2)
GIFアニメをCSS3のanimation-timing-functionに置き換えて容量を削ろう

GIFアニメーションって結構サイズがでかいです。
2chまとめとかに貼ってある画像はどれも2MB以上あったりします。

正直動画にしてvideoタグで読み込むほうが小さくなるのですが、
ブラウザによって読めるファイル形式が違うし、スマホでの再生が面倒です。


これまではJSやCanvasで工夫してなんとか見せていましたが、
CSSアニメーションで楽に実装できます。

``animation-timing-function``の``steps``を使うとstep数に応じてアニメーションが進むようになります。
stepsの数は（**フレーム数 - 1**）

```css:css
.flip {
  width: 240px;
  height: 240px;
  background-image: url(image.jpg);
  animation: flip 1500ms steps(43) infinite;
}

@keyframes flip {
  from {
    background-position: 0 top;
  }
  to {
    background-position: 0 bottom;
  }
}
```

## サンプル
WikipediaにあったこのGIFファイル（420KB）
![Artboard 1.gif](https://qiita-image-store.s3.amazonaws.com/0/7132/e22263d9-3b81-ac2b-51ce-36a79d76d5d2.gif)

１コマ１コマ縦に繋げていきます（[結合方法](http://qiita.com/narikei/items/a4e0f1df9b71f5d7f15e)）

![Group.png](https://qiita-image-store.s3.amazonaws.com/0/7132/f1a9c157-7f16-395e-fc07-105c82f54525.png)

jpegファイルに書きだした結果 350KBでした。２割くらい削減できました。
書き出し設定の調整、色数の多いファイルだともっと削減できると思います。

**-webkit-**のプレフィックスをつければスマホでも動作します。
GIFアニメ作るのと手間もあまり変わらないし、JSとの連携もこっちのほうが楽ですよ！


ちなみに全部つなげるとこんな感じのjepgになります。
![Artboard 1.jpg](https://qiita-image-store.s3.amazonaws.com/0/7132/6c847247-af96-cb74-1763-57e0e8841005.jpeg)
SpringBoot+Gradleでgrunt/bowerをする


# やること
* gradle buildした時にgrunt/bowerしてくれたら素敵じゃないかと。
* SpringBoot+Gradleでサーバサイドを構築
* クライアントサイドはstaticに配置
* gruntやbowerをgradle build時に実行させる
	* git clone -> gradle buildでjar作成まで自動化

# Gradleの設定
* Gradleからnodeやgruntを使いたいのでpluginを入れる
* nodeとgruntに作業ディレクトリ等の設定をする
* classesゴールの前にgrunt buildやnpm installを実行させる
	* node_modules、bower_componentsフォルダはひとまずプロジェクトルートに置く

~~~build.gradle

buildscript {
    repositories {
      mavenCentral()
      maven {
        url "https://plugins.gradle.org/m2/"
      }
    }
    dependencies {

___略___
      
      // for grunt/bower
      classpath "com.moowork.gradle:gradle-node-plugin:0.11"
      classpath "com.moowork.gradle:gradle-grunt-plugin:0.11"
    }
}

___略___
apply plugin: "com.moowork.node"
apply plugin: "com.moowork.grunt"
___略___

node {
  version = '0.12.7'
  download = true
  workDir = file("${project.buildDir}/nodejs")
  nodeModulesDir = file("${project.projectDir}")
}

grunt {
  // Set the directory where Gruntfile.js should be found
  workDir = file("${project.projectDir}")
}

// npm install -> installGrunt -> grunt buildをclassesの前に割り込み

classes.dependsOn grunt_build
grunt_build.dependsOn npm_install
grunt_build.dependsOn 'installGrunt'


~~~

# npm installしたら自動的にbower installさせる

* 上記設定だとbower installが入っていない
	* bower installをgradleで実行するプラグインもあるようだが未検証
* bower installはnpm installと一緒に実行されるようにpackage.jsonに記載する

~~~package.json

___略___

  "scripts": {
    "postinstall": "bower install"
  },

___略___

~~~


# grunt/bowerに必要な情報を配置
* projectルート直下に以下を配置
	* package.json
	* bower.json
	* Gruntfile.js


# 実行
* gradle buildするとnpm installやbower install、grunt buildが実行される


# まとめ
* わりと簡単にgradleからgrunt/bowerすることができた
* あとはjenkinsおじさんを使えば自動デプロイまでもっていけそう
GmailのIMAPログインに失敗した時の対処法

2015/10/14午後に突然、ThunderbirdでGmail（Apps）が受信できなくなった。imap.gmail.comへのログインに失敗する旨のエラーが出つづける。
下記の受信設定を「OAuth2」に変更して、『[Mozilla Thunderbird 38.0.1 より Googleの認証システム（OAuth2）に対応！！](http://kitaney-google.blogspot.jp/2015/06/mozilla-thunderbird-3801-googleoauth2.html)』と同様にGoogleのログイン画面経由で認証したら、元通り使えるようになったのでメモ。

* ツール > アカウント設定 > Gmailアドレス名 > サーバ設定 > 認証方式

あわせて送信設定も変更した。

* ツール > アカウント設定 > 送信（SMTP）サーバ > smtp.gmail.com > 認証方式

Googleのセキュリティ設定「安全性の低いアプリの許可」を「有効」としていても、弱い認証は弾かれるようになった模様……？

他の問題の場合は『[メーラーからGmailへの接続時に認証（パスワード）のエラーが生じる場合の対処方法](http://www.atmarkit.co.jp/ait/articles/1409/03/news109.html)』を参照すると良さそう。
NSNumberを文字列化する

`stringValue`を使うと、

```objc:ちょっとちっちゃくなったり
NSNumber *num = @66.6;
NSLog(@"%f", num.doubleValue);//66.600000
NSLog(@"%@", num.stringValue);//66.59999999999999
```

```objc:ちょっとおっきくなったり
NSNumber *num = @99.9;
NSLog(@"%f", num.doubleValue);//99.900000
NSLog(@"%@", num.stringValue);//99.90000000000001
```

しちゃうことがあるので、面倒でも、

```objc:stringWithFormat
NSNumber *num = @66.6;
NSLog(@"%@", [NSString stringWithFormat:@"%f",num.doubleValue]);//66.600000
```

とか、

```objc:NSNumberFormatter
NSNumber *num = @99.9;
NSNumberFormatter *nf = NSNumberFormatter.new;
nf.numberStyle = NSNumberFormatterDecimalStyle;
NSLog(@"%@", [nf stringFromNumber:num]);//99.9
```

を使った方が良さそうです。
JavaScriptで引数が多い関数において、呼び出し時の可読性を上げる

#はじめに
いち関数における引数が多くなってくると、呼び出し時に各引数が何を指しているのか分からなくなることはあると思います。特に数値やbool値が連続していると、作った当人でも混乱してしまいます。

そこで引数の可読性を落とさない処理方法をまとめてみました。何も目新しいものはないと思いますが、何かの参考にでもなれば幸いです。JavaScriptでの動作を想定しています。





#目次
- 素直にそのまま書くと・・・
- A. 引数にオブジェクトを渡す
- B. 引数にコメントアウトを含める





#素直にそのまま書くと・・・
- 呼び出し時の引数の値が何を指しているのか分かりにくい
- 引数の順番が固定されてしまっている

```.js
function showPetDetail(name, type, owner, height_cm, weight_kg, isVaccinated, hasBrother) {
  console.log(name);
  console.log(type);
  console.log(owner);
  /* ... */
}
showPetDetail('ポチ', '犬', '山田太郎', 80, 10, true, false);
```





#A. 引数にオブジェクトを渡す
- 引数にはオブジェクトを1つだけ渡します
- オブジェクトのkeyにより、引数の名前が設定できます
- 名前のおかげで呼び出す側でその値が何を表しているか、ひと目で分かります
- 関数本体では、引数のプロパティでアクセスするよう（もしくは代入など）にします


```.js
function showPetDetail(args) {
  // そのまま引数のプロパティでアクセスするか
  console.log(args.name);
  console.log(args.type);
  console.log(args.owner);
  /* ... */

  // 代入するか
  var name  = args.name  || 'いっぬ';
  var type  = args.type  || '犬';
  var owner = args.owner || '匿名希望';
  /* ... */

  // ループを活用（できる処理内容であれば）
  for (var key in args) {
    console.log(args[key]);
  }
}

var myPetInfo = {
  name        : 'ポチ',
  type        : '犬',
  owner       : '山田太郎',
  height_cm   : 80,
  weight_kg   : 10,
  isVaccinated: true,
  hasBrother  : false
};
showPetDetail(myPetInfo);

/* もしくは
showPetDetail({
  name        : 'ポチ',
  type        : '犬',
  owner       : '山田太郎',
  height_cm   : 80,
  weight_kg   : 10,
  isVaccinated: true,
  hasBrother  : false
});
 */
```





#B. 引数にコメントアウトを含める
- 引数にコメントアウトを含めることで、呼び出す側での引数の可読性を上げます
- 呼び出す側の工夫だけなので、関数本体はそのままでOKです
- ただし呼び出す箇所が何度もあると冗長に・・・
- **関数内部が触れない・触りたくない場合**の策として

> コメントアウトは無視されるので関数には渡されません

```.js
showPetDetail(
  /* name =         */ 'ポチ',
  /* type =         */ '犬',
  /* owner =        */ '山田太郎',
  /* height_cm =    */ 80,
  /* weight_kg =    */ 10,
  /* isVaccinated = */ true,
  /* hasBrother =   */ false
);
```




#終わりに
APIだと引数はオブジェクトで渡すことが多いと思うので、Aはごく基本的な手法かと思います。BについてはAのようにできない場合の苦肉の策って感じですね。。

他に良い案があれば、ご教授ください～
FastlaneでDeployGateにコマンド一発でdeployする


## 設定

fastlane/Fastfile

```fastlane/Fastfile
  desc "Submit a new Beta Build to DeployGate"
  lane :dg do
    gym(use_legacy_build_api: true)
    deploygate(
        api_token: ENV['DEPLOYGATE_API_KEY'],
        user: ENV['DEPLOYGATE_USER'],
        message: "Build #{lane_context[SharedValues::BUILD_NUMBER]}",
        )
  end
```
:dgは任意。:beta_dgなど好みで。環境変数からuserとapi_keyを取得します。

.bashrc、.zshrc、ターミナル上などどこでもいいですが、環境変数を設定します。

```
export DEPLOYGATE_API_KEY=apikey
export DEPLOYGATE_USER=user
```
ここでいうapikeyとは
アカウント設定->プロフィール->API key
のことです

## 実行

```
fastlane dg
```
で上がります

## Trouble Shooting 
SL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (Faraday::SSLError)

fastlane/Fastfile

```
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
```
ShinobiLayer: SoftLayer 東京POPのTransitが本当に使われているかを確認する

#はじめに
この[ページ](http://qiita.com/testnin2/items/e3ca53119af80a680a01)で、SoftLayerのバックボーン回線を確認したわけですが、いつの間にかChina Telecomが増えていたことに、今さらながら気が付きました。。。というので、本当にChina TelecomってSoftLayerから繋がっているの？っていうのを確認してみようというのがこの記事の趣旨です。

#実験
今回は、中国版Twitterとして有名な「新浪微博(ウェイボー)」を例にとって調査してみましょう。このサイトのurl（ http://www.weibo.com ）にtracerouteを実行してみます。ただし、-Aオプションを付けてください。このオプションをつけることで、AS番号が分かるからです。
（参考）http://qiita.com/testnin2/items/f03c9e41fc827aaee625

```txt:traceroute
# # traceroute -A www.weibo.com
traceroute to www.weibo.com (180.149.xx.xx), 30 hops max, 60 byte packets
 1  161.202.xx.xx-static.reverse.softlayer.com (161.202.xx.xx) [AS36351/AS9498]  0.933 ms  0.884 ms  1.184 ms
 2  ae11.dar01.tok02.networklayer.com (161.202.xx.xx) [AS36351/AS9498]  1.129 ms ae12.dar02.tok02.networklayer.com (161.202.xx.xx) [AS36351/AS9498]  1.074 ms ae11.dar01.tok02.networklayer.com (161.202.xx.xx) [AS36351/AS9498]  1.045 ms
 3  ae8.bbr01.eq01.tok01.networklayer.com (50.97.xx.xx) [AS36351/AS9498]  1.145 ms  1.100 ms  1.062 ms
 4  202.55.xx.xx (202.55.xx.xx) [AS4809]  1.557 ms  1.502 ms  1.468 ms
 5  * * *
```

dar01.tok02（東京DC） -> bbr01.eq01.tok01（東京POP） -> AS4809 と進んでいますね。このAS4809は、whoisで調べることができます。もしwhoisコマンドが使えないならば、モジュールが導入されていないので、`yum install -y jwhois`でインストールしておいて下さい。

```
# whois AS4809
[Querying whois.radb.net]
[whois.radb.net]
aut-num:        AS4809
as-name:        CHINATELECOM-CORE-WAN-CN2
descr:          China Telecom Next Generation Carrier Network
admin-c:        DUMY-RIPE
tech-c:         DUMY-RIPE
remarks:        For information on "status:" attribute read https://www.ripe.net/data-tools/db/faq/faq-status-values-legacy-resources
status:         OTHER
mnt-by:         RIPE-NCC-RPSL-MNT
changed:        unread@ripe.net 20000101
source:         RIPE
remarks:        ****************************
remarks:        * THIS OBJECT IS MODIFIED
remarks:        * Please note that all data that is generally regarded as personal
remarks:        * data has been removed from this object.
remarks:        * To view the original object, please query the RIPE Database at:
remarks:        * http://www.ripe.net/whois
remarks:        ****************************
（以下略）

```

「新浪微博(ウェイボー)」にアクセスする際には、東京POPからはChina Telecom経由でアクセスされてそうですね！