OmniAICreator/Qiita-1.07M huggingface dataset:
Sakura VPSのubuntu12.04上にgollumを入れる


Gollumとは、マークダウンで記述するWikiシステムである。gitのリポジトリをそのままデータベースとして利用していること、書いた記事がそのままマークダウンファイルとしてプロジェクトディレクトリにアウトプットされるといった他のWikiシステムにはないシンプルさが特徴である（数式もサポートしている）

これは、Sakura VPSのubuntu12.04上にgollumを入れる備忘録である。それ以上でもそれ以下でもない。

## インストール

さらの状態から、gollumをインストールするには以下のコマンド群を実行する。

```
$ sudo apt-get -yV install ruby1.9.3 rubygems
$ sudo update-alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.9.3 500
$ sudo update-alternatives --install /usr/bin/gem gem /usr/bin/gem1.9.3 500
$ sudo gem install rubygems-update
$ sudo gem update
$ sudo apt-get install libxslt-dev libxml2-dev
$ sudo apt-get install -yV lib32z1-dev
$ sudo apt-get install libicu-dev
$ sudo gem install nokogiri
$ sudo gem install gollum
```

まず、gollumを実行するためにはrubyのバージョンが1.9.3以上でなければならないため、apt-getでインストールし、ruby, gemコマンドで実行するバージョンを1.9.3に変更する（3行目まで）。次に必要なパッケージをインストールし、最後にgollumをgemでインストールする

## 実行

gollumの初期実行は以下の通り。

```
$ mkdir notes
$ cd notes
$ git init
$ gollum —mathjax
```

その後は、

```
$ cd notes
$ gollum —mathjax
```

で実行できる．

## 認証

そのままだと、自分の研究ノートがさらされるので、Basic認証くらいはかけておく。
gollumのプロジェクト下にauth.rbを生成し、以下のコードを書く。usernameとパスワードは、各自変えること。

```auth.rb
module Precious
  class App < Sinatra::Base
    use Rack::Auth::Basic, "This is private wiki" do |username, password|
      [username, password] == ['yukke', 'passwd']
    end
  end
end
```

後は以下を実行すれば良い。

```
$ cd notes
$ gollum —mathjax —config auth.rb
```

## ファイルのアップロード
 —allow-uploadsオプションを有効にする。

```
$ cd notes
$ gollum —mathjax —config auth.rb —allow-uploads
```


## 参考サイト

* http://blog.hifumi.info/2014/02/02/my-wiki-powered-by-gollum/
* http://d.sunnyone.org/2012/11/gitwikigollum.html

## 今後の取り組み

できればデーモン化までやりたい（今は、screenで実行している）
Ubuntu12.04にGoを入れてPecoが使えるようになるまで（bash編）

Ubuntu12.04のbashでPecoを使いたかったので整理してみた。

#Go のインストール

####wget, git がなければ入れておく

```bash
sudo apt-get -y install wget
sudo apt-get -y install git-core
```

####ソースコードDL ＆ インストール

```bash
wget https://go.googlecode.com/files/go1.2rc2.linux-amd64.tar.gz
sudo tar zxvf ~/go1.2rc2.linux-amd64.tar.gz -C /usr/local
```

####.bashrcに追記

```bash
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
```

####確認

```bash
source .bashrc
which go
```

#Peco のインストール & 設定
####インストール（数秒待つ）

```bash
go get github.com/peco/peco/cmd/peco
```

####.bashrcに追記

```bash
peco-select-history() {
    declare l=$(HISTTIMEFORMAT= history | sort -k1,1nr | perl -ne 'BEGIN { my @lines = (); } s/^\s*\d+\s*//; $in=$_; if (!(grep {$in eq $_} @lines)) { push(@lines, $in); print $in; }' | peco --query "$READLINE_LINE")
    READLINE_LINE="$l"
    READLINE_POINT=${#l}
}
bind -x '"\C-r": peco-select-history'
bind    '"\C-xr": reverse-search-history'
```

####確認

```bash
source .bashrc
which peco
```

