OmniAICreator/Qiita-1.07M huggingface dataset:
PhalconでDBの設定ファイルだけ分離したい！

メモレベルで。

# どうやって？
プロジェクト構成はsimple。

```php:config.php
<?php
// app/config/config.php

return new \Phalcon\Config(array(
    'application' => array(
        // ...
    ),
));
```

```php:database.php
<?php
// app/config/database.php

return new \Phalcon\Config(array(
    'database' => array(
        // ...
    ),
));
```

```php:index.php
<?php
// public/index.php

$config = include __DIR__ . '/../app/config/config.php';
$config->merge(include __DIR__ . '/../app/config/database.php');

// ローダとかDIとか
```

と、ここまで書いて思ったけど、別に$configにマージしなくてもいいですね。

```php:index.php
<?php
// public/index.php

$config    = include __DIR__ . '/../app/config/config.php';
$db_config = include __DIR__ . '/../app/config/database.php';

// ローダとかDIとか
```

とかにしておいて、DbAdapterに与えるホスト名とかユーザ名とかを`$db_config`から取得してやればいいだけですよね。。。

# 追記
色んなライブラリのソースコードを読んでると、`/app/config`以下のファイルはこういう名前だ、みたいな決め打ちを結構見かけるので、DBの設定をこんな感じで分離するとうまく動かないかも。
なので、

```php:config.php
<?php
return new \Phalcon\Config(array(
    'application' => array(
        // ...
    ),
    'database' => include dirname(__FILE__) . '/database.php',
));
```

としておいて、

```php:database.php
<?php
// app/config/database.php

return array(
        // ...
);
```

`merge()`しても別によさげ。まあ敢えて`\Phalcon\Config`にしてやる必要はないかなー、って感じで。
【raspberry-pi】nginx + passenger + node.js 環境作成メモ (1)

