OmniAICreator/Qiita-1.07M huggingface dataset:
CentOS6.5＋CakePHP＋nginx設定ファイルサンプル

**前提**
--------------------
ニフティクラウド上のCentOS6.5+nginx+php-fpm+CakePHP
で動作した時のnginx設定ファイルのサンプルです。

バージョンは以下の通り。
nginx: 1.6.2
php-fpm: PHP5.5.18
CakePHP: 2.5.4

nginxはyumインストール、php-fpmはPHPのソースをコンパイルすると
作成されますが、その際、php-fpmへリクエストを送るuser:groupを
apache⇒nginxへ変更する必要があるようです。
（自分の環境ではyumインストールでは動きませんでした）

ただ、このままだと
/XXX.XXX.XXX.XXX/アプリケーション名/
でアクセスするようになるので、ルートでアクセスする場合は適時ご変更ください。
もっとよい方法や間違いなどありましたら、ご指摘いただけたらありがたく存じます。

**PHP5.5.18コンパイルオプション**
--------------------
```bash:php55_conf.sh
./configure --prefix=/usr/local/php-5.5.18 \
--enable-mbstring \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--enable-pcntl \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-openssl \
--with-pcre-regex \
--with-zlib \
--with-curl \
--with-mhash \
--with-xsl \
--with-mcrypt \
--with-pear \
--enable-exif \
--enable-ftp \
--with-gd \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--without-unixODBC \
--disable-posix \
--disable-sysvmsg \
--disable-sysvshm \
--disable-sysvsem \
--disable-debug \
--enable-intl \
--with-config-file-path=/etc
```

**nginx設定ファイル**
--------------------
```nginx:nginx.conf
    server {
        listen       80;
        server_name  localhost;

        root   /usr/share/nginx/html/[アプリケーション名];
        index  index.php index.html;

        location ~ ^/(img|css|js|files)/(.+)$ {
            root /usr/share/nginx/html/[アプリケーション名]/app/webroot;
            try_files /$1/$2 =404;
        }

        location ~ ^/(.+\.php) {
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include         fastcgi_params;
        }

        location ~ ^/(.*)$ {
            index  index.php index.html;
            try_files /$1 /$1?$args /$1/ /index.php?$1&$args /index.php?$args;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ ^/(\.ht|\.git|\.svn) {
            deny  all;
        }
    }
```
サイドから出てくるスワイプメニューを作る


