OmniAICreator/Qiita-1.07M huggingface dataset:
今更触るvagrant

vagrant記事はたくさんありますが、メモとしてこの記事を書いておく。

#今回の目標
* 自作ゲームで使うスコアサーバーをvagrantを用いて構築し、boxを保存し、いつでもぶっ壊したり復旧させたりできるようにする。


#環境
ホストOS：windows7 SP1
ゲストOS: centOS6.5
vagrant:1.6.5
VirtualBox:4.3.16


#作業内容

####使うファイルの準備
vagrant : https://www.vagrantup.com/downloads.html
VirtualBox : https://www.virtualbox.org/wiki/Downloads
centOS : http://www.lyricalsoftware.com/downloads/centos65.box

####インストール
特に考えることなし。手順通りにやっただけ。
```vagrant -v```で念のためバージョン確認

####vagrantでVMを起動させる
* Chef Client/Chef Soloをプラグインを使って入れる
```vagrant plugin install vagrant-omnibus```

* Boxを追加する
```vagrant box add cent-6.5 http://www.lyricalsoftware.com/downloads/centos65.box```

* 初期化
```vagrant init cent-6.5```

* ssh接続できるようにするためvagrantfileを書き換え
```  # config.vm.network "private_network", ip: "192.168.33.10"```
この行のコメントアウトを解除

* 起動
```vagrant up```

* SSH接続の確認
Poderosaを使って確認
ユーザー名・パスワード共に「vagrant」がデフォルト

* 停止
```vagrant halt```

####Boxの保存
名前を指定してboxを保存
```vagrant package --output [保存したい名前]```

####保存したboxからVM作成
addコマンドで保存したboxをしていするだけ
```vagrant box add [name] [保存したboxのpath]```

これでvagrantによるミニマムなVM構築ができました。
次のステップはDockerを使ってみるあたりにしてみよう。
rbenv, pyenvインストール覚え書き

rubyやpythonに関して，複数のバージョンをインストールして使い分けたい場合がある．バージョンを切り替えるためのツールとしてrbenvやpyenvといったツールがある．
以下，これらをYosemiteにインストールした際の覚え書き．
なお，各種便利プラグインも一緒にインストールした．

# インストール
## rbenv
Homebrewを利用してインストール．

```bash
$ brew install rbenv ruby-build
```

`~/.bash_profile`に下記を追記

```bash 
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
```

各種プラグインは下記をインストール．

```bash
$ brew install rbenv-bundler rbenv-binstubs rebenv-gem-rehash
```