![raspi_rainbow.jpg](https://qiita-image-store.s3.amazonaws.com/0/32297/6504ffa7-8375-2221-2db2-76830e3777fb.jpeg)
## 環境

* 256MB版 Raspberry Pi (raspbian)
* nginx/1.4.4 + Phusion Passenger 4.0.37
* node.js v0.10.21

## swapを増やす

* 1G程度ないとpassengerのnginxモジュールビルドで失敗する。

```shell-session
$ sudoedit /etc/dphys-swapfile
CONF_SWAPSIZE=1000
$ sudo service dphys-swapfile stop
$ sudo service dphys-swapfile start
$ free -h
```

## rbenv インストール

### githubから取ってくる

```shell-session
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
```

### .bashrc追記

```bash:.bashrc
#rbenv
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"
```

### 確認

```shell-session
$ source .bashrc
$ rbenv -v
rbenv 0.4.0-89-g14bc162
```

## ruby インストール

### インストールできるバージョンを表示

```shell-session
$ rbenv install -l
```

### インストール（今回は2.0.0にした）

```shell-session
$ rbenv install -v 2.0.0-p353
$ rbenv rehash
```

### 使用するrubyを設定、確認

```shell-session
$ rbenv global 2.0.0-p353
$ rbenv global
2.0.0-p353
$ ruby -v
ruby 2.0.0p353 (2013-11-22 revision 43784) [armv6l-linux-eabihf]
```

## passenger インストール

```shell-session
$ gem install passenger
```

## passenger-nginx-module インストール
* nginxもここでインストールした
* 途中の選択は「node.js」を選んだ
* インストール先は /opt/nginx のまま

```shell-session
$ export ORG_PATH="$PATH"
$ sudo -s -E
# export PATH="$ORG_PATH"
# passenger-install-nginx-module
```

## nginxの起動スクリプト
  * [debianadmin](http://www.debianadmin.com/images/nginx)から取ってきて /etc/init.d に置く
  * 修正（/usr/local/nginx になってるところを /opt/nginx に置換）

## nginxの自動起動

```shell-session
$ sudo update-rc.d nginx defaults
$ sudo sysv-rc-conf -list | grep nginx
nginx        0:off      1:off   2:on    3:on    4:on    5:on    6:off
```

### 確認

```shell-session
$ sudo service nginx start
$ sudo service nginx stop
```

## 続き

* [【raspberry-pi】nginx + passenger + node.js 環境作成メモ (2)](http://qiita.com/daisuke0604/items/7d7b3fb2d5e7b4af821e)

## 参考

* [Phusion Passenger: Node.js tutorial · phusion/passenger Wiki](https://github.com/phusion/passenger/wiki/Phusion-Passenger%3A-Node.js-tutorial#wiki-deploying_standalone)
(メモ)Apacheアクセスログからリクエスト回数が多いURLを集計するコマンド

アクセスログが下記のフォーマットだとすると(たぶんApacheのデフォルト設定だとこれ)、

```:access_log-YYYYMMDD
XXX.XXX.XXX.XXX - - [09/Feb/2014:14:47:20 +0000] "GET /test.php?txt=hoge HTTP/1.1" 200 4 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit/537.71 (KHTML, like Gecko) Version/7.0 Safari/537.71"
```

awkとsortとuniqコマンドで、次のように集計できる。

```
$ cat access_log-YYYYMMDD | awk -F\" '{print $2}' | awk -F' ' '{print $2}' | sort | uniq -c | sort -n -r
```

例えば結果はこんな感じ。

```
    374 /hoge.php
    265 /img/hoge.png
    216 /css/hoge.css
     23 /hoge.php?var=1
    ～以下つづく～
```

**このコマンドの説明:**

1. まず awk で、 " で区切られた文字列の 2 番目を切り出す
1. さらに awk で、スペースで区切られた文字列の 2 番目を切り出す
1. ソートして重複行を削除。この際、uniq の -c オプションで重複した行数を出力
1. 重複した行数(=アクセスカウント数)を降順に並びかえる｡このとき -n を指定するのがポイント
SlickでのSession周り

こんなのがあった場合、

```scala:Model.scala
import play.api.db.DB
import play.api.Play.current
import scala.slick.driver.MySQLDriver.simple._
import scala.slick.jdbc._
import scala.language.postfixOps

case class Model(id:Int, name:String)

object Models extends Table[Model]("models") {

  def id      = column[Int]("id", O.PrimaryKey, O.AutoInc)
  def name = column[String]("name", O.NotNull, O DBType "varchar(100)")
  def * = id ~ name <> (Model.apply _, Model.unapply _)
  
  /** DBコネクション */
  val database = Database.forDataSource(DB.getDataSource())
 
  /** 登録 */
  def create(e: Model) = database.withTransaction { implicit session: Session =>
    Models.insert(e)
  }
}
```

Database.threadLocalSessionをimportするとimplicit ....がいらないらしい

```scala:Model.scala
import play.api.db.DB
import play.api.Play.current
import scala.slick.driver.MySQLDriver.simple._
import scala.slick.jdbc._
import Database.threadLocalSession
import scala.language.postfixOps

case class Model(id:Int, name:String)

object Models extends Table[Model]("models") {

  def id      = column[Int]("id", O.PrimaryKey, O.AutoInc)
  def name = column[String]("name", O.NotNull, O DBType "varchar(100)")
  def * = id ~ name <> (Model.apply _, Model.unapply _)
  
  /** DBコネクション */
  val database = Database.forDataSource(DB.getDataSource())
 
  /** 登録 */
  def create(e: Model) = database.withTransaction {
    Models.insert(e)
  }
}
```
.DS_Storeファイルを一気に消す


方法はいろいろありますが一番簡単なのは`find`コマンドを使用することではないでしょうか。

```Bash
$ find . -name .DS_Store -delete
```

ポイントは`-delete`オプションです。検索結果のファイルを削除してくれます。
初めてのXcodeプラグイン導入手順


**「ヘッダーにコメントを書こう！」**
と思い立ち、まずはスニペットで挑戦するも
ショートカットで「///」 または 「/**」とする方法が分からず。(できないのかな？)
まぁ、「commandmethod」とかでもいいんだけど、面倒。。
ちなみにスニペットはこれ。

```
/**
 * <#summary#>
 * @param <#name#> <#how you gonna get it?#>
 * @param <#name#> <#really, there's more?#>
 * @return <#name#> <#what do you want!#>
 */
```


この際だから、今まで何となく敬遠してたXcodeのプラグインを使ってみよう！と思ったわけです。

まずは、プラグインインストール用のディレクトリ作成

```プラグインがインストールされるところ
$ mkdir -p ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins
```

で、あとはプラグインをインストールするだけなのですが、
まずはどんなプラグインがあるのか見てみようと。


##__Alcatraz__(パッケージマネージャー)
これで、どんなプラグインがあるのか見ることができます。
http://mneorr.github.io/Alcatraz/

```
$ git clone https://github.com/mneorr/Alcatraz.git
$ cd Alcatraz
$ xcodebuild -project Alcatraz.xcodeproj build
```
ソースをcloneして、ビルドするだけでプラグインが追加されるっていうのは簡単でいいですねー。

で、Xcodeを再起動してみると・・・
おー、AFNetworking Templatesとか魅力的なやつがありますね。
![Alcatraz](http://farm8.staticflickr.com/7352/12743170984_b648a581a6_z.jpg)



##__VVDocumenter-Xcode__
色々と試したいところではありますが、まずは当初の目的のヘッダーコメントがかけるやつ。
https://github.com/onevcat/VVDocumenter-Xcode

![VVDocumenter](https://raw.github.com/onevcat/VVDocumenter-Xcode/master/ScreenShot.gif)

XcodeのWindowメニューを開くと、インストールされていることが分かります。
設定はデフォルトだとこんな感じです。僕はTrigger Inputを「/**」にしました。
![VVDocumenter](http://farm6.staticflickr.com/5474/12743177414_ff49a43ab1_z.jpg)

これで、実際にヘッダーにコメントをいれてみると・・・
![VVDocumenter](http://farm4.staticflickr.com/3696/12743178304_20f4af941d_z.jpg)

できた！これで当初の目的は達成！

他にも、以下のプラグインを入れてみました。
###KSImageNamed-Xcode
https://github.com/ksuther/KSImageNamed-Xcode
[UIImage imageNamed:]を補完してくれる
![KSImageNamed-Xcode](https://raw.github.com/ksuther/KSImageNamed-Xcode/master/screenshot.gif)

###Lin-Xcode5
https://github.com/questbeat/Lin-Xcode5
Localizable.stringsを補完してくれる

![Lin-Xcode5](https://github-camo.global.ssl.fastly.net/7a9073260b8b690423ad5f78e425756bb27afeb5/687474703a2f2f717565737462652e61742f6c696e2f696d672f73637265656e73686f74732f30312e706e67)

###cocoapods-xcode-plugin__
https://github.com/kattrali/cocoapods-xcode-plugin
CocoaPodを管理できるやつ

![cocoapods-xcode-plugin__](https://github.com/kattrali/cocoadocs-xcode-plugin/raw/master/menu.png)
Qiita Cardが欲しい

感覚的に300文字未満の投稿とQiitaのデザインが合っていない。

この手の文字数の投稿は特定目的でのコマンドの使い方などが多く有用ではあるものの、メニュー的なデザインに負けてしまう。

さらにストック一覧でも内容は短いのにページ遷移しないと内容が見られない。

Twitterのように300文字までのミニ投稿専用のインターフェースを作り、カードや単語帳を投稿・コレクションするような仕組みがあっても良いと思う。

その際、一覧ではタイトルではなく内容がずらっと一覧されると良い。

また短い投稿を投稿者や閲覧者がまとめて再構成できると面白い。
multipart/form-dataの扱いにPoco::Net::HTMLFormを使用してはいけない

Poco 1.3.6あたりのお話。たぶん前後のバージョンでも同じ。

multipart/form-dataの扱いにPoco::Net::HTMLFormを使うのを避け、Poco::Net::MultipartReaderを使おう。

2つの理由
================
１つめの理由。

POSTのパラメータは自身のNameValueCollectionに格納し、アップロードファイルはPoco::Net::PartHandlerのhandlePartを呼び出し処理させる。アップロードファイルであるかどうかはContent-Dispositionにfilenameが存在するかどうかで判断しているためテスト時にリクエスト側で柔軟な対応がしにくい。

2つめの理由。

どうもmultipart/form-dataの2つめの以降のパートを読み飛ばす時がある。
Gitで特定のローカルブランチをリモートブランチの変更に追従させるワンライナー

例えばあるブランチをレビューした後，更に他の人がそのブランチに変更を加えたとき&既にfetchしているとき．
`git reset --hard @{u}`

(もちろんfetchもしたいときは`git pull --rebase`すればok :ok_woman: )

## `@{u}`?
`<branch name>@{upstream}`はそのブランチに対応したupstreamのブランチ名を取得する．
ここで`branch name`を省略すると現在のブランチを表し，また`@{upstream}`は`@{u}`と省略できる．



## 参考
`git help rev-parse`
IDE別PHPのnamespace補完

# 前提

**楽したい。**

Eclipseを使っていて、camelCaseで書いた変数やメソッドは大文字を入力すると補完してくれる。
つまり、

```php
function getHogeA(){}
function getHogeB(){}
function getHogeC(){}
```
というメソッド群があった場合に、

> gH

とすることで、getHogeA()～getHogeC()までが候補に表示されます。

![qiita01.png](https://qiita-image-store.s3.amazonaws.com/0/37007/a576f667-49e5-2068-0e52-dab06ff635be.png)

当たり前ですが、
> gHA

とすることで、getHogeA()が補完されます。

似たような名前のメソッドが多い場合には重宝します。
似たような名前のメソッドが多いってことは設計ミスじゃないのか、ってことについては置いておきます。今回はnamespaceの話で、namespaceが途中まで似るのは当たり前に起こることなので。

# 本題

これと同じようなことをnamespaceでもしたい、という話です。

例えば、以下のnamespaceを使いたい場合に

```php
use Symfony\Bundle\FrameworkBundle\Controller;
```
> use SBFC

で補完して欲しい、という話です。


実際にはどうなるのか。

## Eclipse4.3

* 無理でした。
* `SBFC`では何も候補が出ません。
* `Sy`と入力すると、そのnamespaceから始まる一覧が候補に出ます。

![qiita02.png](https://qiita-image-store.s3.amazonaws.com/0/37007/ece8c7dd-902f-3938-10d5-27cc68bc8b59.png)

## NetBeans8 beta

* 無理でした
* `SBFC`では何も候補が出ません。
* Eclipseとは違い、`Sy`と入力すると、そのnamespaceから始まるセパレータ単位と、
そのnamepsaceを最後にもつ一覧が表示されます。
* これだと頭っから入力する必要がないので、楽したいという要望はある程度満たせそうです。

![qiita03.png](https://qiita-image-store.s3.amazonaws.com/0/37007/81f26985-0d30-9063-d222-c7bac5ba9d50.png)
![qiita03-2.png](https://qiita-image-store.s3.amazonaws.com/0/37007/18a0855d-d5ba-d5f5-939b-de62f97d188d.png)

# まとめ

この設定をすれば、もしくはこのエディタならば、等ご存知の方ががいましたら教えてください。

最近流行りのPHPStormだとどうなるんだろう。
スプレッドシートの特定カラムの値を元に行色付けして見やすくする

Googleスプレッドシートで表が横にでかくなってくると纏まり毎に横線を引いたりカレントカーソル行をハイライトしたくなってくる。でもカレント行をハイライトするのは難しそうなので行をスプライトに色付けすることにしてみた。

# スクリプト設定
- まずは対象のスプレッドシートを開いて「ツール」→「スクリプトエディタ」を開く。
- すると「コード.gs」ていうファイルの編集画面が表示されるのでそこに以下のコードを貼り付ける。

```js
function switchRowColor(targetColumn) {
  targetColumn = targetColumn ? targetColumn : 1;
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();
  var colorIndex = 0;
  var colors = ['#ffffff', '#ffffdd', '#ffddff', '#ffdddd', '#ddffff', '#ddffdd', '#ddddff', '#dddddd'];
  var startRow = sheet.getFrozenRows() + 1;
  var lastValue = sheet.getRange(startRow, targetColumn).getValue();
  sheet.getRange(startRow, 1, lastRow, lastColumn).setBackground("");
  for(var row = startRow; row <= lastRow; row++){
    var value = sheet.getRange(row, targetColumn).getValue();
    if(value != lastValue) {
      sheet.getRange(startRow, 1, row - startRow, lastColumn).setBackground(colors[colorIndex]);
      colorIndex = (colorIndex + 1) % colors.length;
      startRow = row;
    }
    lastValue = value;
  }  
}
```

- 「ファイル」→「保存」でスクリプトを保存する。その際プロエクト名が聞かれるので、適当に「行で色付け」などとしておく。
- もうスクリプトエディタは閉じても良いし、実行ボタンを何回か押して動作を確認してみても良い。
- 元のスプレッドシートに戻ったら色付けしたいシートを表示したまま「ツール」→「スクリプトマネージャ」を開く。
- 先ほど作った「行で色付け」が表示されているのでそれを選択して実行すると色付けが行われる。
- この際初めての実行時はOAuth認証が求められるので自分の判断で承認する。２回目以降の実行時には聞かれなくなる。
- 自動的に色付けしてくれるわけじゃないので色々編集したら、再度実行すればまた綺麗になる。

# 実行イメージ
↓こんな風になる。

![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/18726/5846818d-793b-4c03-dfc8-42931e44c60d.png)

固定行はカラーリング対象から除くようにしてある。あと色付け基準のカラム番号はスクリプト内に1と書いてるのでこれをダイアログで毎回聞くようにしても良いし、スクリプトのデフォルト値を他に変えて使っても良い、好みで。
コード変更前のテストデータを作る方法

# 概要
コードの一部を変更した結果、コード変更前のデータ、変更後のデータができます。
変更後のデータは容易に作成できるのでテストしやすいのですが、コード変更前のデータでも問題無く動作することをどうやってテストしようか、という話題です。

# やり方
色々あると思いますが、旧コードを特異メソッドとして定義して、オーバーライドしてみました。
factory_girlには`after(:build)`というhookがあって、ActiveRecordの`after_initialize`のようなタイミングで呼ばれます。
テストコードによっては`after(:create)`とかでも良いと思いますが、今回は`save`前にhookする必要があったので`after(:build)`にしました。

```factories/cart.rb
FactoryGirl.define do
  factory :cart do
    factory :cart_with_old_tax do
      after(:build) do |cart, evaluator|
        # Cart#price_with_taxはprice + ConsumptionTax.calc(price)に変更されている
        def cart.price_with_tax
          price + OldConsumptionTax.calc(price)
        end
      end
    end
  end
end
```
```spec/cart_spec.rb
describe Cart do
  describe '#price_with_tax' do
    let(:cart) { create(:cart_with_old_tax) } # 旧コードのインスタンス
    subject { Cart.find(cart.id) } # 新コードのインスタンス
  end
end
```

# おわりに
上記の例では旧税率のデータを作ればいいだけなんですが、`factory_girl`で`before_validation`を無視してデータを作る方法が分からなかったのでこんな感じでやってみました。
バッドノウハウの匂いがします。
直接DML投げてデータ作れれば楽なんですけどねぇ…
pycharmでのリモート関連設定

メモ。
※リモート関連の機能はプロフェッショナルエディションにしかないと思う。

## インタープリタ
リモートにあるインタープリタを使うことができる。

File -> Setting -> Project Interpreter -> Python Interpreters -> "+"ボタンを押して追加

## リモートソースとの同期
pycharmはリモートのソースを直接編集できると思っていたが、そうではなくてローカルにあるソースをリモートのソースと同期するという仕組みを持っているだけだった。

### 同期するディレクトリの設定
まず、File -> Setting -> Deploymentを開き以下の設定をする。

* Connectionタブ
  * Root pathにリモート上のルートを記載（自分のホームディレクトリとか）
  * Usernameやパスワードを埋める
  * 「Test SFTP Connection」して通ればOK
* Mappingsタブ
  * Local pathにローカルのソースディレクトリ
  * Deployment path on serverにリモートの同期したいソースディレクトリ（Root path以降のパスを書く）
     * 例えばRoot pathが`/home/me`、ソースディレクトリを`/home/me/src/target`にしたければ、`/src/target`と書く。

### ファイル同期
Tools -> Deployment -> Upload toを押すとローカルのファイルがリモートにアップロードされる。

Sync with Deployed to でリモートをローカルに持ってくることもできる。


なれるのに時間かかりそうだなぁ。
今月中に読む

アジャイル開発における品質向上に向けて。

[グーグルのソフトウェア開発]
(http://www.amazon.co.jp/%E3%83%86%E3%82%B9%E3%83%88%E3%81%8B%E3%82%89%E8%A6%8B%E3%81%88%E3%81%A6%E3%81%8F%E3%82%8B-%E3%82%B0%E3%83%BC%E3%82%B0%E3%83%AB%E3%81%AE%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA-%E3%82%B8%E3%82%A7%E3%83%BC%E3%83%A0%E3%82%BA%E3%83%BB%E3%82%A6%E3%82%A3%E3%83%86%E3%82%AB%E3%83%BC/dp/482228512X)

[Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際](http://www.amazon.co.jp/Hacking-%E7%BE%8E%E3%81%97%E3%81%8D%E7%AD%96%E8%AC%80-%E2%80%95%E8%84%86%E5%BC%B1%E6%80%A7%E6%94%BB%E6%92%83%E3%81%AE%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E9%9A%9B-Jon-Erickson/dp/4873115140)

[実践アジャイルテスト](http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%83%86%E3%82%B9%E3%83%88-%E3%83%86%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%A8%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%83%81%E3%83%BC%E3%83%A0%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-IT-Architects%E2%80%99Archive-%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA%E3%81%AE%E5%AE%9F%E8%B7%B5/dp/4798119970)

[実践テスト駆動開発](http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA-%E3%83%86%E3%82%B9%E3%83%88%E3%81%AB%E5%B0%8E%E3%81%8B%E3%82%8C%E3%81%A6%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%82%92%E8%82%B2%E3%81%A6%E3%82%8B-Object-Oriented-SELECTION/dp/4798124583)
【追記あり】iTunes Connect でアプリのアップデートをする際の質問が増えてる件について。



# 概要

アプリのアップデートをする際にお馴染みのテンプレ質問が、ここ最近増えてる。

なお、この情報は 2014/02/20 (Thu) 時点のモノなり。

# 詳細

一つ質問が増えて 4 つの質問を 2 ページに分けて質問されるようになった。

## 1ページ目

![ScreenShot 01](http://d4dqxb4bcxr8q.cloudfront.net/img/ss/20140220-01/iTunes_Connect/01.png)

1. Have you added or made changes to encryption features since your last submission of this app?
	* 超訳: 「暗号機能を追加 OR 変更した？」
	* 多分アメリカの法律に関連したコトなんじゃないかな？
	* 基本的に No で良いんだとは思う。
1. <span class="gr">**Does your app contain, display, or access third-party content?** &#x2190; [コレが増えた！]</span>
	* 超訳: 「3rd Party なコンテンツとか使ってる？」
	* 権利周りのお話しとかが発生してくるから聞くようになったっぽい。
	* 友人のエンジニアが Dropbox の API 使うようなアプリを申請した際に「Submission Feedback 来て、Review Board で "何故使っているのか" についてやりとりした。」って言っていたので、その辺が関係していそうな感じ。
1. Are you updating this app because of a significant usability issue or for a legal issue, such as an infringement claim?
	* 超訳: 「法的な問題への対処 か 大幅なユーザビリティの変更 ある？」
	* ユーザビリティの方は分からんが、リーガル側の方はちょっと急いでくれるのかも？
	* No 以外にしたことないから分からんｗ

## 2ページ目

![ScreenShot 01](http://d4dqxb4bcxr8q.cloudfront.net/img/ss/20140220-01/iTunes_Connect/02.png)

1. You can control when this version of your app is released to the App Store, or you can authorize Apple to automatically release it once it has been approved for sale. If you choose to control this process yourself, you will need to log into iTunes Connect and manually release this version (you will be able to do so as soon as it has been approved).
	* 超訳: 「んで、リリース方法どーすんの？」
	* Automatically ... を選ぶと、審査通過後そのまま新 Ver. のアプリ公開まで自動で進行する。
	* I will ... を選ぶと、審査通過後も新 Ver. のアプリは公開されず、自分で iTunes Connect から公開処理をしないとダメ。
		* <del>初回バージョンの時もこれ出来たら便利なのになぁ…。</del>
		* <ins>コメント欄にて [tomohisaota](http://qiita.com/tomohisaota) さんからご指摘頂いた方法を用いれば、出来るコトが判明した。</ins>

# 追記

## 2014/02/26 (Wed) 18:30

本日、別の無料アプリを申請しようと思い Ready to Upload Binary したところ、追加されたと思われた質問が無くなっていた。
有料アプリ限定の話だったのかな…？それとも他に条件あんのかしら？
何か知ってる人いたらコメント欄とかでおせーてくださいな ^^

## 2014/04/10 (Thu) 18:30

今申請作業しようと思って、ボタンをポチポチする簡単なお仕事していたら、更にもう一個質問が増えているコトが確認された。

![ScreenShot 04](http://d4dqxb4bcxr8q.cloudfront.net/img/ss/20140220-01/iTunes_Connect/04.png)

まだ内容詳しく読んでないけど、「正しく使ってる？」ってな趣旨の質問なんじゃないかな？
MySQLのutf8で保存できない文字を弾きたい

> ### 追記
> コメントで@mpywさんの紹介されてるコードが有効な場合があります。ご検討ください。

要するにUTF-8にすると4バイトになる文字を弾きたい。MySQLが悪い。元コードはクラスの静的メソッド。

```php
<?php
function assert_mysql_utf8 ($value)
{
    $len = mb_strlen($value, 'utf-8');
    for ($n = 0; $n < $len; $n++) {
        $c = mb_substr($value, $n, 1, 'utf-8');
        if (strlen($c) > 3) {
            throw new RangeException;
        }
    }
}
```

`strlen`と`mb_strlen`の差異を利用する。

果たしてこんな検証処理をアプリケーション側でするべきなのか激しく悩む。全部MySQLが悪い。
Rails 4 の AR#update 周りまとめ


|メソッド|invoke validation|invoke callback|raise exception|補足|
|:------|:---------|:-------|:----------|:----|
|update(attributes)|o|o|x||
|update!(attributes)|o|o|o||
|update_attribute(name, value)|x|o|x|boolean flag の update が主な目的?|
|update_attributes(attributes)|o|o|x|update の alias|
|update_attributes!(attributes)|o|o|o|update! の alias|
|update_column(name, value)|x|x|x|updated_columns(name: value) と同じ|
|update_columns(attributes)|x|x|x|最速でレコード更新できる。updated_at が更新されない|
NSData の中身を見るには。

NSDataの中身を見ようとNSLogをしても人には理解し難いものなので、

そういうときはこれ。

```objc
// NSData *data
unsigned long long size = 50 * 1024;
const unsigned char *ptr = [data bytes];
unsigned char s[size];
for (long long i = 0L, n = [data length]; i < n; ++i)
{
    unsigned char c = *ptr++;
    s[i] = c;
    NSLog(@"char=%c hex=%x", c, c);
}
NSLog(@"%s", s);
```
vimを使う(3) フォントの変更

win向け
既に使いこなしている人は読む必要がありません。

# フォントを変更する
小さい文字の方が見やすく感じるため、フォントサイズを変更。

デフォルトのサイズとフォント
![WS000044.png](https://qiita-image-store.s3.amazonaws.com/0/19374/08235b73-638f-6495-cfef-80728fb99507.png)

`:` を押してコマンドモードになり、`set guifont=*` を入力。
フォント設定画面が出てくるので、好みのフォントとサイズを指定。

![WS000045.png](https://qiita-image-store.s3.amazonaws.com/0/19374/922fc749-3f7a-b134-afaa-d153c3de83ad.png)

今回は `MS ゴシック``標準``9` にします。

![WS000046.png](https://qiita-image-store.s3.amazonaws.com/0/19374/046313de-5708-7962-0014-4c686407dbb3.png)

ちっちゃすぎる気もするけどOKとします。

ただ、このままだと次にvim起動したらフォントが戻っちゃうので、設定に追加します。

```:_vimrc
"半角文字の設定
set guifont=MS_Gothic:h9

"全角文字の設定
set guifontwide=MS_Gothic:h9
```

# 参考
http://auewe.hatenablog.com/entry/2013/05/06/200425
PHP閉じタグ（closing tag)のお話

### 閉じタグについての是非

PHPで閉じタグ『?>』は、書かないほうが良いと個人的に思っていますし、公式でも書かないことを進めているようです。
HTMLの中に入れるときとかは、もちろん閉じタグが必要ですが、
PHPしか書いていない場合はうっかりバグの原因になるので、出来れば書きたくない。

### 閉じタグが原因で、よく聞くバグ
* 画像の表示系（imagemagickとか）で画面が真っ白になる事件
* 外部ファイル（includeとかするやつ）を読み込んでくれない事件


### 閉じタグあり
> <?php
>     echo "Hello World!";
> ?>

### 閉じタグなし
> <?php
>     echo "Hello World!";
> [EOF]


こういった、割と『知らないとハマる』系のバグは原因がわかったときの徒労感に悩まされます。
なので、普段から意識しながらコードを書くことが大事かなぁと思います。
Helgrindを使う

Helgrindはマルチスレッドプログラムでのスレッドのデバッグのためのツール

以下は使い方(Ubuntu)

# valgrindのインストール
Helgrindは　valgrindに含まれているので、valgrindをインストールする必要がある。

```shell-session
$ sudo apt-get install valgrind
```

# 使い方

```shell-session
$ valgrind --tool=helgrind ./a.out
```

上記で実行すれば、Threadに関する情報がターミナルに流れてくる
Python: selenium でFirefoxを操作する


pipで selenium をインストール:

    (tact)PeekoOne:~ hide$ pip install selenium
    Downloading/unpacking selenium
      Downloading selenium-2.40.0.tar.gz (2.5Mb): 2.5Mb downloaded
      Running setup.py egg_info for package selenium
        
    Installing collected packages: selenium
      Running setup.py install for selenium
        
    Successfully installed selenium
    Cleaning up...
    
Firefoxのウェブドライバを作成:  

    >>> from selenium import webdriver
    >>> browser = webdriver.Firefox()
    
この時点で、 Firefoxが起動されます
    
Google に移動

    >>> browser.get('http://www.google.com')
    >>> print browser.title
    Google
    
検索の inputタグ をidで探す

    >>> browser.find_element_by_id('lst-ib')
    <selenium.webdriver.remote.webelement.WebElement object at 0x1026661d0>
    >>> q=_

    
これにキーワード入力。

    >>> q.send_keys('selenium')

この時点でFirefoxでJavascriptが動いてキーワード候補がでている。
    
リターンを入力すると、javascriptが起動してフォームがSubmitされます。

    >>> q.send_keys('\n')
    
    >>> print browser.title
    selenium - Google 検索
    
    
CSSセレクタで選択
    
    >>> browser.find_elements_by_css_selector('input[name=q]')
    [<selenium.webdriver.remote.webelement.WebElement object at 0x102a8c890>]
    >>> q=_
    >>> q[0].send_keys('Django\n')
    >>> print browser.title
    Django - Google 検索
    

BeautifulSoupでHTMLを印刷

	>>> from bs4 import BeautifulSoup as Soup
	>>> browser.get('http://twitter.com')
	>>> print Soup(browser.page_source).select('form')[1].prettify()

	<form action="/sessions/change_locale" class="language" method="POST">
	 <input name="lang" type="hidden"/>
	 <input name="redirect" type="hidden"/>
	 <input name="authenticity_token" type="hidden" value="4ae7df1ac2b69b61e5d260c1e4b7ccd29112fcdf"/>
	</form>
MongoDB+Ruby on Rails4アプリ作成

#MongoDBを使ってRuby on Rails4アプリケーションを作成する方法を解説

今回、Rubyのバージョンは2.1、 OSは「Ubuntu12.04」を使用し、
Rails4は環境は整っている前提とします。

##MongoDBのインストール

###リポジトリの公開鍵を取得します。

```bash
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
```

###リポジトリを追加します。

```bash
$ echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
$ sudo apt-get update
```

###MongoDBをインストールします。

```bash
$ sudo apt-get install mongodb-10gen
```

###MongoDBのサービスが正常に起動しているか確認します。
mongo -versionコマンドで以下のように表示されれば正常に起動しています。

```bash
$ mongo -version
MongoDB shell version: 2.4.9
```

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

-Oオプションを使いActiveRecordを組み込まないように設定します。

```bash
$ rails new hoge -O
```

## Gemfileファイルの設定

以下のようにgemを追加します。

```rb
gem 'mongoid', '4.0.0.beta1'
gem 'moped', '~>2.0.beta6'
gem 'bson_ext'
```

bundle updateを行います。

```bash
$ bundle update
```

「Could not find a JavaScript runtime...」のようなエラーがでたら、gemに「therubyracer」を追加してください。


## MongoDB用DB設定ファイル生成

```bash
$ rails g mongoid:config
      create  config/mongoid.yml
```

config配下に「mongoid.yml」というMongoDB用のDB設定ファイルが生成されます。

## Scaffoldでアプリケーションの雛形作成

Scaffoldを使って、記事を投稿するアプリケーションの雛形を作成します。

```bash
$ rails g scaffold Article title:string
      invoke  mongoid
      create    app/models/article.rb
（中略）
      create    app/assets/stylesheets/scaffolds.css.scss
```

## 動作確認

以下のようにコマンドを入力して、ブラウザで「localhost:3000/articles」にアクセスして動作を確認します。

```bash
$ rails s
```

正常に起動したら、「New Article」をクリックして「Hello World」という記事を作成します。
![mongo_rails4.jpg](https://qiita-image-store.s3.amazonaws.com/0/34365/7c39088f-4d24-5511-95b9-da7c4cfb7659.jpeg)

## MongoDBのデータ確認

MongoDBシェルを起動します。

```bash
$ mongo
```

MongoDBシェルでshow dbsコマンドを入力すると「hoge_development」というDBが作成されていることがわかります。

```
MongoDB shell version: 2.4.9
connecting to: test
> show dbs
hoge_development     0.0625GB
```

次に、useコマンドでdbを選択して、show tablesコマンドを入力すると「articles」テーブルが生成されていることがわかります。

さらに、db.articles.find()と入力すると、
記事に入力した「Hello World」が格納されていることが確認できます。

```
> use hoge_development
switched to db hoge_development
> show tables
articles
system.indexes
> db.articles.find()
{ "_id" : ObjectId("5305324d6d68762b7d000000"), "title" : "Hello World" }
> 
```

exitと入力するとMongoDBシェルが終了します。
GunicornをFabric経由で操作する




Gunicornで動いているアプリをサーバー側で起動、再起動ができるようにした。
プロセスを止めるにはpidを指定してkillすればいいということを学んだ。

####gunicorn.conf.py

    usr/bin/python
    gunicorn.conf.py

    bind = "0.0.0.0:5000"
    workers = 2
    worker_class = 'sync'
    max_requests = 1000
    timeout = 30
    keep_alive = 2
    preload = True
    daemon = True


####start.sh

    GUNICORN=/usr/bin/gunicorn
    ROOT=/your/app/path
    PID=/var/run/gunicorn/your.pid
    APP=run:app

    if [ -f $PID ]; then rm $PID; fi
        cd $ROOT
        source venv/bin/activate
        exec $GUNICORN -c $ROOT/gunicorn.conf.py –pid=$PID $APP


####fabfile.py



    #coding: utf-8
    from fabric.api import run,env,local,settings
    from fabric.operations import sudo
    from fabric.context_managers import cd
    import os
    import subprocess

    from fabric.api import env, run
    env.use_ssh_config = True
    env.hosts = ["your ip address"]
    env.key_filename = "/root/.ssh/authorized_keys"
    env.user = "username"
    env.password = "password"


    def start():
        with settings():
            with cd("/your/path"):
                sudo("""
                source start.sh
                """,pty=False)

    def stop():
        with settings():
            pid = get_pid()
            sudo("kill {}".format(pid))

    def restart():
        try:
            stop()
        except:
            print("There isn't pid")
        start()


これで fab start/stop/restartで自由に再起動を行うことができる。

###メモ

+ タスクをバックグラウンドで実行させたい時は pty=False としないと動作しない。

この記事はhttp://furodrive.com/ja/2014/2/stop_and_start_gunicorn
を元に作成されました。
ヒアドキュメントの変数エスケープ

みなさんはcatコマンドを利用してテキストファイルに複数行の文字列を出力することはありますか

例えばexample.txtという空ファイルに
1234
aaaa
bbbb
という内容を記述したい場合、

```shell
$echo "1234" >> example.txt
$echo "aaaa" >> example.txt
$echo "bbbb" >> example.txt
```

のように記述するのもありですが行毎にコマンドを入力するのは面倒です。

そこでcatコマンド+ヒアドキュメントを利用すると

```shell
$cat << EOF > example.txt
1234
aaaa
bbbb
EOF
```

のように記述することが出来ます。

しかし、ヒアドキュメントは変数も認識するのでエスケープしてやらないと
${}ような文字列を含んだ場合はエラーが発生します。

$cat << EOF > example.txtのcat << EOF部分を
cat <<'EOF' とか cat <<\EOF とか cat <<"EOF" とかに変更してやると
ヒアドキュメント内のメタ文字はエスケープされます。

あまり利用しない方法かと思いますが、スクリプトでガーッとやりたい時につまづいた方の役に立てればと。
pretty printにPatchwork-Dumperを試す

[kint](https://github.com/raveren/kint)の見た目があまり好きになれなかったので見やすそうな[Patchwork-Dumper](https://github.com/nicolas-grekas/Patchwork-Dumper)を試してみた

```shell-session
composer require 'patchwork/dumper ~1.0'
```
で入れてREADMEの通りやったらいきなりundefined methodでFatalになってえってなった
READMEがいきなり動かないとか離脱率上がりそうだなぁと思いつつtestsの中見たらJsonDumperTestしかなくてさらに微妙な気持ちになった
CliDumperのメソッド名のtypoだったのでそこ直して動かした

```php
<?php

require __DIR__ . '/vendor/autoload.php';

use Patchwork\Dumper\CliDumper;
use Patchwork\Dumper\HtmlDumper;
use Patchwork\Dumper\JsonDumper;

set_dump_handler(function ($var) {
    if ('cli' === PHP_SAPI) {
        CliDumper::dump($var);
    } else {
        HtmlDumper::dump($var);
        //header('Content-Type: application/json');
        //JsonDumper::dump($var);
    }
});

dump(new CliDumper);
```

CliDumper
![CliDumper.png](https://qiita-image-store.s3.amazonaws.com/0/37997/21c21a8a-1734-53ce-4019-0858e5bdd1a4.png)


HtmlDumper
![HtmlDumper.png](https://qiita-image-store.s3.amazonaws.com/0/37997/01a60f7d-0f8c-da82-5219-17a73cd47980.png)

色使いのルールはすぐには覚えらんないけど、まあまあ見やすいしcliも色つけてくれるのはいい感じ
[ladybug](https://github.com/raulfraile/ladybug)とか[krumo](https://github.com/oodle/krumo)も見やすいんだけど前者は依存パッケージ多いし、後者はhtmlタグ吐いちゃうのでweb/cli両対応で簡単に使い始める分にはいいかも
【Python】pyramidチュートリアル用の仮想python環境構築（まとめ）

Linux(debian)で[pyramidチュートリアル](http://docs.pylonsproject.jp/projects/pyramid-doc-ja/en/latest/tutorials/wiki2/index.html)を実施するため、
virtualenvを使用した仮想python環境の作成方法

前、手探りで環境作成とかしたけど、いろいろ分かってきたのでまとめ直し。

#setuptools、pip、virtualenvインストール

とりあえず、setuptools、pip、virtualenvの３つを準備。

```zsh
#setuptoolsのインストール
$ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | python

#setuptoolsをインストールするとeasy_installが使用できるようになるので、pipとvirtualenvをインストールする
$ easy_install pip
$ easy_install virtualenv
```

環境に合わせて管理者権限が必要になるかも。

※ 少し古い情報だとsetuptoolsよりdistributeのが良いとか出てくるけど、
　 今は2つがマージされたのでsetuptoolsを使用しましょう。

#仮想Python環境構築
virtualenvを使用して仮想環境を構築

```zsh
#sampleという名前の仮想環境を構築
$ virtualenv --no-site-packages sample
```

環境を構築したらアクティベートをすることによって、
環境を使用することができる。

```zsh
#sample仮想環境にアクティベート
$ cd sample
$ source bin/activate
```

成功するとコマンドに環境名が()で表示されるようになる。
上の場合だと(sample)といった感じ。

環境から出るときはdeactivateコマンド

```zsh
#環境から出る
$ deactivate
```

#Pyramidのインストール
仮想環境に入った状態でpuramidをインストールする。
作業場所は仮想環境ディレクトリ直下

```zsh
$ pip install pyramid
```

ちなみに、私の環境だとこのコマンドでPyramid1.4.5がインストールされました。
チュートリアルのバージョンと違うけど、まあ何とかなるかと。

#インストール（チュートリアル）
あとは[Pyramidチュートリアルのインストール](http://docs.pylonsproject.jp/projects/pyramid-doc-ja/en/latest/tutorials/wiki2/installation.html)に沿って
必要なものをインストールしていく。
なんとなくeasy_installじゃなくてpipを使ってます。


・プロジェクト作成

```zsh
$ bin/pcreate -s alchemy tutorial
```

・開発モードでのプロジェクトのインストール

```zsh
$ cd tutorial
$ python setup.py develop
```

・テストの実行

```zsh
$ python setup.py test -q
```

・テストカバレッジ情報の抽出

```zsh
$ pip install nose coverage
$ ../bin/nosetests --cover-package=tutorial --cover-erase --with-coverage
```

・データベースの初期化

```zsh
$ ../bin/initialize_tutorial_db development.ini
```

・アプリケーションの起動

```zsh
$ ../bin/pserve development.ini --reload
```

これでサーバが起動する。
これにて[チュートリアルのインストール](http://docs.pylonsproject.jp/projects/pyramid-doc-ja/en/latest/tutorials/wiki2/installation.html)終了でーす。
JBossEAP(JBoss Enterprise Application Platform)の設計ポイントまとめ

こんにちわ。  
先日近所の王将で餃子食ったら、割引券もらえました。ラッキー(*´ω｀)  

![attachment00.jpg](https://qiita-image-store.s3.amazonaws.com/0/36513/4b76d75f-d3f6-3f18-608b-06bd084568c3.jpeg)

JBossEAP設計ポイントについて個人的に重要そうなポイントをまとめます。ポイントの詳細は今後少しずつ記載していく。予定。つもり。  
  
##JBoss EAP(JBoss Enterprise Application Platform)とは？  
>JavaEEに準拠したOSSのアプリケーションプラットフォーム。エンタープライズという名前からもわかるように、企業向け。
>安定動作をすることを主眼においた機能を多く取り入れる為、最新の技術というよりは、実績のある古い機能や技術が多く使われている。
>ちまたでは、JBossEAPとJBossASを混在してしまってよくわからなくなるみたい。(JBossEAPに搭載されているアプリケーションサーバがJBossAS。JBossEAP6には、JBossAS7がなぜか搭載されている。バージョン合わせろよ...)
>それで、紛らわしいのでJBossASは最新バージョンの8からはWildFlyという名前に変更されたのだ。
>JBossEAPの2014/02/20現在の最新バージョンは、6.2.0。
  
##JBossEAPの特徴
>* 機能が豊富で便利
>* 他のアプリケーションサーバと比較して動作が軽快
>* 開発生産性が高い
>* オープンソースであるということ
>* 管理性に優れる
  

##JBossEAP設計ポイント
  

####JBOSSアーキテクチャの選択
>バージョン6からの新機能であるdomainモード（複数JBOSS管理に便利）か以前からあるstandaloneモード（単一JBOSS管理ならこっち。軽量）の選択。
  
####HTTPコネクタ連携
>JBOSSの前段にいるであろうwebサーバと連携するためのコネクタ。
  
####流量制御
>同時にJBOSSに接続可能なアクセス数の制御。
  
####タイマー
>各箇所のタイムアウト値の制御。セッション、トランザクション、データソースなどの箇所にタイムアウト設定アリ。
  
####クラスタリング
>JGROUPとINFINISPAN。メモリ上のデータを複製しJBOSS間で共有する。
  
####データソース
>DBへ接続する為のインターフェース。非XAかXAか。
  
####セキュリティ
>セキュリティドメイン。パスワードの暗号化や監査ログへの書き込みなど。valutっていうのもある。
  
####JVMヒープ
>JVM起動時に割り当てられる領域。割り当てメモリサイズ、GC方式の選択など。要チューニング。
  
####デプロイ
>アプリケーションを利用可能な状態に準備すること。構成によってはホットデプロイとかもできる。

そんな感じ。
厳密等価演算子 javaプログラマのjavascript入門

==を「等価演算子」
===を「厳密等価演算子」という。
「厳密等価演算子」は型が同じかどうかチェックするが、「等価演算子」はチェックしない。
「等価演算子」を使うと型が異なる場合下記のように変換して比較する。
・数値と文字列を比較するとき、文字列は数値に変換される。
・boolean型ならtrue⇒1、false⇒0に変換される。

var a=1;
var b="1";
var c=true;

// 型が違うが値が同じため真となる
if (a == b) {
	document.write('a==b'+'&lt;br/&gt;');
}
// 型が違うため偽となる
if (a === b) {
	document.write('a===b'+'&lt;br/&gt;');
}

// 型が違うが値が同じため真となる
if (a == c) {
	document.write('a==c'+'&lt;br/&gt;');
}
// 型が違うため偽となる
if (a === c) {
	document.write('a===c'+'&lt;br/&gt;');
}

実行結果
a==b
a==c
LXC 1.0: 問題の解決方法とデバッグ [10/10]

## この文書について

この文書は、連載記事「[LXC 1.0: Blog post series](https://www.stgraber.org/2013/12/20/lxc-1-0-blog-post-series/)」の一つである以下の記事を翻訳したものです。連載の目次や注意点は[こちら](http://qiita.com/m-shibata/items/ee9b295a2596824da819)を参照してください。

* https://www.stgraber.org/2014/02/18/lxc-1-0-troubleshooting-and-debugging/

この文書のライセンスは原文と同じく、[Creative Commons BY-NC-SA 2.5](http://creativecommons.org/licenses/by-nc-sa/2.5/)のもとに提供されています。

![CC-BY-NC-SA 2.5](http://i.creativecommons.org/l/by-nc-sa/2.5/88x31.png)

---------

## ログの取得

ほとんどのLXCのコマンドには、次の二つのオプションが存在します：

* `-o` 、 `--logfile=FILE`: ログファイルの場所（初期値は標準エラー出力）
* `-l` 、 `--logpriority=LEVEL`: ログのプライオリティ（初期値はERROR）

ログプライオリティの取りうる値は次のとおりです：

* FATAL
* ALERT
* CRIT
* ERROR
* WARN
* NOTICE
* INFO
* DEBUG
* TRACE

FATAL、ALERT、CRITは現時点ではほとんど使われていません。ERRORやそれ以外は、TRACEを除いて一般的です。すべてのログを表示したい場合は、ログプライオリティをTRACEに設定してください。

コンテナーの設定ファイルに、上記二つと同じ設定を行えます：

* lxc.logfile
* lxc.loglevel

動作はコマンドのそれとまったく同じです。ただし、コマンドラインオプションが渡されていたら、設定ファイルの値はすべて無視され、利用者によって指定された値で上書きされます。

LXCに対して不具合報告をするときは、ログプライオリティを少なくともDEBUGに設定したコンテナーのログを添付すると良いでしょう。


## APIのデバッグ

APIを使用した時に発生する問題をデバッグするなら、liblxcを直接使用したC言語で、問題の部分のコードを再実装し試してみると良いでしょう。これによりバインディングに起因する部分を排除し、よりクリーンなスタックトレースを取得でき、不具合報告が簡単になります。

コンテナーで `set_config_item` を使って、`lxc.loglevel` をDEBUGに設定すると、LXCが行っていることをログに記録できるので便利です。


## テスト

コード上の問題をより深く追求する前に、マシン上のLXC自身が正しく動作しているか確認しておきましょう。

まずは `lxc-checkconfig` でカーネルの機能で足りないものがないか確認します。問題なければ、テストコードをインストール（もしくはビルド）します。Ubuntuなら、「lxc-tests」パッケージとして提供されています。これらのテストの多くは、Ubuntu上で動くことを想定しています（パッチは歓迎します）が、lxc-ubuntuテンプレートと互換性のあるディストリビューションなら正しく動くでしょう。

`lxc-test-*` のそれぞれのバイナリーを管理者権限で実行し、何か問題がないか確認します。注意点として、このテストは失敗時に余計なゴミを残す可能性があります。もしそうなったら、次のテストに移行する前に、テストを失敗せる原因ともなりうるその残骸物のコンテナーを削除するようにしてください。


## 不具合の報告

LXCのメインのバグトラッカーのアドレス： https://github.com/lxc/lxc/issues

不具合をディストリビューションに報告することもありかもしれません（アップストリームにも報告した上で、二つを関連付けることが好まれます）。例えばUbuntuなら、LXCの不具合は次のアドレスが使われます： https://bugs.launchpad.net/ubuntu/+source/lxc

すでにその不具合について調査済みであるのなら、メーリングリストに直接報告しても良いでしょう（次項を確認してください）。


## パッチの送付

私たちはいつでも手伝いを歓迎していますし、嬉しいことにLXCには活発な開発コミュニティが存在します（LXC 1.0には60名以上の貢献者がいます）。貢献についてそれほど多くのルールは決めていません。ただ、あなたの貢献は適切なライセンスに変更され、あなたが私達に送ったコードのコピーライトはあなた自身になる（コミットのSigned-off-by行にそれが示される）ことをお願いするだけです。

ライセンスに関して、ライブラリ（liblxc）とそのバインディングに関するものはLGPLv2.1+かそれと互換のライセンスである必要があり、それ以上の制限はつけてはいけません。単体のバイナリやスクリプトはLGPLv2.1+（プロジェクトの標準）かGPLv2のいずれかになります。よくわからなければ、LXCに新しいファイルを追加するならLGPLv2.1+を使うのが安全でしょう。

パッチの送信方法には次の二種類が存在します：

* lxc-devel@lists.linuxcontainers.org に埋め込む（`git send-email` かそれに類するものを使ってください）
* [github](https://github.com/lxc/lxc)のPull Requestを使う（.patchのURLを取得した上で、メールの時と同じように扱います）


## 私たちに連絡をとる

LXCチームに連絡する主な方法は、メーリングリストを使うことです。ひとつはLXC開発者向けの、もうひとつはLXCの利用者の質問向けのMLを持っています：

* lxc-devel: https://lists.linuxcontainers.org/listinfo/lxc-devel
* lxc-users: https://lists.linuxcontainers.org/listinfo/lxc-users

リアルタイムに議論をしたいのなら、[#lxcontainers on irc.freenode.net](http://webchat.freenode.net/?channels=%23lxcontainers)で、多くのLXCの利用者や開発者に出会えるでしょう。


## 最後に

これが、LXC 1.0がリリースされる前の最後の投稿です。現在、rc3で今日の夜遅くにでもrc4がやってくるでしょう。最終的なリリーススケジュールは明日の午後か木曜の朝になる予定です。

皆さんがこの連載記事を楽しみ、LXC 1.0のデプロイの便利なリファレンスになることを望んでいます。
クロージャ javaプログラマのjavascript入門

var outer = 'outer';
var later;

function outerFunc() {
	var inner=0;
	
	function innerFunc(){
		document.write(outer+'<br/>');
		document.write(inner+'<br/>');
		inner++;
	}
	innerFunc();
	later=innerFunc; // クロージャを作る
}
// クロージャを持たないのでinnerの値は2回とも0になる
outerFunc();
outerFunc();
// クロージャを持つのでinnerの参照が保持され、インクリメントされていく 
later();
later();
// グローバル変数の状態はやはり直に影響を受ける
outer = 'outer2';
later();

実行結果
outer
0
outer
0　←クロージャが無いので状態が保持されない
outer
1　←クロージャ内で状態が保持されるためインクリメントされる
outer
2
outer2　←グローバル変数の影響はクロージャ内でも受ける
3
Abを利用した負荷テスト時にTimeoutになる場合の対処法

## 環境

- CentOS release 6.3 (Final)
- Apache/2.2.15

## 事象

同時1接続で20000リクエストを発行すると、Apacheの設定上は十分さばけるリクエスト数にもかかわらずTimeoutエラーとなる。

```
# ab -n 20000 -c 1 http://localhost/

Benchmarking localhost (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
apr_poll: The timeout specified has expired (70007)
```

## 原因

syslogを見ると、以下の様なエラーが出ている。
iptablesのトラッキングテーブルが上限を超えて、パケットを破棄していることが原因のよう。

```
# cat /var/log/messages
Feb 19 15:33:07 localhost kernel: TCP: time wait bucket table overflow
Feb 19 15:33:15 localhost kernel: nf_conntrack: table full, dropping packet.
```

iptablesのトラッキングテーブルの上限は、カーネルパラメータの「nf_conntrack_max」で定義されている。
現在の定義値を見てみると14680となっているので、おおよそ14000リクエストでTimeoutになっている。

```
# sysctl -a | grep nf_conntrack_max
net.netfilter.nf_conntrack_max = 14680
net.nf_conntrack_max = 14680
```

## 対処法

/etc/sysctl.confに以下を追記して、トラッキングテーブルの上限を増やす。

```
# vi /etc/sysctl.conf
net.netfilter.nf_conntrack_max = 100000
net.nf_conntrack_max = 100000
```

設定反映

```
# sysctl -p
```

再度、負荷テストを実行すると問題なく処理できる。

```
# ab -n 20000 -c 1 http://localhost/

Benchmarking localhost (be patient)
Completed 2000 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests
```

## 参考サイト

http://www.e-agency.co.jp/column/20121225.html
vimを１コマンドでbuildできる「vimbuild」を作りました

　2014年2月20日現在、vimの最新版は7.4系ですが、まだどこのyumにもアップされておらず、7.3どころか7.2のyum repositoryもあります。
　7.3以上が欲しいとき、毎回sourceをダウンロードしてpatchを当てて…というのがいい加減面倒になったので、xbuildっぽくvimを簡単にbuild（当然最新パッチも当てて）できるコマンドを作りましたのでご紹介。

[vimbuild](http://roadman.github.io/vimbuild/ "vimbuild")

　使い方は簡単です。
　こんな感じ。

```bash
$ git clone https://github.com/roadman/vimbuild.git
$ cd vimbuild
$ ./vim-install 7.4
$ echo 'export PATH="$HOME/vimbuild/build/7.4/vim74/src/:$PATH"' >> $HOME/.bashrc
```

　コマンド名＋バージョンで、指定バージョンをbuildできます。
　単に最新版（現状は7.4）をbuildするだけなら、コマンド名だけでも構いません。

　systemを上書きしたくないのでbuildまでですが、バージョンごとにbuildパスは変えられます。
　PATHはxbuildっぽく自分で追加してください（実際、言語とかと違ってそんなに頻繁にvimバージョンを切り替える変態な人は多くない…はず）。

　いくつか機能はありますが、versionsでインストール可能なバージョンリストも出せます。（ftp.vim.orgから取得）

```bash
$ ./vim-install versions
3.0
4.6
5.0
5.1
5.3-rt
5.3-src
5.4-rt
5.4-src
5.5-rt
5.5-src
5.6-rt
5.6-src
5.7-rt
5.7-src
5.8-rt
5.8-src
6.0-rt1
6.0-rt2
6.0-src1
6.0-src2
6.0
6.1-rt1
6.1-rt2
6.1-src1
6.1-src2
6.1
6.1
6.1
6.1
6.1
6.1
6.2-rt1
6.2-rt2
6.2-src1
6.2-src2
6.2
6.3-rt1
6.3-rt2
6.3-src1
6.3-src2
6.3
6.4-rt1
6.4-rt2
6.4-src1
6.4-src2
6.4
7.0
7.1
7.2
7.3
7.4
```

　インストールは7.0以上しか試してない…。
　そんなわけで便利に使って頂けると、嬉し恥ずかしです。
　よろしゅう。
Ubuntu12.04 キーボード設定の変更

#背景
BitNamiでVMイメージ化して(多分、殆どUbuntu)配布されているアプリを使おうと思ったら、初期状態のキーボード設定が日本語キーボードに合わなくて困ったのでその設定の直し方。

確認した時に使ったのはUbuntu12.04ベースのBitNami GitLabのVMイメージです。
多分Ubuntuなら同じ方法で変えられると思います。

#解決方法
##一時的な変更
```
sudo loadkeys jp
```

![loadkeys_jp.PNG](https://qiita-image-store.s3.amazonaws.com/0/36514/9086b5ba-6761-5f28-6f43-a864b49d7429.png)

※エラーメッセージは出てますが切り替わります。

##再起動しても残るやり方
```
sudo dpkg-reconfigure keyboard-configuration 
```
ウィザードが開くので適当に設定します。

キーボードの選択肢が出ます。汎用的な日本語キーボードらしき選択肢が無いので、ここではDellを選んでみました。
![kbdconfig.PNG](https://qiita-image-store.s3.amazonaws.com/0/36514/506787b7-8b00-3e90-185e-486ab41c14f8.png)
![kbdconfig2.PNG](https://qiita-image-store.s3.amazonaws.com/0/36514/6d2d5b95-dfe7-c0c9-a801-8336aeb4817f.png)
![kbdconfig3.PNG](https://qiita-image-store.s3.amazonaws.com/0/36514/1b45261a-3142-6b93-84d5-f4dfcd680f4b.png)
![kbdconfig4.PNG](https://qiita-image-store.s3.amazonaws.com/0/36514/79c43e25-abb2-f6b7-8305-fc2ce65326b1.png)
![kbdconfig5.PNG](https://qiita-image-store.s3.amazonaws.com/0/36514/487ec7c7-1372-8fec-f912-1f9d2a06330c.png)

これで完了です。

#参考

[Wikipedia - キー配列](http://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%BC%E9%85%8D%E5%88%97)
NSMutableArrayオブジェクトにnilを追加するとエラーになる件


#背景
引数の数によらず、一定の数だけ配列の要素数を確保したいと思っていた。
for文で、一定数に不足した分だけ仮に@""か0を代入する方針だった。

#課題
[確保したい一定数] - [現時点の要素数]の分だけ、@""か0を代入したかったのでこのようにやったらエラー

```objc
        for( NSInteger i = [mutableArray count]; i < 3; i++){
            [mutableArray addObject:0];
        }
```

エラーメッセージは
`-[__NSArrayM insertObject:atIndex:]: object cannot be nil`
#解決方針
このようにやったらうまくいった。

```objc
        for( NSInteger i = [mutableArray count]; i < 3; i++){
            [mutableArray addObject:@0];
 }
```

```objc
        for( NSInteger i = [mutableArray count]; i < 3; i++){
            NSString *str = [NSString stringWithFormat:@""];
            [mutableArray addObject:str];
 }
```

#参考
http://stackoverflow.com/questions/18864901/nsarraym-insertobjectatindex-object-cannot-be-nil

**激しく勉強になった**
[nilにまつわるエトセトラ](http://qiita.com/tomohisaota/items/9df0b93442a7ee37fe1f)
関数合成とカリーか


めも

```scala
 def compose[A,B,C](f: B => C, g: A => B): A => C = (a :A) => f(g(a))
```

```scala
def curry[A,B,C](f: (A, B) => C): A => (B => C) = {
	def turmeric(ajwain : A) : (B => C) = {
		def nutmeg(blackPepper : B) : C = {
			val coriander = f(ajwain, blackPepper)
			return coriander
		}
		return nutmeg
	}
	return turmeric
}
```

上を一行で書くと

```scala
def curry[A,B,C](f: (A, B) => C): A => (B => C) = (ajwain : A) => (blackPepper : B) => f(ajwain, blackPepper)
```
iOSのStoryboardのカスタムSegueは全力で使っていくべき！

Storyboardでの開発をバリバリやるようになったら、ぜひCustom Segueを使っていきましょう。
比較的簡単にカスタムの遷移を作れるのでかっこいいアプリが量産できます。

使用方法は簡単で、カスタムSegueクラスをsegueに指定するだけ。

![スクリーンショット 2014-02-20 0.10.06.png](https://qiita-image-store.s3.amazonaws.com/0/37731/24060960-912d-e44c-275a-06e73a1fee1f.png)

あとは、UIStoryboardSegueを継承したカスタムクラスを作成する！

```objc
#import "SegueTest.h"
     
@implementation SegueTest
- (void)perform {
        // 遷移元と遷移先のViewControllerがとれる
        UIViewController *sourceViewController = (UIViewController *)self.sourceViewController;
        UIViewController *destinationViewController = (UIViewController *)self.destinationViewController;
        
       // 自前でこの辺にアニメーション挟んだり、遷移元のviewを操作してかっこ良く遷移したり
    
   // navigation controller にpushしたければ
      [sourceViewController.navigationController pushViewController:destinationViewController animated:YES]; 

       // modal
       // アニメーション指定したければここで変更したり
       destinationViewController.modalTransitionStyle = UIModalTransitionStylePartialCurl;

      [sourceViewController presentViewController:destinationViewController animated:YES completion:nil];
}
@end
```

試しにカスタムSegueを全力で使ってみました。
http://twitpic.com/dw1929
実用性など特にありません。作ったけどセンスがないので特段かっこよくもなかった。

みなさんも、かっこいいアプリをばしばし作りましょう！
NeoBundle周りを自動化する

## 概要
新しい環境に vim を入れる際、いちいち NeoBundle の準備をするのが面倒臭い。
じゃあ NeoBundle 周りは vim にやらせよう。

## 手順
### NeoBundleの取得
NeoBundleが未取得なら、git clone を呼び出す

```vim:base.vim
if has('vim_starting')
  if !isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
    echo "install neobundle..."
    :call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim")
  endif
  set runtimepath+=~/.vim/bundle/neobundle.vim
endif

call neobundle#rc(expand('~/.vim/bundle/'))
NeoBundleFetch 'Shougo/neobundle.vim'
```

### NeoBundleInstall の自動化
未取得の bundle があれば、起動時に取得

```vim:base.vim
" 先に Bundle の設定をする
" 例
" NeoBundle 'tomasr/molokai'
" colorscheme molokai

" vimrc の最後に書く
if(!empty(neobundle#get_not_installed_bundle_names()))
  echomsg 'Not installed bundles: '
    \ string(neobundle#get_not_installed_bundle_names())
  if confirm('Install bundles now?', "yes\nNo", 2) == 1
    " vimrc を再度読み込み、インストールした Bundle を有効化
    " vimrc は必ず再読み込み可能な形式で記述すること
    NeoBundleInstall
    source ~/.vimrc
  endif
end
```

## リポジトリ

* http://github.com/td2sk/vimrc

人の設定から切り貼りした後が随所に……

## 関連
エディタ戦争では中立ゆえ、 emacs 版も近々書きます
npmでモジュールをインストールしようとすると「npm ERR! Error: ENOENT, lstat」と出るときの対処法


`npm install -g モジュール名`でモジュールをインストールしようとしたら、

```
npm ERR! Error: ENOENT, lstat
```

とエラーがでるようになった。
どうやらキャッシュが原因のようで、npmのキャッシュをクリアすれば良いとのこと。

```
npm cache clean  
```

キャッシュクリア後、再度インストールを試みたら問題なくインストールできた。

ふー
Macでrbenv使ってRuby2.0入れるときのメモ

`` brew install openssl readline``

```
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar xvfz libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/Cellar/libiconv/1.13.1
make
sudo make install
```

```CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl` --with-iconv-dir=/usr/local/Cellar/libiconv/1.13.1" rbenv install 2.1.1```

Installing nokogiri

```
CC=/usr/bin/gcc NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri 
```
VisualStudioでファイルを素早くUTF-8で保存し直す方法

VisualStudioは何もしないとShift-JISで保存してしまう困ったちゃんなので、TypeScriptとかを書いている時にうっかり日本語が混ざろうものならコンパイルエラーは避けられません。

で、ファイルメニューからせこせこエンコーディングを変更してもいいんですが、こうすればサクッとできます。

![scr.png](https://qiita-image-store.s3.amazonaws.com/0/3790/53bc9b96-c0f2-32af-0a53-81d60c6cd9fc.png)

Shift-JIS規定外のUnicode文字を入力して、

![rapture_20140219234722.png](https://qiita-image-store.s3.amazonaws.com/0/3790/1d90d5fd-c3ad-45a9-3f96-527c5a7956ab.png)

保存。

「はい」を選択すると、UTF-8（BOM付）で保存されます。もしBOM付が嫌なら「その他エンコードで保存」を押せば任意のエンコードを選択できます。
[Objective-C] NSFetchedResultsControllerを使ってCoreDataを便利にする


NSFetchedResultsControllerを使うとCoreDataとUITableViewがとても便利になります。

基本的な使い方は分かってしまうと簡単です。
CoreDataを使う場合、`NSFetchRequest`を作り、`NSManagedObjectContext`からデータを取得します。
これを便利にラップしてくれるのが`NSFetchedResultsController`です。

使い方は通常と同じようにまず`NSFetchRequest`でリクエストを作ります。
（※ソートディスクリプタを使ってソートする必要があるようです）
そして`NSFetchedResultsController`オブジェクトを以下のメソッドを使って生成します。

```objc
- (id)initWithFetchRequest:(NSFetchRequest *)fetchRequest
      managedObjectContext:(NSManagedObjectContext *)context
        sectionNameKeyPath:(NSString *)sectionNameKeyPath
                 cacheName:(NSString *)name
```

fetchRequestは最初に生成したリクエストです。
contextはNSManagedObjectContextですね。
そして残り2つが便利なところです。

###sectionNameyKeyPath
ここに`NSString`で文字列を渡すと、それでセクション分けされます。
`nil`を渡すとセクション分けされず、すべてがひとつのセクションとなるデータ配列となります。


###cacheName
`NSString`で文字列を渡すと、その名前でキャッシュを生成してくれます。
これを生成することで、DBへのアクセスをキャッシュしてくれるようになる機能です。


便利なところは、生成されたインスタンスはUITableViewで使うこと前提のオブジェクトになるので、sectionやrowなどのデータにアクセスしやすくなっている点でしょう。

###`performFetch:`メソッドでデータを読み込む

###`sections`でデータを取得

`NSFetchedResultsController`には、`sections`というプロパティがあり、これにはfetch後のセクショニングされたデータが入っています。（型は`NSArray`）
定義を見ると、`NSFetchedResultsSectionInfo `というプロトコルが実装されたオブジェクトのようです。

####定義抜粋

```objc
@protocol NSFetchedResultsSectionInfo

/* Name of the section
*/
@property (nonatomic, readonly) NSString *name;

/* Title of the section (used when displaying the index)
*/
@property (nonatomic, readonly) NSString *indexTitle;

/* Number of objects in section
*/
@property (nonatomic, readonly) NSUInteger numberOfObjects;

/* Returns the array of objects in the section.
*/
@property (nonatomic, readonly) NSArray *objects;

@end // NSFetchedResultsSectionInfo
```

`sections`配列に格納されているのは`NSManagedObject`のサブクラスです。


###`objectAtIndexPath:`メソッドで個別データを取得

`objectAtIndexPath:`メソッドを利用することで、デリゲートメソッド内の`indexPath`をそのまま渡して個別データが取得できる。

```objc
NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = [managedObject valueForKey:@"text"];
```

###fetchした全体の数を取得する

fetchしたセクションをまたいだ全体の数を取得するには以下のようにします。

```objc
NSUInteger count = [resultsController.fetchedObjects count];
```


##参考にした記事

* [NSFetchedResultsControllerとUITableViewでハマる（セクション別）](http://yoo-s.com/topic/detail/178)
* [NSFetchedResultsController を使って CoreData を表示する](http://xcatsan2.blogspot.jp/2009/10/nsfetchedresultscontroller-coredata.html)
Emacsで矩形編集(cua-mode)


# cua-mode設定
```cl:.emacs
(cua-mode t)
(setq cua-enable-cua-keys nil) ; デフォルトキーバインドを無効化
(define-key global-map (kbd "C-x SPC") 'cua-set-rectangle-mark)
```

## 矩形選択中のキー操作
| keybind |説明|
|:--------|:------------|
| M-p     |矩形の幅を固定 |
| M-b     |空白文字で埋める。 open-rectangle と同等|
| M-s     |文字列で置き換える。 string-rectangle と同等|
| M-f     |1種類の文字で埋める。 string-rectangle で1文字指定したときと同等|
| M-i     |矩形領域内の数字をインクリメントする|
| M-n     |矩形領域を連番で埋める。フォーマット指定可|
PowerShellの$profileに設定しておくと便利な定義

# $profileとは
powershell実行時に設定したいコマンドを記述するファイル。
`> echo $profile` でファイルパスが分かるから、存在しない場合は作成する。

`> New-item –type file –force $profile`

# フォルダ移動のショートカット設定方法
powershellはフォルダ移動のaliasをshellのように `%alias hoge= "cd fuga"` と簡単にできないところがつらい。
しかし、以下のようにすることで近い動作は実現可能。
## $profile 内で変数定義する
 　`$work = "C:\work"` と定義すれば `> cd $work` で移動可能。
## $profile 内で関数定義する
 　function work(){cd "C:\work"} と定義すれば `> work`  で移動可能

移動だけを目的としたら関数定義のほうがよいけど、よく参照するフォルダなら変数定義しておくと便利。

# $profileの再読み込み
`> . $profile` で設定の再読み込み可能。