#使ってみる
####Ctrl-r
![peco.png](https://qiita-image-store.s3.amazonaws.com/0/8788/860717ec-0254-040e-8590-e7e1d4619d89.png)

####Ctrl-xr
従来のコマンド履歴検索が起動される。


#参考サイト thx!
centos,bash環境でpecoを導入してコマンド履歴を便利にするまで。
http://qiita.com/fortkle/items/52c1077a7963cb01c596

bash/zsh のヒストリを peco で便利にする
http://qiita.com/comutt/items/f54e755f22508a6c7d78

ubuntu (Xubuntu) 14.04LTS で golang のインストールと SublimeText3 の設定
http://elfcobe.hateblo.jp/entry/2014/05/07/193820
Python - Install MySQLDB on EC2


Ref:
[1] - [Problem with installing ‘MySQLdb’ in Python](http://oligoli.wordpress.com/2009/03/21/problem-with-installing-mysqldb-in-python/)
[2] - [Stackoverflow - How to install MySQLdb (Python data access library to MySQL) on Mac OS X?](http://stackoverflow.com/a/1448476/1105455)
[3] - [Python MySQL for EC2 Amazon AMI](http://theadaptiveweb.org/2011/11/05/python-mysql-for-ec2-amazon-ami/)

Since the version of MySQLDB was changing in the old days, the instructions about how to install this useful tool varies a lot, which makes this tool is very hard to install.

Among all these instructions I found, I find they are not for the current version of MySQLDB. And some steps mentioned by these instructions are not necessary.

So I'm just going to give my install procedure. Hope it will help someone.

The MySQLDB I'm using is the ***MySQL-python-1.2.4b4***.

***Step 1***

Make sure you have install **gcc**, **mysql-devel** and of cource **mysql**. If not, follow [this post](http://oligoli.wordpress.com/2009/03/21/problem-with-installing-mysqldb-in-python/).

***Step 2***

Although most EC2 instance will be with python, but still you will need ***python-devel***.

```
yum install python-devel
```

Note that this may need admin user.

***Step 3***

Download the source code to some place you can easily access to, and unzip it:

```
url -O http://jaist.dl.sourceforge.net/project/mysql-python/mysql-python-test/1.2.4b4/MySQL-python-1.2.4b4.tar.gz
tar -xzvf MySQL-python-1.2.4b4.tar.gz
```

Go into the dir you just unzipped, install it directly:

```
python setup.py build
python setup.py install
```

It should be done by now. You could check by

```python 
import MySQLdb
```

in the python console.


***

The procedure could be a little different according how you set up your EC2 instance, but the most tricky part, I believe, is installing python-devel before you install the MySQLdb.

To sum up, before you install MySQLdb, make sure you have below all intalled:

- python-devel
- MySQL-devel
- Mysql(if you are using the local instance of mysql)
- gcc
Xcode6(GM seed)を入れたらTitaniumのアプリがbuild faild


今日も元気にTitanium開発！と思ったらbuild faild.

```
[ERROR] :  Project failed to build after 5s 43ms
```

まぁ原因は昨日入れたXcode6っしょってことなんですが
とりあえずRun Configurations見てみると勝手にiOS SDKが8.0になってる。。。

![スクリーンショット 2014-09-11 16.30.26.png](https://qiita-image-store.s3.amazonaws.com/0/8868/b338ff38-e2c2-53dd-4c2b-1147fba1e8c8.png "スクリーンショット 2014-09-11 16.30.26.png")


Preference->Studio->Platform->iOS見てみると

![スクリーンショット 2014-09-11 16.20.03.png](https://qiita-image-store.s3.amazonaws.com/0/8868/23978a30-7734-e004-5a3f-7b5c185902df.png "スクリーンショット 2014-09-11 16.20.03.png")

ってことでXcodeのフォルダを参照しているのでXcode更新したら変わるの当然ですね。。。

つーことでXcode5を引っぱりだしてきて名前を「Xcode」、Xcode6は「Xcode6」としてやったらとりあえずもとの通りビルド成功。

![スクリーンショット 2014-09-11 16.33.20.png](https://qiita-image-store.s3.amazonaws.com/0/8868/d7c4d80e-b61b-bfd4-a2b1-576fa69c01e7.png "スクリーンショット 2014-09-11 16.33.20.png")

Xcode6のせいでいろいろ無駄に焦る。。。

※Preferenceに書いてあるようにsudo xcode-selectでXcodeのパス変えてやってもいいかも。試してないけど。

※下記の場所にSDKあるからXcode5の中のiPhoneOS7.1.sdkをXcode6にコピーしてもいけるかも。試してないけど。
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
[iOS8 対応]UILabelをbackgroundColorを追加後、addSubVievするとViewが隠れる問題


##既存のアプリXcode６で実行した
```
UILabel *label1 = [[UILabel alloc]initWithFrame:self.view.frame];
label1.backgroundColor = [UIColor whitecolor];

UILabel *label2 = [[UILabel alloc]initWithFrame:CGRectMake(0,0,100,100)];
label2.backgroundColor = [UIColor redcolor];

[label1 addSubView:label2];
[self addSubview:label1];
```

label1のみが表示されるように見えるが、実際は、backgroundColorの色で塗りつぶされていた。

##対応策１
```
UILabel *label1 = [[UILabel alloc]initWithFrame:self.view.frame];
label1.backgroundColor = [UIColor whitecolor];

UILabel *label2 = [[UILabel alloc]initWithFrame:CGRectMake(0,0,100,100)];
label2.backgroundColor = [UIColor redcolor];

[label1 insertSubView:label2 atIndex:0];
[self addSubview:label1];
```

変わらず

##対応策2
```
UILabel *label1 = [[UILabel alloc]initWithFrame:self.view.frame];
label1.backgroundColor = [UIColor whitecolor];

UILabel *label2 = [[UILabel alloc]initWithFrame:CGRectMake(0,0,100,100)];
label2.backgroundColor = [UIColor redcolor];

[label1.superview insertSubview:label2 belowSubview:blabel];
[self addSubview:label1];
```
blabel表示されず

##対応策3
```
UILabel *label1 = [[UILabel alloc]initWithFrame:self.view.frame];
label1.layer.backgroundColor = [UIColor whitecolor].CGColor;

UILabel *label2 = [[UILabel alloc]initWithFrame:CGRectMake(0,0,100,100)];
label2.backgroundColor = [UIColor redcolor];

[label1 addSubView:label2];
[self addSubview:label1];
```
ios7と同じ見た目になった。

##あとがき
UILabelの挙動が変わっていて、つまずきました。
新規でProjectを作成すると、今までどおりで表示されていたので、意味不明でした。
同じ症状の人の為に、メモしておきます。

くわしい方は、ぜひ原因を教えてください。
64bit iOSシミュレータでファイル操作関連でSIGABRTする件の回避方法

j2objcに限らずですが、ファイル操作関連のコードで、64bitの実機では動くのに、シミュレータで動かしたときに、以下のようなエラーを吐いて落ちることがあります。

### Xcodeエラー内容
```
Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
stat$INODE64 
```

```
Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
fstat$INODE64 
```

### 原因
iOSシミュレータのバグらしいです。64bit用の関数を用意し忘れたようです(￣▽￣;)　アップルさんてばうっかりさんね。

つまり回避不能！？
いやいや、広大なネットの海を泳げば、適切なキーワードがあれば、世界の人が教えてくれます。あとは想像の翼を広げて・・・

### 回避方法

ないなら定義してやればいいじゃない。
てことで、**main.m**にないと言われた関数を作ってやればOK.

```objc:main.m
int stat$INODE64( const char *path, struct stat *sb )
{
    return stat( path, sb );
}

int fstat$INODE64( int fd, struct stat *sb )
{
    return fstat( fd, sb );
}
```

### 参考ページ
https://github.com/google/j2objc/issues/395
http://www.tokoro.me/2012/09/02/ghunit-jenkins-coverage/
【プログラミング48(/2 -1)手】Iterator


## ポイント
Iterator（イテレーター、反復子）パターン。
rubyのeach、phpのforeachなど。


## サンプルコード
以下サイトと同じコード。
http://morizyun.github.io/blog/ruby-design-pattern-05-iterator/

```ruby:Iterator.rb
class Article
    attr_reader :title
    def initialize(title)
        @title = title
    end
end

class Blog
    def initialize
        @articles = []
    end
    def get_article_at(index)
        @articles[index]
    end
    def add_article(article)
        @articles << article
    end
    def length
        @articles.length
    end
    def iterator
        BlogIterator.new(self)
    end
end

class BlogIterator
    def initialize(blog)
        @blog = blog
        @index = 0
    end
    def has_next?
        @index < @blog.length
    end
    def next_article
        article = self.has_next? ? @blog.get_article_at(@index) : nil
        @index = @index + 1
        article
    end
end

blog = Blog.new
blog.add_article(Article.new('記事1'))
blog.add_article(Article.new('記事2'))
blog.add_article(Article.new('記事3'))
blog.add_article(Article.new('記事4'))

iterator = blog.iterator
while iterator.has_next?
    article = iterator.next_article
    puts article.title
end
```

## 所感
* each使わずにやったらいいかがわかった。  
ただeachメソッドがあれば実際は使わないだろうな。

## 参考
http://morizyun.github.io/blog/ruby-design-pattern-05-iterator/
vimですでに開いているファイルと別ファイルとの差分を表示する方法


こんにちは，業務で使っている Titanium をもう少し盛り上げたいと思っている [@isseium](http://twitter.com/isseium) です．

vimdiff 使ってますか？便利ですよね？

```例）Gemfileの比較
$ vimdiff CheekiTrip/Gemfile zekkeimash/Gemfile
```

![vimdiff例](http://i.gyazo.com/1e72d4ab13ed696fc081987f212a7866.png)


ケバケバしい色がまたオツな感じですねぇ．

さて，この便利なvimdiffですが，vimdiff コマンドのためにTerminalを立ち上げたり，tmuxの別windowを立ち上げるのが億劫と感じておりました．

vimファイルで開いているときにどうやって起動するんだろう？と思いまして今回しらべたのでまとめます．


まず vim で単体のファイルを開いているとします．

![単体](http://i.gyazo.com/0d5e1b55c792c37315aa5f4b9906b066.png)


```:vsplit <ファイル名>``` を実行しまして縦分割で比較したいファイルを開きます

![2つのファイルを開いている状態](http://i.gyazo.com/2fce74c1ff7a549ab029a428b78bc06c.png)

次に ```:windo diffthis``` を実行します．


![vimdiff例](http://i.gyazo.com/1e72d4ab13ed696fc081987f212a7866.png)

あら便利！

## 詳しいことはこちら！
http://d.hatena.ne.jp/thinca/20130426/1366910837
http://stackoverflow.com/questions/1095718/diff-two-tabs-in-vim
Haxe でファイルリストをソースに埋め込むマクロ

書いたけど結局使わなそうなので張っておきます。
(JSでクラスの動的読み込み的な事がしたかった)

```:haxe
class Files {

    macro
    public static function files(path:Expr):Expr
    {
        return macro sys.FileSystem.readDirectory($path);
    }

    static function main() {
        var files = files('/target/path/');
        trace(files);
    }
}
```
Angularjsで変動するURLをルーティング定義する

`:変数`ってつけるといいみたい。
ランダムURLやパラメータなどがつく場合に使う。

```
var app = angular.module("app", ["ngRoute"]);

app.config([ "$routeProvider", function($routeProvider) {
　$routeProvider
　　.when('/hoge/:param', {
　　　templateUrl: "hoge",
　　　controller: "HogeCtrl"
　　})
}]);
```
【jQuery】inputの全角数字・全角アルファベットを半角に変換


便利なのでメモ。

###[DEMO](http://codepen.io/konweb/pen/cIDvx)


```index.html
<!DOCTYPE html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="jquery.js"></script>
</head>
<html lang="en">
<body>
	<div>
		<p><input type="text" class="js-characters-change"></p>
	</div>
</body>
</html>
```


```jquery.js
$(function(){
	$(".js-characters-change").blur(function(){
		charactersChange($(this));
	});


	charactersChange = function(ele){
		var val = ele.val();
		var han = val.replace(/[Ａ-Ｚａ-ｚ０-９]/g,function(s){return String.fromCharCode(s.charCodeAt(0)-0xFEE0)});

		if(val.match(/[Ａ-Ｚａ-ｚ０-９]/g)){
			$(ele).val(han);
		}
	}
});
```
【Titanium】アプリ名を多言語化対応する


プロジェクトのフォルダ直下にi18n/[ロケール]/app.xmlを用意します
日本語と英語を対応する際の対応

```
プロジェクトルート
 ├── app
 ├── i18n
    ├── en
    │   └── app.xml
    └── ja
         └── app.xml 
```

###英語

``` app.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">qiitaNews</string>
</resources>

```
###日本語

``` app.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <string name="appname">キータニュース</string>
</resources>
```
マテリアルデザインのボタンアクション

人のソースを見て勉強しようシリーズ第4弾
[Material Action Button](http://jsdo.it/matsui_a/ccvO/edit)

今回の参考ソースは[ここ](http://codepen.io/andreasstorm/pen/DkLqA)

![sample4.gif](https://qiita-image-store.s3.amazonaws.com/0/3140/5823c814-e46a-ad63-4689-1ed8692a480c.gif)

ソースをそのままコピペしたらjsdoitの方でちゃんと動作しなかったので、
少し書き直した。

##html

```
<div class="icon">
  <i></i>
  <span class="tap"></span>
</div>
```

触れたときの波紋は.tapでほか3つの円や閉じるアイコン等については全部iでbefore/after要素作ったりして再現してる。

##CSS

```
/* アイコンを中央に配置 */
.icon {
  width: 40px;
  height: 40px;
  border-radius: 100%;
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -20px;
  cursor: pointer;
}

/* ×の閉じるアイコンの実装（右斜め線） */
.icon i {
  width: 2px;
  height: 14px;
  display: block;
  background: #786699;
  position: absolute;
  top: 13px;
  left: 19px;
  opacity: 0;
  transform: rotate(45deg);
  transition: all 0.8s ease;
}

/* ×の閉じるアイコンの実装（左斜め線） */
.icon i:after {
  content: '';
  width: 14px;
  height: 2px;
  display: block;
  background: #786699;
  position: absolute;
  top: 6px;
  left: -6px;
}

/*左右の円生成 */
.icon:after {
  content: '';
  display: block;
  width: 10px;
  height: 10px;
  -webkit-border-radius: 100%;
  border-radius: 100%;
  position: absolute;
  top: 15px;
  left: 15px;
  box-shadow: 14px 0px 0px #fff, -14px 0px 0px #fff; //ここで左右の円表示
  transition: all 0.4s ease;
  z-index: -1;
}

/* 中央の円生成 */
.icon:before {
  content: '';
  display: block;
  width: 40px;
  height: 40px;
  background: #fff;
  position: absolute;
  border-radius: 100%;
  transform: scale(0.25);
  transition: all 0.6s ease;
}

/* 触れたら中央の円を大きく */
.icon.active:before {
  transform: scale(1);
}

/* 左右の円を消す */
.icon.active:after {
  -webkit-box-shadow: 0px 0px 0px #fff, 0px 0px 0px #fff;
  box-shadow: 0px 0px 0px #fff, 0px 0px 0px #fff;
}
.icon.active i {
  opacity: 1;
  filter: none;
}

/* 触れたときの波紋 */
.tap {
  width: 80px;
  height: 80px;
  display: block;
  position: absolute;
  top: -20px;
  left: -20px;
  opacity: 1;
  filter: none;
  transform: scale(0);
  border-radius: 100%;
  background-color: rgba(255,255,255,0.6);
}
.tap.active {
  transition: all 400ms cubic-bezier(0, 0.7, 0.5, 1);
  opacity: 0;
  transform: scale(1);
}

```

i で閉じるアイコンの×を再現（iで右斜め線、i:afterで左斜め線）
`box-shadow: 14px 0px 0px #fff, -14px 0px 0px #fff;` で両脇の円をまとめて生成してる。


##JS

```
(function() {

  $(".icon").click(function () {
     $(this).toggleClass('active');
     $('.tap').addClass('active');
  });
  
  $(".icon").bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function() {
    return $('.tap').removeClass('active');
  });
    
}).call(this);
```

触れたら `.active` を付ける処理。
CSS3のTransition終了時にJavaScriptで処理を走らせる場合は `TransitionEnd` を使う。
（クロスブラウザ対応はなくてもいけるかもだけど念のため。）
[Mac]Xcode6.1で確認済み！を入れる前に見ておきたい！自分のMacのOSを確認する方法

## Xcode Version 6.0.1はMac OSの中でもMavericks(OS X v10.9 )または、Yosemite(OS X v10.10)のOSを前提としています！
せっかく、長い時間を掛けてダウンロード、解凍をしてもxcode6.1が
使えないとなる前にこちらの方法で自分のMacのOSを確認して置きましょう。

<br>

## １・「このMacについて」を選択する。

![スクリーンショット 2014-09-11 15.05.56.png](https://qiita-image-store.s3.amazonaws.com/0/15812/6de46c06-fc90-fb74-51e3-88e46f96d2a9.png)

<br>

## ２・「OSX バージョン10.9.4」または、「OSX バージョン10.10」になっていることを確認する。

![スクリーンショット 2014-09-11 15.06.11.png](https://qiita-image-store.s3.amazonaws.com/0/15812/e1627534-934c-1a53-dc11-c932d4874ab9.png)
Firefoxのレスポンシブデザインビューのプリセット変更

![responsive-design-view.png](https://qiita-image-store.s3.amazonaws.com/0/39392/8d22c65e-f6ff-59ae-5993-be4b7ec32a52.png)


1. ロケーションバーに `about:config` と入力し、Enterキーで起動
2. 検索フォームに `devtools.responsiveUI.presets` と入力
3. `devtools.responsiveUI.presets`を右クリックし、メニューから「値の変更」を選択（右クリックではなくダブルクリックでも可能）
4. 表示された入力ウィンドウの内容を書き換えて「OK」とするとプリセット変更完了

以下が初期プリセットの内容（見やすいように改行を入れているが、実際には改行なしの1行）

```lang:初期プリセット
[
{"key":"768x1024","width":768,"height":1024},
{"key":"800x1280","width":800,"height":1280},
{"key":"980x1280","width":980,"height":1280},
{"key":"1280x600","width":1280,"height":600},
{"key":"1920x900","width":1920,"height":900}
]
```

以下がカスタムした内容。初期プリセットにはないが、`name` を使って各設定に名前をつけることが可能。

```lang:カスタムプリセット
[
{"key":"320x480","name":"iPhone-iPhone4S","width":320,"height":480},
{"key":"320x568","name":"iPhone5-iPhone5s,5c","width":320,"height":568},
{"key":"375x667","name":"iPhone6","width":375,"height":667},
{"key":"414x736","name":"iPhone6plus","width":414,"height":736},
{"key":"360x640","name":"Nexus 5, Xperia Z, Galaxy S3-S5","width":360,"height":640},
{"key":"768x1024","name":"iPad, iPad mini","width":768,"height":1024},
{"key":"800x1280","name":"Nexus 10, Galaxy Tab 10","width":800,"height":1280}
]
```

これを設定した画面が、冒頭のキャプチャになります。

**追記：`about:config` で `devtools.responsiveUI.presets` と入力しても何も出てこない場合**
一度レスポンシブデザインビューを起動（Ctrl + Shift + m）し、「プリセットを追加」から適当な名前でもいいので名前をつけて追加すると `about:config` に出てくるようになります。
Thanks [@burnworks](https://twitter.com/burnworks/status/509952428343455744)
AppStoreに動画が載せられるようになったので、その仕様とよくある質問まとめ


![](http://www.nodesagency.com/wp-content/uploads/2014/06/Video-Previews-iOS-8.jpg)

iOS 8からアプリの動画をスクリーンショットと共に載せられるようになりました！

## App Video Preview 仕様

* 15秒〜30秒
* 500MB以下
* 900 x 1200 pixels か 1136 x 640 pixels
* M4VまたはMP4、MOV形式
* H.264（推奨）かApple ProRes videoコーデック
* 30 fps フレームレート
* ステレオ 256kbps AAC オーディオフォーマット
* 画面の向きはportraitかlandscapeどちらでもOK

## よくある質問
### これは必須ですか？
任意です。

### いくつまで載せられますか？
1つです。
※ 3.5inchビデオはサポートしていません

### BGMやナレーション、画面上にグラフィックを重ねてもいいですか？
はい。

### 動画はローカライズできますか？
いいえ。
一つの動画がすべての言語に対して表示されます。

### サムネは設定できますか？
できます。
デフォルトではビデオの5秒めのところに設定されています。
これは任意で変更できます。


## まとめ
動画によってアプリの動きや使い勝手、簡単なサービス説明などさまざまなことが簡単に伝えられるようになりました！
30秒と短いのでCM感覚で作った方がいいのかな…。
ソシャゲとかはめちゃくちゃ力入れそうな部分ですね。

## 参考文献
この記事はすべて公式ガイドの和訳です。
原文は【iTunes Connect】→【リソースとヘルプ】→【FAQ】→【App Video Previews】から読むことができます。
Python - Simple multi-thread sample


Ref:
[1] - [Stackoverflow - Multiple Threads in Python](http://stackoverflow.com/questions/6286235/multiple-threads-in-python)

This pattern is usually used in Http requesting. Since computing tasks might cause a lot of context switches, which might decrease the speed.

```python
import threading

urlTaskList = [
# your tasks here
]

parallelism = 4

# here is the task you want to run
def subTask(urlList):
  import urllib2

  for url in urlList:
    data = urllib2.urlopen(url).read()
  
    # process the data here
    # ...


# this method is used to seperate task chunk
def splitChunk(tasks):
  """ Yield successive n-sized chunks from l.
  """
  for i in xrange(0, len(l), n):
    yield l[i:i+n]


threadList = list()
chunkList = list(splitChunk(urlTaskList))


for subChunk in chunkList:
  worker = threading.Thread(target=subTask, args=(subChunk))
  worker.start()
  threadList.append(worker)
  

# wait for every thread finish its work
for worker in threadList:
  worker.join()

```


The method `splitChunk(taskList)` above is from [this post](http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python).
AOSPをコンパイルするときに指定するターゲットまとめ

AOSP(Android Open Source Project)からダウンロードしたソースをコンパイルするときに指定するパラメータやターゲットを整理しました。

すべて調べきれていないのでターゲット名だけあるものや、記載から漏れているものあると思います。「このターゲットが足りない」や、「ターゲットの説明が間違っている」など、頂いたご意見を踏まえて修正していきたいと思っております。


ちなみにコンパイルするときのコマンドは、
```  make <target>```
です。

# ターゲット
## all
すべてのものをコンパイルする

## clean
コンパイルしたファイルをすべて削除する。
下記のコマンドと同等。

```shell-session
rm -rf out/<configuration>/
```

## clean-<modules>
<modules>に指定した「LOCAL_MODULE」定義のファイルを削除する。

## droid
通常のコンパイルパラメータ?

## modules
すべての「LOCAL_MODULE」定義をコンパイルする。

## rutime


## service


## sdk
SDK（ADBやFASTBOOTなど）の中から一部のツールをコンパイルする。


## snod
現在のソフトウェアのバイナリからシステムイメージを構築する。

## update-api
Android SDKに含まれるべきAPIリストを更新する。元からあるSDKに、独自にAPIを追加した後は、1度実行する必要がある。

# 参考サイト
[AndroidとBeagleBoardで　実践！組み込みLinuxの技 - IT Pro](http://itpro.nikkeibp.co.jp/article/COLUMN/20110104/355769/)
[Android Build System - Embedded Linux Wiki](http://elinux.org/Android_Build_System)
Python - How do you split a list into evenly sized chunks in Python?


Ref:
- [1] [How do you split a list into evenly sized chunks in Python?](http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python)

I found this very useful snippet in stackoverflow to split chunks of data.
This code could be used to dispatch works to multiprocess.

```python
def chunks(l, n):
    """ Yield successive n-sized chunks from l.
    """
    for i in xrange(0, len(l), n):
        yield l[i:i+n]
```

Here is how to use it:

```python
import pprint
pprint.pprint(list(chunks(range(10, 75), 10)))
[[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
 [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
 [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
 [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
 [50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
 [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
 [70, 71, 72, 73, 74]]
```
【プログラミング48(/2 -1)手】Facade


## ポイント
Facade（うわべ、見せ掛け、建物の正面）パターン。
複雑な内部処理 (データベース処理, 業務処理 etc) を隠蔽し、利用者にシンプルなインタフェースを提供するパターン。
以下、PCの起動の際の動作を簡略化した例で書いてみる。


## サンプルコード

```ruby:Facade.rb
class Bios
    def execute
        puts "During Power Up."
        sleep(1)
    end
    def waitForKeyPress
        puts "Waiting for an Event."
        sleep(1)
    end
    def launch(os)
        puts os.name + " is launched."
        sleep(2)
    end
    def powerDown
        puts "Power down."
    end
end

class OS
    attr_accessor :name
    def initialize(name)
        @name = name
    end
    def halt
        puts @name + " is aborted."
        sleep(1)
    end
end

class PCOnOffFacade
    def initialize
        @bios = Bios.new
        @os = OS.new('Windows')
    end
    def turnOn
        @bios.execute
        @bios.waitForKeyPress
        @bios.launch(@os)
    end
    def turnOff
        @os.halt
        @bios.powerDown
    end
end

pc = PCOnOffFacade.new
pc.turnOn
pc.turnOff
```

## 所感
* これは使う頻度多そうだね。

## 参考
http://blog.a-way-out.net/blog/2014/03/10/facade-pattern/
http://www.ie.u-ryukyu.ac.jp/~e085739/java.it.10.html
Test::msqld使用の際は、スコープに気をつけること


* [Test::mysqld](http://search.cpan.org/~kazuho/Test-mysqld-0.17/lib/Test/mysqld.pm)は、テストの実行の度に、test dbを立ててくれる超便利モジュール。

# 事始め
[Teng](http://search.cpan.org/~satoh/Teng-0.25/lib/Teng.pm)のラッパーみたいなものを作ろうとして、connect_infoを渡したり、dbh(Test::mysqld含む)を渡したりしてインスタンスをつくろうと思った。

```perl
my $swich = shift;
my $conf = {}

if ($switch) {  #mysqldのdbh渡し
  my $mysqld = Test::mysqld->new(); #mysqld実行
  my $dbh = DBI->connect($mysqld->dsn); #dbh作成
  $conf->{dbh} = $dbh;
} else {  #connect_info渡し
  $conf->{connect_info} = "dsn:hogehoge";
}

my $teng = Teng->new($conf);
```

的なことをしようと思ったわけです。

# エラー発生

```
failed: Can't connect to local MySQL server through socket
```

mysqlに繋げないよ!!

# 原因:Test::mysqldは、適宜に破棄される。

というところで、$mysqldが宣言されるのが、ifのスコープの中なので、
そこが終了したらmysqldも破棄されるわけで、
そのスコープ外でTengさんに渡しても、もうmysqldは無いよということだと思います。

# 対応として

```perl
my $swich = shift;
my $conf = {}

my $mysqld; #持続させたいスコープで宣言
if ($switch) {
  #mysqldのdbh渡し
  $mysqld = Test::mysqld->new(); #mysqld実行
  my $dbh = DBI->connect($mysqld->dsn); #dbh作成
  $conf->{dbh} = $dbh;
} else {
  #connect_info渡し
  $conf->{connect_info} = "dsn:hogehoge";
}

my $teng = Teng->new($conf);
```

必要ないタイミングでは、mysqldを実行させたくないので、
$mysqldだけ、スコープの外側で宣言てな感じにすればOKですかね。
Rails4をJSON APIとして構築していてCreateのAPIに関連のID一覧をparameterとしてPOSTしてはまった


### 前提
1.Railsのwrap_parametersはJSONをRailsへ送った時にルート要素を省いてくれる。というか、省いて送ってもよしなにwrapしてくれる。

[Railsのwrap_parametersは何をしてくれるのか？](http://katahirado.hatenablog.com/entry/2014/08/26/210247)

2.has_manyを定義するとrelation_ids,relation_ids=というメソッドが使えるようになる

```group.rb
class Group
  has_many :groups_users
  has_many :users, through: :groups_users
end
```

```user.rb
class User
  has_many :groups_users
  has_many :groups, through: :groups_users
end
```

```irb
group = Group.first
group.user_ids
# =>[1,2,3]
group.user_ids=[2,3,4]
# user id 2,3,4との関連が作成される
```

3.Railsのstrong_parametersは許可されたパラメータ以外を取り除く

```groups_controller.rb
class GroupsController < ApplicationController
  def create
    @group = Group.new(group_params)
    # 省略
  end

  private
  def group_params
    params.require(:group).permit(:name, user_ids: [])
  end
end
```

### 問題

このgroups#createに対して以下のようなJSONを送付したところ、groupモデルは作成されたが、userとの関連は作成されなかった。

```json
{
  name: "新規グループ",
  user_ids: [1,2,3]
}
```
user_idsがstrong_parametesに書いたにもかかわらず弾かれる。

実際のparamsを見るとこんな感じ

```
 Parameters: {"name"=>"新規グループ", "user_ids"=>[1,2,3], "group"=>{"name"=>"新規グループ"}}
```

調べるとどうもnested_attributes_for等も引っかかるようだ。

### 解決

strong_paramtersの[README](https://github.com/rails/strong_parameters#use-outside-of-controllers)に書いてあった。

以下のようにrequire(:group)を取り除く

```groups_controller.rb
class GroupsController < ApplicationController
  # 省略

  private
  def group_params
    params.permit(:name, user_ids: [])
  end
end
```

これで、wrap_parametersもきき、groupとuserの関連も作成される。
/System/Library/LaunchDaemons/com.apple.taskgated.plistをいじってMacが起動しなくなった時の対処法


#状況
Mac OS X 10.9 MavericksでgdbでGoのコードをデバッグするhttp://qiita.com/ymotongpoo/items/81d3c945483cae734122
の記事に従い
/System/Library/LaunchDaemons/com.apple.taskgated.plist
を以下のように編集したら起動しなくなった(このバグは自分が内容をよく理解できずに変更したことが原因だと考えられる・・・、いるかわからないが同じようにハマった人向けに記述する)

```com.apple.taskgated.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>POSIXSpawnType</key>
    <string>Interactive</string>
    <key>EnableTransactions</key>
    <true/>
    <key>Label</key>
    <string>com.apple.taskgated</string>
    <key>MachServices</key>
    <dict>
        <key>com.apple.taskgated</key>
        <dict>
            <key>TaskSpecialPort</key>
            <integer>9</integer>
        </dict>
    </dict>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/libexec/taskgated</string>
-       <string>-s</string>
+       <string>-sp</string>
    </array>
</dict>
</plist>
```

#対処法
- 基本上で編集したファイルを元に戻す
- そのためにシングルモードで起動する
- read only file systemによりwrite protectがかかっているので、再マウントする

##シングルモードで起動
1. 電源ボタンを押して、コンピュータを起動します。
2. その直後に、「command + S」
「S」キーはシングルユーザモードで起動という意味。黒い画面になったら離していい

##再マウント
シングルユーザーモードになるとcuiで動作するので以下をタイプ+enter

```shell
mount -uw /
```
##ファイルの編集

```shell
eamcs -nw /System/Library/LaunchDaemons/com.apple.taskgated.plist
```
emacs が起動する

以下に置き換える

```com.apple.taskgated.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>POSIXSpawnType</key>
    <string>Interactive</string>
    <key>EnableTransactions</key>
    <true/>
    <key>Label</key>
    <string>com.apple.taskgated</string>
    <key>MachServices</key>
    <dict>
        <key>com.apple.taskgated</key>
        <dict>
            <key>TaskSpecialPort</key>
            <integer>9</integer>
        </dict>
    </dict>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/libexec/taskgated</string>
        <string>-s</string>
    </array>
</dict>
</plist>
```

注: emacsの編集コマンドはネットを参照のこと
emacs は ctrl + x  ctrl + sでセーブ  
emacs は ctrl + x  ctrl + cで終了
  
最後にシングルユーザーモードを終了する

```shell
reboot
```

read onlyでchmodも使えない場合にいかに書き込み可能にするかがポイント
#参考
- 知ってると便利な UNIX のコマンド
http://www.gadgety.net/shin/tips/unix/faq.html
RubyからActiveRecord経由でRedshiftを使う

# 前提条件

ActiveRecordのVersion4以上

# Gemfileの編集
```
$ vi Gemfile
```

```Gemfile
gem 'pg_typecast', '~> 0.1.3'
gem 'activerecord4-redshift-adapter', github: 'aamine/activerecord4-redshift-adapter'
```

`redshift-adapter`でActiveRecordをRedshift対応にする
`pg_typecast`を使わないと、戻り値の数値が文字列になってしまうため追加する

# データベースの設定

```config.yml
  database:
    adapter: redshift
    encoding: utf8
    host: <Endpoint>
    database: <Database Name>
    username: <your username>
    password: <your password>
    port: 5439
```

## デモ

```
$ vi ./demo.rb
```

```demo.rb
#!/usr/bin/env ruby
Bundler.require
sql = "SELECT NOW()"
puts ActiveRecord::Base.connection.execute(sql).first
```

```
$ bundle exec ruby ./demo.rb
```

出力結果

```
D, [2014-09-11T14:27:25.801032 #17829] DEBUG -- :    (16.5ms)  SELECT NOW()
{:now=>2014-09-11 14:27:25 +0900}
```

# 参考

[pg_typecast](https://github.com/deepfryed/pg_typecast)
[activerecord-redshift-adapter](https://github.com/fiksu/activerecord-redshift-adapter)
registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later.とか言われた


http://stackoverflow.com/questions/24454033/registerforremotenotificationtypes-is-not-supported-in-ios-8-0-and-later

```

    [application registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert)];
```

↓

```
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    {
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    }
    else
    {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
    }
```

Base SDK 7.1であっても↑にしてもやらないと- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *) devToken {
に落ちてこないよ
AltJSの選び方フローチャート

```
JavaScriptわかる
  - YES
    型がほしい
      - YES
        Flash/ActionScript3が青春だった
          - YES
            Haxe
          - NO
            DeNAに勤めている
              - YES
                JSX
              - NO
                TypeScript
      - NO
        Ruby or Python が好き
          - YES
            coffee-script
          - NO
            クラスはほしい
              - YES
                EcmaScript6(Traceur Compiler) or CoffeeScript
              - NO
                JavaScriptの文法に不満がある
                  - YES
                    https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS
                  - NO
                    JavaScript書けよ
  - NO 
    関数型わかる
      - YES
        自分の好きな言語に深く精通している
          - YES
            好きな言語は？
              - Haskell
                purescript or ghcjsの完成を待て
              - OCaml
                js_of_ocaml
              - S式
                JavaScriptのエコシステムを使いたい
                  - YES
                    wisp
                  - NO
                    clojure-script
              - Scala
                Scala.js
              - その他
                諦めろ
          - NO
            諦めろ
    - NO
      Java
        - YES
          TypeScript
        - NO
          MS
            - YES
              TypeScript
            - NO
              絶対にJavaScript書きたくない
                - YES
                  GOTO 「Ruby or Pythonが好き」
                - NO
                  JavaScript書けよ
```
新TestFlight雑感

# 新TestFlight

iTunes Connectのプレリリース機能。イメージ通りのTestFlightではない。

- 25人まで、即時配布できる(各10端末まで)
- 1000人まで、審査を経てβ版を配布できる

1000人コースはまだリリースされていないので、25人コースの方について

- iTunes Connectと同じ枠組みでアップロードする
- カジュアルな感じではない
- TestFlightで配布したアプリをそのまま申請できる（はず）
- アップロードからインストールできるまで遅い 30分くらい
- 糞遅い
- 25人のテスターは、iTunes ConnectのTechnical なんとか RoleとAdmin Roleのユーザーのみ
- 普段使いの端末でテストするためには個人のApple IDを登録する必要があり、運用的に辛い

ビルドしてアップロード、その後テストしてよければ申請という流れ。

TestFlightと思わず、アプリのプレリリース機能だと思えば、心を穏やかに保てます。


開発の最後に使うもので、旧TestFlightを置き換えるものではなさそうです。
CIや開発中に1日何回も配布するような場合には、旧TestFlightを使う感じで。
熱対策としてCPUの最高クロックを下げる

* Surface3で使うといいかも。

`cpufreq-info`

* debian : `apt-get install cpufreqd cpufrequtils lm-sensors`
  * /etc/cpufreqd.conf
* centos6 : `yum install cpupowerutils`
* centos7 : `yum install kernel-tools`
  * /etc/sysconfig/cpupower
  * [Fedora 18 on ThinkPad X1 CarbonでCPUが常に遅い - nekop's blog](http://nekop.hatenablog.com/entry/20130122/1358822977)
  
# 参考

* [CPU Frequency Scaling (日本語) - ArchWiki](https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling_(%E6%97%A5%E6%9C%AC%E8%AA%9E))

# CPUの温度を確認

```bash:温度を確認
$ sensors
k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +86.1 C  (high = +70.0 C)
                       (crit = +100.0 C, hyst = +95.0 C)
```

# cpupowerを使う

```bash:インストール
$ sudo pacman -Sy cpupower
```

```bash:CPUの情報を表示
$ sudo cpupower frequency-info
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 4.0 us.
  hardware limits: 800 MHz - 1.70 GHz
  available frequency steps: 1.70 GHz, 1.50 GHz, 1.20 GHz, 800 MHz
  available cpufreq governors: ondemand, performance
  current policy: frequency should be within 800 MHz and 1.70 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 1.50 GHz (asserted by call to hardware).
  boost state support:
    Supported: no
    Active: no
    Boost States: 0
    Total States: 4
    Pstate-P0:  1700MHz
    Pstate-P1:  1500MHz
    Pstate-P2:  1200MHz
    Pstate-P3:  800MHz
```

> hardware limits: 800 MHz - 1.70 GHz

この値の間で設定すればよい。


```bash:最大クロック周波数を800Mhzにする場合
sudo cpupower frequency-set -u 800MHz
```

```bash:現在のCPU周波数を確認
$ grep MHz /proc/cpuinfo
cpu MHz		: 800.000
cpu MHz		: 800.000
cpu MHz		: 800.000
cpu MHz		: 800.000
```

これで温度が下がるといいな
【プログラミング48(/2 -1)手】Singleton


## ポイント
Singletonパターン。
1つのクラスから1つのオブジェクトだけをしか作れないように制限してしまうパターン。


## サンプルコード
rubyだと、Singletonモジュールがあるのでmix-inして使う。
以下サイトと基本コードは同じ。
http://morizyun.github.io/blog/ruby-design-pattern-10-singleton/


```ruby:Singleton.rb
require 'singleton'

class SingletonClass
    include Singleton
    attr_accessor :counter
    def initialize
        @counter = 0
    end
end

# インスタンスメソッドは複数作れるけど、オブジェクトは一つ
a = SingletonClass.instance
a.counter += 1
b = SingletonClass.instance
b.counter += 1
puts a.inspect
puts b.inspect

# newで新規にオブジェクトを作ることができない
def puts_safe
    c = SingletonClass.new
    puts c
rescue => e
    puts "ERROR!! - #{e}"
end
puts_safe
```

## 所感
* 使いどころがわからんけど、まあそういうもんかって感じ。

## 参考
http://morizyun.github.io/blog/ruby-design-pattern-10-singleton/
http://docs.ruby-lang.org/ja/2.1.0/class/Singleton.html
errors.New()とfmt.Errorf()って...

# 何が違うんですか？？

`error`型を返すところは同じです。

- エラーメッセージを作る時に `fmt.Sprintf()` を使いたければ
 - `errors.New()`
- そうでなければ
 - `fmt.Errorf()`

という風に使い分ければいいと思います。

# error型を返すところは同じ

```go:errors_example.go
package main

import (
    "errors"
    "fmt"
)

func errorByFmtErrorF() error {
    return fmt.Errorf("Error: %s", "dame-desu-yo")
}

func errorByErrorsNew() error {
    return errors.New(fmt.Sprintf("Error: %s", "aki-masen-yo"))
}

/*
func errorByFmtSprintF() error {
    return fmt.Sprintf("Error: %s", "ikema-sen-yo")
}
*/

func main() {
    fmt.Printf("fmt.Errorf: %#v\n", errorByFmtErrorF())
    fmt.Printf("errors.New: %#v\n", errorByErrorsNew())
    //fmt.Printf("fmt.Sprintf: %#v\n", errorByFmtSprintf())
}
```

### 実行結果

```bash
$ go run errors_example.go
fmt.Errorf: &errors.errorString{s:"Error: dame-desu-yo"}
errors.New: &errors.errorString{s:"Error: aki-masen-yo"}
```

同じですね。

# ちなみに

上のコードのコメントをアンコメントアウトすると

```bash
$ go run errors_example.go 
# command-line-arguments
./errors_example.go:17: cannot use fmt.Sprintf("Error: %s", "ikema-sen-yo") (type string) as type error in return argument:
        string does not implement error (missing Error method)
./errors_example.go:23: undefined: errorByFmtSprintf
```

コンパイルが通りません。

`errorByFmtSprintF`は`error`型を返すfunctionなのに
`string`型を返してるからですね。

### エラーメッセージをよく見てみると

```bash
string does not implement error (missing Error method)
```

Errorメソッドを持っていれば`error`型じゃなくても大丈夫っぽい？？

# ちゃんと調べて書く

`error`は`type`じゃなくて、`interface`なの？

もしくは、
`interface Error`実装の一つが`type error`かな？

# 調べた

[The Go Programming Language - Errors](http://golang.org/ref/spec#Errors)

`interface`でした！
Rails 4.0 にturnipセットアップメモ

エンドツーエンドのテストを行うため導入してみました。

# 参考

http://magazine.rubyist.net/?0042-FromCucumberToTurnip

https://github.com/jnicklas/turnip

# rail4.0へのセットアップ手順

## 1. Gemfile

```rb
# Gemfile

group :test do
  gem 'rspec-rails'
  gem 'turnip'
end
```

※ 参考 https://github.com/jnicklas/turnip

## 2. rspec install

```bash
bundle exec rails g rspec:install
```

## 3. テスト用ディレクトリ生成

```bash
mkdir ./spec/features
mkdir ./spec/steps
```

## 4. .rspecの編集

```rb
# ./rspec
--color
-r turnip/rspec
```

* 参考 https://github.com/jnicklas/turnip

## 5. spec/turnip_helper.rbの作成

```rb
# spec/turnip_helper.rb
require 'rails_helper'
Dir.glob("spec/steps/**/*steps.rb") { |f| load f, true }
```

* 参考 https://github.com/jnicklas/turnip


## 6. featureやstepファイルの作成

* 参考 

http://gongo.hatenablog.com/entry/2013/05/29/223218
http://qiita.com/moriyaman/items/af2a0264adbaaa0d2029

## 7. turnip(rspec)実行

```bash
bundle exec rspec
```

----
[capybaraのセットアップに続きます](http://qiita.com/hmu29/items/a96f59c21b7b4141c940)
UbuntuにPhantomJS入れた

## ダウンロードリンク

http://phantomjs.org/download.html

## コマンド

```zsh
$ wget -O /tmp/phantomjs-1.9.7-linux-x86_64.tar.bz2 https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.7-linux-x86_64.tar.bz2
$ cd /tmp
$ bzip2 -dc /tmp/phantomjs-1.9.7-linux-x86_64.tar.bz2 | tar xvf -
$ sudo mv /tmp/phantomjs-1.9.7-linux-x86_64/bin/phantomjs /usr/local/bin/
$ phantomjs --version
1.9.7
```
スプライトを表示してみる（Cocos Code IDE, Lua言語）


Cocos Code IDEを使ってLua言語でスプライトを表示してみます。

ここでは新規プロジェクトを作成して、スプライトを画面に表示します。
初期状態で作成されるサンプルゲームをまっさらにする所から始めます。

|実行環境、IDE|Cocos2d-xバージョン|言語|
|:--|:--|:--|
|Cocos Code IDE Mac OS X 1.0.0-RC1|Cocos2d-x V3.2|Lua言語|

## 準備

適当なプロジェクト名で新規プロジェクトを作成します。

1. [File]メニューから[New]->[Cocos Lua Project]を選択。
2. Project Name:は何でもかまいません。ここではCocosTestを入力しました。
3. [next]をクリック
4. Orientation:portraitを選択
5.  [Finish]をクリック

縦画面でプロジェクトを作成しました。横画面が好きな人は横画面でもかまいません。

まずは実行してみましょう。
（上部にある[Debug Mac]ボタンか[Run Mac]ボタン）

サンプルゲームが表示されたと思います。
ただし、縦画面の場合、縦横の比率がおかしいと思います。
そこで、main.luaファイルのsetDesignResolutionSizeの480と320を入れ替えます。

```lua:main.lua
26行目
    cc.Director:getInstance():getOpenGLView():setDesignResolutionSize(320, 480, 0)
```

実行して、縦横の比率が正しいことを確認してください。

次に単機能のテストを行いたいため、ここではGameScene.luaの内容をごそっと削除して、何もない状態にしてしまいます。

```lua:GameScene.lua
require "Cocos2d"
require "Cocos2dConstants"

local GameScene = class("GameScene",function()
    return cc.Scene:create()
end)

function GameScene:ctor()
    self.visibleSize = cc.Director:getInstance():getVisibleSize()
    self.origin = cc.Director:getInstance():getVisibleOrigin()
    self.schedulerID = nil
end

-- ここにテスト用コードを記述
function GameScene.create()
    local scene = GameScene.new()
    
    return scene
end
-- ここまで

return GameScene
```

playBgMusic関数を削除してしまったので、main.luaの31行目をコメントアウトします。


```lua:main.lua
31行目
    -- gameScene:playBgMusic() -- playBgMusic関数を削除してしまったのでコメントアウト
```

実行してみてエラーがでなければ、準備ができました。
真っ黒な画面とデバッグ情報だけが表示されたと思います。

## 画像を準備する

image.pngのファイル名で画像を用意し、resディレクトリに配置します。画面内に収まれば画像サイズは適当で。ここでは128x128で作りました。

## スプライトを表示するコードを書く
GameScene.luaファイルのGameScene.create()を以下のように書き換えます。

```lua:GameScene.lua
function GameScene.create()
    local scene = GameScene.new()
    
    local sprite = cc.Sprite:create("image.png")
    sprite:setPosition(100, 100)
    scene:addChild(sprite)
    
    return scene
end
```

実行して(100, 100)の位置にimage.pngが画面に表示されたらOKです。
Cocos2d-xでは原点である(0, 0)の座標位置は画面左上ではなく左下になります。

シミュレーターを起動したままスプライトの表示座標を変えてみましょう。

```lua:GameScene.lua
中略・・・
sprite:setPosition(100, 200) -- Y座標を200に変更
```

ファイルを保存すると同時にスプライトが上へ移動したはずです。
Cocos Code IDEとLuaを使うと、変更がすぐに反映されるので開発効率も向上するはずです。

（一部コードを修正しました。）
【iOS】iTunesConnectリニューアル 個人的にわからなくなったポイント

## ■Ready to Upload Binaryがない

もう押す必要はなくなった。
普通にxcodeからDistributeすればよいとのこと。

そしてiTunesConnectでどのバイナリを使用するか選択できるようになる。

![スクリーンショット 2014-09-11 12.07.57.png](https://qiita-image-store.s3.amazonaws.com/0/44447/96947b69-173f-2dcb-29f2-9ea0ff2764a3.png)

↑バイナリをアップロードすると、ここに「+」ボタンがでてくる
GooglePlayと似たようになった感じ。

詳しくはmox2さんの記事をご確認ください。
http://qiita.com/mox2/items/a9fe906f5f445dbeacce
※mox2さんありがとうございました。

## ■間違えたバイナリ上げてしまった。再アップロードできない。。。

バイナリアップロード後にバグを発見し、再アップロードすると
同じバージョンが既にあるということで怒られる。
どうやらBuildバージョン上げるしかない。。。

![スクリーンショット 2014-09-11 12.12.23.png](https://qiita-image-store.s3.amazonaws.com/0/44447/b7e1c3a5-e4fd-be07-b2a1-e04737084025.png)


下記の記事を参考とさせていただきました。
http://bribser.co.jp/blog/new-itunes-connect/
picasaで、"あるはず"の画像が表示されない時



![icon](http://picasa.google.com/intl/ja/images/logo_picasa_large.png)

googleさんの画像ビューワー&編集ソフトpicasaで、
あるはずの画像が表示されない時に確認すること。

* [表示] > [小さい画像] をチェック
* [表示] > [非表示画像] をチェック
* [ツール] > [フォルダマネージャ] を開いて、監視フォルダの確認 

小さい画像が表示されないっていう初期仕様にはビックリですわ。
Grape + RailsでWebAPIを作って、RSpecでJSONのテストするメモ


# 準備

RSpecとjson_expressionsをインストールする。

```Gemfile
group :development, :test do
  gem 'json_expressions'
  gem 'rspec-rails', '~> 3.0.0'
end
```

```bash:commad
$ bundle install
```

RSpecの初期化。

```bash:commad
$ bundle exec rails g rspec:install
```

なぜか色々エラーが出るので、warningsをコメントアウトしておく。

```.rspec
--color
#--warnings
--require spec_helper
```

# 実行

```bash:commad
# 全テスト
$ bundle exec rspec

# 指定テスト
$ bundle exec rspec spec/requests/api_spec.rb
```

# GrapeでWebAPIを作成

```ruby:app/api/user.rb
module User
  class API < Grape::API
    version 'v1', using: :header, vendor: 'user'
    format :json

    get :hello do
      { text:'hello' }
    end

  end
end
```

```ruby:config/routes.rb
Rails.application.routes.draw do
  mount User::API => '/'
end
```

```ruby:config/application.rb
module Hoge
  class Application < Rails::Application
    config.paths.add "app/api", glob: "**/*.rb"
    config.autoload_paths += Dir["#{Rails.root}/app/api/*"]
  end
end
```

http://localhost:3000/hello にアクセスすると、JSONが返ってくる。

# WebAPIのテスト

返ってきているJSONが正しいかどうかテストケースを書く。

```ruby:spec/requests/api_spec.rb
require 'rails_helper'
require 'json_expressions/rspec'

RSpec.describe User::API do

  describe "GET /hello" do
    it "hello" do
      pattern = {
          text: 'hello'
      }
      get '/hello'
      expect(response.status).to eq 200
      expect(response.body).to match_json_expression(pattern)
    end
  end

end
```

後は普通に実行すればOK。

## shouldは古いらしい

`.should`とか使ってたら、警告が出た。古いらしい。

```
Using `should` from rspec-expectations' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` instead. Called from /vagrant/rails/spec/requests/api_spec.rb:15:in `block (3 levels) in <top (required)>'.
```

なので、`expect().to` を使うことにした。
Go 1.5以降のガベージコレクタについてのプラン

[Go 1.4+ Garbage Collection (GC) Plan and Roadmap](http://golang.org/s/go14gc)の要訳です。元々の文章を書いたRichard L. HudsonさんはGCでは実績のある人です。オリジナルはもっと詳しいので詳細については元の文章を読んでください。

* * *

Go 1.5 （2015年6月）ではGCレイテンシの低減を目指す。具体的には50ミリ秒ごとのGCレイテンシを10ミリ秒以下に抑える。到達可能な値の最大2倍のヒープを使う。

実装方針はstop the world （STW）とコンカレントGCのハイブリッド。STWによる停止時間を50ミリ秒ごとに10ミリ秒以下に抑え、その時間内にGCが完了しなかった場合はコンカレントGCに切り替える。これにより50ミリ秒以内のレスポンスタイムが必要なプログラムが40ミリ秒の実行時間を得ることを可能とする。この数値は1000ドルLinux PC程度を想定。いわゆるnon-generational, non-moving, concurrent, tri-color, mark and sweepコレクタを実装する。

Go 1.6（2015年12月）は1.5でのフィードバックを踏まえて目標を決めることになるが、おそらくbump pointer allocationとnursery spacesのgenerational copyを導入してスループットを向上させる。

Go 1.5で導入される新しいアルゴリズムではレイテンシは大幅に短くなるがスループットが低下してしまう。それを相殺するため別個の最適化を行い、バージョンを上げることによって性能が悪化しないようにする。
Eclipse中心の開発現場でIntelliJをキメてしまった時にやる設定


Eclipseユーザ中心の現場でIntelliJを使うと、微妙な挙動の違いでVCS上のファイル差分が無駄に出てうざい時がある。

Eclipseで書いたコードと合わせるため、最初に自分が設定した内容をまとめた。

# Eclipseのフォーマッタを読み込めるようにする
[JetBrains Plugin Repository :: Eclipse Code Formatter](http://plugins.jetbrains.com/plugin/6546)
プラグインを使ってEclipseと共通のフォーマッタを使えるようにする。

# importまわりの設定
IntelliJのpackage importは先頭文字のアルファベット順で整列される。しかしEclipseではアルファベット順で並べる設定方法がないので、[Code Style] -> [Java] -> [Imports]タブでpackageの並び順や空白行のルールを地道に定義していく。

![スクリーンショット 2014-09-08 00.54.03.png](https://qiita-image-store.s3.amazonaws.com/0/7325/09951003-a178-ba6b-7326-8b666ef67b26.png "スクリーンショット 2014-09-08 00.54.03.png")

# javadoc
IntelliJではクラスのjavadocを書くときに@Authorタグを自動で挿入してくれなかったりするので、[File and Code Templates] -> [Includes]タブ -> [File Header] でテンプレートを調整する。

# serialVersionUIDの設定
EclipseではSerializableを実装したクラスにUIDを自動挿入する際1Lのデフォルト値とJDKが自動生成した値を選べるけど、IntelliJの機能では自動生成された値の挿入しかできない。チームで初期値を1Lで連番に取るようにしているならLive templatesでサクッと挿入できるようにしておく。

# タブ文字の変更
素の状態のIntelliJだとインデントがTab文字になってるはずなので、チームで半角スペースを使っている場合は[Code Style] -> [Java] -> [Tabs and Indents]タブから[Use tab character]のチェックを外しておく。

# おわり
些細な事だしコードレビューで訂正可能だけど、ちゃんとしてないとストレスに感じる場合もありそうなので設定しとくと良さそう。
rubocop様に"Use next to skip iteration."のご指導を頂いたら。。。

普通にeachしてifしたら、rubocop様から"Use next to skip iteration."とのご指導を頂いた。

```rb
items.each do |item|
  if item
    # my stuff with item
  end
end
```

どうもrubocop様は、each内のif..endよりnextでのguard clauseがお気に入りのようである。
下記のように修正したら喜んで頂いた。

```rb
items.each do |item|
  next unless item
  # my stuff with item
end
```

## 独り言
javaエンジニアの常識がrubyでは非常識ですね。ご指導、ありがとうございました！
NSSplitViewの dividerにボタンを追加する


#目標
xcodeのパレットみたいなものを作りたい。

![スクリーンショット 2014-09-11 11.07.46.png](https://qiita-image-store.s3.amazonaws.com/0/3847/d1753d78-03dc-aa01-d5bf-74239178b26e.png "スクリーンショット 2014-09-11 11.07.46.png")
画面上部にある4つのアイコンはボタンで、下段の表示を切り替えるタブの役割。アイコンが並んでいる横長の白い四角の領域は NSSplitViewの dividerで、ドラッグして上下させることができる。

これをどんな風に作ったらいいだろう、という記録。

#作業
NSSplitViewそのものにボタンを乗せるアプローチがうまくいかなかったので、ボタンを載せたカスタムビューを別途用意して、それを NSSplittViewのスーパービューに配置し、ちょうど dividerの上に来るように配置する戦略を取ってみた。これで合ってるかどうかはなんとも言えない。

まず http://stackoverflow.com/questions/11593541/how-to-add-buttons-to-a-nssplitter-handle を参考に

* NSSplitterのサブクラス MySplitViewを作る
* インターフェースビルダで NSSplitViewを配置、Custom Classを MySplitViewにする
* NSWindowの外に Custom Viewを配置。 その上にボタンセルの NSMatrixを置く。NSMatrixは MySplitViewにアウトレットを用意してつないでおく。


こんな感じ。
![スクリーンショット 2014-09-11 14.21.40.png](https://qiita-image-store.s3.amazonaws.com/0/3847/6991dae5-96a7-1366-d280-c0b97bc180d5.png "スクリーンショット 2014-09-11 14.21.40.png")

![スクリーンショット 2014-09-11 14.25.53.png](https://qiita-image-store.s3.amazonaws.com/0/3847/f681fa57-0782-6a93-3942-0c7752e67665.png "スクリーンショット 2014-09-11 14.25.53.png")



つぎに MySplitViewのメソッドを上書きする。

awakeFromNibでボタンの乗ったカスタムビューをスーパービューに追加する。 ※ この辺あんまり綺麗じゃない気がしている。

drawDividerInRect:, dividerThicknessで dividerの大きさを決めて描画する。描画時に updateToolbarPositionを呼んでボタンの置かれたCustom Viewの位置を更新。

※ adjustSubviewsはこの例では使われていない。

```objectivec:MySplitViewの実装
-(void)awakeFromNib {
    [self.superview addSubview:self.buttonMatrixView];
}

-(void)drawDividerInRect:(NSRect)rect
{
    [[NSColor grayColor] set];
    NSRectFill(rect);
    [self updateToolbarPosition];
}

-(CGFloat)dividerThickness
{
    return 20.0; // ツールバーの高さ + 上下マージン
}

-(void)adjustSubviews
{
    [super adjustSubviews];
    [self updateToolbarPosition];
}

-(void)updateToolbarPosition
{
    NSRect frame;

    frame.origin.x = (self.frame.size.width - self.buttonMatrixView.bounds.size.width)/2;
    frame.origin.y = self.bounds.size.height - [self positionOfDividerAtIndex:0];
    frame.size     = self.buttonMatrixView.bounds.size;

    [self.buttonMatrixView setFrame:frame];
}


// ref. https://github.com/malcommac/NSSplitView-Animatable

- (CGFloat)positionOfDividerAtIndex:(NSInteger)dividerIndex
{
    while (dividerIndex >= 0 && [self isSubviewCollapsed:[[self subviews] objectAtIndex:dividerIndex]])
        dividerIndex--;
    if (dividerIndex < 0)
        return 0.0f;
    
    NSRect priorViewFrame = [[[self subviews] objectAtIndex:dividerIndex] frame];
    return [self isVertical] ? NSMaxX(priorViewFrame) : NSMaxY(priorViewFrame);
}

```

カーソルの形状やcollapse対応などはしていないのでここままでは不十分だけど、それっぽいものは大体作れたと思う。

![スクリーンショット 2014-09-11 14.29.22.png](https://qiita-image-store.s3.amazonaws.com/0/3847/75176784-3176-7aba-a454-22290cd80a06.png "スクリーンショット 2014-09-11 14.29.22.png")


# 参考

* stackoverflow: [How to add buttons to a NSSplitter handle?](http://stackoverflow.com/questions/11593541/how-to-add-buttons-to-a-nssplitter-handle "How to add buttons to a NSSplitter handle?")
* GitHub: [NSSplitView-Animatable](https://github.com/malcommac/NSSplitView-Animatable "NSSplitView-Animatable")
【プログラミング48(/2 -1)手】Prototype


## ポイント
Prototypeパターン。
原型となるインスタンスをコピーして新しいインスタンスを生成するためのパターン。


## サンプルコード
rubyだと、もともとのObject Classにcloneとか、dupメソッドがあるので割愛。

```ruby:Prototype.rb
class Hoge
    def initialize(name)
        @name = name
    end
end

a = Hoge.new('original object')
b = a.clone
puts a.inspect
puts b.inspect
```

## 所感
* まあデザインパターン作られた当時はあれだったのかもしれないけど、  
デザインパターンではないきがする。。

## 参考
http://www.ie.u-ryukyu.ac.jp/~e085739/java.it.4.html
http://docs.ruby-lang.org/ja/1.9.3/class/Object.html