## pyenv
pyenvは頻繁にアップデートされるのでHomebrewを使わず，[yyuu/pyenv](https://github.com/yyuu/pyenv), [Common-build-problems](https://github.com/yyuu/pyenv/wiki/Common-build-problems)に従って手動でインストールした．`$ pyenv update`で最新版にアップデートできる．

### readline
本当に必要かはわからないけれど，Common-build-problemsに書いてあるので`readline`をインストール．

```bash
$ brew install readline
$ brew link readline --force
```

`~/.bash_profile`に下記を追記

```bash
export LDFLAGS="-L/usr/local/opt/readline/lib $LDFLAGS"
export CPPFLAGS="-I/usr/local/opt/readline/include $CPPFLAGS"
```

### pyenv本体
[pyenv installer](https://github.com/yyuu/pyenv-installer)を利用．各種プラグインもすべてインストールされる．

```bash
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
```

`~/.bash_profile`に下記を追記

```bash 
export PATH="$HOME/.pyenv/bin:$PATH"
if which pyenv > /dev/null; then
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    export CFLAGS="-I$(xcrun --show-sdk-path)/usr/include $CFLAGS"
fi
```


# ruby, pythonのインストール
ruby, pythonのインストールは下記を実行するだけ．インストールしたバージョンへの切り替え等に関してはQiitaにたくさんある分かりやすい記事を参照のこと．

## ruby
```bash
$ rbenv install 2.1.3
```

## python
```bash
$ pyenv install 3.4.1
```

# References
- http://qiita.com/emadurandal/items/a60886152a4c99ce1017
Pepper 開発体験 ワークショップ うごかしてみよう"TimeLine"アニメーションモード

2014/9月にアルデバラン・アトリエ秋葉原 with SoftBank (3331)で開催されたPepper 開発体験 ワークショップで実際に開催された内容について公開いたします。
ワークショップで使われたパワーポイント資料と実際のペッパーの動きを理解することができます。
まだペッパーに触れたことがない方にも有用な情報になると思います。

うごかしてみよう"TimeLine"アニメーションモード1/2
1.アニメーションボタンをクリック（目がオレンジに）

2.手の甲をタッチしながら腕を動かす（目が緑）

3.好きな位置に動かしたら手を離す（目がオレンジ）

4.頭を3秒タッチし終了（目が白）

5.タイムライン上に保存する

以上です。

![Pepper-Animation2.jpg](https://qiita-image-store.s3.amazonaws.com/0/54789/07f036f2-8305-bd93-bdfa-a74c1115d5be.jpeg)

![Pepper-Animation3.jpg](https://qiita-image-store.s3.amazonaws.com/0/54789/ccd034b8-4799-3040-9ea6-945e6e52905f.jpeg)

![Pepper-Animation4.JPG](https://qiita-image-store.s3.amazonaws.com/0/54789/81803488-5ed9-2e6b-8bcf-ba83bf504a4a.jpeg)

![Pepper-Animation5.JPG](https://qiita-image-store.s3.amazonaws.com/0/54789/2f720760-cc25-d969-d687-d85771b9fd51.jpeg)
Arch Linux KDE 複数ワークスペースの設定メモ

KDEのメインメニューを開いて
Computer > System Settings > Workspace Behavior を開く。

ワークスペース設定ウィンドウが開くので各項目を設定できる。
今回はVirtual Desktops設定メニューでワークスペースの数と、
切り替えのためのショートカットキーを設定した。
設定項目と、設定値をメモ。


######Desktops 
 ・Number of desktops: ワークスペースの数を設定
　"4" を設定
 ・Number of rows: ワークスペースの列を設定
　"2" を設定
######Switching
 ・Animation: ワークスペース切替時のアニメーションを設定
　"slide" を設定
 ・Shortcuts: ワークスペース切り替えのためのショートカットキーを設定
　ワークスペースの切り替え ctrl + alt + (up/down/left/right)
　ワークスペースリスト表示 ctrl + alt + (tab/backspace)

■ 参考リンク
[KDE UserBase Wiki - System Settings/Workspace Behaviour](https://userbase.kde.org/System_Settings/Workspace_Behaviour/en)
Data.Vector.UnboxedとData.Vector.Storableの速度比較

高速処理が必要なデータ解析ソフトウェアパッケージを開発している関係でいろいろなデータ列の処理速度を調べている。ベクトル演算や行列演算処理が整っているhmatrixを用いることが多く、そのVector型の効率をData.Vector.Unboxedと比較してみた。
hmatrixのVector型のご本尊はData.Vector.Storableなので、結局はそれとの比較になる。
以下が評価に用いたコード

```haskell
-- testSpeedVector.hs
import qualified Data.Vector.Unboxed as UV
import qualified Data.Vector.Storable as SV
import Data.Time
import System.Random

main = do
  let x = take 10000000 $ randomRs (-10, 10) $ mkStdGen 1 :: [Double]

  t1 <- getCurrentTime
  -- for Data.Vector.Unboxed
  print $ UV.head $ UV.reverse $ UV.fromList x
  t2 <- getCurrentTime
  print $ diffUTCTime t2 t1

  t3 <- getCurrentTime
  -- for Data.Vector.Storable
  print $ SV.head $ SV.reverse $ SV.fromList x
  t4 <- getCurrentTime
  print $ diffUTCTime t4 t3
```
これを
ghc --make testSpeedVector.hs
でコンパイルし、実行してみたところ、
-3.0045005415246084
25.137353s
-3.0045005415246084
0.575353s

と、約５０倍ほどData.VectorStorableの方が速くなってしまった。
完全に予想外である。せいぜいコンマ何秒の差かと予想していたのだが。

どこでこんなどでかい差が生まれているのだろう？？？
SwiftでHexColor(#34495eみたいなやつ)


Objective-Cでよく使っていたUIColorカテゴリをswiftで書き換えたので載っけます。
Webなどでよく使われる16進表記の色をUIColorに変換します。
文字の先頭には「#」がついていてもいなくても変換することができる仕様です。
不正な文字列が来たら"invalid hex string"と出力され、whitecolorが返ってきます。


```swift
extension UIColor {
    class func hexStr (var hexStr : NSString, var alpha : CGFloat) -> UIColor {
        hexStr = hexStr.stringByReplacingOccurrencesOfString("#", withString: "")
        let scanner = NSScanner(string: hexStr as String)
        var color: UInt32 = 0
        if scanner.scanHexInt(&color) {
            let r = CGFloat((color & 0xFF0000) >> 16) / 255.0
            let g = CGFloat((color & 0x00FF00) >> 8) / 255.0
            let b = CGFloat(color & 0x0000FF) / 255.0
            return UIColor(red:r,green:g,blue:b,alpha:alpha)
        } else {
            print("invalid hex string")
            return UIColor.whiteColor();
        }
    }
}
```

利用する時は↓のように使って下さい。

```swift
UIColor.hexStr("34495e", alpha: 1)
```
OSXでFirefoxのNightlyビルドを使ってFirefoxまでおかしくなった時

# 背景

これまで、不具合の多いビルドもありましたが、今回は普通のFirefoxすら、変な動きになり、コンソールも開かなくなってしまい、かなりお手上げ状態になっていまいました。


# 復活方法
オプションキーを押したままFirefoxを起動する

設定をリセットするか聞いてくるので、リセットする。

# まとめ

Chromeと違い、Firefoxはプレファレンス系のファイルを共有しているので、結構面倒なことになると面倒ｗ

Nightlyビルドを自前でビルドして使うにはそれなりにリスクがありました。
iOS8対応-UIWebViewのshouldStartLoadWithRequestメソッド編

iOS8対応のハイブリットアプリを作成している際に、shouldStartLoadWithRequestの挙動がかわったことに気づいたのでメモ

変化したところ
・shouldStartLoadWithRequestでは、URLエンコードが必須になった。


iOS8対応の仕方

1:該当部分をURLエンコードする

```js:test.js
location.href='osaction://["ssssssssss":"ssssss"]'
```

上記を

```js:test.js
location.href='osaction://%5b%22ssssssssss%22%3a%22ssssss%22%5d'

```
とする
osaction://(各自の処理分けるようの識別子)までは、URLエンコードしない。

2:以上

なお、iOS7でも同じコードで同じ挙動をしました。
Git コミットを書いて保存しようとしたらViに問題ありと怒られた件

以下のエラーが発生

```
$ git flow release finish 3.26.0
error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.
Tagging failed. Please run finish again to retry.
```

対応としてはデフォルトのエディターをviからvimにしたった。

```
git config --global core.editor "/usr/bin/vim"
```

今まで普通に使えていたのに急になった。vimの拡張が原因か。
原因が分かり次第、報告する。
iPhone6 / iPhone6 Plus対応アプリかを一瞬で見分ける方法


アプリのステータスバーをみると一瞬で見分ける事ができます。
対応済みのアプリはステータスバーの文字が綺麗に表示されますが、未対応のアプリは、引き延ばされ、ぼやけて表示されます。


### 対応済み
 ![tomonobu1.png](https://qiita-image-store.s3.amazonaws.com/0/30441/ce8880d0-667f-084e-3930-893c76d450a6.png "tomonobu1.png")

### 未対応
![tomonobu2.png](https://qiita-image-store.s3.amazonaws.com/0/30441/821c731a-7eb9-cc21-f992-08d6b3a00378.png "tomonobu2.png")
[MySQL] 全テーブルのデータを一括で削除

テーブルが100個くらいあって、その全てのテーブルのデータを一発で削除したくなったりします。

そんなこと、たわいもないことかと思ったのですが、truncateでもdeleteでも出来ないし、結局、以下のようにやっております。

```zsh
$ mysql -u root [db_name] -N -e 'show tables' | while read table; do mysql -u root -e "truncate table $table" [db_name]; done
```
PlayStation VitaのゲームをUnityで作ってみたい！という人のための最初のリンク集【Unity for PSM】

# はじめに

　Unityでゲーム開発を始め、Unityでモバイル向けのゲームを作っている方は、「ハードウェアキーがあるゲームも作ってみたいな」とか「ゲーム専用機向けゲームを作りたいな」ということを一度は考えたことがあるのではないでしょうか？

　Unity for PSMというものを使えば、UnityでPlayStation VitaそしてPlayStation Vita TV向けのゲームを開発することが可能です。

　Unity for PSMを使い始める際、役に立つページや有益なページのリンクとその簡易な紹介を書きました。あ〜、あのページどこだっけという備忘録的にもお使いください。

 Unityのブログ記事を良く書く方達が、Unity for PSMについても投稿されています。「Unity Vita」という検索キーワードでなく、「Unity PSM」というキーワードで検索すると、それらの情報を見つけやすいと思います。

# リンク集

## [Unity for PlayStation®Mobile ― 詳細技術プレゼンテーション](http://vimeo.com/98119348)

　Unite Japan 2014のセッション動画です。まずこれを見ておいた方が良いです。

　「PSMって何？」とか「Unityでなくても、Vita向けに作れるって前に見たぞ？」とか、「法人じゃなくてもできるの？」という方は特に見ることをお勧めします。ただ(投稿時点で)数ヶ月前の動画なので、未対応となっているものがすでに対応済みになっていることもあるので、そこだけは注意してください。

「技術詳細プレゼンテーション」という名前になっていますが

* 用語の整理
* PlayStation Vita向けの他の開発方法との比較

などがあるので、最初に見ておくと非常に良いと思います。

* [講演資料pdf(日本語)](http://japan.unity3d.com/unite/unite2014/files/DAY2-1900-room1-Erik-JPN.pdf)
* [講演資料pdf(英語)](http://japan.unity3d.com/unite/unite2014/files/DAY2-1900-room1-Erik.pdf)

## [「Unity for PSM」の概要](https://ja-support.psm.playstation.net/app/answers/detail/a_id/264)

　名前通りざっくりした開発の流れや必要なツールの概要を説明しているページです。さきほどUniteの動画とあわせてまず読んでおきたいページです。
　このページにはデベロッパー登録のページへのリンクや、後述するダウンロードページへのリンクがあります。

## [Unity for PlayStation®Mobile (Ready for Submission)](https://psm.playstation.net/static/general/all/ja/sdk_assets.html)

　Unity for PSMはこのページからダウンロードできます。また、Unityで作ったゲームを実機に転送するために必要なPSM Tool Set for UnityとUnity-Chanのサンプルプロジェクトのここからダウンロードもできます。

　後述するPSM DevPortalのHome>Create>SDK&Assetsにある記事です。

# [PSM DevPortal](https://psm.playstation.net/portal/ja/#top)

　Unity for PSMに限らずPSM開発者向けのポタールです。最新ニュースなどのお知らせも表示されます。

# [PSM Dev Forums](http://community.eu.playstation.com/t5/PlayStation-Mobile-Developer/ct-p/PSSdevforum)

　QAフォーラムです。英語の質問が多いですが、日本語の質問もあります。

# [Unity for PSMのUnityマニュアル](https://psm.playstation.net/static/general/all/unity_for_psm/ja/Documentation/Manual/psm-top.html)

　UnityマニュアルスタイルのUnity for PSMのマニュアルページです。技術使用、実機のセットアップ、作成と実行などのページなどへのリンクがあります。


# よかったらこちらもどうぞ！

　私のボタンやアナログスティックに関しての投稿です。良かったらこちらもどうぞ。

[【PlayStation Vita】やっぱりハードウェアボタンを使ったVitaのゲームを作りたい！Unityで！【Unity for PSM】](http://qiita.com/RyotaMurohoshi/items/0ffee1a1245f3e846548)
【PHP】いろいろなtips


※このレベルでこう書いたら便利があったら教えてほしい。

#listを使ってexplode結果を簡単に！

「:」区切りの文字列を、それぞれを変数に格納する場合

```
$info = 'tarou:32';

$info = explode(':',$info);
$name = $info[0];
$age = $info[1];
```

listを使うとこんなに簡単！

```
$info = 'tarou:32';
list($name,$age) = explode(':',$info); 
```

#1始まりの配列を簡単に作る

```
array(1=>1,2=>2,3=>3)
```
cakeのFormヘルパーでセレクトボックスを作るために、上記のような配列を簡単に作りたい場合、以下で簡単にできる。

```php
$array = range(0,10);
unset($array[0]);

//Cakeでこう使いたかった。
echo $this->Form->select('select',$array,array());
```

個人的には以下のfor文よりすっきり。

```php
for($i=1;$i<11;$i++){
  $array[$i] = $i;
}
```

#文字列と配列で同じように処理を行う

パラメータで配列か文字列が渡ってくる場合、通常、配列か文字列かの判定が入る。

```
function hoge($foo){
  if(is_array($foo)){
    //配列の場合
    foreach($foo as $bar){
      echo $bar;
    }
  }else{
    //文字列の場合
    echo $foo;
  }
}
```

文字列をarrayへキャストすることで、判定が必要なくなる。

```
function hoge($foo){
  foreach((array)$foo as $bar){
    echo $bar;
  }
}
```

ちなみに、キャストすると要素ひとつの配列になる。

```
$foo = 'hoge';
$foo = (array)$foo;
var_dump($foo);
/*
array(1) {
  [0]=>
  string(4) "hoge"
}
*/
```
mysql5.6 rpmインストール on CentOS6.5

# 0. 事前準備

既存のmysqlの確認

```
$ rpm -qa | grep mysql
mysql-utilities-1.3.6-1.el6.noarch
mysql-server-5.1.71-1.el6.x86_64
mysql-libs-5.1.71-1.el6.x86_64
mysql-5.1.71-1.el6.x86_64
mysql-connector-python-1.1.4-1.el6.noarch
mysql-devel-5.1.71-1.el6.x86_64
```

そして、削除

```
$ yum remove mysql*
```

# 1. RPM ファイルをダウンロード

```
$ wget -q http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.20-1.el6.x86_64.rpm \
http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-compat-5.6.20-1.el6.x86_64.rpm \
http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.20-1.el6.x86_64.rpm \
http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-5.6.20-1.el6.x86_64.rpm \
http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-5.6.20-1.el6.x86_64.rpm
```

# 2. mysql5.6のインストール

CentOS 6.4 にはデフォルトで 5.1 系の mysql-libs がインストールされており、mysql-libs に依存しているパッケージがいくつかあります。
先ほどダウンロードした MySQL-shared をインストールしようとすると依存性のチェックで怒られるので、2 回のステップを踏んでインストールします。


先に MySQL-client, MySQL-devel, MySQL-server, MySQL-shared-compat をインストールします。 MySQL-shared-compat は今の環境の依存性を壊すことなく共有ライブラリを置き換えてくれます。

```
sudo yum install MySQL-{client,devel,server,shared-compat}-5.6.20-1.el6.x86_64.rpm

```

次に MySQL-shared をインストールします。先に MySQL-shared-compat をインストールしたので依存関係でエラーが出ることもありません。

```
$ sudo yum install MySQL-shared-5.6.20-1.el6.x86_64.rpm
```

最後にバージョンの確認

```
$ mysql --version
mysql  Ver 14.14 Distrib 5.6.20, for Linux (x86_64) using  EditLine wrapper
```

# 3. 初期設定

まず MySQL サーバを立ち上げます。

```
$ sudo service mysql start
Starting MySQL. SUCCESS!
```

5.5 までは自分で root ユーザーのパスワードを設定していましたが、セキュリティを考慮したのか 5.6 では自動的に決められます。初期パスワードは /root/.mysql_secret に書かれていますので確認します。

```
$ cat /root/.mysql_secret
The random password set for the root user at Tue Sep 23 06:22:16 2014 (local time): XXXXXXXX
```

[XXXXXXXX]の部分が初期設定されているパスワードになります。

デフォルトのパスワードのままでは何もできないので、パスワードを確認したら root ユーザで MySQL に接続します。

```
$ mysql -uroot -p
```

接続したら以下のようにしてパスワードを変更して一旦抜けます。

```
mysql> SET PASSWORD FOR root@localhost=PASSWORD('password');
mysql> exit
```

これで mysql_secure_installation コマンドを実行できるので実行します。

```
$ mysql_secure_installation
```

いくつか質問されるので、以下のように回答しました。

```
Change the root password? [Y/n] n              # パスワードの変更
Remove anonymous users? [Y/n] Y                # 匿名ユーザを削除
Disallow root login remotely? [Y/n] Y          # root ユーザでのリモートからのログインを禁止
Remove test database and access to it? [Y/n] Y # test データベースを削除
Reload privilege tables now? [Y/n] Y           # 権限テーブルをリロード
```

# 4. ユーザーの追加

MySQLへログインし、管理者権限を持つユーザー登録します。

```
$ mysql -uroot -p

mysql> GRANT ALL PRIVILEGES ON *.* TO hoge@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
```

最後に確認。

```
mysql> select host,user from mysql.user;
```

# 5. 補足

自動起動の設定。

```
chkconfig mysql on
```

お疲れ様でした♪
boot2docker環境でdockerのバージョンをアップグレード(1.1->1.2)する


boot2dockerにupgradeコマンドがあるので、それだけでいけるのかと思ったらだめだった。
オフィシャルページにアップグレードの方法でちゃんとアップグレードできたので（当たり前か)メモ。

[1] インストーラをダウンロード
    https://github.com/boot2docker/osx-installer/releases

[2] boot2docker stopコマンドで一旦boot2dockerを止める
[3] インストーラを実行
[4] 以下のコマンドを実行

```
$ boot2docker stop
$ boot2docker download
$ boot2docker start
```

Installing Docker on Mac OS X
http://docs.docker.com/installation/mac/#upgrading
既存アプリをiPhone 6 Plusの解像度に最適化する

クラスメソッドさんの記事がとても参考になりました。


* [Launch Screen (スプラッシュ画面) を Interface Builder で作成できるようになりました](http://dev.classmethod.jp/references/ios8-launch-screen-xib/)



今後は起動画面にXIBファイルが使えるようになり、このファイルを既存アプリに追加することで、iPhone 6/iPhone 6 Plusの解像度にも対応できるようです。

追記：これまで通り、各デバイス用の画像を指定する方法もあるようです
[iPhone6/iPhone6 Plusの画面対応について](http://qiita.com/uebo/items/854c284ed11aca741d93)

## さっそく試してみる

拙作「まりも」アプリで実験してみました。



[まりも](https://itunes.apple.com/jp/app/marimo-shui-caode-xiaosana/id398361669?mt=8)



### 起動画面用ファイルを追加

Xcodeの File > New > File... から追加できるみたいです。

<p><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/koogawa/20140923/20140923135127.png" ></p>


こんなXIBファイルが生成されました。

<img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/koogawa/20140923/20140923135202.png" >


### Info.plistに設定

この時点ではまだ最適化されませんでした。Info.plistにも設定が必要なようです。

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/koogawa/20140923/20140923135233.png"  ></span></p>

このように「Launch screen interface file base name」にXIBのファイル名を指定してあげます。（.xibは不要）

### 実行してみる

※ここから先はスマホからだと伝わりにくいかもしれないので、ぜひPCからご覧ください

こちらがiPhone 5S（640x1136px）での実行結果です。
<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/koogawa/20140923/20140923135300.png" ></span></p>


これをiPhone 6のシミュレータ（750x1334px）で実行するとこうなります。

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/koogawa/20140923/20140923135318.png" ></span></p>


背景画像は画面いっぱいに拡大するようにしてあるので表示崩れは発生しませんが、高解像度に対応してないバナーの右側に余白が空いてしまっているのがわかります。

次にiPhone 6 Plusのシミュレータ（1242x2208px）で実行するとこうなります。

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/koogawa/20140923/20140923135338.png" ></span></p>


画面が広くなったのに対し、マリモの大きさはそのままなので豆粒みたいになってしまいました(^^;

また、バナー右側の余白もさらに大きくなっています。（この余白がiPhone 5Sの幅との差分になります）

◆

せっかく画面が広くなったので、それを最大限に活かしたアプリを作って行きたいですね！
3Dやわらか物理エンジンをemscriptenでJavaScript+WebGLに移植してみた

C++で5年ほど前に作成した3Dソフトボディ物理エンジン(partix)が埃をかぶっていてもったいなかったので、emscriptenでJavaScriptに移植してみました。形状を球などのプリミティブでなく、メッシュで割と正しい形に表現できるエンジンです。

成果物は[こちら](https://twitter.com/jonigata/status/922409872079052800)。ブラウザでそのまま転がして遊べます。よかったら、何体まで60fpsを維持できたか教えてください。

元々のプロダクトは[この動画](http://www.nicovideo.jp/watch/sm2659130)にあるものです。

ちょっとした体験記です。

![スクリーンショット 2014-09-22 23.38.16.png](https://qiita-image-store.s3.amazonaws.com/0/18886/bf5d2af2-f80f-e3ad-908d-9a114b9c9b3e.png)

# emscriptenのインストール

よく覚えてませんが、[だいたいこんな感じ](http://qiita.com/sassy_watson/items/3ec69b19a22a457362a9)だったと思います。私は最初ubuntu12.04のコンテナにインストールしようとして失敗しました。最新バージョンにアップグレードしたら大丈夫でした。

# 移植作業

## 言語

純粋なC++としては、全く何もイジる必要がない感じです（後述のバグっぽいものを除く）。
partixは標準ライブラリ以外に依存するものがないので、特に問題はありませんでした。

## 描画周り

emscriptenでは3D描画はOpenGL ES 2.0の流儀で書くことになっています。OpenGL ES 2.0の流儀で書いておけば、emscriptenがよしなにwebglに変換してくれます。

元々のコードがDirectX9の固定機能パイプラインで実装されていたので、まずOpenGL ES 2.0に移植するのが大変面倒でした。

OpenGL ES 2.0になおしてからは、びっくりするほど普通に動いた感じです。私はOpenGLに慣れてないのでそれなりに時間がかかりましたが、慣れてる人ならさほど問題無さそうです。

## 速度

上記のniconico動画にアップロードしたムービーを作った時は、確かCore2Duoで10体くらいしか出せなかったんですが、emscripten版では普通に**9体**くらいで60fpsを維持できたので大変驚きました。

といっても使ってるマシン違うんですが。過去のはC2D 2.4GHzくらい、emscripten版を実行したマシンはMacMiniの現行で一番安いヤツです。Corei5くらいだっけ？

これが驚いたことにコンパイルオプションで最適化してない状態の速度で、-O2をつけたら**16体**くらいまで出せました。

「同じ環境で調べろよ使えねーな」と言われそうですね。要望があれば調べます。

ちなみにGPUはスカスカでほとんどCPUで決まるアプリです。

## C++とJavaScriptの連携

[ここ](http://dench.flatlib.jp/opengl/emscripten)が参考になりました。マウス周りとテクスチャ周りはJSで書いて連携しています。

キーボードはglutでいけたので、マウスも実は必要なかったかも。

OpenGLはコンテキストが1つしかないので、普通にcanvasからglコンテキストを取得するコードを混ぜても特に問題ありませんでした。

## ファイル

仮想ファイルシステムをリンク時にembedすることができます。このアプリでもテクスチャ以外のデータはそのようにして使っています。

## デバッグ

デバッガがないし出力JSが馬鹿でかいし(13Mとかある)内容もほとんどアセンブラなのでかなり厳しいです。SourceMapとかうまく設定すればいけるのかな？

ただprintfは普通に使えるので、デバッガに頼り切りの人でなければなんとかはなるでしょう。

## バグ？

emspcriptenに、メンバ変数のないクラスを実体化するときにメソッドが消えて？意味不明な実行時エラーがでるっぽいバグがあるらしくて、ちょっとハマりました。最小ケースを作ってみたいですが、うまくいくかな？
さくらVPSでDockerのお勉強～事始め～

今後はインフラ専属エンジニアなんて居なくなる！？
なんてことを言われたので、それならば！と今更ながらDockerに触れてみるメモ。
（一応自分はサーバーサイドやらフロントサイドやらのWebエンジニアです。インフラ系は遥か昔に・・・）

イマドキのエンジニアチックなことをしてきていなかったので、Markdownも地味に触れ始め (((( ；ﾟДﾟ))))ｶﾞｸﾌﾞﾙ
変なところはご愛嬌ということで。

時代に取り残されてるなぁ…

-

##おしながき
####さくらVPSを再セットアップしてみた

1. [普通に使えるCentOSでOS再インストール。](#top1)
2. [iptablesを設定](#top2)
3. [sshの設定](#top3)
4. [作業用ユーザー追加](#top4)
5. [logwatchインストール](#top5)

####Dockerをインストールしてみた
1. [yum一発！](#top10)

=

<a name="top1"></a>
##OS再インストール
色々グチャグチャの放置プレイで訳がわからなくなっていたので、一旦クリーンな状態に。
この辺りは、VPSコントロールパネルからサクッとやりましょう。

<a name="top2></a>
##iptables設定
いつも考えるこの設定。
最低限こんな感じ？

```iptables:/etc/sysconfig/iptables
*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80    -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443   -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT
```

<a name="top3"></a>
##ssh設定
rootでのログイン不可に設定した

```vim:/etc/ssh/sshd_config

#PermitRootLogin yes
PermitRootLogin no

```

<a name="top4"></a>
##作業用ユーザー追加

```
# useradd userhoge
# passwd
# usermod -g wheel userhoge
# visudo
```
```vim:visudo
#%wheel  ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
```

<a name="top5"></a>
##logwatchインストール

```
# yum install -y logwatch
# vim /usr/share/logwatch/default.conf/logwatch.conf
# logwatch
```

```vim:/usr/share/logwatch/default.conf/logwatch.conf
Detail = 5
MailTo = hogehoge@mailaddres.com
MailFrom = Logwatch.sakura
```

<a name="top10"></a>
##Dockerインストール

```
# yum install -y docker-io
# chkconfig docker on
# service docker start
```

その他やるべきことがあるやも知れぬが、とりあえずここまで。

次のステップはDockfileを使ってゴニョゴニョしたい。
既存のEC2インスタンスに新規のEBSをアタッチする


# 問題
作成したばかりのEBSVolumeはAWSConsoleからアタッチしただけでは使えない

```
$ sudo mount /dev/xvdf /mnt/data/
mount: /dev/xvdf is write-protected, mounting read-only
mount: wrong fs type, bad option, bad superblock on /dev/xvdf,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
```

# 解決
一度、フォーマットしてからマウントする

### 1. AWS ConsoleからEBSを新規に作成する

適当なサイズで作成する

### 2.EBSをEC2にアタッチする

`Actions > Attach Volume`で既存のインスタンスにアタッチする

### 3. アタッチされていることを確認する
以下、Terminalからの作業

```
# lsblk
```

出力結果

```
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0    8G  0 disk 
└─xvda1 202:1    0    8G  0 part /
xvdf    202:80   0  100G  0 disk 
```

正しく、アタッチされているとxvdfが表示されています。

### 4. ファイルフォーマットを確認する。

```
# file -s /dev/xvdf
```

出力結果

```
/dev/xvdf: data
```

フォーマットされていないので`data`という表示です。

もし、フォーマットされていると以下のような表示になる。そのままマウントできる。

```
/dev/xvda1: Linux rev 1.0 ext4 filesystem data, UUID=fa5b665e-c3ee-4596-ac88-ae39494c7bf2 (needs journal recovery) (extents) (large files) (huge files)
```

### 5. ディスクをext4ファイルシステムでフォーマットする

```
# mkfs -t ext4 /dev/xvdf
```

出力結果

```
mke2fs 1.42.8 (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6553600 inodes, 26214400 blocks
1310720 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   
```

### 6. フォーマットできたか確認する

```
# file -s /dev/xvdf
```


出力結果

```
/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=efec8dc6-53e1-4efc-ad17-4293f1a321e5 (needs journal recovery) (extents) (large files) (huge files)
```

### 7. ディスクをマウントする

```
# mkdir /mnt/data
# mount /dev/xvdf /mnt/data
```

### 8. マウントできたか確認する

```
# df -h /dev/xvdf
```

出力結果

```
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/xvdf         99G  2.0G   92G    3% /mnt/data
```

### アンマウントする

```
# umount /dev/xvdf
```

### AWS Consoleからデタッチする

`Actions > Detach Volume`で既存のインスタンスからデタッチする。
アンマウントしないでいきなりデタッチするとbusyになります。
busy状態のままでもディスクを正しくアンマウントすればデタッチされます。

# 参考
[インスタンスへのボリュームの追加](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-add-volume-to-instance.html)
RaspbianをSDカードに書き込む

[Raspberry Pi](http://www.raspberrypi.org/downloads/)公式ページのDownloadsからイメージファイルをダウンロードする。
今回は
RASPBIAN 
Debian Wheezy 
Version:September 2014
Release date:2014-09-09
をダウンロードした。
934MBあるので結構時間がかかる。

書き込みツールはRPi-sd card builderを試してみたが、何故か途中でエラーが発生する。
そこで、[こちらのQiitaの記事](http://qiita.com/tomk79/items/cdc1b88358afba2c6337)を参考にddコマンドで書き込んだ。

```console
$ df
Filesystem                 Size   Used  Avail Capacity  iused      ifree %iused  Mounted on
/dev/disk0s2              233Gi  190Gi   42Gi    82% 49935774   11133666   82%   /
devfs                     190Ki  190Ki    0Bi   100%      657          0  100%   /dev
map -hosts                  0Bi    0Bi    0Bi   100%        0          0  100%   /net
map auto_home               0Bi    0Bi    0Bi   100%        0          0  100%   /home
/dev/disk2s1              7.3Gi  992Ki  7.3Gi     1%        0          0  100%   /Volumes/UNTITLED

$ sudo diskutil umount /Volumes/UNTITLED
Volume UNTITLED on disk2s1 unmounted

$ sudo dd bs=1m if="./2014-09-09-wheezy-raspbian.img" of="/dev/rdisk2"
3125+0 records in
3125+0 records out
3276800000 bytes transferred in 471.302287 secs (6952650 bytes/sec)
```

完了したら、Raspberry Piにカードを挿入して電源を入れる。
![rasp.jpg](https://qiita-image-store.s3.amazonaws.com/0/8748/3085bd5a-b3a4-a5c8-a9de-2ff3a1ed34d1.jpeg)

途中、raspi-configが表示される。
この中の、expand filesystemをしておく。
初期状態では、パーテーションサイズがOSのサイズに合わせて設定されているので、カード全体を使えるようにする。

raspi-configを抜けると再起動する。
ユーザー名、パスワードを求められるので、
ユーザー名: pi
パスワード: raspberry
でログインする。
LANケーブルが刺さっていれば、ifconfigコマンドでIPアドレスを調べることができる。

```console
$ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:63:17:78
          inet addr:10.0.1.25  Bcast:10.0.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:419 errors:0 dropped:0 overruns:0 frame:0
          TX packets:232 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:42454 (41.4 KiB)  TX bytes:28458 (27.7 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
```

eth0がinet addr:10.0.1.25となっているので、10.0.1.25を使ってsshしてみる。
自分の場合、同一LANに接続しているmacのターミナルから接続した。
パスワードは先程と同じ。

```console
$ ssh pi@10.0.1.25
pi@10.0.1.25's password:
Linux raspberrypi 3.12.28+ #709 PREEMPT Mon Sep 8 15:28:00 BST 2014 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Sep 23 04:27:52 2014 from 10.0.1.16
pi@raspberrypi ~ $
```

これで開発を始めることができるようになった。
railsでwebpayを使う方法

webpayの書き方が変わっていて、undefined methodに困らされたので、ここで現時点（2014/09/03）での方法を共有します。


#記述方法

注意点以外は基本的に[ここ](http://tech.creofuga.jp/?p=264)と同じです。
今回はpaymentというクラスで支払うを行う場合を例に記述します。


##注意点

下のように記述していると、

````
WebPay.api_key = "WEBPAY_API_KEY"
````
下のようなエラーが出ます

````
undefined method `api_key=' for WebPay:Class
````

正しくは下のように書きます。

````
webpay = WebPay.new(WEBPAY_API_KEY)
````

##実コード

````none:Gemfile
gem 'webpay'
````

````config/initializers/setting.rb
WEBPAY_PUBLIC_KEY = '  ***  ' #自分のアカウントの公開鍵
WEBPAY_SECRET_KEY = '  ***  ' #自分のアカウントの秘密鍵
````

````app/controller/payments_controller.rb
  def create
    webpay = WebPay.new(WEBPAY_SECRET_KEY)
    charge = webpay.charge.create(currency: 'jpy', amount: 4000, card: params['webpay-token'])
    flash.now[:notice] = '支払いが完了しました'
    redirect_to action: :show
  end
````

````app/views/payments/new.html.haml
= form_for payments_path, method: :post do
  %script(src="https://checkout.webpay.jp/v2/" class="webpay-button" data-key="#{WEBPAY_PUBLIC_KEY}" data-lang="ja" data-partial="true")
  =  submit_tag 'send'
````

以上です。
誰かの参考になれば幸いです。

#参考
http://tech.creofuga.jp/?p=264
https://webpay.jp/docs/api/ruby#recursions
Haskellでもがんばるぞい！

giiko_さんの
[今日も1日がんばるぞい！](http://qiita.com/giiko_/items/8c3442e8e7a83cc0b91a)
が可愛くて面白かったのでHaskell修行のお題に使わせて頂きました。

```hs:zoi.hs
import System.Random
import Control.Monad
import Text.Printf

dic :: [[String]]
dic = [["今日","ぞい"],["も"],["1","ぞい"],["日","ぞい"],["がん","ぞい"],["ばる","ぞい"],["ぞい！"]]

targetMes :: String
targetMes = "今日も1日がんばるぞい！"

main :: IO()
main = do lst1 <- tryMes []
          putStrLn $ unlines lst1
          printf "☆がんばるまで %d zoiでした☆\n" (length lst1)

tryMes :: [String] -> IO [String]
tryMes l = do mes <- makeMes
              if mes == targetMes
                  then return (l ++ [targetMes])
                  else tryMes (l ++ [mes])

makeMes :: IO String
makeMes = do wordLst <- mapM choice dic
             return (foldr (++) "" wordLst)
             where
               choice :: [String] -> IO String
               choice cand = do
                 idx <- (getStdRandom $ randomR (0, (length cand) - 1) :: IO Int)
                 return (cand !! idx)
```

えー、まあ、浅学非才修行中の身なればコードがアレゲにもほどがあるのはご容赦を……orz
あと絵文字はどうやったものか分からなかったので「☆」にしております。

# しょうがくせいなみのかんそう
乱数が絡むとすごく……ややこしいです……orz
モナドが理解できればややこしくなくなるんでしょーか……
CQL for Cassandra チートシート

>Last Updated: 9/23


CQL for CassandraのコマンドをMySQLのコマンドと比べながら普段よく使うコマンドについて説明しようと思いますが、その前にCQL for Cassandraで使われる単語についても説明します。

# 単語

| MySQL        | CQL for Cassandra |
| -------------|:-----------------:|
| databases    |  keyspaces        |


# クエリ

## データーベースの一覧表示

- MySQL

```mysql
mysql> show databases;
```

- CQL for Cassandra

```cqlsh
cqlsh> DESCRIBE keyspaces;
```

## 特定のデータベース表示（ちょっと違うかも・・・）

- MySQL

```
show create database database_name;

#出力例

+---------------+---------------------------------+
| Database      | Create Database                 |
+---------------+---------------------------------+
| database_name | CREATE DATABASE `database_name` |
+---------------+---------------------------------+
```

- CQL for Cassandra

```cqlsh
cqpsh> DESCRIBE keyspace keyspace_name;

;出力例
CREATE KEYSPACE keyspace_name WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};
```


## テーブル一覧表示

- MySQL

```mysql
mysql> show tables;
```

- CQL for Cassandra

```cqlsh
cqlsh> DESCRIBE tables;
```

# 参照サイト

- [DataStax Docs](http://www.datastax.com/documentation/cql/3.0/cql/aboutCQL.html)
- [CQLを使って、CassandraをSQLライクに操作する。](http://blog.katty.in/5242)
- [MySQLの基本コマンド](http://qiita.com/sts/items/9df4d89c2829617259a9)
- [MySQLでよく使うコマンド一覧まとめ](http://qiita.com/masarufuruya/items/9ff82e885709980ded0e)
WordPress 公式プラグインを wp-plugin-in-github を使って GitHub に移行した時の手順


(Mac OS X Mavericks 版で行いました)
間違ってるところあったら指摘お願いします。

使用ツール [wp-plugin-in-github](https://github.com/sudar/wp-plugin-in-github)

2014/9/24 時点での情報です（試行錯誤中）


# Mac OS X Mavericks での準備

1. XCode をインストール

1. `xcode-select --install` を走らせる。もしくは [Apple Developer サイトの Download ページ](https://developer.apple.com/downloads/index.action)から Command Line Tools をダウンロード。（ユーザー登録は必要ですが無料でダウンロードできます）

1. 下記のコマンドを走らせる

    1. `sudo ln -s  /Applications/Xcode.app/Contents/Developer/Library/Perl/5.16/darwin-thread-multi-2level/SVN /System/Library/Perl/Extras/5.16/SV`
    1. `sudo ln -s /Applications/Xcode.app/Contents/Developer/Library/Perl/5.16/darwin-thread-multi-2level/auto/SVN/ /System/Library/Perl/Extras/5.16/auto/SVN`

    （Mavericks から Pearl のパスが上手くリンクしていないことからくる不具合とのこと)

# wp-plugin-in-guthub やレポジトリの設定

2. wp-plugin-in-github をインストール

    a. 一時的にダウンロードしたいディレクトリに cd。例；`cd /tmp`
    b. `git clone https://github.com/sudar/wp-plugin-in-github.git`
    c. `chmod +x ./wp-plugin-in-github/*.sh`
    d. `mv ./wp-plugin-in-github/*.sh /usr/local/bin/`
    e. `rm -r ./wp-plugin-in-github`

3. GitHub にプラグイン用のレポジトリを作成

4. authors.txt を作成

    a. 書式
```
plugin-master = SVNユーザー名b <メール@アドレス>
SVNユーザー名 = GitHubユーザー名 <メール@アドレス>
```
    plugin-master は WordPress.org で登録している情報
    そして GitHub のユーザー名と名前、メールアドレスを記入します。
    

# 使用方法

[wp-plugin-in-github](https://github.com/sudar/wp-plugin-in-github)の [Readme.md](https://github.com/sudar/wp-plugin-in-github)の翻訳 (2014/9/23 現在)

5. 既存の SVN から GitHub にクローン

    a. `clone-from-svn-to-git.sh [-p プラグイン名] [-a authors.txt へのパス] [-u svnユーザー名] [-g GitHubレポジトリURL]`

6. GitHub から SVN にデプロイ

    a. `deploy-plugin.sh [-p プラグイン名] [-u svn-ユーザー名] [-m メインプラグインファイル]
        [-a アセットディレクトリ名] [-t テンポラリディレクトリ名] [-i WordPress国際化 (i8n) ツールディレクトリへのパス] [-h Historyもしくはchangelogファイル名]`

7. Readme.md の変換ツール

   a. `readme-converter.sh [from-file] [to-file] [format to-wp|from-wp]`

8. ZIP ファイルの作成

   a. `create-archive.sh [-p plugin-name] [-o output-dir]`

9. バージョン番号の更新

   a. `update-version.sh [old_version] [new_version]`
スクリプトを使ってPhotoshopで楽に@3x画像を作成する

# @3x画像対応
先日のiPhone6 Plus発表によってまさかの`@3x`が発表されました。

すでにリリースされているアプリはひとまずは`Autolayout`への対応と`@3x`画像の追加が焦点になってくると思います。`Autolayout`に関してはやっていないのであればやるしかないです。`@3x`については予想していた方はやっていたかもしれませんが、大多数は予想していなかったのではないでしょうか。

これを自動化しようというのが今回のテーマですが、Photoshop CCのGenerator機能を使用するので**Photoshop CC**が必須になります。Windowsがないので**Macでしか確認していません**。

ステップは3つです。

1.書き出したいグループにルールにそった名前をつける
2.Generator機能を有効にする
3.保存

## 1.書き出したいグループにルールにそった名前をつける

今回は"Generator"を使用しますが、この機能はPhotoshop CCから利用可能になりました。Generatorについては[こちら](http://helpx.adobe.com/jp/photoshop/using/generate-assets-layers.html)を参照してください。かいつまんで言うとPhotoshopのグループに特定の名前をつけて画像アセットが自動生成を可能な状態にする必要があります。

すでに`@2x`画像がある場合、`@1x`は50%縮小、`@3x`は150%拡大した画像を用意することになります。

たとえば`background`という画像名で3種類のサイズが欲しい場合は、レイヤーをまとめたグループに`50% background.png, background@2x.png, 150% background@3x.png`と名前をつける必要があります。

この名前をつけるのがスゴク面倒なのでスクリプトで解決します。Photoshopのレイヤーなどにアクセスする方法は[こちら](http://wwwimages.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/cs6/Photoshop-CS6-JavaScript-Ref.pdf)を参照してください。

今回は選択しているレイヤーの名前を一括で変換するようにします。以下のスクリプト（select_group_rename.jsx）をデスクトップなど適当な場所に保存してください（js初めて書いた）。

```js:select_group_rename.jsx
var layerSet = app.activeDocument.activeLayer;
var assetName = "50% " + layerSet.name + ".png, " + layerSet.name+ "@2x.png, " + "150% " + layerSet.name + "@3x.png";
app.activeDocument.activeLayer.name = assetName;

```

スクリプトの適用は ファイル > スクリプト > 参照... から上で保存したファイル（select_group_rename.jsxを選択すれば適用されます。

画像アセットが欲しいグループに`background`など拡張子がない状態の名前をつけて、上記のスクリプトを適用すれば`50% background.png, background@2x.png, 150% background@3x.png`のようなグループ名に自動変換してくれます。

いちいちPhotoshopから ファイル > スクリプト > 参照... とたどっていくのは面倒なのでスクリプトにショートカットを適用するとかなり楽だと思います。僕はF5を割り当てています。

スクリプトをショートカットにする方法は割愛します。

## 2.Generator機能を有効にする

Photoshopから ファイル > 生成 > 画像アセット をクリック。
以上です。

## 3.保存

新規でも、上書き、別名でも好きに保存してください。psdファイルと同じディレクトリに　"ファイル名 1-assets"というフォルダが保存されます。


## まとめ＆注意

拡大、縮小時にピクセル単位のズレが生じることがあります。最終的には人の目で判断する必要がありますが、それでもこの方法はかなり時間を短縮できると思います。

ちまちま画像ファイル名を用意しているとかなり時間を無駄にしてしまうので、こういう作業はスパッとやりたいですね。
ダンジョンの素？

初期状態
![20140923-120823-235.png](https://qiita-image-store.s3.amazonaws.com/0/54532/5051c1da-806c-cd45-3f39-8c06c150e8c5.png)

出力例
![20140923-121016-271.png](https://qiita-image-store.s3.amazonaws.com/0/54532/045074d6-33a5-782a-e1d4-ee7567e7d450.png)

ん～、いまいち。
なんか遅いし。

```Cpp:Siv3DApp.cpp
#include <Siv3D.hpp>
#include <map>

void Main()
{

  const unsigned int WIDTH  = 32 ;
  const unsigned int HEIGHT = 24 ;

  std::vector<std::vector<int>> field(WIDTH, std::vector<int>(HEIGHT, 0)) ;
  std::map<int, Rect> clusters ;
  for (int y = 0, i = 0; y < HEIGHT; ++y) for (int x = 0; x < WIDTH; ++x) {
    clusters[i] = Rect{x, y, 1, 1} ;
    field[x][y] = i++ ;
  }

  for (std::vector<Point> p; clusters.size() > 1; p.clear()) {
    for (auto d : clusters) {
      if ((d.second.x + d.second.w) < WIDTH) {
        auto t = field[d.second.x + d.second.w][d.second.y] ;
        if (d.second.y == clusters[t].y && d.second.h == clusters[t].h) p.emplace_back(Point{d.first, t}) ;
      }
      if ((d.second.y + d.second.h) < HEIGHT) {
        auto t = field[d.second.x][d.second.y + d.second.h] ;
        if (d.second.x == clusters[t].x && d.second.w == clusters[t].w) p.emplace_back(Point{d.first, t}) ;
      }
    }
    if (p.empty()) break ;

    Point t = p[Random<int>(0, p.size()-1)] ;
    if ((Max(clusters[t.x].w, clusters[t.x].h) / Min(clusters[t.x].w, clusters[t.x].h)) >= 3) t = p[Random<int>(0, p.size()-1)] ;
    if (clusters[t.x].x + clusters[t.x].w < WIDTH && t.y == field[clusters[t.x].x + clusters[t.x].w][clusters[t.x].y]) clusters[t.x].w += clusters[t.y].w ;
    else {
      clusters[t.x].h += clusters[t.y].h ;
    }
    for (unsigned int y = 0; y < HEIGHT; ++y) for (unsigned int x = 0; x < WIDTH; ++x) if (field[x][y] == t.y) field[x][y] = t.x ;
    clusters.erase(clusters.find(t.y)) ;
  }

  int i = 0 ;
  for (auto c : clusters) {
    for (unsigned int y = 0; y < HEIGHT; ++y) for (unsigned int x = 0; x < WIDTH; ++x) if (field[x][y] == c.first) field[x][y] = i ;
    ++i ;
  }

  const int CSIZE = 20 ;
  while (System::Update()) {
    for (int y = 0; y < HEIGHT; ++y) for (int x = 0; x < WIDTH; ++x) {
      if (x == (WIDTH - 1) || field[x][y] != field[x+1][y]) Line(CSIZE * (x + 1), CSIZE * y, CSIZE * (x + 1), CSIZE * (y + 1)).draw() ;
      if (y == (HEIGHT - 1) || field[x][y] != field[x][y+1]) Line(CSIZE * x, CSIZE * (y + 1), CSIZE * (x + 1), CSIZE * (y + 1)).draw() ;
    }
  }
}
```
SwiftでLinkedList

```swift
class LLNode<T> {
    var key: T? = nil
    var next: LLNode? = nil
    var prev: LLNode? = nil
    init() {
    }
    init(PREV prev:LLNode!, KEY key:T!, NEXT next:LLNode!) {
        self.prev = prev
        self.key = key
        self.next = next
    }
}

class LinkedList<T: Equatable> {
    private var head: LLNode<T> = LLNode<T>()
    private var tail: LLNode<T> = LLNode<T>()
    
    func appendKey(key: T) {
        var l = tail
        var newNode = LLNode<T>(PREV:l, KEY:key, NEXT:nil)
        tail = newNode
        if (l.key == nil) {
            head = newNode
        } else {
            l.next = newNode
        }
    }
    func removeKey(key: T) {
        var node: LLNode? = head
        while (node?.key != nil) {
            if (node?.key! == key) {
                unlink(node!)
                break
            }
            node = node?.next
        }
    }
    func unlink(element: LLNode<T>) {
        let __prev = element.prev
        let __next = element.next
        if (__prev?.key == nil) {
            if let n = __next {
                head = n
            }
        } else {
            __prev?.next = __next
            element.prev = nil
        }
        if (__next?.key == nil) {
            tail = __prev!
        } else {
            __next?.prev = __prev
            element.next = nil
        }
        element.key = nil
    }
    
    func print() {
        var current: LLNode? = head
        var str: String = String()
        while (current != nil) {
            if let key = current?.key {
                println(key)
            }
            current = current?.next
        }
    }
}

var list = LinkedList<String>()
list.appendKey("a")
list.appendKey("b")
list.appendKey("c")
list.print()
list.removeKey("a")
list.print()
list.removeKey("c")
list.print()
```
## 参考
下記の記事を読んでて、「バグってね？」「やりかたおかしくね？」と思って自分でも書いてみました。
http://waynewbishop.com/swift/linked-lists/

オプショナルの使い方が正しいのかどうかいまいちピンと来ない場面がある。
kitchen-dockerで動くCentOS7 Dockerコンテナ

動く：SSHが繋がり、kitchen-docker経由で`service`コマンドが使える、chef_zeroのプロビジョニングが動作する

```yaml:.kitchen.yml
  - name: centos-7.0
    driver_config:
      image: 2k0ri/centos7-systemd
      privileged: true
      run_command: /sbin/init; sleep 3
```

# 解説

`2k0ri/centos7-systemd`コンテナのDockerfileは以下です。

```Dockerfile:Dockerfile
FROM centos:centos7
MAINTAINER 2k0ri esc13245@gmail.com

RUN yum swap -y fakesystemd systemd
RUN yum install -y initscripts

CMD ["/sbin/init", "3"]
```

systemdを復活させるために[CentOS 7のDockerコンテナ内でsystemdを使ってサービスを起動する - Qiita](http://qiita.com/yunano/items/9637ee21a71eba197345)の手順に則っています。

`/sbin/init`でsystemdのサービスが起動するため、sshdも立ち上がるはずなのですが
実行直後は起動が完了しておらず、接続に失敗する様子。

OSXから[`yungsang/coreos-alpha`](https://vagrantcloud.com/yungsang/boxes/coreos-alpha)にソケット経由でコンテナを立てている手元の環境では
パフォーマンスによってばらつきがあり、最低3秒、最長15秒のsleepが必要でした。
psとかの表示を自動更新する

以下のコマンドで特定のプロセス(例:unicorn)が起動しているかチェック出来る訳ですが、再起動の時に正しく再起動が出来ているか確認する時はこのコマンドを連打していたりしました。

```bash
ps ax|grep unicorn
```

### watchコマンドで自動リフレッシュ

以下のコマンドで3秒ごとに表示が自動更新されます。

```bash
watch -n3 'ps ax | grep unicorn'
```

http://www.unix.com/shell-programming-and-scripting/118258-refresh-ps-ax-grep-using-script.html
mysqldumpで特定のプリフィックスがあるテーブルを除外しようと思ったら、意外と深かった。


データベースを弄っていまして、テーブルが死ぬほどあるんです。

例えば200個くらいテーブルあって、そのうち piyo_ みたいなプリフィックスがついているのが60個くらいあって、それを除外して、mysqldumpしたい、なんて願望があります。

2、3個のテーブル除外であれば、`--ignore-table`を使えばよいのです。で複数なので、`--ignore-table="piyo%"`とかでいけないかと思ったのですが、ダメ。

結果、以下のアプローチで、なんとかできました。

**まずは、除外ではない簡単なパターンから。**

## 特定のプリフィックスがあるテーブルのみダンプする方法

例えば、hoge_ プリフィックスがついているテーブルが20個あって、それをダンプしたいという場合であれば、以下でいけます。（めんどうなので、-u rootで書いておきます。。）

```zsh
mysql -u root [db_name] -N -e 'show tables　like "hoge%"' | xargs　mysqldump -u root [db_name] > dump.sql
```

これで、dump.sqlに欲しい情報は書き出されます。
（正確には`"hoge\_%"`と`_`をエスケープさして書いておいた方が厳密にプリフィックス指定できるので良いと思いますが、見づらいので以下、全部省略）


### 解説

-N … カラム名を表示しない。
-e … sqlを実行する。

前半でhoge_プリフィックスのテーブルを抽出して、それをxargsで後半部分（mysqldump）の引数としてます。（なので、複数個のテーブル情報が渡されています）

## 本題

最初は、sql実行部分を

```mysql
show tables not like 'piyo%'
```

という感じにカスタマイズでokなんじゃない？と思ったのですが…。

これは使えない。

いろいろ調べていたら、次のように書けば大丈夫！というを見つけたのですが…

```mysql
show tables where 'tables_in_[db_name]' not like 'piyo%';
```

これもダメ。（昔はokだったけど、新しいバージョンだとダメ、みたいなことが書いてあります。[mysql: What is the right syntax for NOT LIKE?](http://stackoverflow.com/questions/3698891/mysql-what-is-the-right-syntax-for-not-like)）実際やってみたけど、なんかエラー。


### けど見つかりました！

```mysql

SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '[db_name]'
AND table_name NOT LIKE 'piyo%';
```

参照元：[Why doesn’t this work? - SHOW TABLES NOT LIKE ‘history%’](http://community.sitepoint.com/t/why-doesnt-this-work-show-tables-not-like-history/44779)

**で、できた…。**

**何コレ！**

いきなり複雑なの出て来たよ。table_schemaとか、全然知らないし。。ここは後で勉強しよう。

でもこれで、一応特定のテーブルを除外してshowする方法は分かったので、これをあとはダンプと組み合わせればよい。


### 完成形

```zsh
mysql -u root [db_name] -N -e 
'SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = "[db_name]"
AND table_name NOT LIKE "piyo%"'
| xargs mysqldump -u root [db_name] > dump.sql
```

な、長い。

正直こんなコマンドが正常にうごくのか、かなり不安な気持ちになりましたが、うごかしてみたら、

**できました！！\\(˚◊˚)/** 
これで、piyo_プリフィックスのテーブル以外のテーブルをdumpすることができました。

以上、ありがとうございました。


■参考にさせて頂いたWebページ：多謝

* [Mysqldump only tables with certain prefix / Mysqldump wildcards?](http://stackoverflow.com/questions/5268936/mysqldump-only-tables-with-certain-prefix-mysqldump-wildcards)
* [mysql: What is the right syntax for NOT LIKE?](http://stackoverflow.com/questions/3698891/mysql-what-is-the-right-syntax-for-not-like)
* [Why doesn’t this work? - SHOW TABLES NOT LIKE ‘history%’](http://community.sitepoint.com/t/why-doesnt-this-work-show-tables-not-like-history/44779)
HomebrewでOSXに構文解析システムKNPを入れる

# 前提

OS X用のパッケージ管理ツール [Homebrew](http://brew.sh/index_ja.html) がインストールされている必要があります。

# インストール

デフォルトのHomebrewリポジトリにKNPが含まれていないので、[homebrew-nlp](https://github.com/uetchy/homebrew-nlp) をtapしてパッケージを追加します。


```bash
$ brew tap uetchy/nlp
```

Tapし終えたら、`knp`をインストールします。knpが依存している形態素解析システム`juman`とデータベース`tinycdb`はHomebrewによって自動でインストールされます。その内の`juman`は上記の `uetchy/nlp` によって提供されています。

```
$ brew install knp
```

固有表現解析を行いたい場合は __--with-crf++__ オプションを付けてインストールします。このオプションを付けると、依存解決のために`crf++`も同時にインストールされます。

```
$ brew install knp --with-crf++
```

> 注意: KNPのインストールにはありえないくらい時間が掛かります。

# チェック

インストールが終わったら動作チェックをします。

```
$ juman < test.txt | knp
# S-ID:1 KNP:4.11-CF1.1 DATE:2014/09/23 SCORE:-19.04210
今日は──┐
  良い──┤
    天気です。
EOS
```
NERDTreeとファイル間をラクラク移動する方法


[画像](https://docs.google.com/file/d/0B8VzVp1hwH6sSEllQy0waWlYaXc/edit)

vimで複数ウィンドウを開く機会があると思うのですが、画像のような状態でd.txtからNERDTreeに移動してe.txtを開きたい場合にどのようにすればいいのかわかりませんでしたが、最近わかったのでメモします。

```
ctrl-w t
```

一番左上のウィンドウに移動するコマンドでNERDTreeに移動できました。
あとはTree内でe.txtを選べば、d.txtの部分がe.txtに変わりました。
[Unity] Cgでのライティングについてメモ


[定義済値](http://qiita.com/edo_m18/items/591925d7fc960d843afa)や定義の意味など、Unityでよしなにやってくれている部分などを含めて単純なDiffuseライティングをやるメモ。

## シンプルなコード例

簡単なライティングをするコード例。

```Cg
SubShader {
    Tags {
        "RenderType"="Opaque"
        "LightMode"="ForwardBase"
    }
    LOD 200
    
    Pass {
        CGPROGRAM
        
        #pragma vertex vert
        #pragma fragment frag
        
        struct vertInput {
            float4 vertex    : SV_POSITION;
            float4 normal    : NORMAL;
            float2 texcoord  : TEXCOORD0;
            float2 texcoord2 : TEXCOORD1;
        };

        struct vert2frag {
            float4 position : POSITION;
            float2 uv       : TEXCOORD0;
            float2 uv2      : TEXCOORD1;
            float4 color    : COLOR0;
        };

        uniform sampler2D _MainTex;
        uniform sampler2D _NormalTex;
        uniform fixed4 _LightColor0;

        vert2frag vert(vertInput v) {
            vert2frag o;
            
            float4 wpos    = mul(UNITY_MATRIX_MVP, v.vertex);
            float4 wnormal = mul(v.normal, _World2Object);
            float  diffuse = max(0, dot(_WorldSpaceLightPos0, wnormal));
            
            o.position = wpos;
            o.color    = _LightColor0 * diffuse;
            
            return o;
        }
        
        float4 frag(vert2frag i) : COLOR {
            return i.color;
        }

        ENDCG
    }
} 
```

### ライティングの準備

* `"LightMode"="ForwardBase"`タグをつける

これを付けないとライティングに関する情報が取得できません。

* `uniform fixed4 _LightColor0`を宣言

uniform変数として、`fixed4`型の`_LightColor0`という変数を宣言します。
ここに、ライトの色が渡されます。

### 頂点シェーダで計算

頂点シェーダは以下のようになっています。

```Cg
vert2frag vert(vertInput v) {
    vert2frag o;

    float4 wpos    = mul(UNITY_MATRIX_MVP, v.vertex);
    float4 wnormal = mul(v.normal, _World2Object);
    float  diffuse = max(0, dot(_WorldSpaceLightPos0, wnormal));

    o.position = wpos;
    o.color    = _LightColor0 * diffuse;

    return o;
}
```

<ins>wnormalの計算時、normalizeしてしまっていたので削除しました。normalizeするとうまく動きません。</ins>

処理としては法線をワールド空間座標に変換したのちに、ライトの位置との内積を取っています。
`_WorldSpaceLightPos0`はひとつ目のライトの位置です。これは自動的に宣言されているのでそのまま利用することが出来ます。

ちなみにUnityでは、DirectionalLightも視覚的に位置が表示されますが、実際には回転が影響を与えます。（当たり前ですが）
視覚的に見えている分、おや？となってしまうので勘違いしないようにしましょうｗ

#### 法線の計算

法線の計算については、ワールド空間座標への変換を行っていますが、変換には若干の注意が必要です。
（[こちらの記事](http://raytracing.hatenablog.com/entry/20130325/1364229762)がとても参考になりました）

結論だけ言うと、 **モデル行列の逆転置行列を掛ける** 必要があります。
が、そこは少しだけ楽をして、Unityから渡されるモデル行列の逆行列（`_World2Object`）を、ベクトルに対して逆から掛けてやることで結果的に逆転置行列を掛けたことにしています。

#### 色の計算

あとは、ライトの色と法線とライト位置から求めた内積を掛けあわせて最終的な色を決定している、というわけです。
PostgreSQLでパスワード認証を行う方法


## HomebrewでPostgreSQLをインストールすると
*pg_hba.conf* に記載される初期設定では、 **接続を無条件で許可する** というせっていになっている。なので、 *createuser* コマンドでパスワードを設定するも、パスワード入力プロンプトが出ないと行ったような、おかしな現象にあたってしまう。

## 接続時にパスワードを要求するために
*pg_hba.conf* を、以下の様に修正する。

```
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     trust
local   all             all                                     md5

# IPv4 local connections:
#host    all             all             127.0.0.1/32            trust
host    all             all             127.0.0.1/32            md5

# IPv6 local connections:
#host    all             all             ::1/128                 trust
host    all             all             ::1/128                 md5
```

上記中、 **METHOD** が **trust（＝接続を無条件で許可）** となっている箇所を、 **md5（＝認証時にMD5暗号化パスワードを要求する）** ように設定変更を行った。

なお、参考にしたサイトは[こちら](https://www.postgresql.jp/document/9.2/html/auth-pg-hba-conf.html)

## 設定変更を終えたら
以下のコマンドを利用して、PostgreSQLの再起動を忘れずに行う事。

```shell-session
$ launchctl unload ./homebrew.mxcl.postgresql.plist

$ launchctl load -w ./homebrew.mxcl.postgresql.plist
```