OmniAICreator/Qiita-1.07M huggingface dataset:
wsメモ帳

##いろいろ情報取得##
`var domain = ws.upgradeReq.headers`
>
 { connection: 'Upgrade', upgrade: 'websocket', host: 'localhost:1337', origin: 'localhost:1337', 
'sec-websocket-version': '13', 'sec-websocket-key': 'xxxxxxxxxxxxxxxxx' }

参考資料
[ws説明](https://github.com/einaros/ws/blob/master/doc/ws.md)

##WebSocket Protocal##

下記のリンクをご参考
[Writing WebSocket servers](https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_servers)
Scala:日付をISO-8601形式にフォーマットしたい

`java.util.Date`を[ISO-8601]の形式にフォーマットする方法。

```scala
val tz = java.util.TimeZone.getTimeZone("UTC")
val df = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
df.setTimeZone(tz)
df.format(new java.util.Date())  //> res0: String = 2014-06-27T09:54:57Z
````

[ISO-8601]: http://en.wikipedia.org/wiki/ISO_8601
CSharp開発環境をDebian(wheezy)に構築するやり方


1. 必要なパッケージをインストール
> % sudo aptitude install mono-devel
新規インストール: 163 個と多いです。

2. コードを書く
> echo 'using System;
>  
> public class HelloWorld
> {
>     static public void Main ()
>     {
>         Console.WriteLine ("Hello World");
>     }
> }
> ' > HelloWorld.cs


3. コンパイル
> % mono-csc HelloWorld.cs


4. 実行
> % mono HelloWorld.exe
> Hello World


## その他便利ツール

コンソール
> % csharp
> Mono C# Shell, type "help;" for help
> 
> Enter statements below.
> csharp> Console.WriteLine("hello");
> hello
> csharp>  


コンソール補完
> % csharp
> Mono C# Shell, type "help;" for help
> 
> Enter statements below.
> csharp> Console.T
>                  ~~ TAB入力
> Title TreatControlCAsInput 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~ 補完候補が表示!


## 感想
Linuxでも簡単にCSharpが開発できて便利ですね!
Support Libraryの21.0.0-rc1はL previewより下のAPIをサポートしていません

SDK managerのAndroid Support Repositoryの更新によって、gradleで下記のようにSupport Libraryを利用しようとすると、ビルドエラーが起きることがあります。

```app/build.gradle
dependencies {
    compile 'com.android.support:support-v4:+'
    compile 'com.android.support:appcompat-v7:+'
}
```

これはサポートライブラリの最新版であるv21.0.0-rc1のminSdkVersionがL指定になっているためです。

```Manifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="android.support.v4" >

    <uses-sdk
        android:minSdkVersion="L"
        android:targetSdkVersion="L" />

    <application />

</manifest>
```

というわけで、最新のandroid studioでもライブラリのバージョンをきちんと指定しないと警告がでるようになりましたので、これからはキチンとバージョンを指定するようにしましょう。

2014年9月4日では、v20.0.0が正常動作する最新版となっています。

```app/build.gradle
dependencies {
    compile 'com.android.support:support-v4:20.0.0'
    compile 'com.android.support:appcompat-v7:20.0.0'
}
```

でもこれではなんのためのサポートライブラリなのかわからないので、早く対応して欲しい……。
同じ文字列を繰り返す

# (古い) 方法

Ruby の [String#*](http://docs.ruby-lang.org/ja/2.1.0/class/String.html#I_--2A) みたいなことを JavaScript でもやりたい。

``` rb
"Yuno" * 3 #=> "YunoYunoYuno"
```

`Array()` と `join()` を使えばできます！

``` javascript
Array(3+1); //=> [undefined, undefined, undefined]
Array(3+1).join('Yuno'); //=> "YunoYunoYuno"
```

[Stack Overflow](http://stackoverflow.com/) でたまたま見つけたネタですが、目からうろこだったので。

# 現在の方法 (追記)

ES6 は [String.prototype.repeat()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/repeat) を利用できます。

```js
'Yuno'.repeat(3); //=> "YunoYunoYuno"
```

### 参考

* [Repeat Character N Times](http://stackoverflow.com/questions/1877475/repeat-character-n-times/1877479#1877479)
【質問】VS C++新規プロジェクトで画像が読み込めません。

Visual Studio 2010でOpenCVを用いて、画像をファイルから読み込んで表示するC++プログラムを作りたいのですが、ビルドはエラーもなく成功しても実行時に上手く読み込むことができません。
手順としては

1. 以下のコードでビルド
2. 実行ファイルがあるフォルダに画像ファイルを置く

で問題ありませんよね…？
しかし実行すると「image not found!」と表示されるだけで読み込むことができません。
他にもいろんな場所に画像ファイルを置いてみたり、リソースファイルに追加したりしてみましたが上手く行きません。
以前は確かこの方法でできていて、今も既存のプロジェクトは正しく動作しますし、プロジェクトを丸ごとコピーしても動きます。
しかしあるときから新規でプロジェクトを作成した場合、上手く行かなくなってしまいました。
既存の正しく動作するプロジェクトのコードを丸々コピペしても駄目です。
思い当たるのはVisual Studio 2012をインストールしたことなのですが、2012も結構使っていてこれからも使いたいので、アンインストールはできれば避けたいです。
どこか設定を直さなくてはならないと思うのですが、どこを弄ればいいのか分からないため、ご教授いただけますと幸いです。

環境
Windows 7
Visual Studio 2008,2010,2012
（2010→2008→2012の順でインストールしています）

```cpp
#include <iostream>
#include <string>

#include <cv.h>
#include <highgui.h>

#include <stdio.h>

using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{
	const char *imageName = "airplane.jpg";
	Mat colorImage = imread(imageName, 1);

	if (colorImage.empty())
	{
		cout << "image not found!";
		return -1;
	}

	namedWindow("image", CV_WINDOW_AUTOSIZE);
	imshow("image", colorImage);

	waitKey(0);

	return 0;
}
```

リンカーの設定（入力）
opencv_core231d.lib
opencv_highgui231d.lib
opencv_video231d.lib
opencv_ml231d.lib
opencv_legacy231d.lib
opencv_imgproc231d.lib
opencv_objdetect231d.lib
opencv_features2d231d.lib
opencv_calib3d231d.lib
opencv_flann231d.lib
opencv_contrib231d.lib
opencv_gpu231d.lib
middlemanでpartial, layoutの置き場所を変更する

`$ middleman init myblog --template=blog` みたいにしてプロジェクトを作ると、デフォルトではpartialとlayoutの置き場所がわりとややこしい感じになっている。

* デフォルトのレイアウトはsource/layout.erbに置く
* それ以外のカスタムレイアウトを追加したい場合はsource/layouts/以下に置く
* しかしpartialはsource/直下に置く

どうにかならんかなーと思って http://localhost:4567/__middleman/config/ を見てみると、それぞれ設定値があった。

```rb
set :layouts_dir, ""
set :partials_dir, ""
```

例えば上のようにすると、ぜんぶsource/直下に置く感じになる。
[MySQL]ステータスなどの数値を文字列ラベルに変換



```sql
CREATE TABLE Item (
 id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
 name VARCHAR(100),
 status TINYINT
);

```

こんな感じの数値のステータスを持つテーブルがあったとして、status=0が未処理、status=1が処理中、status=3が処理済みという意味だとする。それぞれのstatusのItemの数を取得するには、以下のようなクエリを書けばいい。


```sql
SELECT status, COUNT(0) as count FROM Item
GROUP BY status
ORDER BY status;
```

```bash
+--------+-------+
| status | count |
+--------+-------+
|      0 |     1 |
|      1 |     3 |
|      2 |     2 |
+--------+-------+
```

結果はこのようになるが、ここでstatusを「未処理」「処理中」「処理済み」のようなわかりやすい表記にしたい。

一般的な解決方法としては、ENUM型を使うことが挙げられる。しかし、ENUM型は0が空文字列、1以降が列挙値であり、0に列挙値を指定することができない。既に0番が定義されているならばTINYINTをENUMに変更しない方がいい。

ちなみにstatusが1から始まってる場合は以下のようになる。

```sql
ALTER TABLE Item CHANGE COLUMN status status ENUM('未処理', '処理中', '処理済み');
SELECT status, COUNT(0) as count FROM Item
GROUP BY status
ORDER BY status;
```

```bash
+--------------+-------+
| status       | count |
+--------------+-------+
| 未処理        |     1 |
| 処理中        |     3 |
| 処理済み      |     2 |
+--------------+-------+
```

statusの値や型を変えずに出力のみ「未処理」などのラベルにするために、MAKE_SET関数を利用してみた。

MAKE_SET関数は第1引数にbitを指定し、第2引数以降でマッチするものをカンマ区切りで返す関数。例えば、bitが1なら第2引数のみが、bitが5なら第2引数と第4引数が返る。

これを使い、第一引数に2のstatus乗を指定することで、statusが0なら第2引数、statusが1なら第3引数...というような値を得ることができる。

```sql
SELECT
 MAKE_SET(POW(2, status),'未処理','処理中','処理済み') as status,
 COUNT(0) as count
FROM Item
GROUP BY Item.status
ORDER BY Item.status;
```

```bash
+--------------+-------+
| status       | count |
+--------------+-------+
| 未処理        |     1 |
| 処理中        |     3 |
| 処理済み      |     2 |
+--------------+-------+
```

もう少し普通の方法があれば教えてください。
【16進数】bash様の助けを借りて任意のバイト列を grep する


#目的
凄腕 GNU/Linux エンジニアの皆様、ふと日常の中で
任意のバイト列を探したいことはありませんか？

例えば・・・

・ファイル内のNULL文字（'\0'）の個数を検索したい
・言語設定は LANG=C だけど日本語の「あ」を検索したい
・文字化けしちゃう外国語の文字を検索したい

この記事は、bash 様の力を借りて、このようなケースの手助けをするための記事です。
弊社内でも案外知らない方が多かったので、メモしておきます。

#基本テクニック
##bashの力を借りる
bash は、以下のようなフォーマットで 16進数表記した任意のバイト列を扱うことができます。

http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html より

```
$'\xXX'
```


#使用例
##ファイル内のNULL文字（'\0'）の個数を検索したい
試しに、バイナリファイル ping コマンド内の NULL文字の個数を検索してみましょう。
149個あるそうです。

```
$ grep -c $'\x00' `which ping`
149
```

##ターミナルに「あ」を表示

UTF-8 で、ひらがなの「あ」を表示させましょう。（「あ」 Unicode U+3042）
「あ」のバイト列は、0xE38182 です。

```
$ echo $LANG
ja_JP.UTF-8

$ echo $'\xE3'$'\x81'$'\x82'
あ
```

##言語設定は LANG=C だけど日本語の「こんにちは」を検索したい
###「こんにちは」を UTF-8 で表記
「こんにちは」を UTF-8 で表記すると

```
こ：E3 81 93
ん：E3 82 93
に：E3 81 AB
ち：E3 81 A1
は：E3 81 AF
```

となります。


###iconv のテストファイルから「こんにちは」を検索！
iconv で有名な
文字変換ライブラリ libiconv-1.14 のテストファイルを例にします。

http://www.gnu.org/software/libiconv/
又は
https://github.com/bnoordhuis/libiconv/blob/master/tests/UCS-2BE-snippet.UTF-8 より。


libiconv-1.14/tests/UCS-2BE-snippet.UTF-8 ファイルには、
様々な言語で こんにちは と書かれているようです。

```
「こんにちは」で grep した結果

$ grep $'\xE3'$'\x81'$'\x93'$'\xE3'$'\x82'$'\x93'$'\xE3'$'\x81'$'\xAB'$'\xE3'$'\x81'$'\xA1'$'\xE3'$'\x81'$'\xAF' UCS-2BE-snippet.UTF-8
Japanese (日本語)            こんにちは, ｺﾝﾆﾁﾊ
```

バッチリ検索できましたね！


##文字化けする外国語で検索
###アラビア語の検索にチャレンジ！
libiconv-1.14/tests/UCS-2BE-snippet.UTF-8 ファイルの 6行目にアラビア語があるのですが、
私のエディタで表示したところ文字化けしちゃいました・・・。
しかし！任意のバイト列として指定してあげれば
相手がアラビア語だろうと、「こんにちは」を grep で検索できるのです。

```
libiconv-1.14/tests/UCS-2BE-snippet.UTF-8 6行目

Arabic			????? ?????
      			★★
      			この5文字を grep しますよー！
```

バイト列にすると、以下のようです。（全く分からん・・・。）

```
EF BA 8D
EF BB 9F
EF BA B4
EF BB BC
EF BB A1

※od コマンドでの検索方法は後述
```

いざ！grep してみましょう！

```
# コマンド実行

$ grep $'\xEF'$'\xBA'$'\x8D'$'\xEF'$'\xBB'$'\x9F'$'\xEF'$'\xBA'$'\xB4'$'\xEF'$'\xBB'$'\xBC'$'\xEF'$'\xBB'$'\xA1' UCS-2BE-snippet.UTF-8
Arabic                  ????? ?????
```

やったね！検索できました☆


#バイト列の抽出について
バイト列は od コマンドを使って、以下のように抽出しました。
リトルエンディアン環境なので、
0x00 01 02 03 04 05... は
0100    0302    0504... のように並んでいることにご注意下さい。
より詳しくは、od コマンドの manページ等が参考になります。

OD
http://linuxjm.sourceforge.jp/html/gnumaniak/man1/od.1.html

```

$ grep Arabic UCS-2BE-snippet.UTF-8 | od -c -x --width=500
0000000   A   r   a   b   i   c  \t  \t  \t 357 272 215 357 273 237 357 272 264 357 273 274 357 273 241     357 273 213 357 273 240 357 273 264 357 273 234 357 273 242  \n
           7241    6261    6369    0909    ★ここ以降★ef09    8dba    bbef    ef9f    b4ba    bbef    efbc    a1bb    ef20    8bbb    bbef    efa0    b4bb    bbef    ef9c    a2bb    000a
```

#実行環境
このメモのコマンド類は、Fedora14 で試しました。（古い・・・。）
最新の Fedora でも動作が変わってないといいなあ。

Fedora14 32bit
bash 4.1.7
grep 2.8
PHP5.5.0以上対応のarray_columnと同じ機能を持つ関数を実装してみた！

## 概要

PHPでは入力配列から単一のカラムの値を返す時に大変便利なarray_columnとう関数がある。

詳細はこちら：http://www.php.net/manual/ja/function.array-column.php
しかしこの関数PHP5.5.0以下では対応していないことがネック。

※PHP5.5.0以下でarray_columnを使用すると以下のエラーが出る。

```
PHP Fatal error:  Call to undefined function array_column() in ...
```

array_columnを使うがためにPHPバージョンアップするのはあまり現実的な話にならないのでPHP5.5.0以下でarray_columnとほぼ同じ機能を持つ関数を作ってみた。

## ソースコード

```php
/**
 * 指定したキーの値を取得する。2次元配列のみ対応
 * @param target_data 値を取り出したい多次元配列
 * @param column_key  値を返したいカラム
 * @param index_key   返す配列のインデックスとして使うカラム
 * return array       入力配列の単一のカラムを表す値の配列を返し
 */
function array_column ($target_data, $column_key, $index_key = null) {

    if (is_array($target_data) === FALSE || count($target_data) === 0) return FALSE;

    $result = array();
    foreach ($target_data as $array) {
        if (array_key_exists($column_key, $array) === FALSE) continue;
        if (is_null($index_key) === FALSE && array_key_exists($index_key, $array) === TRUE) {
            $result[$array[$index_key]] = $array[$column_key];
            continue;
        }
        $result[] = $array[$column_key];
    }

    if (count($result) === 0) return FALSE;
    return $result;

}

```

本来のarray_columnの機能と全く同じ仕様になっているか不明だが、中心的な機能（入力配列から単一のカラムの値を返す）は同じなので使用する場合は自分の好みにカスタマイズして使ってほしい。

## 実行結果

```php
$user_arr = array(
    array(
        'id'         => 900001,
        'first_name' => 'honda',
        'tel'        => '000-0000-0000',
    ),
    array(
        'id'         => 900002,
        'first_name' => 'uchida',
        'tel'        => '111-1111-1111',
    ),
    array(
        'id'         => 900003,
        'first_name' => 'kagawa',
        'tel'        => '222-2222-2222',
    ),
    array(
        'id'         => 900004,
        //'first_name' => 'endo',
        'tel'        => '333-3333-3333',
    ),
);

// 返す配列のインデックス指定あり
print_r(array_column($user_arr, 'first_name', 'id'));

// 返す配列のインデックス指定なし
print_r(array_column($user_arr, 'tel'));

```

array_column($user_arr, 'first_name', 'id')の結果

```php
Array
(
    [900001] => honda
    [900002] => uchida
    [900003] => kagawa
)
```

array_column($user_arr, 'tel')の結果

```php
Array
(
    [0] => 000-0000-0000
    [1] => 111-1111-1111
    [2] => 222-2222-2222
    [3] => 333-3333-3333
)
```

引き続きPHP5.5.0以上のみで使える関数と同じ機能を持つ自作関数を作るのでフォーローお願いいたします！！
Facebook Graph APIのpictureのサイズをよろしくやりたい

## こういう面倒くさいこと、あるよね

Facebook連携してるアプリなんかをいじる時、良くある困った話が、

**「顔写真出してね！あ、真四角がいいな！おっきくね！」**

である。

ところが、真四角という設定は、実は`type=square`しかない。それ以外のものはアップロードする時点ですでに真四角だったものだ。
つまり、アップした時点で真四角じゃなかったら、`type=square`以外に真四角な画像を取ることは出来ないのだ。

## そう思っていた時期が僕にもありました

以下のようなURLを叩いてみて欲しい。

```
https://graph.facebook.com/#{あんたのFacebookID}/picture?width=200&height=200
```

**なんということでしょう〜**

**おおきな画像が手に入ったではありませんか〜**

## 結論

- `type`で欲しい形式が取れない時は、直接`width`と`height`を指定してしまおう
- ただし指定したサイズで返ってくるとは限らない（ちょっとその辺はよく分かってないし、調べる気もない
- **Facebookとか使うの止めよう**
Rails4でModelのvalidatesを切り替える

#概要
save, updateの際に適用するvalidatesを切り替える事で、
用途や部分で分けて入れたいデータのvalidation処理等を実現します。

##基本
`create`と`update`で分けたい場合は以下のように記述します。

```model.rb
# create時に適用するvalidation
validates :username, presence: true, on: :create
```
```model.rb
# update時に適用するvalidation
validates :username, presence: true, on: :update
```

上記の判定は、Railsが内部で`new_record?`によるチェックをしています。

##応用
場合によってvalidationを分けたい時は以下のように記述します。

```controller.rb
# contextを指定
user.save(context: :hoge)
```
```model.rb
# 指定したcontextに対応するvalidation
validates :username, presence: true, on: :hoge
```
また、`save`ではなく`valid?`で確認する場合は以下のように記述します

```controller.rb
# contextを指定（シンボルのみで）
user.valid?(:hoge)
```

### UPDATEの場合

`update`メソッドでは`context`パラメータを指定できません。
なので、以下のような記述で`save`として扱います。

```controller.rb
# 投入するデータ
user.attributes = { email: 'test@mail.com' }
user.save(context: :hoge)
```

### 注意！！
`accepts_nested_attributes_for`等を使って、子モデルも一括で登録する場合、
子テーブルには`context`が効かない！
※`create`及び`update`は効きます

## おまけ
validationパターンが多岐に渡る場合は、
以下のように記述するとグルーピングできる。

```model.rb
with_options on: :hoge do |hoge|
  hoge.validates :email, presence: true
  hoge.validates :username, presence: true
end

with_options on: :fuga do |fuga|
  fuga.validates :email, presence: true
end
```
vagrantコマンド一覧


* boxの追加  
<pre>$ vagrant box add NAME URL</pre>
* boxの確認
<pre>$ vagrant box list</pre>
* boxの削除  
<pre>$ vagrant box remove NAME PROVIDER</pre>
* boxのpackage化
<pre>$ vagrant box repackage NAME PROVIDER</pre>
* 初期化  
<pre>$ vagrant init [box-name] [box-url]</pre>
* 起動  
<pre>$ vagrant up</pre>
* 状態確認  
<pre>$ vagrant status</pre>
* 停止  
<pre>$ vagrant halt</pre>
* 破棄  
<pre>$ vagrant destroy</pre>
* 仮想マシンにログイン  
<pre>$ vagrant ssh</pre>
print/printlnを使う関数をテストするときはConsole.withOutを使おう

# `System.out`が`Console.outVar`にキャッシュされるのを知らなかったという話です

`print`と`println`の両方について当てはまるので以下は`print`の例だけを書きます。

## `print`が処理される流れ
まず前提として`print`は暗黙に`import Predef._`されてる`Predef.print`です。

```Predef.scala

object Predef extends LowPriorityImplicits {
  def print(x: Any) = Console.print(x)
```

```Console.scala
object Console {
  def print(obj: Any) {
    out.print(if (null == obj) "null" else obj.toString())
  }
  def out = outVar.value
  private val outVar = new DynamicVariable[PrintStream](java.lang.System.out)
```

順に辿っていくと、`Console.outVar`が`System.out`の値で初期化されていることがわかります。
## `Console`はobjectなので遅延評価（最初にメンバーへのアクセスがあった時に評価）されます
`System.out`はキャッシュされて、その後の`System.setOut`は効果を及ぼしません。
`Console.setOut`で強制的に`Console.outVar.value`を上書きすることもできますが、2.11から非推奨になっていますので、`Console.withOut`を使うのがいいようです。

```Console.scala
object Console {
  def withOut[T](out: PrintStream)(thunk: =>T): T =
    outVar.withValue(out)(thunk)
```

```Test.scala
"Predef.print" should {
  "print hello" in {
    val outStream = new ByteArrayOutputStream
    val out = new PrintStream(new BufferedOutputStream(outStream), true, "utf-8")
    Console.withOut(out) {
      print("hello")
      out.flush()
      outStream.toString("utf-8") mustEqual "hello"
    }
  }
}
```
Vagrantアップデート後"`rescue in parse_string': Caught Encoding::CompatibilityError at '[{"content-type":"ap': incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string) (JSON::ParserError)"で怒られた時の対処法

## 概要  
vagrantアップデート後vagrant box addを実行すると，"`rescue in parse_string': Caught Encoding::CompatibilityError at '[{"content-type":"ap': incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string) (JSON::ParserError)"で怒られたので，その時の対処方．  
## 対処法 
<pre>$ rm ~/.vagrant.d/gems/cache/json-*.gem
$ rm ~/.vagrant.d/gems/gems/json-*
$ rm ~/.vagrant.d/gems/specification/json-*.gemspec</pre>
iTerm + tmux 使用時にvimの色設定が反映されない。

iTrem と tmux 使用時にvimrcで設定した色設定が反映されなかった時は、
下記の設定を行うと良い。

※ zshを使用しているが、bashでも同じと思われる。

```.zshrc
alias tmux="TERM=screen-256color-bce tmux"
```

```.tmux.conf
set -g default-terminal "xterm"
```

最後に反映を忘れずに。
```
$ source ~/.zshrc
```

参照URLは[こちら](http://stackoverflow.com/questions/10158508/lose-vim-colorscheme-in-tmux-mode)
TestFlightの導入手順

### 端末への配布方法

1. TestFlightのページに行って、登録と初期の端末の登録は済ませておく
- developer.apple.comのページを開く
- Provisioning ProfilesのDistribution(Ad Hoc)版を作成。
- Xcodeのメニューの[Xcode]→[Preference]の[Accounts]→右下の[View Details]を押す
- Identities一覧のiOS Distributionを選択し、Profiles一覧に作成したProfileがあるか確認。ない場合は左下の更新を押す。
- アプリの[Build Setting] → Provisioning Profileの欄に作成したProfile名が出てくるので選択。
- [Product]→[Scheme]→[Edit Scheme]を開き、Archiveを選択し、OK
- [Product]→[Archive]→[Distribute]を選択、真ん中の[Save for...Ad Hoc..]を選択しNext
- 作成したProfileを選択してExport
- IPAファイルが出来上がったはずなので、TestFlightのページからアップロード

### 新たな端末を追加した場合
1. まずdeveloper.apple.comのページで該当のProvisioningProfileに端末を追加します。
2. メニューバーの[Xcode] → [Preference] → [Accounts] → View Detailsを開き、左下のrefreshボタンを押す。
- Xcodeを再起動
- 上記に書いてある手順でipaファイルを生成し直せばOK	

### リンク
- テスター用の導入マニュアル
http://nanapi.jp/45704/
WordPress、the_excerpt() <p>タグを削除する

WordPress、the_excerpt() <p>タグを削除する
==========


■about
----------

WordPress、the_excerpt() <p>タグを削除する




■code
----------

```php:php
<?php echo get_the_excerpt(); ?>
```




■reference
----------

MaWDW: WordPress、<?php the_excerpt(); ?>から<p>タグを削除する
http://make-a-web-design-workflow.blogspot.jp/2013/03/wordpress-theexcerpt.html
ジオデータのビジュアライズはじめの一歩(地図の表示)

D3.jsを使ってジオデータのビジュアライズができることを目指した第一回勉強会のまとめ。
**環境設定・地図データの用意・表示と色の変更を行った。**

#環境設定
##簡易サーバの用意
表示のために簡易サーバーを作成する。終わったら止めるのを忘れずに(Ctrl+C）

1.自分の「共有」(shared)フォルダの下に適当な名前のフォルダを作る(Geoworkingとした)。

※共有のパスがOSのバージョンによって違うようだ。shareの人とsharedの人がいた。自分の環境にあわせて変える。

2.ターミナルを開き、````cd / Users/Shared /Geoworking(任意のフォルダ名)````と入力

※さっき作ったフォルダのパス。share/sharedに注意。

3.````python -m SimpleHTTPServer 3000````と入力

4.ブラウザでhttp://localhost:3000 にアクセスできるか確認。

これで完了。

#地図データの用意
国土地理院のデータをダウンロードし、GeoJSON形式に変換する。

1.国土数値情報より任意の都道府県の年度のデータをダウンロード
http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03.html

2.QGISをダウンロード＆インストール
http://www.kyngchaos.com/software/qgis

必要なのは 以下。先にQGISをインストールしようとすると怒られるので、他のものを先に行う。

 -  GDAL Completeと同梱のNumpy
 -  GSL framework
 -  Matplotlib
 -  QGIS本体

3.先ほどDLした地図データをGeoJSONに変換する。QGISでDLしたフォルダの中のshapeファイル(拡張子shp)を開き、

**レイヤー⇒名前を付けて保存⇒形式でGeoJSONを選択して保存**、GeoWorkingフォルダ内に格納。
私は東京をDLしたので「Tokyo.json」としました。

#表示

1.htmlファイルを用意。test.htmlとし、Geoworkingフォルダに格納。

````html:test.html
<!DOCTYPE html>
<meta charset="utf-8">
  <body>
    <div id="map"></div>
    <script src="http://d3js.org/d3.v3.min.js"></script>
    <script src="mapping.js"></script>
</body>
```
2.JavaScriptのファイルを用意。mapping.jsとし、Geoworkingフォルダに格納。
sawamur@githubの投稿を流用させてもらった。
http://qiita.com/sawamur@github/items/ec32237bcbaaba94108d
"Tokyo.json"の部分を自分が作成したJSONファイルのの名前に変える

```js:mapping.js

(function() {
    var g,
        width = 1000,
        height = 800;

    // svg要素を作成し、データの受け皿となるg要素を追加している
    map = d3.select('#map').append('svg')
        .attr('width', width)
        .attr('height', height)
        .append('g');

    // 同じディレクトリにあるgeojsonファイルをhttp経由で読み込む    
    d3.json("Tokyo.json", function(json) {
           var projection,
                 path;

           // 投影を処理する関数を用意する。データからSVGのPATHに変換するため。
           projection = d3.geo.mercator()
                  .scale(45000)
                  .center(d3.geo.centroid(json))  // データから中心点を計算
                  .translate([width / 2, height / 2]);

            // pathジェネレータ関数
            path = d3.geo.path().projection(projection);
           //  これがenterしたデータ毎に呼び出されpath要素のd属性に
           //  geoJSONデータから変換した値を入れる                

            map.selectAll('path')
            .data(json.features)
            .enter()
            .append('path')
            .attr('d', path)
            .attr("fill", function(d){
                // 適当に色を塗るなど
                return "hsl(0,50%,10%)";
            })
            .attr("stroke","hsl(80,10%,80%)" )
            .on('mouseover', function(d){
                // mouseoverの時のインタラクション
            })
            .on('click', function(d) {
                // clickされた時のインタラクション
            });
    });

})();
```

3.ブラウザから開く。

`http://localhost:3000/`
にアクセスするとフォルダ内のファイルが表示されるため、そこからさっき作った `htmlファイル(test.html)` を選ぶと地図が表示される。縮尺によってうまく表示されない場合があるが、その場合は `.scale(45000)` の部分をいじってやる。

4.地図が表示されるので、色を変えたりして遊ぶ。

次回は「何か動かしてみよう」とのこと
SoftLayerでSSL接続する方法

SoftLayerでは、SSL-VPNとPPTP VPNどちらかを選択可能である。

# 準備
1. https://control.softlayer.com/ にて、Account - Users
2. usernameをクリックし、VPNパスワードを設定
3. Edit Userをクリックして保存
4. Account - Usersで、VPN Accessをクリック
5. VPN typeに、SSL | PPTP | SSL/PPTP を指定し、Save  
※1アカウントしかPPTPを選択できないが、チケットをオープンすれば複数アカウントでも選択可能

#SSL-VPN
## Windows / Mac
### トップページから
1. Firefoxにて、http://www.softlayer.com へアクセス
2. 右上にあるVPN
3. アカウント、パスワード（SSL-VPN用のパスワード）を入れてログイン
4. SSL-VPN確立

### コントロールパネルから
1. Firefoxにて、https://control.softlayer.com/ へアクセス
2. Support - Help - SSL-VPN Login
3. アカウント、パスワード（SSL-VPN用のパスワード）を入れてログイン
4. SSL-VPN確立

### 専用クライアントを使用する方法
1. Array Networks SSL Clientをインストール  
[Windows 32-Bit](https://vpn.lax01.softlayer.com/prx/000/http/speedtest.dal05.networklayer.com/array/ArrayNetworksL3VPN_WIN.zip)  
[Windows 64-Bit](https://vpn.lax01.softlayer.com/prx/000/http/speedtest.dal05.networklayer.com/array/ArrayNetworksL3VPN_WIN64.zip)  
[Linux](https://vpn.lax01.softlayer.com/prx/000/http/speedtest.dal05.networklayer.com/array/ArrayNetworksL3VPN_LINUX.zip)  
[Mac OS](https://vpn.lax01.softlayer.com/prx/000/http/speedtest.dal05.networklayer.com/array/ArrayNetworksL3VPN_MAC.zip)  
2. Profiles - New  
Profile Name: 任意  
SPX Host or IP: vpn.tok01.softlayer.com ※[VPNアクセスポイント](http://knowledgelayer.softlayer.com/procedure/ssl-vpn-connections)  
SPX Host user name: SoftLayerアカウント  
SPX Host password: VPN用パスワード  
Re-enter password: VPN用パスワード  
3. Save後、作成したプロファイルを作成し、Connect
4. SSL-VPN確立  

# PPTP-VPN
## Windows
## Mac
1. システム環境設定 - ネットワーク - 新しいサービスの作成  
インターフェイス: VPN  
VPNタイプ: PPTP  
サービス名: 任意  
2. 構成 - 構成を追加  
サーバアドレス: pptpvpn.sjc01.softlayer.com ※[VPNアクセスポイント](http://knowledgelayer.softlayer.com/procedure/set-pptp-vpn-mac-os-x-10x)  
アカウント名: SoftLayerアカウント　　
3. 認証設定 - パスワード
SSL接続用パスワードを入力  
4. 接続  
※メニューバーにVPNの状況を表示をチェックしておくと、接続状況が分かりやすい。

# トラブルシューティング
## Firewallでブロックされてないか確認
Firewallにて、Array Networks SSL Clientからのインターネットアクセスがブロックされていない事を確認。
## ログ解析
専用クライアントをインストールすると、Array VPN Client Loggerもインストールされるので、ログを取得して解析してみる。
## ネットワークのアドレス体系の確認
ローカルのネットワーク環境が192.のアドレス体系であれば問題なく使えますが、10.のアドレス体系の場合には、すべてのネットワークトラヒックがVPNトンネル側に向いてしまう事がある。
ChefでJenkinsを導入したい


### 必要なレシピをBerkshelfで取ってくる

```Berkshelf
source "https://api.berkshelf.com"

cookbook 'jenkins'
```

### nodeファイルにjenkinsを追加する

```json:jenkins.json
{"run_list":[
	"jenkins::java",
	"jenkins::master"
]}
```

### 実際にプロビジョニングしてみる（Vagrantのとき）

※事前に`ssh [yourhost]`で対象ホストに入れるようにしておく。

やること

* 仮想マシンを壊して、立てる
* knife soloでレシピを適用してゆく

コマンドは下記の通り

```bash:コマンド
yes | vagrant destroy [your_host] --force && vagrant up [your_host] && knife solo bootstrap [your_host]
```

問題なくプロビジョニングできてたら
`http://[your_host]:8080`にアクセスしてみる。
無事に表示されてるとイイネ。


vagrantとか、knifeなどの必要な下準備は下記を参考にするとよさそう。丁寧に書かれています。
http://qiita.com/amasok23/items/2483f5f3e9fe371d1d92
Error:compileSdkVersion android-L requires compiling with JDK 7

Android-Lのビルドをしたら、これで怒られました。
いままでJDK６だったので、きにならなかったのですがこれを機に新しいSDKをいれようとおもいました。
だけど、新しいのはJDK8ですよね。
JDK７をいれたらそれで問題ないんだけど、せっかくなのでJDK８をいれました。

すると、JDK７じゃないのでやっぱりエラーがでます。
こういうときは下記のコードを app.gradle　にいれれば解決します。

android {
....
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}
Rails4でのデバッガーの使い方

意外とデバッガーの使い方を説明してる記事がネットに少ない気がしたので。

Rails3まではpry-debuggerというgemが有名でしたが、このgemは構造上Rail4では動かないため、Rails4ではpry-byebugというgemを使います。

# インストール

インストールはGemfileに以下のように記載して、`bundle install`。

```rb:Gemfile
group :development do
  # 高機能コンソール
  gem 'pry-rails'

  # デバッガー
  gem 'pry-byebug'
  gem 'pry-stack_explorer'

  # pryの入出力に色付け
  gem 'pry-coolline'
  gem 'awesome_print'

  # PryでのSQLの結果を綺麗に表示
  gem 'hirb'
  gem 'hirb-unicode'
end
```

# 使い方

使い方は簡単です。ソースコード上のブレイクポイントにしたい箇所に、以下のキーワードを記入します。
(書くのがめんどくさい人には、もっと短く書くための[pry-alias](http://kentaroimai.com/articles/6-binding.pry%E3%81%AF%E9%95%B7%E3%81%99%E3%81%8E%E3%82%8B)というgemもあります)

```rb
binding.pry
```

その上で、rails consoleを開いて目的のメソッドを実行すると、以下の画像のようにブレイクしてくれます。

![140625-0001.png](https://qiita-image-store.s3.amazonaws.com/785/23515/206668a9-c5ee-b567-796d-1cadf3dcabda.png)

あくまでconsole上での話なので、画像の下の方でやっているように`puts`などで好きな値を確認できますし、Model.findでDBの中を確認も出来るので、単体レベルのデバッグはこれだけでOKだと思います。

ちなみに、処理を先に進めるためには以下のコマンドを入力すればOKです。簡単。

|コマンド|用途|
|:------|:--|
|next|次の行へ(Next)|
|step|中の処理を追う(Step)|
|continue|処理を続行(continue)|
@android:style/Theme.Material.Light.DarkActionBar requires API level 21

新しくTheme.Materialを使おうとしたら上記エラーがでて困ったのですが、これは下記の設定で治ります。

app.gradleでは以下のように変更してください。

android {
    compileSdkVersion 'android-L'
    buildToolsVersion '20.0.0'
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 'L'
....
    }

ずっとまえ、Honycombでも似たようなことをしたのですがこれもそれと同じでした。
MySQL server has gone away への対応方法



## 対処方法

* my.cnf のバッファーサイズを上げる
* deprecated な名前を変更

## 状況

php-fpm がCPU100%食うようになったので、何かと調べたらログに以下が出ていた。

```
said into stderr: "NOTICE: PHP message: PHP Warning: MySQL server has gone away
```

上記でググると以下が出てきた。

MySQL: "Warning: MySQL server has gone away" | Drupal.org
https://www.drupal.org/node/259580


設定でメモリサイズを上げたらなおりました。
ExcelファイルをCSVファイルに変換する


``` VBA
    CsvFile = Split(TargetFile, ".")(0) & ".csv"
    Workbooks.Open (Path & "\" & TargetFile)
    Sheets(1).Select
    ActiveWorkbook.SaveAs Filename:=Path & "\" & CsvFile, FileFormat:=xlCSV
    ActiveWindow.Close
````

ファイルを保存する際に、保存するフォーマットを指定します。例えばテキスト形式やCSV形式での保存を行う場合に使います。

設定するには「SaveAs」メソッドの引数に「FileFormat」を設定します。

``` VBA
Dim book1 As Workbook

Set book1 = Workbooks("VBAsample.xls")

book1.SaveAs Filename:="C:¥excelsample¥OtherFile.xls", _
    FileFormat:="xlCSV"
````

指定できるファイルフォーマットは以下の通りです。

>定数	フォーマット	拡張子
xlCSV	CSV(カンマ区切り)	*.csv

その他は、http://www.officepro.jp/excelvba/book_new/index9.html
を参照
AndroidSDK，ADT-pluginをrev23に更新したらannotations.jarが無いと言われてビルドできない

# annotations.jarが削除される？

Eclipseのビルドパスで
%ANDROID_HOME%/tools/support/annotations.jar
への参照が途絶えていました．

当該ディレクトリを覗いてみると，確かにannotations.jarが存在ません．

## Android SDK platform-tools も rev20

ここをみると，
http://blog.be-style.jpn.com/article/59957311.html
Android SDK platform-toolsをアップデートするとありましたが，すでにrev20へ更新済でした．

# 結局

結局，PC内に残っていたannotations.jarを元あった場所にコピーして難を逃れています．
でも正しい方法とは思えません．

どなたかこうすれば良いよってあれば編集リクエストやコメントください．
無駄な関数を、継承を使って実装しないようにする

前の投稿
[__new__とか__init__とかを再整理](http://qiita.com/kou_tana77/items/75a13a21576f2dabfeca)
で

```py
class SheetData():
    def __init__(self, shtnam, toprow, keyclm, lftclm, rgtclm):
        self.data = get_sheet_data(shtnam, toprow, keyclm, lftclm, rgtclm)
        self.clmcnt = rgtclm - lftclm + 1

    def getRecordCount(self):
        return len(self.data) / self.clmcnt

    def get(self, rowidx, clmidx):
        return self.data[rowidx * self.clmcnt + clmidx]
```

```py
class CategoryStructure(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, "__instance__"):
            cls.__instance__ = super(CategoryStructure, cls).__new__(cls, *args, **kwargs)
            cls._data = SheetData(u"カテゴリ構成", 3, 2, 2, 5)
        return cls.__instance__

    def getRecordCount(self):
        return self._data.getRecordCount()

    def get(self, rowidx, clmidx):
        return self._data.get(rowidx, clmidx)
```

のように書いたけど、CategoryStructureに、SheetDataで実装している関数getRecordCount()とかget()が実装しているのが嫌なので、継承(多重継承)でどうにかできないか調べてみた。

下記のサイトを参考にした。
- [Python の super のメリットとデメリット - methaneのブログ](http://methane.hatenablog.jp/entry/20081227/1230400144)

継承元の__init__()は、明示的に呼び出す必要がある。
上記で書いたサイトに、多重継承の場合、__init__()に引数(self以外の引数)を指定する場合、継承元のクラスを明示的に指定する必要があるとのことなのでそのように実装。
(念のため、クラス名を指定しないで実装したら、自分が期待したように動作しなかった(SheetDataの__init__が呼び出されなかった))

変更は、CategoryStructureクラスだけ。

```py
class CategoryStructure(object, SheetData):
	def __new__(cls, *args, **kwargs):
		if not hasattr(cls, "__instance__"):
			cls.__instance__ = super(CategoryStructure, cls).__new__(cls, *args, **kwargs)
		return cls.__instance__

	def __init__(self, *args, **kwargs):
		#selfはインスタンスオブジェクトだけどシングルトンで実装しているので下記の判定は
		#上手く動く
		if not hasattr(self, "data"):
			#super(CategoryStructure, self).__init__(self, u"カテゴリ構成", 3, 2, 2, 5)
			#上記(コメント)だと、SheetData.__init__()が動かない
			#クラス名を明示的に指定して__init__()を呼び出す
			SheetData.__init__(self, u"カテゴリ構成", 3, 2, 2, 5)
```

まだまだ手探り状態だけど、取り敢えず、すっきりした。
httpie: POSTリクエストのBodyをファイルで定義したい

httpieでPOSTリクエストのBodyをファイルから提供する方法。リダイレクトで標準入力に与えるだけ。

```console
$ http -v POST localhost:8888/bbs/ < data.json
```

ファイルの中身

```json:data.json
{
  "id": "123456",
  "title": "Hello",
  "content": "Hello World!"
}
```

httpieから送られるPOSTリクエスト

```http
POST /bbs/ HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Content-Length: 70
Content-Type: application/json; charset=utf-8
Host: localhost:8888
User-Agent: HTTPie/0.8.0

{
    "content": "Hello World!",
    "id": "123456",
    "title": "Hello"
}
```
特異メソッドからPrivateメソッドは呼べないけど同名のメソッド名を付けたい時

```rb
class A
  def self.calls
    private_call
  end

  private

  def private_call
    p "get private!"
  end
end

A.calls
#=> NotForundLocalMethod (こんな感じのException)
```
こんな感じでエラーになるが、どうしても`calls`で呼び出したいときは、ほぼそのまま

```rb
class A
  def self.calls
    A.new.calls
  end

  def calls
    private_call
  end

  private

  def private_call
    p "get private!"
  end
end

A.calls
#=> get private!
```
これで呼べる
全てのWebサービス/Appにやめてほしいこと

1. **すぐクラッシュする**
1. **モバイル対応してない**
1. **拡大出来ない**
1. **デザインが先進的過ぎてなにがなんだか分からない**
1. **メール認証を要求してくる**
1. クソ重いページ
1. 動画で説明しようとしてくる
1. ファーストビューに知りたいことが書いてないページ
1. モバイル版がただ情報量を少なくしただけ
1. めっちゃメール送ってくる
1. 反応が遅い
1. やたら沢山説明が書いてあるけど、どこからどう登録出来るか分からないページ
1. やたら沢山説明が書いてあるけど、実際どんな画面なのか分からないページ
1. やたら沢山説明が書いてあるけど、実際使うとどんな感じなのか分からないページ
1. ページが遅い
1. 無駄に登録フォームの入力要素が多い(4つ以上はアウト。Twitch)
1. 「これをこうしてください」みたいなのが沢山書いてある
1. 住所の番地を半角入力したら怒られる
1. 全体的に何かしたら怒られる
1. チュートリアルがインタラクティブ過ぎていちいちウザい
1. フリー素材の写真の人がなんか喋ってる写真がある
1. とにかく遅い
1. やたらレビューをさせようとしてくる
1. クソ重い処理
1. 自前スクロール（Twitter/Gmail Mobileのアレ）
1. ログアウトボタンが目立つところにある
1. フォームにクリアボタンをつける
1. あまりメニューが多くないのにOff-Canvasメニュー（ボタン押したら横から出てくるやつ）
1. よくわからないアイコン
1. **「戻る」したら最初に戻る無限スクロール**

**「戻る」は基本的人権**

ちなみに追記は大歓迎です

Railsの時代遅れ云々よりもよっぽど切実です。

こぴー：http://kaiinui.com/drafts/2014-06-27-stop-doing-that.html
AngularJSと連携できるAPIファーストWebフレームワーク「Synth」のチュートリアル

## はじめに

[AngularJS](https://angularjs.org/)は素晴らしいフロントエンドフレームワークですが、それに見合うバックエンドのフレームワークがなかなか見つかりません。

[AngularJS+PHP+MySQLで簡単な名簿アプリ](http://qiita.com/naga3/items/cacb8182ad79dbbf6e64)でPHPや、[MongoDB+Express+AngularJS+Node.jsでシンプルなCRUDアプリ作成](http://qiita.com/naga3/items/e63144e17cb1ab9e03e9)でExpressのバックエンドを試してみましたが、どうもしっくり来ず。

そんな中、APIを提供することに徹したフレームワーク[Synth](http://www.synthjs.com/)を見つけ、これが求めていたものかもしれない、と思いチュートリアルを試してみることにしました。

## 必要なプログラム

```text
Node.js: ver. 0.10.0 以上
npm: ver. 1.3 以上
MongoDB
```

自分は以下の環境で作成しました。

```text
OS: Ubuntu ver. 12.04 LTS(precise64)
Node.js: ver. 0.10.29
npm: ver. 1.4.14
MongoDB: ver. 2.6.3
```

MongoDBのサービスを起動しておいてください。

## Synthのインストール

```text
npm install -g synth
```

## アプリのひな形作成

```text
synth new my_app
```

これでmy_appディレクトリにツイートアプリのひな形が作成されます。
データベース「tweets-db」のコレクション「tweets」にツイートを保存してゆくような形。

```text
cd my_app
```

ディレクトリに入り、

```text
synth install -b
```

npmを使用したバックエンドパッケージのインストール、

```text
synth install -f
```

bowerを使用したフロントエンドパッケージのインストールを行います。

## バックエンド

back/back-app.js がエントリポイントだと思います。

### GETメソッド

back/resources/tweets/getTweets.js に最初から作られています。
内容は以下のような感じ。

```js
exports.getIndex = function (req, res) {
  return req.db.collection('tweets').find()
    .sort({ created_at: -1 })
    .limit(30)
    .toArray().then(function (tweets) {
      return {
        tweets: tweets
      };
    });
};
```

resourceディレクトリの中にソースを作成するとAPI呼び出し用になります。
getIndexという名前により、/api/tweets にGETでアクセスしたときにtweetsコレクションの中身をJSONで取得できるようになります。
例えば、getIndexという名前をgetTestに変更すると、/api/tweets/test で取得できる感じです。
getTweets.jsというファイル名は特に決まりは無いようです。

### POSTメソッド

back/resources/tweets/ディレクトリにcreateTweets.jsを作成してpost関数を追加します。
こちらもディレクトリ名、関数名は決まっていますが、ファイル名は適当で構わない感じです。

```js:createTweets.js
exports.post = function (req, res) {
  if (!req.body.content) throw 422;

  return req.db.collection('tweets').insert({
    content: req.body.content.slice(0, 140),
    created_at: new Date()
  });
};
```

これで /api/tweets にPOSTでアクセスすると新しいツイートを追加できるようになります。

## フロントエンド

### AngularJS

front/js/controllers/tweets.jsのcontrollerメソッド内に以下を追記します。

```js:tweets.js
$scope.publish = function () {
  $http.post('/api/tweets', { content: $scope.newTweet })
  .success(function (tweet) {
    $scope.tweets.unshift(tweet);
  });
  $scope.newTweet = '';
};
```

2行目、$httpのDIも忘れずに追加してください。

```js:tweets.js
.controller('tweetsController', function ($scope, $http, data) {
```

全体としてはこんな感じです。

```js:tweets.js
angular.module('my_app')
.controller('tweetsController', function ($scope, data, $http) {
  $scope.tweets = data.tweets;
  $scope.publish = function () {
    $http.post('/api/tweets', { content: $scope.newTweet })
    .success(function (tweet) {
      $scope.tweets.unshift(tweet);
    });
    $scope.newTweet = '';
  };
});
```

### HTML

front/html/tweets/getIndex.jadeにテキストエリアを追加します。先頭部分に以下を追記してください。

```jade:getIndex.jade
textarea(ng-model="newTweet")
button(ng-click="publish()", ng-disabled="newTweet.length == 0") Publish
```

## サーバ起動

```
synth s
```

でサーバを起動し、

http://localhost:3000/
にアクセスするとツイートアプリが動きます。

## おわりに

バックエンドの本質的な部分のみをシンプルに書けると感じました。
もう少し深く試してみたいと思います。
ImageMagickを使ったグレイスケール、反転、RGB入れ替えについて

# 元画像
![img.png](https://qiita-image-store.s3.amazonaws.com/0/40469/e4a9fc4d-fa72-2ce2-ac74-9399649105b8.png)

# グレイスケール
```bash
convert img.png -type GrayScale img_gray.png
```
![img_gray.png](https://qiita-image-store.s3.amazonaws.com/0/40469/7225f76e-702b-4ed0-068c-5e192998ddbe.png)

# 反転
```bash
convert img.png -negate img_negate.png
```
![img_negate.png](https://qiita-image-store.s3.amazonaws.com/0/40469/196e0f7a-0782-85f1-1fb4-9264c3b810dd.png)

# RGB入れ替え
RGBを入れ替えるにはいったんR,G,Bの画像に分解してから結合する。

## Rのみ
```bash
convert img.png -fX R img_R.png
```
![img_R.png](https://qiita-image-store.s3.amazonaws.com/0/40469/2dc09993-a23e-de06-28fd-3ddfc0f07db7.png)

## Gのみ
```bash
convert img.png -fX G img_G.png
```
![img_G.png](https://qiita-image-store.s3.amazonaws.com/0/40469/e850c226-cf74-2cef-8f7d-5dff130bd20a.png)

## Bのみ
```bash
convert img.png -fX B img_B.png
```
![img_B.png](https://qiita-image-store.s3.amazonaws.com/0/40469/dd9ff2be-d4c2-601f-c16e-611574651d9d.png)

## RGB → RBGに入れ替え
```bash
convert ( img_R.png img_B.png img_G.png ) -set colorspace RGB -combine -set colorspace sRGB img_RBG.png
```
![img_RBG.png](https://qiita-image-store.s3.amazonaws.com/0/40469/f367eeb5-fca6-493b-75ae-5e69292c6909.png)

## RGB → GRBに入れ替え
```bash
convert ( img_G.png img_R.png img_B.png ) -set colorspace RGB -combine -set colorspace sRGB img_GRB.png
```
![img_GRB.png](https://qiita-image-store.s3.amazonaws.com/0/40469/350288b1-ea6d-e3b3-3523-9ed947ec0d64.png)
FFFFFFFFが冒頭にあるUDIDは偽物

備忘録

テストアプリ配布の為にUDIDを受け取る必要がありますが、
**FFFFFFFF**が冒頭についているUDIDは間違いです。

iOS7以降の端末でアプリ経由でUDIDを取得しようとすると、
見かけ上、問題なく表示されるので、注意が必要です。
（桁数が同じく40桁なのも、紛らわしいです）

二度手間にならないよう、
iTunesやiPhone構成ユーティリティで
確認するように伝えましょう。

mac、winでの取得方法について、まとめました。
http://qiita.com/stakei1/items/8bef04dab56ea273bc56
[Ruby] RSpecのexpectを読んでいたら



```ruby/gems/2.1.0/gems/rspec-expectations-2.14.5/lib/rspec/expectations/syntax.rb
  def expect(*target, &target_block)
    target << target_block if block_given?
    raise ArgumentError.new("You must pass an argument or a block to #expect but not both.") unless target.size == 1
    ::RSpec::Expectations::ExpectationTarget.new(target.first)
  end
```

定義部分だけ見ると

```ruby
def expect(*target, &target_block)
```

targetを配列として受け取り（*target）、かつblockも渡せる構造と思いきや、

```ruby
  raise ArgumentError.new("You must pass an argument or a block to #expect but not both.") unless target.size == 1
```

結局`target.size == 1`以外はエラーを吐く。

例外メッセージを明示的に設定したかったから？

こんな書き方もあるのかと勉強になりました。
git configでユーザー情報を設定してもmagitで参照できない問題

# WindowsでのEmacsホームディレクトリ

ちょっとハマったのでメモがてら。WindowsでEmacsを使う場合、.emacs.dを読み込む位置はホームディレクトリになるのですが、ほかのOSと違い、Windowsの場合は

* $HOMEが設定されてる場合はその場所
* レジストリに切られている場合はその場所
* AppData/Roaming配下

上位から優先順位でこうなります。Windowsの場合はデフォルトで切られている環境変数は`HOMEPATH`であり`HOME`ではありません。なので`HOME`が無いと自動的に`Users/foo/AppData/Roaming`配下がEmacsでのホームディレクトリになります。つまりここから`.emacs.d`を読みに行きます。

# gitconfigの値

で、何にハマったかといえば、gitで

```
git config --global user.email "foo@bar.com"
git config --global user.name "Foo Bar"
```

と設定すればcommit時のauthor情報として認識してくれる訳ですが、git bashのHOMEは大体の場合は`Users/foo`になってるわけです。つまり`.gitconfig`が置かれる場所は`Users/foo`になるわけです。

…なんとなくわかりましたか？Emacsが参照するホームディレクトリとgit bashが参照するホームディレクトリが違うため、git configを設定してもmagitでauthor情報が参照できずに

```
unable to auto-detect email address
```

と怒られてしまうのです。でも`git config --list`みてもちゃんと設定されている。あれ？あれあれ？となるわけですね。これで1時間費やしました。最終的には

* 環境変数で`HOME`を切って`.emacs.d`を移動させる
* .gitconfigを`AppData/Roaming`に移動する

のどちらかですけど、通常は`HOME`を設定して`.emacs.d`を移動させたほうがいいでしょう。

# Windowsの環境変数

まあちゃんと`HOME`を設定しとけよ！という話なんですけど、ついつい忘れがちで意外とハマりそうです。ちなみにWindowsでの環境変数設定は[Rapid Environment Editor](http://www.rapidee.com/en/about)というソフトウェアが非常に便利でおすすめです。
[Java] Google製Stopwatchが便利

Javaでプログラムの実行時間を表示したいときに[guava](https://code.google.com/p/guava-libraries/)ライブラリの[Stopwatch](http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/index.html)が便利だという話。
実行時間の表示単位(μs, ms, s, etc.)を自動的に判断して表示してくれる。


# コード

```java
import com.google.common.base.Stopwatch;

/**
 * GuavaのStapwatchのデモ
 */
public class StopwatchDemo
{
    public static void main(String[] args) throws InterruptedException
    {
        Stopwatch sw = Stopwatch.createUnstarted();

        long[] millis = {0, 0, 0, 1, 10, 100, 1000, 10000};
        int[] nanos   = {10, 100, 1000, 0, 0, 0, 0, 0};

        for (int i = 0; i < nanos.length; i++) {
            sw.start();
            Thread.sleep(millis[i], nanos[i]);
            System.out.print(String.format("%5dms %4dns -> ", millis[i], nanos[i]));
            System.out.println(sw.stop());
            sw.reset();
        }
    }
}
```

# 実行結果
実行時間によって表示される時間単位(μs, ms, s)が動的に変わっているのが分かる。

```bash
    0ms   10ns -> 777.5 μs
    0ms  100ns -> 590.1 μs
    0ms 1000ns -> 704.9 μs
    1ms    0ns -> 811.9 μs
   10ms    0ns -> 9.868 ms
  100ms    0ns -> 99.69 ms
 1000ms    0ns -> 999.8 ms
10000ms    0ns -> 10.00 s
```
[Rails] PostgreSQLのテーブルやカラムにコメントをつけてmigrationする

調べるといろいろそれっぽい情報はでてきましたが、古い情報が多く、いろいろ試した結果 Rails 4.1 でまともに使えたのは [migration_comments](https://rubygems.org/gems/migration_comments) だけでした。

下記のようにオプションとして `:comment` が渡せるようになったり、

```rb:db/migrate/20140627012348_add_prefecture_id_to_users.rb
class AddPrefectureIdToUsers < ActiveRecord::Migration
  def change
    add_column :users, :prefecture_id, :integer, comment: '都道府県ID（prefectures.id）'
  end
end
```

下記のようにコメントを付与するだけの migration を作ったりもできます。

```rb:db/migrate/20140515025651_add_comments_to_users.rb
class AddCommentsToUsers < ActiveRecord::Migration
  def up
    change_table :users do |t|
      t.comment 'ユーザを管理するテーブル'
      t.change_comment :name, '名前'
      t.change_comment :email, '電子メールアドレス'
    end
  end
end
```

## うまく動かなかった gem

ちなみに試した gem は下記があります。

* column_comment
* schema_comments
* pg_power
(メモ)Chef+Docker+Test-kitchen+Serverspec


OSX上でお手軽chefci環境の再構築めも(整理中)
vagrantは使わない
- Ruby >= 2.0
- Docker >= 1.0(OSX,boot2docker)
- Test-kitchen >= 1.0
- Serverspec

#### 準備(Ruby,Docker)
- [Ruby] OS X Mavericks (10.9) に Homebrew + rbenv で Ruby をインストールする
http://www.d-wood.com/blog/2014/03/20_5847.html

- はじめてのDocker on Mac OS X
http://dev.classmethod.jp/tool/docker/getting-started-docker-on-osx/
boot2docker + docker

```
# インストール
brew update
brew install boot2docker docker
# 確認
boot2docker up
boot2docker ip
```
※virtualboxインストール直後などはhost onlyネットワークが上手く動かず再起動が必要かも

- Public docker images
https://github.com/dotcloud/docker/wiki/Public-docker-images

```
docker pull centos
docker images
```



#### Test-kitchen + Docker

```
gem install kitchen-docker --no-rdoc --no-ri

kitchen init --driver=kitchen-docker
```

- DockerによるChefのCookbooks開発
http://qiita.com/ijikeman/items/dcbb76a54c331d2b6542

- Mac OS Xでkitchen-docker
http://qiita.com/sawanoboly/items/56b05d6369ad082a9ad9

```.kitchen.yml（例）
driver:
  name: docker
  binary: /usr/local/bin/docker
  socket: <%= ENV['DOCKER_HOST'] %>

platforms:
  - name: centos-6.4
    driver_config:
      image: centos:6.4
      platform: centos
      privileged: true
```

- test-kitchenのつかいかた
http://qiita.com/sawanoboly/items/9f560bd63ad0712b17ba

```
kitchen test --destroy=never
kitchen list
kitchen login default-centos-64
```


#### Test-kitchen + Serverspec

- 既存のchef cookbookをtest-kitchen対応させていく。
http://qiita.com/futoase/items/3a77a7d86ea896488b6b





#### おまけ
##### dockerコンテナ上でulimit変えたい
- kitchen-dockerでulimitのエラーを回避する方法
http://qiita.com/polidog/items/baa659c8f896e6696450

上記の方法がよさそう。下記はscriptで無理矢理変更する例。

```docker@boot2docker-/var/lib/boot2docker/bootlocal.sh
#!/bin/sh
grep "ulimit -n 65535" /etc/init.d/docker && exit
sudo sed -i "s#^start() {#start() {\n    ulimit -n 65535#g" /etc/init.d/docker
sleep 3
sudo /etc/init.d/docker restart
```

- docker 1.0, OSX mavericks, part2
http://yukaary.blogspot.jp/2014/06/docker-10-osx-mavericks-part2_3912.html

##### dockerVMでアレコレする

- Docker: How to Run 'nsinit' in the boot2docker VM
http://mogproject.blogspot.jp/2014/06/docker-how-to-run-in-boot2docker-vm.html
GIF生成にlibGDを使う

最近Twitterが今更ながら、今更ながら、GIFアニメの投稿をサポートしました。
なのでGIFアニメを投稿する機能の実装を迫られた方も一定数いらっしゃるのではないでしょうか。

というわけで今回はiOSでGIFアニメーションを生成してみましょう。
ところでiOSのImageIO.frameworkには、GIFアニメーションを生成できる関数がありますが、
今回はこれは使いません。
なぜかというと、ファイルサイズが大きくなるとどうも色が不安定で、
正しいGIFを出してくれないからです。
フレームワークのバグなのか仕様なのかわかりませんが、とにかく調子が悪いため、
libGDというGIFフレームワークを今回は使ってみます。

続きはこちらでどうぞ
[WOWDEV » libGDを使う](http://wowdev.jp/?p=1344)

手っ取り早く、iOSでlibGDを使いたいせっかちな方はこちらをどうぞ
すぐにビルドできます。
https://github.com/wowdevjp/libGD_iOS

----ここから宣伝↓↓----
今回この記事をかくきっかけになった、自社アプリ、mopicoを宣伝して終わろうと思います。

Motion & Picture Collage App

mopico( モピコ ) は、写真と動画をデコ・加工・編集して、
動くコラージュを作ることができる新感覚のアプリです。

http://mo-pi-co.com/

是非無料ですのでダウンロードしてみてください。

## 謝辞
@alt さん、誤字の修正感謝申し上げます
[Ansible] 長時間のmake,configure時に反応が返って来ないとき

timeoutしている可能性があるのでpollとasyncの設定を足す。
pollは指定した秒数おきに状況を表示。
asyncは指定した秒数が経つと、現在のステップが終わっていなくても、次のステップにいく。

```yaml
- name: make ffmpeg
  command: make chdir=/tmp/ffmpeg
  sudo: yes
  poll: 30
  async: 600
```
3桁までの素数を要素に持つリストを生成する関数


表題どおり、3桁までの素数を要素に持つリストを生成する簡単な関数です。
誤りやもっと良い方法があれば、指摘してもらえると嬉しいです。


```python
def generate_primes():
    """
    3桁までの素数のリストを生成する。
    :return:3桁までの素数のリスト
    """
    primes = []
    for i in range(2,1000):
        flag = True
        for j in range(2,i):
            if i%j == 0:
                flag = False
        if flag:
            primes.append(i)
    return primes

```
[Android] Android L Preview 雑感

Google I/Oも無事に終わり、Android Lのプレビューが出ましたので、取り急ぎちょっと触ってみた感想を書きます。


## プレビュー版の取得方法

エミュレータはSDK Managerを更新するとL Preview版が落とせるようになります。
実機デバイスのイメージは今のところNexus 5(GSM/LTE)とNexus 7(2013 wifi)のみがあろそうです。

http://developer.android.com/preview/setup-sdk.html

## 感想
以下はエミュレータ版(ARM)を触ってみた感想です。

* エミュレータ自体の起動は遅め
* 一度アプリが起動してしまうと操作は軽快(ART効果？)
* デフォルトでDalvikでなくてARTが使われてる。さよならDalvik。
`b50e0000-b510d000 r--p 00b18000 1f:00 561        /system/framework/arm/boot.art`
とか
`b5403000-b540a000 r--p 002ec000 1f:00 747        /system/lib/libart.so`
とか…

* 4.4.4は開発者オプションにartかDalvikかを選択できたが、Lでは選択する場所すらなくなってる
* API Demoが動かない。。。(Previewだから仕方無しかも)
* 電卓もMaterial Designに。関数電卓と一緒になってて確かにわかりやすい。電話もI/Oのプレゼンと同じ
* コマンドプロンプトでTAB補完が効くようになってる(前はちがったような…)
* Linux カーネルバージョンは3.4.0 `Linux version 3.4.0-gd853d22 (nnk@nnk.mtv.corp.google.com) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #1 PREEMPT Tue Jul 9 17:46:46 PDT 2013`
* CodeNameはやっぱり"L"。結局LはLのまま分からずじまい。getprop見てもLでした…
* ところどころ文字潰れ
![Screenshot_from_2014-06-27 09:20:13.jpg](https://qiita-image-store.s3.amazonaws.com/0/45799/aa3cdda2-36aa-da7b-3986-d997758c1ab5.jpeg)

* イースターエッグがなぞのflv。間に合わなかったのか出すのが嫌なのか…
![Screenshot_from_2014-06-27 09:19:30.jpg](https://qiita-image-store.s3.amazonaws.com/0/45799/eda4d67a-41b0-9c62-3111-4c768f5f7a0d.jpeg)
Go でフォルダに含まれる特定の拡張子のファイルだけ列挙するには path/filepath を使う


# 概要
フォルダに含まれる特定の拡張子のファイルだけを処理したいときには，`filepath.Glob(pattern string)` が超便利！

# サンプル

```text:ディレクトリを指定してその下のcsvファイルを列挙する
package main

import (
	"fmt"
	"os"
	"path/filepath"
)

func main() {
	targetDir := "."
	if len(os.Args) == 2 {
		targetDir = os.Args[1]
	}
	pattern := targetDir + "/*.csv"
	files, err := filepath.Glob(pattern)
	if err != nil {
		panic(err)
	}
	for _, file := range files {
		fmt.Println(file)
	}
}
```

```text:実行例
% go run filepath_sample.go ../kagome/dic/_converter/mecab-ipadic-2.7.0-20070801                                                                    
../kagome/dic/_converter/mecab-ipadic-2.7.0-20070801/Adj.csv
../kagome/dic/_converter/mecab-ipadic-2.7.0-20070801/Adnominal.csv
../kagome/dic/_converter/mecab-ipadic-2.7.0-20070801/Adverb.csv
../kagome/dic/_converter/mecab-ipadic-2.7.0-20070801/Auxil.csv
../kagome/dic/_converter/mecab-ipadic-2.7.0-20070801/Conjunction.csv
…snip
```

# ディレクトリの指定にも * が使える！

```go:2階層下のフォルダのファイルを列挙する
package main

import (
        "fmt"
        "path/filepath"
)

func main() {
        pattern := "./*/*/*.csv"
        files, err := filepath.Glob(pattern)
        if err != nil {
                panic(err)
        }
        for _, file := range files {
                fmt.Println(file)
        }
}
```

```sh:こんな感じのディレクトリ構造で実行すると・・・
% tree a                                                                                                                                            
a
├── a.csv
├── b
│   └── b.csv
└── c
    └── c.csv
% go run filepath_sample.go                                                                                                                         
a/b/b.csv
a/c/c.csv
```

おお！便利．
Jenkinsの時間とシェル実行時のdateでとれる時間が違う

かなしくなったのでもう忘れないようにメモ。

# 現象

Jenkinsの時間はJSTで正しく動いており、指定した時間に実行されているが、前日の日付やらをファイル名にくっつけようと「シェルの実行」で`date +%-m --date "1 day ago"`とか朝8時にしていたら一昨日の日付をとっていた。


# 確認結果

Jenkinsさんの時間表示は正しいのに…と思っていたのですが、9時以降はjobのなかの日付が正しくなるので、9って。。。と思ってマシンに普通に入ってみてみると、、

```
$ date
2014年  6月 26日 木曜日 23:39:00 UTC
```

UTC！！

Jenkinsさん自体は日付をJSTで解釈していたのですが、マシンはUTCで解釈しており、「シェルの実行」でdateとか打つとマシンの方の解釈しているタイムゾーンをとるみたいです。
時間、Jenkinsさんの時間だけじゃなくてちゃんとマシンでも確認するようにします。そして難しいことになるので、ちゃんと合わせたいと思います。。

みなさんも気をつけてください…


蛇足で日付の直し方メモ

```
$ sudo strings /etc/localtime
TZif2
TZif2
UTC0

$ sudo cp /etc/localtime /etc/localtime.20140627org
$ sudo cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ sudo strings /etc/localtime
TZif2
TZif2
JST-9

$ date
2014年  6月 27日 金曜日 08:43:17 JST
```


追記：
コメントいただいたのでこっちも直しておきました。

```
$ sudo cat /etc/sysconfig/clock 
ZONE="Asia/Tokyo"
UTC=false
```
SwiftでJSON-RPCを使う時のメモ

サーバとのデータのやり取りにJSON-RPCが個人的に好きなので使います。

JSON-RPCとは
===
>またRESTと違い対象がHTTPを受け付けるサーバーである必要がないというメリットがあり、これがwebsocketやメッセージングAPI、webworkerといったHTML5 APIと非常に相性がいいのです。
>またRPCというとXML RPCが有名ですが、JSON RPCはそれにくらべて以下のような特徴を持ちます
>
>プロトコルが軽量・シンプル
>名前つきパラメーター(namedparameter)
>バッチリクエスト

らしいです。詳しくはこちら
http://kagigotonet.hatenablog.com/entry/20121204/1354630831

使うライブラリ
====

AFJSONRPCClient
https://github.com/AFNetworking/AFJSONRPCClient

こちらが良さそうなので使います。
podでインストールして、swiftからobjective-cを読むにはBridging-Headerに記述。

サンプルコード(Client)
======

~~~swift
var client = AFJSONRPCClient(endpointURL: NSURL(string: "http://example.com/rpc" as NSString))
var param:NSArray = ["value1","value2"]
            
client.invokeMethod("addition",//getUidはJson-RPCのメソッド名
    withParameters:param,
    success: { (operation: AFHTTPRequestOperation!, responseObject:AnyObject!) in
//responseObjectは返ってくる値
        NSUserDefaults.standardUserDefaults().setObject(responseObject,forKey:"uid")
    }, failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in
        println("Error: \(error)")
    })
~~~

サンプルコード（Server）
=====

この辺のライブラリ使うのが良さそう
https://github.com/fguillot/JsonRPC

サンプルのままですがこんな感じ。

~~~php
<?php
require 'JsonRPC/Server.php';
use JsonRPC\Server;
$server = new Server;
// Procedures registration
$server->register('addition', function ($a, $b) {
    return $a + $b;
});
$server->register('random', function ($start, $end) {
    return mt_rand($start, $end);
});
// Return the response to the client
echo $server->execute();
~~~
CSS3から疑似要素はコロン２つ

MDNで`:before`の項目を読んでいたら気付いた。
https://developer.mozilla.org/ja/docs/Web/CSS/::before

以下引用。

```
::before の記法は、擬似クラスと擬似要素の見分けをはっきりさせるために、CSS 3 で導入されました。CSS 2で導入された :before の記法も、多くのブラウザで使えます。
```

とのことで、今まで通りコロン一個でも動くけど、今後のことを考えたら疑似要素に関してはちゃんとコロン2つで書いた方が良い。

疑似要素については以下を参照すること。
https://developer.mozilla.org/ja/docs/Web/CSS/Pseudo-elements