![アプリ画像](http://i.gyazo.com/f97d7f74425542900cff1f4a56f8893f.gif)

### やったこと
* GmailとかFacebookとか、スマホアプリでよくある、左とか右にスワイプしたら、メニューが出てくる、逆向きにスワイプしたら戻るやつを作る。
* メニューが出ている間は、メイン部分の上に透明ボタンを被せる。
* 透明ボタンを押すと、メニューを閉じる。

###コード
```Swift:ViewController.swift

class ViewController: UIViewController {

    // フロントビュー
    @IBOutlet var frontView: UIView!
    
    // カバーボタン（透明）
    @IBOutlet var coverButton: UIButton!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        // カバーボタンを隠す
        self.coverButton.hidden = true
    }

    // スワイプ（メニューを表示、非表示）
    @IBAction func swipeView(sender: UISwipeGestureRecognizer) {
        
        var location:CGPoint = self.frontView.center;
        var center_x:CGFloat = self.view.center.x;
        
        //スワイプした方向で分岐
        if (sender.direction == UISwipeGestureRecognizerDirection.Right) {
            // 右に開ける
            location.x = center_x + 120
            // カバーボタンを表示
            self.coverButton.hidden = false
        } else {
            //左に閉じる
            location.x = center_x
            // カバーボタンを隠す
            self.coverButton.hidden = true
        }
        UIView.animateWithDuration(
            0.2,
            delay:0.5,
            options : UIViewAnimationOptions.CurveEaseIn,
            animations : {
                self.frontView.center = location
            },
            completion: {
                (value: Bool) in
                println("");
            }
        )
        
    }
    
    // カバーボタンをタップするとメニューを閉じる
    @IBAction func closeMenu(sender: UIButton) {
        
        var location:CGPoint = self.frontView.center;
        var center_x:CGFloat = self.view.center.x;
        
        //左に閉じる
        location.x = center_x
        // カバーボタンを隠す
        self.coverButton.hidden = true
        
        UIView.animateWithDuration(
            0.2,
            delay:0.5,
            options : UIViewAnimationOptions.CurveEaseIn,
            animations : {
                self.frontView.center = location
            },
            completion: {
                (value: Bool) in
                println("");
            }
        )
        
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

```

###コツとか
* Recognizerなどの名前を変えるのに、コツが要る
![名前を変える](http://i.gyazo.com/dddc7d2564efd060f6b5e742408ad3e2.gif)

ツリーから名前を変えるんだけど、最初は、編集状態にする方法がよく分からなかった。選択してから、短いクリックをする。ダブルクリックではできない。
* iosシミュレーターでスワイプするときは、普通にマウスでドラッグする。

###ソースアップ
https://github.com/hanoopy/ios_study_swipecat.git

###コメント
* animateWithDurationの書き方はすごい適当で、こちらを参考にしました。
http://qiita.com/skatata/items/a0b908c899748c843db3

* SwipeCatという名前で犬の写真にしてしまった。
* 始めはMenu2だけ前に出てしまって、作りなおしたら直ったけどよくわからない。
* 共通処理をまとめてあげたい。
Herokuおすすめアドオンまとめ


Herokuで個人的によく使うアドオン、毎回必ず入れるようなアドオンの一覧です。

## パフォーマンスチェック

* [New Relic | Add-ons | Heroku](https://addons.heroku.com/newrelic)

定番。

## CI

* [Codeship | Add-ons | Heroku](https://addons.heroku.com/codeship)
  * 参考: [Codeship + Herokuでstagingにもproductionにも継続的インテグレーション - Qiita](http://qiita.com/u651601f/items/8da10ca147be241318b3)
* [wercker | Add-ons | Heroku](https://addons.heroku.com/wercker)

[Heroku | Page Not Found](https://addons.heroku.com/circleci)
↑CircleCIはアドオンとしての提供は無くなったみたいです。

## スケジューラ／定期実行処理

* [Heroku Scheduler | Add-ons | Heroku](https://addons.heroku.com/scheduler)

## Herokuプロセス管理

* [Process Scheduler | Add-ons | Heroku](https://addons.heroku.com/process-scheduler)

## Redis

* [Redis To Go | Add-ons | Heroku](https://addons.heroku.com/redistogo)
* [openredis | Add-ons | Heroku](https://addons.heroku.com/openredis)
* [Redis Cloud | Add-ons | Heroku](https://addons.heroku.com/rediscloud)

無料プランがあるので「Redis To Go」をよく使っています。

## メール

* [SendGrid | Add-ons | Heroku](https://addons.heroku.com/sendgrid)
* [Mailgun | Add-ons | Heroku](https://addons.heroku.com/mailgun)
* [Mandrill by MailChimp | Add-ons | Heroku](https://addons.heroku.com/mandrill)

どれも無料プランがあって、まだ"これ"というものは決め切れていません。
おすすめがあれば教えてください。

## ログ

* [Papertrail | Add-ons | Heroku](https://addons.heroku.com/papertrail)
* [Logentries | Add-ons | Heroku](https://addons.heroku.com/logentries)

Papertrailはだいたい毎回とりあえず入れています。

## WebSocket

* [Pusher | Add-ons | Heroku](https://addons.heroku.com/pusher)

リアルタイムチャットを作った時に使ってみましたが、わりと簡単にリアルタイム同期などが出来ます。

## エラー通知

* [Bugsnag | Add-ons | Heroku](https://addons.heroku.com/bugsnag)

[smartinez87/exception_notification](https://github.com/smartinez87/exception_notification)
↑エラー通知は「exception_notification」でわりと事足りるので、今はアドオンを入れずに済ませています。

----

Herokuのアドオンは知らない間にいつの間にか増えていたり無くなっていたりするので、たまに↓このアドオンページを流し見したりしています。
他にも便利なアドオンなどあれば教えてくださいー。

* [Heroku Add-ons](https://addons.heroku.com/)
Docker コンテナに一発で .dev ドメインを割り当てるやつ書いた

Boot2docker で Docker コンテナにアクセスするとき毎回ポートフォワーディング設定して `localhost:12345` とかでアクセスするのめんどくさい、すぐ `container-name.dev` でアクセスできたら便利だな、と思ったのでそういうのを書いた。 [Pow](http://pow.cx) に依存するので Mac 専用。

[uasi/boot2docker-powify · GitHub](https://github.com/uasi/boot2docker-powify)

まず適当な名前でコンテナを実行する（ここでは `loving_galileo`）：

```
$ docker ps
CONTAINER ID        IMAGE                     COMMAND               CREATED             STATUS              PORTS                    NAMES
e4e983e368f5        dockerfile/ghost:latest   "bash /ghost-start"   3 hours ago         Up 3 hours          0.0.0.0:2368->2368/tcp   loving_galileo
```

`boot2docker-powify` を実行すると `loving-galileo.dev` でコンテナにアクセスできるようになる：

```
$ boot2docker-powify
Created /Users/uasi/Library/Application Support/Pow/Hosts/loving-galileo
Started forwarding port 2368
======> http://loving-galileo.dev is live

$ curl -s http://loving-galileo.dev | grep "<title>"
    <title>Ghost</title>
```

割り当てを解除するには `boot2docker-depowify` を実行する：

```
$ boot2docker-depowify
Removed /Users/uasi/Library/Application Support/Pow/Hosts/loving-galileo
Killed ssh with pid 16719
Stopped forwarding port 2368
======> http://loving-galileo.dev has gone

$ curl -s http://loving-galileo.dev | grep "<title>"
  <title>Application not found</title>
# ↑これは Pow のプロキシからのレスポンス
```
fluentd-uiを起動してみた

# 参考

* [Fluentd UIが出たので触ってみた - すずけんメモ](http://suzuken.hatenablog.jp/entry/2014/08/01/202334)
* [minimum2scp/fluentd-ui Repository | Docker Hub Registry - Repositories of Docker Images](https://registry.hub.docker.com/u/minimum2scp/fluentd-ui/)

# 起動

```bash:起動
docker run -d -p 8080:80 minimum2scp/fluentd-ui
```

### ログイン

http://docker-ip:8080/ にアクセス。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/30998612-5c2f-5cef-1c31-c2bf5be136f3.png)

### fluentdセットアップ

![2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/d8f7f04e-f08b-cf43-3229-ffd4e12fd3a8.png)

### ファイルの場所指定

![3.png](https://qiita-image-store.s3.amazonaws.com/0/25728/ed0876a0-3a42-5f8b-290b-6da68f710924.png)

### ダッシュボード

![4.png](https://qiita-image-store.s3.amazonaws.com/0/25728/4aa325ca-b4f5-9e43-af5c-76b8464c4de8.png)

### 開始

![5.png](https://qiita-image-store.s3.amazonaws.com/0/25728/4ab133b9-7dbe-96e0-5586-68ebf6bc0db1.png)
ファミリーシェアリング + 課金を確認 〜 [家族]の追加 編

#はじめに
ファミリーシェアリングの機能で
追加する`家族`のステータスによって、使用可能な機能制限があります。

#登録

##親側
![Screen Shot 2014-10-26 at 14.43.54.png](https://qiita-image-store.s3.amazonaws.com/0/12362/79f021bc-2f80-715e-60d6-cf4d3502e7b9.png)

↓

![Screen Shot 2014-10-26 at 18.03.28のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/12362/c6a6d430-a2ce-1272-74d9-d532b83eb86d.png)

↓

位置情報を共有する設定（ON/OFF）については課金と関係ないため選ばないこともできます。

![Screen Shot 2014-10-26 at 18.03.59.png](https://qiita-image-store.s3.amazonaws.com/0/12362/fa7ef5cf-b3a7-e8ed-f6d6-eb83a89c0a0b.png)

↓

自分が`管理者`となっていて`家族を追加`するにはAppleIDが必要なことが分かります。

![Screen Shot 2014-10-26 at 18.04.36.png](https://qiita-image-store.s3.amazonaws.com/0/12362/c3d64d4e-e78d-e8dc-767a-009138a60802.png)

↓

`家族`とする端末に設定したAppleIDを追加します
![Screen Shot 2014-10-26 at 18.05.25.png](https://qiita-image-store.s3.amazonaws.com/0/12362/c2135449-2716-f060-c1bb-4356fc39a08f.png)

↓

`管理者`はクレジットカードのセキュリティコードを知っておくべきみたいです
![Screen Shot 2014-10-26 at 18.05.37.png](https://qiita-image-store.s3.amazonaws.com/0/12362/94e3df61-a242-9964-05d6-6f6c33abcb64.png)

↓

 * 管理者の端末で追加するAppleIDのパスワードをいれる
 * 相手の端末に通知を送って承諾

いずれかを選べます。

![Screen Shot 2014-10-26 at 18.06.11.png](https://qiita-image-store.s3.amazonaws.com/0/12362/33a8db09-3d5f-326b-53a0-2f34fb3bf611.png)

↓

![Screen Shot 2014-10-26 at 18.07.00のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/12362/5433a8d2-170f-9276-c347-cc94098da1b9.png)

##受信側
管理者が登録前にiCloudの設定はすませておきます

![Screen Shot 2014-10-26 at 18.08.19.png](https://qiita-image-store.s3.amazonaws.com/0/12362/5e1dea0e-b4d0-305e-6b89-8f24511939f7.png)

↓

設定画面
![Screen Shot 2014-10-26 at 19.58.55.png](https://qiita-image-store.s3.amazonaws.com/0/12362/8b4d8d17-33ed-19f8-fbc1-d5dd4431cb0c.png)

↓

誕生日の設定を忘れずに
![Screen Shot 2014-10-26 at 19.59.23.png](https://qiita-image-store.s3.amazonaws.com/0/12362/83d12444-e9b0-c720-609a-7171799f8126.png)

↓
誕生日の設定後、iCloud > ファミリー共有を設定を選びます

![Screen Shot 2014-10-26 at 20.01.35.png](https://qiita-image-store.s3.amazonaws.com/0/12362/fe7a7785-4291-1252-005f-4134f3113b1d.png)

↓

登録が完了したら管理者の端末に通知されます

![Screen Shot 2014-10-26 at 20.02.41.png](https://qiita-image-store.s3.amazonaws.com/0/12362/5dcfda4c-58d5-2401-a45b-631789322dd2.png)

#追加した`家族`のステータス

##未成年の場合
![Screen Shot 2014-10-26 at 20.09.34のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/12362/5a7594b8-8623-3a51-c93e-e105f950ab37.png)

家族に追加したAppleIDの端末に`承認と購入のリクエスト`をさせるかどうか設定が可能です。

##成人の場合

![Screen Shot 2014-10-26 at 20.06.18のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/12362/abafe016-dc85-73ee-e531-4f1365b1eac3.png)

家族に追加したAppleIDの端末に`両親／保護者`設定が表示されました。
このユーザにも家族の承認と購入に対して対応させるか設定が可能です。

##一覧

ここから家族を追加していきます。

![Screen Shot 2014-10-26 at 20.03.19.png](https://qiita-image-store.s3.amazonaws.com/0/12362/972368c0-efe3-5ce0-df92-6c5c153ea820.png)

##その他
>画像がアップロードできなかっため後ほど

#さいごに
年齢はiPhone上で変更が可能なので調整はつきやすいようです。
クレジットカードの設定が気になるので、Appleから公式でテスト手順書など出していないか、探してみます。
Oracleのアカウントでパスワードに@が含まれていた時


結論
--
- パスワードを **@** 抜きで作成し直す

方法(Linux環境)
--
1 . 環境変数を設定する

``` sql
  export ORACLE_SID=mysid
```

2 . SYSDBA権限でログインする
  
``` sql
  sqlplus / as sysdba
```

3 . パスワードを変更する

``` sql
  ALTER USER myuser IDENTIFIED by mypassword;

```

補足
--
実際は、含まれていた場合は、エスケープ処理をすれば問題ないようだが、自分の場合は面倒くさいのと、うまく行かなかったのでわざわざこんなことするくらいならと、パスワード変更を選択した。

[パスワードに含まれる@のエスケープ方法](https://community.oracle.com/thread/2322689?tstart=0 "パスワードに含まれる@のエスケープ方法")
Rubyのloggerの出力メッセージをブロックで指定

# まとめ

Rubyのloggerでブロックを使った出力ができることを初めて知った

# 本題

RubyのloggerでDEBUGのログを出力しているが、本番環境ではDEBUGレベルは不要な場合、出力内容が単純な文字列でなくて計算量が必要なとき、無駄に評価をして時間がかかってしまう。

ラムダ使って遅延評価できないかなと思って仕様見たら、もともとブロックを指定することが可能だった。

http://docs.ruby-lang.org/ja/2.1.0/method/Logger/i/debug.html

```ruby
# 例
logger.debug "bug #{sleep 10; 1}" # 10秒待つ
logger.debug { "bug #{sleep 10; 1}" } # debugレベルの出力がなければ待たない
```

# 適当なベンチマーク

## ソースコード

```ruby:logger_benchmark.rb
require 'benchmark'
require 'logger'

arr = Array.new(10, "x")
logger = Logger.new("/dev/null")

puts "Error level"
logger.level = Logger::ERROR
Benchmark.bmbm do |x|
  x.report { 100000.times { logger.debug   "sample log"   } }
  x.report { 100000.times { logger.debug { "sample log" } } }
  x.report { 100000.times { logger.debug   "#{arr.join(",")}" } }
  x.report { 100000.times { logger.debug { "#{arr.join(",")}" } } }
end

puts "\nDebug level"
logger.level = Logger::DEBUG
Benchmark.bmbm do |x|
  x.report { 100000.times { logger.debug   "sample log"   } }
  x.report { 100000.times { logger.debug { "sample log" } } }
  x.report { 100000.times { logger.debug   "#{arr.join(",")}" } }
  x.report { 100000.times { logger.debug { "#{arr.join(",")}" } } }
end
```

## 結果

~~~
Error level
Rehearsal ------------------------------------
   0.030000   0.000000   0.030000 (  0.027272)
   0.040000   0.010000   0.050000 (  0.052547)
   0.130000   0.000000   0.130000 (  0.126390)
   0.050000   0.000000   0.050000 (  0.052135)
--------------------------- total: 0.260000sec

       user     system      total        real
   0.020000   0.000000   0.020000 (  0.019880)
   0.050000   0.000000   0.050000 (  0.049922)
   0.130000   0.000000   0.130000 (  0.120865)
   0.050000   0.000000   0.050000 (  0.046710)

Debug level
Rehearsal ------------------------------------
   0.220000   1.040000   1.260000 (  1.252479)
   0.320000   1.020000   1.340000 (  1.346189)
   0.300000   1.100000   1.400000 (  1.396905)
   0.360000   1.140000   1.500000 (  1.503674)
--------------------------- total: 5.500000sec

       user     system      total        real
   0.270000   0.980000   1.250000 (  1.253186)
   0.370000   0.970000   1.340000 (  1.336159)
   0.290000   1.110000   1.400000 (  1.402313)
   0.430000   1.100000   1.530000 (  1.522883)
~~~

単純な処理ならブロック使わない方が早いけど、重い処理なら（出力しない場合は）当然ブロックの方が早い。
AWS で逆引き設定されている EIP の解放

AWS で逆引き設定を申請した EIP は、そのままでは IP アドレスを解放しようとしても以下のようなエラーが出て解放できません。逆引き設定しているものはアカウントに紐付けられてロックされてしまうようです。

> XXX.XXX.XXX.XXX: The address with allocation id [eipalloc-XXXXXXXX] cannot be released because it is locked to your account. Please contact AWS Support to unlock it. (Service: AmazonEC2; Status Code: 400; Error Code: InvalidAddress.Locked; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

IP アドレスを解放するためにはまず逆引き設定を解除してもらう必要があります。逆引き申請をした同じフォームから申請します。

https://portal.aws.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-request

このフォームの **Use Case Description** 欄に以下のように記載して申請します。**Elastic IP Address** や **Reverse DNS Record for EIP** 欄は空欄のままで構いません。

> Please "remove" following reverse DNS lookup setting.
Reverse DNS Name: xxx.example.com.
EIP Address: 111.111.111.111`

申請して数日すると逆引き設定が解除され、EIP を解放することができるようになります。
JavaScript, jQuery でのURLの扱い方

例えば
http://www.test.com:8082/index.php#tab2?foo=123
について
###JavaScriptの場合

Property | Result 
--- | --- 
window.location.host|www.test.com:8082
window.location.hostname|www.test.com
window.location.port|8082
window.location.protocol|http
window.location.pathname |/index.php
window.location.href|http://www.test.com:8082/index.php#tab2
window.location.hash|#tab2
window.location.search|?foo=123

###jQueryの場合

Property | Result 
--- | --- 
$(location).attr('host'); | www.test.com:8082
$(location).attr('hostname'); | www.test.com
$(location).attr('port'); | 8082
$(location).attr('protocol'); | http
$(location).attr('pathname'); | /index.php
$(location).attr('href'); | http://www.test.com:8082/index.php#tab2
$(location).attr('hash'); | #tab2
$(location).attr('search'); | ?foo=123
How to force close applications in MAC

A few things that can be very useful. It’s so frustrating sometimes to have your program crashed and you can’t do anything for it. So I had memo the 5 ways on how to Force Quit your Mac Application.

<b>First Method</b>
Use Keyboard Shortcuts

Press ⌘ Command+⌥ Option+⎋ Esc.
The Force Quit Applications window will open up so choose the application you want to close and force quit it.

<b>Second Method</b>
Use the Apple Menu
Click on either your desktop or a window of any other application.
Click the Apple icon in the top left of your screen and select "Force Quit" from the menu. This will open the Force Quit Applications window then select the application you want to force quit. Click the button that says "Force Quit”.

<b>Third Method</b>
Use the Dock
Hold the Option key and right-click on the application's icon in the Dock then select Force Quit.

<b>Fourth Method</b> 
Use the Terminal
Open the Terminal application. Sometimes trying to Force Quit an application through the menu doesn't quite work the way you'd expect it to so if a normal Force Quit doesn't work, you may need to use this method to end the program.Type "top" and press Enter. Various information will be displayed. Find the program you want to close and under the column titled "command", find the name of the application you wish to quit. The command list may use a truncated name for the program. Look for a name that looks similar to the program you are trying to close then find the PID. Make a note of the PID number then type “q" to exit the list of applications and return to the command line.Type "kill thePID“. Replace the "thePID" with the number from the PID Column you just located. Exit the terminal then you can simply relaunch the application and keep on working.

<b>Fifth Method</b> 
Use the Activity Monitor
Go to Spotlight, type 'Activity Monitor', and click on the program that appears. Activity Monitor shows all running processes, a more extensive list than 'Force Quit Applications' shows.
Find and select the application or process that you want to kill in one of the tabs.Hit the 'stop' button in the top left.
SubversionからGitへの移行メモ


以下を参考に作業
http://qiita.com/hidekuro/items/4727715fbda8f10b6b11


initしてfetchする方針で行く。trunkのみの移行。

```
git svn init -s --trunk http://host/svn/repo/project_name/trunk
```

HEADのリビジョンを数字で指定して全てのリビジョンを取得しようとしたがエラー。

```
git svn fetch -r 1:1000 -A author.txt
.
.
Incomplete data: Delta source ended unexpectedly at /usr/lib/perl5/site_perl/Git/SVN/Ra.pm line 290
```

ググったらGitのエラーではないかとのこと。
https://groups.google.com/forum/#!msg/git-users/UqifiMnLTLc/zhEqwErQ0zgJ

リトライしてもダメだったので、全てのリビジョンを取得しないようにしたら成功。（リビジョン全部移行するのは必須ではなかった）

```
git svn fetch -r 700:1000 -A author.txt
```

しかし、HEADのリビジョンを数字で指定しているにも関わらず、なぜかHEADより前の状態までしかリビジョンが存在しなかった。
最終的には以下のように実行したらうまくいった。

```
git svn fetch -r 700:HEAD -A author.txt
```

尚、`author.txt`はSubversionのコミットユーザーとGitのコミットユーザーの対応を書いたもの。右がGit。

```author.txt
eiryu=日本太郎<mail@eiryu.com>
.
.
```
ERROR: vimproc_linux64.so is not found. Please read :help vimproc and make it.

# エラーメッセージ

```
vimproc's DLL:"$HOME/.dotfiles/.vim/bundle/vimproc/autoload/vimproc_linux64.so" is not found. Please read :help vimproc and make it.
```

# 対処方法

```Shell:vimproc_linux64_no_found_handling.sh
% cd $HOME/.dotfiles/.vim/bundle/vimproc/
% make
% ls -la $HOME/.dotfiles/.vim/bundle/vimproc/autoload/vimproc_linux64.so
```

# リファレンス

```
https://github.com/Shougo/vimproc.vim/issues/147
```
WireSharkのディスプレイフィルタの落とし穴を埋めてみる

WireSharkでキャプチャした結果を表示する際に、邪魔な特定のプロトコルだけを除外したい場合に落とし穴にハマったのでメモ。

#概要
WireSharkのディスプレイフィルタで、否定の比較演算子"**!=**"を使うとハマることがある。ハマるケースと回避方法を紹介するよ。

#こんな時にハマるよ!
特定のプロトコルだけ除外して、残りの通信は表示したいときにはどうフィルタを記述すればいいのだろう。
例えば、あるWebサーバにブラウザでアクセスして処理を発生させ、流れてくるHTTP以外の通信をPCでキャプチャしたいとかの場合、HTTPは邪魔なのでWireSharkで表示したくないわけだ。

もし、HTTPだけを表示するのであればフィルタに下記のように書けば良いから、

`tcp.port == 80`

これを書き換えて下記のようにすれば良いように思える。

`tcp.port != 80`

残念ながらこれはうまくいかない。これを指定しても何もフィルタされず、SSHもそうでないものも表示されてしまう。
上記のフィルタの意味は、「SRCポート及びDSTポートの両方が80であるものを除外して、**TCPであるもの**」という意味だからだ。

では次のように書き換えたらどうだろう。

`(tcp.srcport != 80) and (tcp.dstport != 80)`

やはりこれでも意図したものとは違ってしまう。
上記のフィルタの意味は、「SRCポートかDSTポートのどちらかでもが80であるものを除外して、**TCPであるもの**」という意味だからだ。
上記のフィルタではUDPやARPなどTCPではない通信が表示されない。

#こうすると回避できるよ!
意図した通りのことを行おうとするならば、以下のように記述しなければならない。

`(not tcp.srcport == 80) and (not tcp.dstport == 80)`

これならばHTTP通信を除外し、残りの通信は表示される。
ポイントは比較演算子**!=**を使わずに**==**を使うことだ。比較演算子**==**は、多分みんなが期待する通りのことをやってくれるのだが、**!=**は期待したのとはちょっと違う結果を出してしまうのだ。だから**==**を使い、**NOT**でそれを反転させるのが良い。

#そうそう、こうやってもうまくいかないんだよね
そんな面倒なことをしなくてもポート番号指定ではなくプロトコル名httpを使って記述すればいいじゃないか、と思うかもしれない。

`not http`

この指定でも、なぜか一部のHTTPパケットが表示される。よく見るとHTTP通信の一部、ACKパケットやSYNパケットやらが表示される。多分、WireSharkがHTTPプロトコルとして処理する条件から漏れるものがあるのだろう。HTTP通信の大部分は非表示になるのだが、HTTPの場合は漏れ出てくるACKの数が結構多いのでやっぱり鬱陶しいままだ。

#結論
だから、ちゃんとフィルタしないと死ぬような場合には**!=**は使わない方がいい、**NOT**を使うべきだね!
htmlのテーブルについてまとめてみた。

ようやくHTMLのテーブルの仕組みが分かったので、忘れないうちにまとめておきます。

### ポイント

まず、テーブルの結合には`colspan(横方向の結合)`、`rowspan(縦方向の結合)`の2つがあります。
重要なのは、テーブルを`分割`するのではなくて、`結合`するというポイントです。

自分は今までどうやって`分割`するのか？を考えていたため、混乱していました。
ただ、`結合`するという考えでわかれば、スっと理解できます。

例えば、一番↓の組み合わせた例を見てみると、
見た目は`3列目を2行に分割`されてますが、実際にしてる事は、
`1列目と2列目を1行に結合`しているのです。

なので、1列目と2列目のtdタグに`rowspan="2"`を指定して実現しているわけです。

### 横に結合する

* 完成イメージ

![横結合.png](https://qiita-image-store.s3.amazonaws.com/0/23276/138d3e11-b97f-bd2d-662e-85f2d530072b.png)

* コード

```html
<table border="1">
    <tr>    
        <td colspan="2">セル1</td>
    </tr>       
    <tr>        
        <td>セル2-1</td>
        <td>セル2-2</td>
    </tr>
</table> 

```

### 縦の結合する

* 完成イメージ

![縦結合.png](https://qiita-image-store.s3.amazonaws.com/0/23276/d66952c7-5e0d-f6a1-328f-712ad86df31a.png)

* コード

```html
<table border="1">
    <tr>        
        <td rowspan="2">セル1</td>
        <td>セル2-1</td>
    </tr>       
    <tr>    
        <td>セル2-2</td>
    </tr>
</table> 
```

### 組み合わせてみる

* 完成イメージ

![both.png](https://qiita-image-store.s3.amazonaws.com/0/23276/b645e95e-e8e5-14ce-f400-9363c5587ac2.png)

* コード

```html
<table border="1">
    <tr>        
        <td rowspan="2">セル1-1</td>
        <td rowspan="2">セル1-2</td>
        <td>セル1-3-1</td>
    </tr>       
    <tr>    
        <td>セル1-3-2</td>
    </tr>       
    <tr>        
        <td rowspan="2">セル1-1</td>
        <td rowspan="2">セル2-2</td>
        <td>セル2-3-1</td>
    </tr>       
    <tr>    
        <td>セル2-3-2</td>
    </tr>
</table>
```
【NOREN】月を数値から文字列（英語）に変更させる



##説明

新着情報等でよく見かけるこの表示。

```
12 19.2014　新着アイテム登場しました！
```

日本だとあまり見かけませんが、
英語圏だと月の部分を英単語に変える場合もあるようです。


```
December 19.2014 New Items appeared!
```

使用頻度は低いけど、
たまに依頼もあったのでコンポーネントにしてパーツ化すると作業効率が上がると思います。

##コンポーネント


```
[[---※月部分を取得※---]]
[[--RecordStart,name:val01--]]
[[--DateFormatStart,from:yyyyMMdd-HHmmss,to:MM--]]
[[--ArtFieldValue,field:アクションフィールド名--]]
[[--DateFormatEnd--]]
[[--RecordEnd--]]

[[---※月以外を取得※---]]
[[--RecordStart,name:val02--]]
[[--DateFormatStart,from:yyyyMMdd-HHmmss,to:dd. yyyy--]]
[[--ArtFieldValue,field:アクションフィールド名--]]
[[--DateFormatEnd--]]
[[--RecordEnd--]]


[[---※1月だったらJanuaryに変換※---]][[--IFStart,is:[%val01%]=01--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]January[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]

[[---※2月だったらFebruaryに変換※---]][[--IFStart,is:[%val01%]=02--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]February[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]

[[---※3月だったらMarchに変換※---]][[--IFStart,is:[%val01%]=03--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]March[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]

[[---※4月だったらAprilに変換※---]][[--IFStart,is:[%val01%]=04--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]April[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]

[[---※5月だったらMayに変換※---]][[--IFStart,is:[%val01%]=05--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]May[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]

[[---※6月だったらJuneに変換※---]][[--IFStart,is:[%val01%]=06--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]June[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]

[[---※7月だったらJulyに変換※---]][[--IFStart,is:[%val01%]=07--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]July[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]

[[---※8月だったらAugustに変換※---]][[--IFStart,is:[%val01%]=08--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]August[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]

[[---※9月だったらSeptemberに変換※---]][[--IFStart,is:[%val01%]=09--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]September[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]

[[---※10月だったらOctoberに変換※---]][[--IFStart,is:[%val01%]=10--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]October[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]

[[---※11月だったらNovemberに変換※---]][[--IFStart,is:[%val01%]=11--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]November[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]

[[---※12月だったらDecemberに変換※---]][[--IFStart,is:[%val01%]=12--]][[--ThenStart--]]
[[--RecordStart,name:val01--]]December[[--RecordEnd--]]
[[--ThenEnd--]][[--IFEnd--]]
```


##HTML
```
<div>[[--Write,name:val01--]] [[--Write,name:val02--]]</div>
```

##プレビュー
```
December 19.2014
```
shipyard動かしてみた

coreos: 472.0.0 にて実施。

## 起動まで

```bash:pull
docker pull shipyard/rethinkdb
docker pull shipyard/shipyard
docker pull shipyard/shipyard-cli
```

```bash:起動
docker run -d -P --name rethinkdb shipyard/rethinkdb
docker run -d -p 8080:8080 --link rethinkdb:rethinkdb shipyard/shipyard
```

![スクリーンショット 2014-10-29 6.22.05.png](https://qiita-image-store.s3.amazonaws.com/0/25728/59d5f539-65f6-630c-a5a0-85cc272e542b.png)

![スクリーンショット 2014-10-29 6.23.46.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c346c39a-ed73-8c3b-c4c5-212142be1921.png)

## cli

shipyard-cliはただのbashです。

```bash:shipyard-cli起動
docker run -it -d --name cli shipyard/shipyard-cli
docker exec -it cli bash

shipyard cli> shipyard login
```

## extensionがあるのがpanamaxより良い所。

http://shipyard-project.com/docs/extension_images/

* Provisioning
* Stats
* Logging
* Backup
Haskell Platform 2014.2.0.0 install on OSX10.9.5



- download
	- [download page](https://www.haskell.org/platform/mac.html)

	- download, 解凍してダブルクリックでインストール完了

- cabalをPATHに通す
	- 以下の`~/.zprofile`部分は適当に書き換えること
	- `echo 'export PATH="$HOME/Library/Haskell/bin:$PATH"' >> ~/.zprofile`

	- [cabal user guide](http://www.haskell.org/cabal/users-guide/)

- まずは`cabal update`でパッケージリストを新しくする
- `cabal install cabal-install`は壊れることもあるので慎重にした方がいい

- cabalのプロジェクトを作成

```
$ mkdir try_haskell
$ cd try_haskell
$ cabal sandbox init # .cabal-sandboxを作成
$ cabal init　# try_haskell.cabalとSetup.hsを作成
```

- `cabal sandbox init`については以下を参照
	- <a href='http://maoe.hatenadiary.jp/entry/2013/08/16/224031'>2013年8月現在のHaskell開発環境 - maoeのブログ</a>


- あとは`cabal init`時に指定した`Main.hs`なりにコードを書く

## その他のキーワード

- ghci
- hoogle
- hayoo
githubからHerokuへのデプロイ

##手順
* Herokuのアカウント作る
* Heroku Toolbelt をインストールする
* ターミナルで以下コマンドを打ってログインする。当然ユーザ情報入れる。

```
$ heroku login
```

* 公開キー作る？とか言われなかったら以下をやる

```
$ heroku keys:add
```

* herokuではsqlite3が使えないからGemfileいじる。

```Gemfile
group :development do
  gem 'sqlite3'
end
group :production do
  gem 'pg'
  gem 'rails_12factor'
end
```
rails_12factorはrails4のため、pgはPostgreSQL


* ターミナルでgitリポジトリに移動し以下のコマンドでリモートブランチ作成（リリース箇所実態）

```
$ heroku create 
```

* 以下のコマンドでgem更新

```
$ bundle install
```

* 以下のコマンドでプッシュ

```
$ git push heroku master
```

 * 以下のコマンドでデプロイ完了

```
$ heroku run rake db:migrate
```

基本的にgoogle先生にでも聞いてくれ
##メモ
* githubのルートが実行パスな気がしたが、未検証。
* index.htmlやらindex.phpのファイルがコミットには必要
* herokuのリリースはgithubリポジトリのリモートブランチが動作するようなイメージだと思う。
* app/models下に自動生成されるやつの１行目にrequire"Date"書いてたので引っかかった。
* 公開キー作るか聞かれなかったのは多分githubで作ったから。
* 公式にはやれと言えど、効果があるかは知らない、無い気がする。

```
$ heroku ps:scale web=1
```

*CSS反映されんやん▶︎production.rbの訂正

```
config.serve_static_assets = true
```

とプリコンパイル

```
rake assets:precompile
```
How to use llvm-gcc-4.2 on Yosemite / El Capitan


llvm-gcc-4.2をYosemite (10.10) / El Capitan (10.11)でも使用する方法

## Upgrading from command line tools from Xcode 4.6 (or 4.5)
- If you have installed command line tools from Xcode 4.6 (or 4.5), you still have /usr/llvm-gcc-4.2 **even after your Macs are upgraded to Yosemite.**
- **Installing command line tools (by `xcode-select --install`, required) will install /usr/include**, which is used by /usr/bin/llvm-gcc-4.2. You can also have /usr/include/c++/4.2.1 used by /usr/bin/llvm-g++-4.2.
- If you want to keep some compatibility, you should not remove /usr/llvm-gcc-4.2.
  - The warning `couldn't understand kern.osversion '14.0.0'` can be ignored.

## New installation
Warn: I have not confirmed if this method works or not.

- Download `Command Line Tools (OS X Mountain Lion) for Xcode - April 2013` from https://developer.apple.com/downloads/ (You need an Apple ID).
- Open the dmg and extract Packages/DeveloperToolsCLI.pkg using [unpkg](http://www.timdoug.com/unpkg/).
- Copy usr/llvm-gcc-4.2 to /usr.
- Symlink /usr/llvm-gcc-4.2/bin/ to /usr/bin/.

## Anyway
There are yet no ways to have pure gcc-4.2, which has been removed in Xcode 4.3. The effort to maintain it in MacPorts and Homebrew has reached limit (because of upstream license GPLv3).

## Additional note
- clang++, which is the official compiler on Mavericks and Yosemite, has an option `-stdlib=libstdc++`.
  - Using this, you can link your C++ program against libstdc++ instead of libc++.
  - Of cource, `-stdlib=libstdc++` cannot be used with `-std=c++11` (on OSX) because this libstdc++ is quite old.
- Due to this feature, apple still keeps /usr/include/c++/4.2.1 even in their latest command line tools.
- When they drop this feature, this trick will stop to work.

## iostream

- Even this code results in compile error.

```
#include <iostream>
int main(int argc,char **argv){
  std::cout<<1<<std::endl;
}
```

- To avoid the error, use `llvm-g++-4.2 -mmacosx-version-min=10.7`.
- Acknowledgement: http://stackoverflow.com/a/12133504/2641271

## El Capitan

- Due to SIP, sadly you cannot have /usr/llvm-gcc-4.2 anymore. But `/Library/SystemMigration/History/Migration-*/QuarantineRoot/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2` (or elsewhere as long as inside directory structure is kept) is safe!
E Commerce プロダクトの API 比較


このへんの比較を随時更新中＆編集リクエスト歓迎

* Amazon
* Shopify
* Spree
* Magento

# Overview

## (format)
* Product itself, and wikipedia links
  * Product style
  * YYYY-MM-DD~ (Time of starting a product itself)
  * Official blog
* API document
  * API style
  * YYYY-MM-DD~ (Time of stating API, and source)
  * Official blog

## Amazon
* Product: http://www.amazon.com, [wikipedia:en](http://en.wikipedia.org/wiki/Amazon.com), [wikipedia:ja](http://ja.wikipedia.org/wiki/Amazon.com)
  * Product style : hosting
  * 1995-07-16 ~, from wikipedia
  * Official blog : (TODO)
* API: [Amazon Marketplace Web Service (Amazon MWS) Documentation](https://developer.amazonservices.com/gp/mws/docs.html), [(ja)](https://developer.amazonservices.jp/)
  * API style : "REST-like interface" accourding to [documentation](http://docs.developer.amazonservices.com/en_US/dev_guide/DG_IfNew.html)
  * 2009-01-01~ (?), [source(PDF)](https://images-na.ssl-images-amazon.com/images/G/01/mwsportal/doc/en_US/bde/MWSReportsApiReference._V356683238_.pdf)
  * Official blog : (TODO)  

## Shopify
* Product: http://www.shopify.com, [wikipedia:en](http://en.wikipedia.org/wiki/Shopify)
  * Product style : hosting
     * made by Ruby on Rails
  * 2006-06-02~, source:[Shopify is Live](http://www.shopify.com/blog/3026632-shopify-is-live)
  * Official blog : http://www.shopify.com/blog
* API: http://docs.shopify.com/api
  * API style: JSON and XML over HTTP
     * "Over the coming months, XML will slowly be deprecated."
  * Official blog : [Twitter](https://twitter.com/ShopifyDevs)

## Spree
* Product: http://spreecommerce.com/, [wikipedia:en](http://en.wikipedia.org/wiki/Spree_Commerce)
  * Product style: OSS
     * made by Ruby on Rails
  * 2007-??-??~, source:[wikipedia:en](http://en.wikipedia.org/wiki/Spree_Commerce)
  * Official blog
* API: http://guides.spreecommerce.com/api/
  * API style: RESTful 
  * ????-??-??~ (TODO), version 0.10.0~? source:[Release Notes](http://guides.spreecommerce.com/release_notes/spree_0_10_0.html)
  * Official blog

## Magento
* Product: http://magento.com, [wikipedia:en](http://en.wikipedia.org/wiki/Magento), wikipedia:ja(?)
  * Product style : Community Edition(OSS) and Enterprise Edition(hosting), 
     * made by PHP
  * 2008-03-31 ~, from wikipedia
* API : [SOAP](http://www.magentocommerce.com/api/soap/introduction.html), [REST](http://www.magentocommerce.com/api/rest/introduction.html)
  * API style : SOAP, REST XML/JSON
  * ????-??-??~ (TODO)
     * "Web services API is only available in Magento version 1.1.0 and later."
  * Official blog : http://magento.com/blog/developers (?)
連番静止画からタイムラプス動画を作る

個人的なメモです。
#コマンド
`source0000.jpg` から始まる連番の静止画から毎秒15フレームの動画ファイル `video.mp4` を作る。

```bash
$ ffmpeg -f image2 -r 15 -i source%04d.jpg -r 15 -an -vcodec libx264 -pix_fmt yuv420p video.mp4
```
`source0000.jpg` から `source9999.jpg` までの静止画10000枚から毎秒15フレームの動画を作成。長さは(10000/15)秒＝11分6秒2/3。
今回は視野固定カメラの静止画像から作成した。静止画は一枚40KB程度、動画は220MB程度（50%程度の圧縮ですね）。
#ffmpeg オプション解説
##`-f image2`
入力が jpeg 画像であることを明示。
##`-r 15`（一つ目）
**入力** 静止画の更新を毎秒15フレームに指定。ここの数字を変更すればタイムラプス動画のフレームレートを変更できる。
##`-i source%04d.jpg`
入力画像のファイル名形式を指定。 `%04d` は0埋めされた4桁数字（0000〜9999）の意味。
##`-r 15`（二つ目）
**出力** 動画を毎秒15フレームに指定。入力フレーム数の整数倍であるべき（だと思う）。
##`-an`
オーディオ無し。
##`-vcodec libx264`
mp4 フォーマットでエンコーダを H.264 に指定。
##`-pix_fmt yuv420p`
画像形式を YUV 形式で YUV420 に指定。jpeg をそのまま動画にすると YUV422 になり、Mac の QuickTime で再生できなかった。一般的な変換である YUV420 に変換した。
`-vf format=yuv420p` という書式もある。どちらが好ましいのか分からなかった。
（2019/1/10追記）が、[Encode/H.264 – FFmpeg](https://trac.ffmpeg.org/wiki/Encode/H.264#FAQ) に `-pix_fmt yuv420p` がエイリアスだ、と書いてあるので `-vf format=yuv420p` がいちおう正式なんでしょうね。とはいえ `-vf` もFFmpegのドキュメントに [This is an alias for `-filter:v`](https://ffmpeg.org/ffmpeg.html#Video-Options) と書いてあるので…まあ書きやすくて覚えやすいほうがいいよな。`-pix_fmt yuv420p` 使おう、うん。
##`video.mp4`
出力ファイル名。 mp4 フォーマット。
#ffmpeg ログ出力の一部
今回使った静止画のサイズは 720x480 。自動認識している。
使用した ffmpeg は Homebrew でインストールしたもの。

```
ffmpeg version 2.4.2 Copyright (c) 2000-2014 the FFmpeg developers
  built on Oct 11 2014 01:46:03 with Apple LLVM version 6.0 (clang-600.0.51) (based on LLVM 3.5svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.4.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-librtmp --enable-openssl
  libavutil      54.  7.100 / 54.  7.100
  libavcodec     56.  1.100 / 56.  1.100
  libavformat    56.  4.101 / 56.  4.101
  libavdevice    56.  0.100 / 56.  0.100
  libavfilter     5.  1.100 /  5.  1.100
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  0.100 /  3.  0.100
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  0.100 / 53.  0.100
Input #0, image2, from 'source%04d.jpg':
  Duration: 00:11:06.67, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj422p(pc, bt470bg), 720x480, 15 fps, 15 tbr, 15 tbn, 15 tbc
　　：（中略）
  Metadata:
    encoder         : Lavf56.4.101
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 720x480, q=-1--1, 15 fps, 15360 tbn, 15 tbc
    Metadata:
      encoder         : Lavc56.1.100 libx264
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
　　：（後略）
```
#注意点
- 必ず0が連なる番号のファイル名（`source0000.jpg`）から始まる必要がある。
- ファイルサイズが0バイトのファイルがあるとその直前のファイルまでで動画作成が正常終了する。
- ファイル番号抜けがあるとその直前のファイルまでで動画作成がエラー終了する。
#参考

- [Thompson's Technological Insight: FFMPEG - Creating timelapse with FFMPEG with JPEG](http://thompsonng.blogspot.jp/2013/10/ffmpeg-creating-timelapse-with-ffmpeg.html)
- [最新FFmpeg - MobileHackerz Knowledgebase Wiki](http://mobilehackerz.jp/archive/wiki/index.php?%BA%C7%BF%B7FFmpeg)
mongodbインストール(mac編)

websocket入門を見ていたら、mongodbを使えと言われたので
mongodbをmacにインストールします。

これを参考にしました。
http://nigohiroki.hatenablog.com/entry/2013/01/05/234631

brew install mongodb

すると最後に
<pre>
To have launchd start mongodb at login:
    ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
Then to load mongodb now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
Or, if you don't want/need launchctl, you can just run:
    mongod --config /usr/local/etc/mongod.conf
==> Summary
</pre>
と出てくるので、指示通りに

<pre>
ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
</pre>

を実行する。
<pre>
mongo
</pre>
でmongoにアクセス出来る。

んで、今回の主目的はwebsocketってことで
PC間の通信がしたいので、IPアドレスをデフォルトから変更します。
設定ファイルは
/usr/local/etc/mongod.conf
bind_ip = ローカルip
に設定します

終わり。
OpenStack ユーザ会(第19回)


# 概要
OpenStack ユーザ会に参加してきました。
メモ用途なのであしからず。

# OpenStack 2014.2 (Juno Release)

* Juno の概要について
	* slideshare が用意されていました

	* http://www.slideshare.net/yosshy/

# Nova API 過去/現在/未来

## 一貫性のない API
	
* URL, パラメーターの用語がバラバラ

	* server/instance や project/tenant など
* CamelCase / snake_case 混在

## リクエストのチェック不足
* チェック漏れ、内部エラー
* 商用運用に影響が出ている
	* 調査やクライアントへの説明責任

## Nova V3 API について
* 一貫性がない V2 を修正
* 一貫性修正のために後方互換性がない
	* やっぱり消そうよ、議論勃発

## Nova V2.1 API の提案
* V3 APIコードの上に V2 API変換を実装
	* しかし、否認...
	* V3 がベスト前提のアイデア
	* 現状確信が持てないし...
	* API Working Group 発足(一貫性について議論)

## Nova API の現在
* 新 Nova V2.1 API(開発中)

## JSON-Schema
* 入力許可データを定義、それに基づいてチェック
* チェック実装漏れを防ぐ

## Nova API の未来
* Microversioning
	* 非互換 API 実装のアイデア
	* クライアントからの要求で変更可能
	* 少しずつ移行を目指す

# Neutron Updates in Juno

## Distributed Virtual Router (DVR)

* 仮想ルータをまたぐトラフィックは必ず l3-agent が動作するノードを経由
* Compute Node で動作する分散ルータを OVS ベースで実装

## L3-agent HA support
* Master と Slave の仮想ルータが異なる l3-agent に配置され HA を実現

## IPv6 full support
* SLAAC, DHCPv6 stateful, DHCPv6 stateless のアドレス割り当てモードをフルサポート

* Neutron が RA/DHCPv6 を提供するモードとインフラ側が提供するモードを選択可能

## Security Group Improvement
* neutron plugin agent と neutron server 間の RPC メッセージサイズの削減
* ipset の採用による iptables 処理の効率化
	* ipset は大量のIPアドレスを効率よく管理できる仕組み
	* Security Group の Remote Group (Source Group) を使って多数のインスタンスを起動している場合に効く

## DB migration update
* DB migration
	* DB のスキーマ変更があった場合に、それを DB に反映させるための仕組み

* Juno Changes
	* Unconditional DB migration
	* 初期デプロイ時の DB migration が必須に
	* Icehouse 以前からのアップデート時には準備が必要

## Migration from nova-network
* Juno では Neutron をデフォルトにするための準備
* nova-network と neutron の2つのネットワーク機能があるが将来的には neutron に統合

## NOT part of Juno
* Network Services 関連はほとんど Juno に入らず

## まとめ
* 新しく使う上では Juno リリースをおすすめ
* DVR, L3-HA は新機能であり、より多くのフィードバックを求めている
* Advanced Network Service などは Juno では大きな変化はなかった

# At Rakuten, the Rakuten OpenStack Platform and Beyond
## 楽天で採用した理由
* REST API
* インフラの抽象化したい
* OpenStack 以前はフルスクラッチ
	* OpenStack に合わせたかった

## 構成
* 全ノード VMware
* 1DB / 1server
* Glance = ZFS
* Auth = LDAP
* LB = A10
* 全部で 20台程度

## いろんなお話
* オーバーコミット率高い
* Tenant: 600 , User: 2000
CentOSにclamdを入れてスキャンをしました

clamavをいれるとスキャンができるらしいので試してみました。環境はCentOSです。

# インストール
```bash:install
yum -y install clamd
```

# 起動
起動しようとしたらerrorがでました。

```bash:start
sudo /etc/init.d/clamd restart
Starting Clam AntiVirus Daemon: ERROR: Can't open /var/log/clamav/clamd.log in append mode (check permissions!).
ERROR: Can't initialize the internal logger
                                                           [FAILED]
```
どうやらclamd.confのUserが書いてあるとsudoで起動できないみたいです。

```bash:clamd.confを編集
sudo vi /etc/clamd.conf
#User clam
```
User clamの行にコメントをつけました。

```bash:start
sudo /etc/init.d/clamd start
```
起動しました。

# スキャン開始

```
sudo clamscan --infected --remove --recursive
LibClamAV Warning: **************************************************
LibClamAV Warning: ***  The virus database is older than 7 days!  ***
LibClamAV Warning: ***   Please update it as soon as possible.    ***
LibClamAV Warning: **************************************************
----------- SCAN SUMMARY -----------
Known viruses: 3418320
Engine version: 0.98.4
Scanned directories: 300
Scanned files: 2895
Infected files: 0
Data scanned: 110.00 MB
Data read: 309.69 MB (ratio 0.36:1)
Time: 23.357 sec (0 m 23 s) 
```
スキャンできました(☝ ՞ਊ ՞)
もしかしたらMac環境が少しだけ快適になるかもしれないツールまとめ


普段お世話になっているツールなどを、忘れないようにまとめてみました。
基本Macです。
※お金がかかるものもあります。

## aText
http://www.trankynam.com/atext/
テキスト入力支援系アプリ、忘れがちなコマンドとかのキーフレーズを登録してます。
設定したキーフレーズを他のマシンとDropboxで共有することも出来ます。

## SizeUp
http://www.irradiatedsoftware.com/sizeup/
ウィンドウサイズ調節ツール。
ショートカットキー一発ででウィンドウを自在に動かせます。


## Gyazo
https://gyazo.com/ja

キャプチャした画像をそのままアップロードしてくれます。
今見ている画面とかをすぐさま共有したい時に便利です。

## LICEcap
http://www.cockos.com/licecap/
デスクトップの操作をキャプチャして、さくっとアニメGIFにしてくれます。

## CheatSheet
http://www.cheatsheetapp.com/CheatSheet/
⌘キー長押しで大概のアプリのショートカットが表示されます。
一覧をクリックすることでショートカットを実行することもできます。

## BitCasa
https://www.bitcasa.com/personal
オンラインストレージサービスです。
ファイルをローカルに置かないので、ローカルの容量を圧迫しません。
僕はプレミアムプランを使ってます。

## Kobito
http://kobito.qiita.com/ja
メモを取る時やスニペットの記録などがMarkdownで記述出来て便利です。

## GistBox
http://www.gistboxapp.com/
gistをかっこよく管理できます。

## Trello
https://trello.com/
かんばん方式のタスク管理ツールです。シンプルで使いやすいです。
細かいタスクとかを管理してます。

## iKnow! ポップアップ辞書
https://chrome.google.com/webstore/detail/iknow-%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E8%BE%9E%E6%9B%B8/omfegkgipldobddijcpagdabgifghdgb?hl=ja
英語が読めない人のためのChrome Extensionsです。
軽い気がします。

## LaterList
https://chrome.google.com/webstore/detail/laterlist/ocaejnkpadbhiohieanbocfdpdhfhknd?hl=en-GB
気になったウェブサイトを後で読むためのChrome Extensionsです。
二度と読まないこともあります。

## OneTab
https://chrome.google.com/webstore/detail/onetab/chphlpgkkbolifaimnlloiipkdnihall
ついつい開き過ぎてしまうタブを、ひとまとめにしてくれるChrome Extensionsです。
気分を一新したい時に便利です。
ansibleをlocal modeで実行


## 目的
localhostにインベントリファイルなしにansibleでプロビジョニングする。

**20150905追記) ansible のバージョンアップの影響で以下の方法では実行出来なくなってしまいました。
localhost に対して実行する場合もインベントリファイルを用意してください m(_ _)m**

以下、古い内容ですm(_ _)m ↓↓

## playbookの用意
```connection: local``` の設定を利用する

```yaml:php.yaml
---
- host: localhost
  connection: local
  tasks:
    - name: composerインストール
      shell: curl -sS https://getcomposer.org/installer | php
```

## 実行
```
$ ansible-playbook php.yaml
```

## 注意事項?
- ansibleコマンドでは、パースエラーが起きて実行できなかった。。
ヒレガス本の例題を Swift で書いてみる(1)


Swiftの勉強に、ヒレガス本こと「Max OS X Cocoa プログラミング」の例題を Swift で書いてみることにした。
手元には2009年に出た第３版しかなく、内容がちと古いかもしれないがしかたない。

とりあえず手始めに、第２章「さあ、始めましょう」で取り上げられている「乱数生成アプリケーション」を Swift で書いてみる。環境は Yosemite + XCode 6.1。


ソース：[https://github.com/hugo-sb/Hillegass-ch2](https://github.com/hugo-sb/Hillegass-ch2)

![スクリーンショット 2014-10-27 23.58.31.png](https://qiita-image-store.s3.amazonaws.com/0/31482/02fb13f0-b39d-a3c5-037c-7abbb965b934.png "スクリーンショット 2014-10-27 23.58.31.png")

書籍では Foo というクラスを作成し、そこにコードを書いていくという形だったが、今回は XCode が自動生成してくれた ViewController クラスにコードを追加していくことした。

プログラム自体は最初のプログラムということで単純なものだが、`srandom()` や `random()` といった C の標準関数が Swift から呼べるのか心配だった。でも実際に書いてみたらあっさり呼べたのでいささか拍子抜け（`Cocoa` をインポートしてる中で読み込まれているのだろうか？）。ただ、`time()` が引数に `time_t*` を渡すのだが、これの書き方が判らずネットを調べることになった。

[Using Swift with Cocoa and Objective-C: Interacting with C APIs](https://developer.apple.com/library/ios/documentation/swift/conceptual/buildingcocoaapps/InteractingWithCAPIs.html)

上記リンクをみると、C言語同様、変数に「&」をつけてやればアドレスを渡せるようだ。

ちなみに乱数の取得は、`random()` ではなく、`arc4random_uniform()` を使うのがイマドキらしいので、そちらを利用した版も追加してみた（といっても呼び出してる関数が違うだけだが）。


```swift:ViewController.swift
class ViewController: NSViewController {

    @IBOutlet weak var textField: NSTextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        textField.stringValue = ""
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }

    @IBAction func seed(sender: AnyObject) {
        var tm : time_t = 0
        srandom(UInt32(time(&tm)))
        textField.stringValue = "Generator seeded"
    }
    
    @IBAction func generate(sender: AnyObject) {
        let generated = (random() % 100) + 1
        NSLog("generated = \(generated)")
        textField.integerValue = generated
    }
    
    @IBAction func generate2(sender: AnyObject) {
        let generated = arc4random_uniform(100) + 1
        NSLog("generated = \(generated)")
        textField.integerValue = Int(generated)
    }
}
```
Mahoutで使える学習アルゴリズム (2)

[page1]:http://qiita.com/jjking/items/155c08f59f2d234f145f
[ref1]:https://mahout.apache.org/users/basics/algorithms.html
[ref2]:http://tjo.hatenablog.com/entry/2014/01/06/190456
Mahoutで使える学習と分析のアルゴリズムは [MahoutのList of Algorithmのページ][ref1] によると以下のように分類されています。前回の記事 [Mahoutで使える学習アルゴリズム(1)][page1] では上2つの概要を書きましたので、今回は残りについて書きたいと思います。

* 協調フィルタリング (Collaborative Filtering)
* 分類 (Classification)
* クラスタリング (Clustering)
* 行列の次元削減と分解 (Dimensionality Reduction)
* トピックモデル(Topic Models)
* その他 (Miscellaneous)

分類について説明だけ読んでもイメージがよくわからんと思いつついろいろ探していたところ[銀座で働くData Scientistのブログ][ref2]さんの記事を見つけました。Mahoutの分類のアルゴリズムとは若干異なるかもしれませんが、以下の分類方法について、平面上のデータに対して適用した時の比較が図示されていてとてもイメージがつかみやすいです。数式は難しくて理解できなくても「この分類方法にはこういう特性がある」というのがなんとなく直感でつかめるのでおすすめです。

* 決定木
* ロジスティック回帰
* SVM（ガウシアンカーネル)
* ニューラルネットワーク
* ランダムフォレスト

ちょっと横道にそれましたが本題に戻りましょう。

### クラスタリング (Clustering)
|種別|内容|
|:--|:--|
|k-Means Clustering|k平均法によるクラスタリング。単純なので広く使われている。初期クラスタをもとに順次クラスタ中心を更新し結果を求める。結果は初期クラスタの取り方に大きく依存。|
|Canopy Clustering|教師無しのクラスタリング手法。k-Meansなどの前処理として使うことで、クラスタリングの高速化をすることができるらしい。|
|Fuzzy k-Means|k-Meansの亜種。クラスタの境界付近の曖昧なデータはどちらにも所属するデータとしてクラスタリングする。|
|Streaming k-Means|k平均法の計算の1手法。入力データを保持せずに計算するため計算のメモリの使用量がおさえられるという特徴。|
|Spectral Clustering|グラフのスペクトルを使ったクラスタリング手法。|

### 行列の次元削減と分解 (Dimensionality Reduction)
|種別|内容|
|:--|:--|
|Singular Value Decomposition|行列の特異値分解。|
|Lanczos Algorithm|ランチョス法。対象行列を三重対角化する。|
|Stochastic SVD|計算量をおさえた方法をつかい行列の特異値分解をする。(で合ってる?)|
|Principal Component Analysis (via Stochastic SVD)|主成分分析|

### トピックモデル(Topic Models)
|種別|内容|
|:--|:--|
|Latent Dirichlet Allocation (LDA)|１つの文章が複数のトピックからなることを仮定した言語モデル。自然言語処理で使われる代表的なトピックモデル。|

### その他
|種別|内容|
|:--|:--|
|Frequent Pattern Mining|頻出パターンマイニング。ある制約を満たすパターンでデータベース中にあるものをすべて列挙する。|
|RowSimilarityJob|共起の計算をMap Reduceで効率的に実施するための手法。|
|ConcatMatrices|2つの行列またはベクトルを1つの行列にまとめる|
|Collocations|テキスト中の共起するトークンを見つける|

### おわりに
ここ数日の間にMahout本家のアルゴリズム一覧のページが先行して(?)バージョン1.0の内容になっています。搭載されているアルゴリズムもだいぶ変わってるようです。もうすぐ1.0がリリースされるのかも。このページも書き直さなくては...

### 参考文献・関連文章
* [銀座で働くData Scientistのブログ][ref2]
* [Mahoutで使える学習アルゴリズム (1)][page1]
[android] eclipseで"Unsupported major.minor version 51.0"と怒られた時の対処法

## 対処方法
1. 環境設定 > Java > Compiler
2. [Compiler compliance level :] で設定値よりも新しいバージョンを選ぶ
3. eclipseを再起動
4. 完了

## 原因
古いバージョンのコンパイラでコンパイルしようとしていることが原因。
そのため、新しいバージョンに設定値を変えることで問題が解決する。

## 遭遇した状況
android L(api level 21)のSDKを入れて怒らるようになり、設定をみたらコンパイラのバージョンが1.4であった。
これを1.7にしたところ改善することができた。
Edison のファームウェアアップデート

Intel Edison に触れる。
なにはともあれファームウェアの更新。

# 前準備、必要なモノ
## Intel Edison Driver
これを入れた後、J16 を PC の USB端子に接続すると、Edison のフラッシュの一部
がドライブとして PC にマウントされるようになる。

## FTDI 232R ドライバー
J3 側のシリアルポートと PC を繋ぐ際に必要。Windows 標準で入っているので特に用意しなくても良いかも
## シリアル通信できるターミナルソフト
TeraTerm とか良く使うよね

# ダウンロードする
https://communities.intel.com/docs/DOC-23242
上記ページからファームウェアをダウンロードする。
たぶん 'Edison Yocto complete image' とか書いてあるはず

# PCからファームウェアを転送する
J16 を PC に接続して Edison をドライブとして PC に認識させる。
このとき現れた Edison ドライブにファイルが入っていたら削除。
ダウンロードしたファームウェアを解凍して、ファイル群を Edison ドライブにドラッグ＆ドロップ等で適当にコピーする。
以上でコピーはおしまい。
MAC を使用しているとここでひと手順あるらしい。必要なら調べてね。

# ファームウェアを書き込む
転送したファームを Edison に書き込むには、シリアルコンソールでログインしてリブート＆アップデートを実行する必要があります。
J3 の方を PC に接続し、シリアルを有効にします。J16 になにも接続しないと電源が供給されませんので、適当に USB充電器などから電力を供給しておきます。
PC のデバイスマネージャで Edison が接続されているシリアルポート（COM4 とか) を調べ、TeraTerm 等のシリアルコンソールから 115200bps で接続します。
空RETURNキーを打つとログインコンソールが見えると思いますので root と打ってログインします。

ログインしたら “reboot ota” と打ちリブートします。
リブート途中でファームウェアのアップデートが行われていくのが見えます。
無事再起動してログインコンソールが表示されたら完了。

`cat /etc/version`

念のためバージョンを確認しておきましょう。

# 最新版だと？
`edison-rel1-maint-weekly_build_16_2014-10-14_14-56-19`
この版だと configure_edison コマンドの `--update` で最新ファームウェアにアップデートできるように見えますな。
試していないのでメモ書きまでに。