OmniAICreator/Qiita-1.07M huggingface dataset:
WP記事一覧でのページネーション


# WordPressの記事一覧テンプレート内における，ページネーションの実装例
プラグインを使わずに，functions.php内に記述するだけで出力できる．

## 「前の10件，次の10件」

```PHP
function pagination( $pages = '', $range = 4 ) {
    global $paged;
    if ( empty($paged) ) $paged = 1;

    if ( $pages == '' ) {
        global $wp_query;
        $pages = $wp_query->max_num_pages;
        if ( !$pages ) $pages = 1;
    }
 
    echo "<div class=\"pagination\">";
        if ( $paged > 1 ) 
            echo "<a href=\"".get_pagenum_link($paged - 1)."\" class='paginate_button left'>&lsaquo; 前の10件</a>";
        else 
            echo "<span class='paginate_button left'>&lsaquo; 前の10件</span>";
        if ( $paged < $pages ) 
            echo "<a href=\"".get_pagenum_link($paged + 1)."\" class='paginate_button right'>次の10件 &rsaquo;</a>";
        else 
            echo "<span class='paginate_button right'>次の10件 &rsaquo;</span>";
    echo "</div>\n";
    return;
}
```

## 「< 1 .. 3 4 5 6 7 .. 9 >」

```PHP
function pagination( $max_num_pages=0 ) {
	// Don't print empty markup if there's only one page.
	$max_num_pages = $max_num_pages ? (int)$max_num_pages : $GLOBALS['wp_query']->max_num_pages;
	if ( $max_num_pages < 2 ) {
		return;
	}

	$paged        = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
	$pagenum_link = html_entity_decode( get_pagenum_link() );
	$query_args   = array();
	$url_parts    = explode( '?', $pagenum_link );

	if ( isset( $url_parts[1] ) ) {
		wp_parse_str( $url_parts[1], $query_args );
	}

	$pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link );
	$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';

	$format  = $GLOBALS['wp_rewrite']->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : '';
	$format .= $GLOBALS['wp_rewrite']->using_permalinks() ? user_trailingslashit( 'page/%#%', 'paged' ) : '?paged=%#%';

	// Set up paginated links.
	$links = paginate_links( array(
		'base'     => $pagenum_link,
		'format'   => $format,
		'total'    => $max_num_pages,
		'current'  => $paged,
		'mid_size' => 2,
		'add_args' => array_map( 'urlencode', $query_args ),
		'prev_text' => __( '&lt;' ),
		'next_text' => __( '&gt;' ),
	) );

	if ( $links ) :

	?>
	<nav class="navigation paging-navigation" role="navigation">
		<div class="pagination loop-pagination">
			<?php echo $links; ?>
		</div><!-- .pagination -->
	</nav><!-- .navigation -->
	<?php
	endif;
}
```
GoogleMap での地名表記を任意の言語に変更する


大きな地図で見るなどの飛び先を GoogleMap にしていた時に、
地名の表記を確実に任意の言語で表示させたい場合があるかと思います。

https://www.google.co.jp/maps/@34.7900087,138.4240125,5z

![](http://i.gyazo.com/59c9492496997a4b9463875882932b67.png)

上の表記を英語に変更してみます。

## hl パラメーターをつける

hl パラメータをつけて、任意の言語の略名を指定してあげれば表示が変化します。

https://www.google.co.jp/maps/@36.9003781,137.5780652,6z?hl=en

![](http://i.gyazo.com/9cbbd43f80734d7e2845c3c8e03a837d.png)
CGFloatの小数点第一位までを文字列として取り出す


あるCGFloatがあって、その小数点第一位までを文字列として取り出したかった。結果としてこうなった。

```Swift
let someCGFloat: CGFloat = 0.25
var text = String(format: "%.01f", someCGFloat)
// 0.2
```
Swiftでクラス名を取得するメソッドを書いてみた


Swiftでクラス名を取得しようとすると、"モジュール名（プロジェクト名）.クラス名"みたいになってしまう。プロジェクト名がVanuatuだとすると、 **Vanuatu.ViewController** となる。例えば、ビューをUINibから生成したいときにnibNameにこれを指定すると落ちる。ViewControllerだけほしい。他にも、クラス名だけがほしい時があるはず。それで簡単なクラスメソッドを作ってみました。

```Swift
class func className() -> String {
    var className = NSStringFromClass(self)
    var range = className.rangeOfString(".")
    return className.substringFromIndex(range!.endIndex)
}
```

誰かのお役に立てれば。。あと、おかしな点がご指摘お願いします。。
Hubotを試してみたのでメモ

Hubotとは
=====
GitHub印のチャットbot

IRCだったり，最近有名な slack, HipChat といったチャットツールと組み合わせる事でお昼の時間の話相手から漫才の相方まで何でもこなしてくれる面白いやつ

詳しくはホームページで(英語)
https://hubot.github.com/

gihyo.jpでも解説コラムがあったので備忘録も兼ねてURLを貼っておく
http://gihyo.jp/dev/serial/01/hubot/0001

導入
=====
インストール
-----
Hubot自体は Node.js の npm でパッケージとして提供されているのでインストール自体は一発でできる。Hubotは CoffeeScript で書かれているのでインストールしていない人は同時にインストールしてしまおう。

```bash
$ npm install -g hubot coffee-script
```

あと，Hubotはデータの格納にデフォルトでredisを使うのでインストールしておく事。
(無くてもredisを使わない機能を使っている分には動作していたから必須という訳でもなさそう)

作成と起動
-----

```bash
$ hubot --create ohmybot
$ cd ohmybot
$ ./bin/hubot # もしくは hubot
```

これでHubotの作成と起動ができるようになる。
`hubot --create` をしていないディレクトリで `hubot` とだけしても，起動こそすれど他にはウンともスンとも言わないので **Hubot を作成したディレクトリ内で起動する事** 。

動作確認
-----

hubot に対してメッセージを送る書式は以下の3つ。

* hubot <msg>
* hubot: <msg>
* @hubot <msg>

また，これら3つのいずれかが「メッセージの先頭」に無いと反応しない。
以下が動作例

```bash
Hubot> hubot ping
Hubot> PONG # Hubot からの応答
Hubot> have to come first hubot ping # 無視される
Hubot> hubot: echo YO!
Hubot> YO! # Hubot からの応答
Hubot> @hubot die
Hubot> Goodbye, cruel world.
Hubot> $ # プロンプトに戻る
```

scripts
=====

上の動作確認以外のメッセージを試すと，hubotが反応するメッセージと反応しないメッセージがある事が分かる。
例えば `hubot ?` は反応しないけど `hubot help`だと反応するとか。(ちなみに`hubot help`はhubotで今使えるコマンドの一覧が出てくる)

この違いはどこか？ というと
`hubot --create` で作ったディレクトリの中の **scripts** というディレクトリ内にある「botスクリプトで定義されているかどうか？」で決まる。
ここには最初から動作確認用 / ジョーク用のスクリプト等が用意されており，また自分の自作スクリプトもこの中に作っていく事になる。ちなみにファイル拡張子が`.coffee`となっているのを見れば分かると思うが全てCoffeeScriptで書かれている。
自作スクリプトではJavaScriptを使うのも良いけど，折角沢山のサンプルがあるので個人的にはCoffeeScriptで書くことをオススメします。

とりあえず今回はこの辺で。
iOS8 CoreLocation

iOS8から位置情報を取得する方法が変わりました。
・位置情報を取得する旨を、プログラム側でRequestする必要があります。
・info.plistに、２つのKEYを設定する必要があります。

###位置情報を取得する旨を、プログラム側でRequestする

```objc:ViewController.m
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface ViewController () <CLLocationManagerDelegate>

@end

@implementation ViewController
{
    CLLocationManager *_manager;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    _manager = [CLLocationManager new];
    [_manager setDelegate:self];
    

    // iOS8未満は、このメソッドは無いので
    if ([_manager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        
        // GPSを取得する旨の認証をリクエストする
        // 「このアプリ使っていない時も取得するけどいいでしょ？」
        [_manager requestAlwaysAuthorization];
    }
    
    [_manager startUpdatingLocation];
}
```

###info.plistに、２つのKEYを設定する必要
![スクリーンショット 2014-09-19 1.51.42.png](https://qiita-image-store.s3.amazonaws.com/0/25625/18b7d99a-c893-21f4-647d-1eaaa41935b0.png)

```
<key>NSLocationWhenInUseUsageDescription</key>
<string>The spirit of stack overflow is coders helping coders</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>I have learned more on stack overflow than anything else</string>
```

あとは同じかな？
fluentdでout_fileで出力されるファイルのパスを固定する方法

### 困っていること

fluentdのout_fileを使っているときに、`path`のオプションでパスを指定しても、タイムスタンプや連番を付いて出力されてしまうので、出力するパスを固定することができません。

例えば以下のように設定すると、

    <match td.test>
       type file
       path /tmp/out
    </match>

以下のようなログが出て、パスを固定できません。

    /tmp/out.20140919_0.log
    /tmp/out.20140919_1.log
    
**パスが固定できないと運用監視ツールでログ監視ができないのでこまります**

### 解決法

で、出力するファイルのパスを固定する方法を考えてみました。
というかプラグインを作ってみました
↓

[Fluent::Plugin::FileOutputWithFixPath](https://github.com/fetaro/fluent-plugin-out-file-with-fix-path/blob/master/README.md)

使い方は簡単。

まずfluentで使うgemで`fluent-plugin-out-file-with-fix-path`というgemをインストールします

    # /opt/td-agent/embedded/bin/gem install fluent-plugin-out-file-with-fix-path

※ `/opt/td-agent/embedded/bin/gem`の部分はお使いの環境に合わせてください。

設定に以下のように書きます

    <match td.test>
       type file_with_fix_path
       path /tmp/out
    </match>

すると、出力されるファイルのパスが以下のように固定されます

    /tmp/out

弊害として、out_fileでは使えた`time_format`やら`compress`やらのオプションが使えなくなります。

もしよければ使ってみてください。
「gemの名前が長い！」というツッコミは勘弁してくださいｗ
wsgi, Bottle, Flask の速度差

ISUCON の季節ですね。 ISUCON では慣習的に各言語で代表的なマイクロフレームワークが使われるのですが、 Python では今のところ Flask がずっと使われています。

Flask は確かに、簡単なサンプルアプリを書くときの見た目はマイクロフレームワークになっています。
しかし、構造的には沢山のフック、シグナルがあったりしていて、重量級の設計になっています。

Flask 本体と Werkzeug を合わせると数万行のサイズです。単なる Hello World アプリでも、数十の関数呼び出しが裏で動いています。

Bottle も、 Flask と同じくマルチスレッド対応で、スレッドローカルを使ったコンテキストスタックがある、拡張機能もあるフレームワークですが、構造は Flask よりも大分質素です。
ソースコードも1ファイル3000行代で、その分フレームワークのオーバーヘッドも Flask の半分程度になっています。

Hello アプリでちょっとした計測をしてみました。 MacBook Air 2013 Mid (Core i5 1.3GHz) で、シングルスレッド・シングルプロセスの Hello アプリを、 wrk -t1 -c1 でベンチマークします。 Python は CPython 3.4.1, Web サーバーは Meinheld (Github最新版) です。

wsgi:

```
$ wrk -t1 -c1 http://localhost:6000/
Running 10s test @ http://localhost:6000/
  1 threads and 1 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   118.89us   46.59us   0.99ms   91.40%
    Req/Sec     7.57k   622.67     9.90k    67.44%
  71708 requests in 10.00s, 11.08MB read
Requests/sec:   7170.95
Transfer/sec:      1.11MB
```

Bottle:

```
$ wrk -t1 -c1 http://localhost:6000/
Running 10s test @ http://localhost:6000/
  1 threads and 1 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   221.92us  678.78us  18.72ms   99.81%
    Req/Sec     4.86k   418.08     6.44k    78.08%
  46110 requests in 10.00s, 7.74MB read
Requests/sec:   4611.09
Transfer/sec:    792.53KB
```

Flask:

```
$ wrk -t1 -c1 http://localhost:6000/
Running 10s test @ http://localhost:6000/
  1 threads and 1 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   476.59us  134.74us   1.71ms   79.35%
    Req/Sec     2.11k   194.96     3.10k    65.86%
  19967 requests in 10.00s, 3.35MB read
Requests/sec:   1996.71
Transfer/sec:    343.18KB
```

Avg Latency の差で見た場合、 Bottle は約 100μs, Flask は約 350μs が生 wsgi に対するオーバーヘッドになっており、トータルの性能としても倍以上の差になっています。

Bottle は Jinja テンプレートもサポートしているので、初期アプリが Flask だったとしてもそこそこ簡単に Bottle に切り替えられるはずです。
HTML の部分をキャッシュして、 Memcached から取得したデータをくっつけて返すだけのパスが沢山叩かれるようなケースでは、このベース部分のパフォーマンスが無視できない差になってくるはずです。

最後に計測にしたソースコードを載せておきます。お試しください。

```python
import flask
import bottle

app = flask.Flask(__name__)
bottle_app = bottle.app()

@bottle_app.route('/')
@app.route('/')
def index():
    return b"Hello, World"

def wsgi(env, start):
    c = b"Hello, World"
    start("200 OK", [('Content-Type', 'text/plain'), ('Content-Length', str(len(c)))])
    return [c]

# 起動方法
# Flask:  gunicorn -k meinheld.gmeinheld.MeinheldWorker -b :6000 app:app
# Bottle: gunicorn -k meinheld.gmeinheld.MeinheldWorker -b :6000 app:bottle_app
# wsgi:   gunicorn -k meinheld.gmeinheld.MeinheldWorker -b :6000 app:wsgi
```
TengでDBを操作する

久々に触るとわからなくなってたのでメモ。

# DB作成
* IDは普通INTEGERだろうけどなぜかTEXTになってたがテストなので特に気にしない

```bash
$ sqlite3 a.db
sqlite> CREATE TABLE user ( id TEXT PRIMARY KEY, name TEXT );
sqlite> .q
```

# プログラム実行
* 引数のハッシュに渡すキーをtypoすると致命的。ここは検討。

```pl
#!/usr/bin/perl
use strict;
use warnings;
use Teng;
use Teng::Schema::Loader;
use DBI;
use DBD::SQLite;
use FindBin qw($Bin);
use Data::Dumper;

database("set", 44, +{name => 112});
database("set", 44, +{name => 113});
database("set", 45, +{name => 113});
print Dumper database("get", 44);
print Dumper database("get", 45);

sub database
{
	my ($mode, $id, $data) = @_;
	my $hash;

	my $dbfile = "$Bin/a.db";
	my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","");
	$dbh->{AutoCommit} = 0;

	my $teng = Teng::Schema::Loader->load(
		dbh => $dbh,
		namespace => 'MyApp::DB',
	);

	my $table = "user";
	if ($mode eq "get") {
		my $row = $teng->single($table => { id => $id });
		$hash = $row->get_columns;
		#delete $hash->{id};
	}
	elsif ($mode eq "set") {
		if (my $row = $teng->single($table => { id => $id })) {
			# update
			$row->update($data);
		}
		else {
			# insert
			my %tmp = (id => $id);
			%tmp = (%tmp, %$data);
			$teng->fast_insert($table => \%tmp);
		}
		$dbh->commit;
	}
	$dbh->disconnect;
	return $hash;
}
```
# 実行結果
```bash
$ perl db.pl
$VAR1 = {
          'name' => '113',
          'id' => '44'
        };
$VAR1 = {
          'name' => '113',
          'id' => '45'
        };
```
SuSE Linux Enterprise ServerのEC2インスタンスでSR_IOV

##SLESでの拡張ネットワーキングの設定にて
ドキュメントを見ても、AmazonLinux以外の項目には、PCI Hot Plugを有効にしてとしか書いてない。

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/enhanced-networking.html

ixgbevfドライバのビルド等は調べれば出てくるのだが。PCI Hot Plugに関する話はSLES用の設定のメモみたいなのがパッと探した限りではなかった。

##PCI Hot Plugを使えるようにするには
SLESでは、acpiphpモジュールをロードさせるように「/etc/sysconfig/kernel」に下記のように記載しておく。

```/etc/sysconfig/kernel
MODULES_LOADED_ON_BOOT="acpiphp"
```
ベーシック認証をわざわざ手打ちしなくて済む方法


スマホから検証するときなど、長いベーシック認証パスワードをわざわざ
手打ちで打ち込むのは面倒だし不毛ですよね。

そんなときはこのやり方を使いましょう。

例えば、

http://hiyoko.com

というURLに対して

ID: piyopiyo
PW: born

というベーシック認証がかけられていたとき、


http://piyopiyo:born@hiyoko.com/

というURLに対してアクセスすれば、ベーシック認証を手打ちすることなくアクセスすることができます。
(アクセスした際に、このサイトは危険ですというようなメッセージが出ますが、「無視をする」を選べば問題なく開けます)

このURLをスマホに対して送信し、そのまま叩けば手軽にスマホ検証を行うことができます。

もちろん、スマホへの送信は十分セキュリティの高い安全な方法で。
iTunes ConnectでAppビデオプレビューをアップロードできないときは

Mac OSX Yosemite Preivew 8のQuickTime PlayerでiPhoneの画面キャプチャー動画を撮って、iTunes ConnectでiOS8対応のAppビデオプレビューをアップロードすると、「ビデオを読み込めません」のエラーになります。
この状態で保存ができますが、保存後にアップロードしたビデオが消えます。

なんてこっちゃー。

いろいろ調べた結果、どうもFPSの問題らしいです。QuickTime Playerで録画した動画が60FPSですが、iTunes Connectでは30FPSしか受け付けてくれないようです。

無料なQuickTime PlayerとiMovieでは対応できないようで、ffmpegを使って問題解決しました。

ffmpegがない場合はbrewでインストールしてください。
```
brew install ffmpeg
```

変換した動画のファイル名が「AppPreview.mov」とします。
まずは下記コマンドで動画のmeta情報を確認しましょう。
```
ffmpeg -i AppPreview.mov
```
「57.79 fps」（約60fps）になっているようです。
```
Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 640x1136, 2712 kb/s, 57.79 fps, 60 tbr, 60k tbn, 120k tbc (default)
```

それでは30fpsに変換します。
```
ffmpeg -i AppPreview.mov -r 30 AppPreview_30fps.mov
```

生成したAppPreview_30fps.movを使って、iTunes Connectにアップロードできます。

***

ちなみに、開発したAppが「[五目消し](https://itunes.apple.com/jp/app/wu-mu-xiaoshi/id501679095?mt=8&uo=4 "五目消し")」というパズルゲームです。
ぜひ[App Storeからダウンロード](https://itunes.apple.com/jp/app/wu-mu-xiaoshi/id501679095?mt=8&uo=4 "五目消し")して遊んでください。
[![Download from app store](https://qiita-image-store.s3.amazonaws.com/0/43426/0e9f1b36-d73d-0c2a-0acf-651ad88aefeb.png) ![Icon-72.png](https://linkmaker.itunes.apple.com/htmlResources/assets/ja_jp//images/web/linkmaker/badge_appstore-lrg.png)](https://itunes.apple.com/jp/app/wu-mu-xiaoshi/id501679095?mt=8&uo=4 "五目消し")
PuLP による線型計画問題の解き方ことはじめ

# PuLP とは何か

線形計画問題を解く Python パッケージ。
https://code.google.com/p/pulp-or/
https://pythonhosted.org/PuLP/index.html

線形計画問題とは、目的関数と制約条件が１次式で表される最適化問題。
たとえば、

* コストと利益が異なるいくつかの製品を、決まった数量作るときに、利益が最大になるような量の組み合わせを見つける。
* パズルを解く

などが線形計画問題の一つ。

PyConJP 2014 で紹介されていたので使い方を調べてみると、
結構使いやすいのでまとめてみた。

# インストール方法

```bash
sudo pip install pulp
```

# 手順

## 線形計画問題オブジェクトを作る
これが問題をすべて表現する。
コンストラクタには問題の名前と、目的関数を最小化するか最大化するかを選ぶ。

```py
import pulp
problem = pulp.LpProblem('Problem Name', pulp.LpMinimize) # 最小化する場合
problem = pulp.LpProblem('Problem Name', pulp.LpMaximize) # 最大化する場合
```

## 変数オブジェクトを作る
線形計画で使う変数を作る。
作り方は２種類ある。大量の変数があるときは 2 を使うことが多そう。

(1) 1つずつ作る

```py
pulp.LpVariable('name', 0, 1, 'Continuous') 
```

変数は前から順に、
1. 変数名
2. 変数の最小値
3. 変数の最大値
4. 変数の種類。連続値 (float) なら 'Continuous', 整数なら 'Integer', ２値変数なら 'Binary'

このコードで、変数名 name で、0から1の連続値をとる変数を生成できる。

(2) リストを渡してまとめて作る

```py
var = pulp.LpVariable.dicts('VAR', ([1,2,3], ['a', 'b']), 0, 1, 'Continuous')
```

変数は前から順に、
1. 変数名の prefix
2. 変数名の postfix のリストのタプル
3. 変数の最小値
4. 変数の最大値
5. 変数の種類

3-5 は前と同じ。

このコードを実行すると、最小値 0, 最大値 1, で連続値をとる
変数群 `VAR_1_a, VAR_1_b, VAR_2_a, ...` を持つディクショナリが手に入る。
アクセス方法は `var[1]['a']` こんな感じ。
これは今後の記事で使う予定。

## 目的関数を作る

変数を使って式を作り、**数理計画問題オブジェクトに足す** これがすごい。

たとえば、 `a` と `b` の和を最小化したいときは

```py
import pulp

problem = pulp.LpProblem('test', pulp.LpMinimize)
a = pulp.LpVariable('a', 0, 1)
b = pulp.LpVariable('b', 0, 1)
problem += a + b
```

この状態で problem を print すると、問題が表示される。

```text
test:
MINIMIZE
1*a + 1*b + 0
VARIABLES
a <= 1 Continuous
b <= 1 Continuous
```

## 制約条件を作る

変数を使って比較を作り、**数理計画問題オブジェクトに足す** これもすごい。

たとえば、変数 `a` と `b` の変数について、
1. `a` は 0以上
2. `b` は 0.1以上
3. `a` と `b` の和は 0.5
という制約を作りたいときは、

```py
problem += a >= 0
problem += b >= 0.1
problem += a + b == 0.5
```

反不等号 (<=, =>) しか使えなかった。

# 解く
```py
problem.solve()
```
これだけ。

制約条件によっては解けない場合があるので、結果を知りたいときは、

``` py
status = problem.solve()
print pulp.LpStatus[status]
```

で Optimal が出れば OK


# 結果を取り出す。
`problem` に追加した変数の `value` メソッドを呼ぶと、値が手に入る。

# まとめると

```py
import pulp

problem = pulp.LpProblem('sample', pulp.LpMinimize)

a = pulp.LpVariable('a', 0, 1)
b = pulp.LpVariable('b', 0, 1)

problem += a + b

problem += a >= 0
problem += b >= 0.1
problem += a + b == 0.5

status = problem.solve()
print "Status", pulp.LpStatus[status]

print problem

print "Result"
print "a", a.value()
print "b", b.value()
```


結果は、

```text
Status Optimal
sample:
MINIMIZE
1*a + 1*b + 0
SUBJECT TO
_C1: a >= 0

_C2: b >= 0.1

_C3: a + b = 0.5

VARIABLES
a <= 1 Continuous
b <= 1 Continuous

Result
a 0.4
b 0.1

```
PROTECT_ERRNO

systemdには`PROTECT_ERRNO`というマクロがある。使い方はこんな感じ。

```c:src/shared/util.c
int unlink_noerrno(const char *path) {
        PROTECT_ERRNO;
        int r;

        r = unlink(path);
        if (r < 0)
                return -errno;

        return 0;
}
```

定義を見てみると、なるほどと思った。

```c:src/shared/util.h
static inline void _reset_errno_(int *saved_errno) {
        errno = *saved_errno;
}       
        
#define PROTECT_ERRNO _cleanup_(_reset_errno_) __attribute__((unused)) int _saved_errno_ = errno
```

`errno`を一旦保存して、関数を抜けるときに [cleanup属性](http://qiita.com/ozaki-r/items/954837377a712c531832) を使って保存した`errno`を元に戻している。

上記の使用例だと、unlink(2)で`errno`が上書きされるのを防いでいるようだ。
iOS8にしたらSafariでWebGLは動くようになったがカメラロールの画像が！

# 追記（2014/9/26）

- [iOS 8.0.2でフツーにSafariからフォトライブラリにアクセスできるようになった - Qiita](http://qiita.com/kjunichi/items/58b4681b387c4d9a4638)

追記ここまで

iOS8でWebGLは http://jsdo.it/kjunichi/fNgw など
過去のjsdo.itへ投稿した作品が陽の目を見ることが出来た。

# テクスチャにカメラロールの画像を使おうとしたら

使えない。もしかするとちょっと前からNGだったのかもだが。
iPhone4S使っていたころは、GPS情報がごっそり消されるくらいで、
あとはフツーにFile API経由で読み出せていたのだが、実に残念

# 動かなくなっていた作品

- [iOSでJSオンリーでカメラロールの画像を扱う](http://jsdo.it/kjunichi/x0zd)
Xcode6.0.1にしたらビルドできなくなったけど、無事解決。


シミュレータだけビルドが出来ない。実機は問題なし。
とりあえず、

/Users/<ユーザーフォルダ>/Library/Developer/Xcode/DerivedData

の中身をごっそり消してみた

	rm -r *

そしたらさっきまで出ていたエラーが出ず、ビルド完了。
小さなCI環境を手元に作る。


# まずはこれをご覧ください。


![](https://raw.githubusercontent.com/hirokidaichi/watch-then/master/image/screen-cast.gif)


# さて
最近のワークアラウンドで、よく使う方法としては``fswatch``などで特定のテストを実行し続けておいて、
それを尻目にコードを書くというプロセスをまわすことが多い。

当然、それぞれのプロジェクトにあったテストの実行スイートはあるものの、どの言語のプロジェクトでも対応できるので気に入っている。

# fswatchにたいする不満

## イベントが複数発火してしまう
エディタが保存時の挙動などフックしている場合、２度保存されたり、すべてのバッファを保存したときに連続でイベントが立ち上がってしまう。1.5秒間くらいは待ってほしい。

## 出力がどんどんしたに流れてしまう

結局見たいのは、最新のテスト結果なので過去のものは洗い流してもらいたい。具体的には``clear``してほしい。

# なので作った

https://github.com/hirokidaichi/watch-then

```
npm install -g watch-then
```

で使い始めることができる。

```
watch-then ./ "npm test"
```

.gitignoreで記述されているファイルは無視するようにしたので便利。
【Rails】ActiveRecordで、月ごと年ごとの合計


Rails、ActiveRecordでの書き方。
月別の合計を出す機会があったので、色々調べてみて、
一番簡潔そうなのがこれでした。

```ruby:sales_controller.rb
@sales = Sale.group("MONTH(date)").sum(:column)
```

groupでまとめて、sumしてます。
ちなみに、MONTHをYEARに変えれば年ごとになります。

もっと良いのがあれば教えてください。
Practical Unix For Ruby & Rails



[Practical Unix For Ruby & Rails](http://ylan.segal-family.com/assets/html/practical_unix_for_ruby_and_rails.html#1)

というスライドがありました。
サンディエゴのRubyコミュニティ(ぜんぜん知らない)のミーティングで使った資料のようです。

http://ylan.segal-family.com/blog/2014/09/05/talk-practical-unix-for-ruby-and-rails/

例はRubyとかRailsとかですが、ぶっちゃけこれは「UNIXコマンドのいくつかのちょっと気の利いた使い方」の話で、例えば、

- Railsのログからエンドポイントごとのヒット数をさくっと知りたい

```console
$ grep '^Started' log/development.log | grep -o '".*"' | sed -r 's/[[:digit:]]+/:id/' | sort | uniq -c | sort --reverse
 267 "/tokens"
 113 "/"
  85 "/tokens/:id"
  57 "/tokens/:id/edit"
  35 "/users/sign_in"
  30 "/tokens/new"
  13 "/users/edit"
   8 "/users/sign_out"
   6 "/users"
   3 "/users/sign_up"
   3 "/users/:id"
   2 "/token"
   1 "/tokens/"
   1 "/session/sign_out"
   1 "//users/sign_in"
```

みたいな感じです。

ただこういうのは、一度出会うか出会わないかだけの違いで、それからの作業効率が結構変わってくるので、タイトルにピンときたぐらいの理由で中身がそれほど期待通りじゃなくても、見ておいて損はない気がします。

興味ある人はスライドを見てみてください。
gulpのインストールで詰まったのでnodeをアップデートしました

※Windows限定ネタ

Gruntfile.jsがいい感じに膨らんできて、いよいよメンテナンスやら再利用やらがしんどくなりました。こういう場合、gruntfileを細分化してrequireするようにして解決を図っていくみたいですけど、そうなると宣言型のgruntfileの美しさ（？）が無くなってしまいます。

なので、この際ならとじわじわgulpに乗り換えようと思い立ちました。

gulpをチラ見した感じだと、gruntと比較するとAPIがドシンプルで、gulpのなかの世界が小さいのが良いですね。Gruntはちょっと面倒なことをしようとすると、Gruntでしか使えない独自APIを色々覚えないといけないのがいかんのです。

で、いざgulpを始めようとした時にちょっとハマったので記録しておきます。

----

適当に

```bat
>npm install -g gulp
```

したら何か途中でエラーが。（エラーコードは忘れた）

もしやと思い、nodeのバージョン確認。

```bat
>node -v
v0.10.9

>npm -v
1.2.24
```

**うわっ、私のバージョン、低すぎ！？**

本体もnpmでバージョン上がってくれるといいんですけどねー。UNIX系は出来るみたい？ですが、Windowsだとそうもいかず。
折角なのでクリーンインストールすることにしました。

で、このnodeはchocolateyで入れていたので、

```bat
>cuninst nodejs
>cuninst npm
```

ごりごりcuninstで消します。
そして、Geek Uninstallerで **堂々と残っているnodejsをアンインストール**。

さらにC:\Chocolatey\lib配下にもnodeのディレクトリが残っていたので、これも削除。

これで大体スッキリしたのでやっとこさ入れ直すと、うまくgulpが入るようになりました。

```bat
>cinst nodejs
>node -v
v0.10.32
>npm -v
1.4.9

>npm install -g gulp
```
HomebrewでPostGISをインストール、利用するまで

## PostGISのインストール
Homebrewからインストールを行う。

```shell-session
$ brew install postgis
```
なお、[このサイト](http://postgis.net/install/)を参考にした。

## データベースの作成
```shell-session
$ createdb -E utf8 -O postgres -U postgres gisdb
```

作成したデータベースは、以下のコマンドから確認できる。

```shell-session
$ psql -l
```

## データベースへの接続確認

```shell-session
$ psql -U postgres -d gisdb
```

## PostGISを有効化する
### Extensionを作成する
```shell-session
-- Enable PostGIS (includes raster)
CREATE EXTENSION postgis;
-- Enable Topology
CREATE EXTENSION postgis_topology;
-- fuzzy matching needed for Tiger
CREATE EXTENSION fuzzystrmatch;
-- Enable US Tiger Geocoder
CREATE EXTENSION postgis_tiger_geocoder;
```

## PostGISの動作確認

```shell-session
-- Create table with spatial column
CREATE TABLE mytable ( 
  id SERIAL PRIMARY KEY,
  geom GEOMETRY(Point, 26910),
  name VARCHAR(128)
); 
 
-- Add a spatial index
CREATE INDEX mytable_gix
  ON mytable 
  USING GIST (geom); 
 
-- Add a point
INSERT INTO mytable (geom) VALUES (
  ST_GeomFromText('POINT(0 0)', 26910)
);
 
-- Query for nearby points
SELECT id, name
FROM mytable
WHERE ST_DWithin(
  geom, 
  ST_GeomFromText('POINT(0 0)', 26910),
  1000
); 
```

上記をQGIS等で確認し、正しく表示されればOK。
OSXのデスクトップに一時的に何も表示しない

# 概要

デスクトップを思う存分使う性分の人は、プレゼンの時など散らかったデスクトップを晒しがちですが、かといってデスクトップに物を置くというのは代えがたく便利。

というわけで、一時的にデスクトップをキレイにしたいという時に使えるシェルスクリプトです。

# 使い方

```bash
./icon.sh hide # デスクトップに何も表示されなくなる
./icon.sh show # 通常の状態に戻る
```

# 実装

コードは以下。設定を変更して finder を再起動しているだけです。

```bash:icon.sh
#!/bin/sh

case $1 in
  "hide" )
    defaults write com.apple.finder CreateDesktop false
    echo "hide"
    killall Finder
    ;;
  "show" )
    defaults write com.apple.finder CreateDesktop true
    echo "show"
    killall Finder
    ;;
  * )
    echo "Usage: icon.sh [show|hide]"
    ;;
esac
```
世界最速LT大会！？ に参加してきた（iOS8）


発表者の皆様、お疲れ様でした！
とても楽しい時間を過ごさせて頂きました。

世界最速LT大会！？ 新iOS 8発表！で登場した新機能・ニッチな技術を大公開！！-Developers.IO-
http://dev.classmethod.jp/news/event-lightning-talks-developers-io/

# ついにiOS 8リリース！今までのiOSの歴史を振り返ってみる
- 数年に一度、すべてを変えてしまう製品が現れる（Jobs）
- iOSの歴史は今後も人生に大きな影響を与えてくれそうですね!!
- 最近はマンネリ化してきたようなiOSアップデートだけれど確実に世界を変えていっている（感想）

# Swiftの概要をザックリと
- beta時代からそれほど言語仕様は変わっていない（かも？）
http://qiita.com/YusukeHosonuma/items/1d82bd2527cb7705759d
- 新しく知ったこととか
  - 配列の初期化：`var arr = [String]()` // あまり他言語で見慣れない
  - タプル：キーを明示的に指定することも可能（Dictionary的な使い方ができる）
  - switch：breakしたくないときはfallthrough、caseを網羅しないとコンパイルエラー
  - for：_で変数を捨てることが出来る（プレースホルダ）
  - import不要（スパゲッティコードに注意かな）
  - コレクション系のメソッドがNSArrayとかよりも機能不足（必要ならキャスト）
  - OptionalValueは慣れるまで難しく感じるらしい（使いこなせれば強力な道具、という印象）

# CloudKitで始めるMBaaS入門
- Apple製のBaaS(Backend as a Service)
- ユーザ管理はAppleIDで出来る
- 無料、導入めっちゃ簡単
- NSPredicateを使った検索が可能
- Subscriptionというキー値監視のようなことが出来る（PUSH通知を使わなくてもOK）

# 新たな線形代数ライブラリ LinearAlgebra
- 数学の授業
- 線形代数ライブラリが使えるようになりました
- 高性能化したクライアント端末でパターン認識などができるのが嬉しくなること

# PhotoKit入門
- Photos Framework
  - 標準の写真アプリと連動したようなデータ操作APIがある
  - 写真編集が出来るっぽい
  - 写真が他のアプリで編集された、とかの変更を監視できるっぽい

- PhotosUI Framework
  - 写真加工用のExtension
  - 写真アプリから連携できる、ただしExtensionの有効化が必要
  - ちなみにUI的には編集への動線は分かりづらい

# 測れる！パフォーマンス
- 単体テストでパフォーマンス計測（標準偏差とかも）できるぜ！
- 暗号化とか画像加工のアルゴリズムの計測に使えるかも？

# HealthKitで変わるミライ
- 健康に関するフレームワーク
- プライバシーを非常に重視してる（ユーザ認証必須）
- ユーザが不安がらないような丁寧な説明をしないと、機能自体を有効化してくれないかも
- HealthKitは運用者ではなく、ユーザに利益をもたらす
- 今回のアップデートで一番世界を変えるものかも？（感想）

# 新しいTestFlightの使い方
- 内部テスターと外部テスター（Comming soon...）が使える
- プロビジョニングにUDIDを仕込まなくても利用できる！
- テスト端末はiOS8がインストールされている必要がある（残念）
前後のリンクのタイトルを文字数で丸める


```php:functions.php

/* 前後リンクを生成（長いタイトルを丸める）
============================================= */

function Custom_previous_post_link($maxlen = -1, $format='&laquo; %link', $link='%title', $in_same_cat = false, $excluded_categories = '') {
Custom_adjacent_post_link($maxlen, $format, $link, $in_same_cat, $excluded_categories, true, $maxlen);
}
function Custom_next_post_link($maxlen = -1, $format='%link &raquo;', $link='%title', $in_same_cat = false, $excluded_categories = '') {
Custom_adjacent_post_link($maxlen, $format, $link, $in_same_cat, $excluded_categories, false);
}

function Custom_adjacent_post_link($maxlen = -1, $format='&laquo; %link', $link='%title', $in_same_cat = false, $excluded_categories = '', $previous = true) {

if ( $previous && is_attachment() )
$post = & get_post($GLOBALS['post']->post_parent);
else
$post = get_adjacent_post($in_same_cat, $excluded_categories, $previous);

if ( !$post )
return;

$tCnt = mb_strlen( $post->post_title, get_bloginfo('charset') );
if(($maxlen > 0)&&($tCnt > $maxlen)) {
$title = mb_substr( $post->post_title, 0, $maxlen, get_bloginfo('charset') ) . '…';
} else {
$title = $post->post_title;
}

if ( empty($post->post_title) )
$title = $previous ? __('Previous Post') : __('Next Post');

$title = apply_filters('the_title', $title, $post->ID);
$date = mysql2date(get_option('date_format'), $post->post_date);
$rel = $previous ? 'prev' : 'next';

$string = '<a href="'.get_permalink($post).'" rel="'.$rel.'">';
$link = str_replace('%title', $title, $link);
$link = str_replace('%date', $date, $link);
$link = $string . $link . '</a>';

$format = str_replace('%link', $link, $format);
echo $format;
}


```

で該当するprevious(next)_post_link()を探してきて、下記のように変更

```php:

//タイトルを丸める場合
<?php Custom_previous_post_link(15) ?>
<?php Custom_next_post_link(15) ?>


//フォーマットなどをすべてのオプションを指定する場合
<?php Custom_previous_post_link(12, '%link', '&laquo; %title', true) ?>
<?php Custom_next_post_link(12, '%link', '&laquo; %title', true) ?>

```

最初の引数を丸める文字数を指定して、その後の引数は、[previous post linkのオプション](http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/previous_post_link)と同じように指定する。

## 参考

- [前後リンクのタイトルの文字数を丸める | WordPress | いろいろコードスニペット](http://code1616.net/wordpress/entry-41.html)

	大変助かりました。
HomebrewでPostgreSQLをインストールした際、"postgres"ユーザは作成されないので

## "postgres"ユーザを作成した。

```shell-session
$ createuser -a -d -P postgres
Enter password for new role: 
Enter it again: 
```

これで、 *createdb* をする際に、所有者となるデータベースユーザを"postgres"として指定できる。

また、作成したユーザは以下のコマンドから確認できる。

```shell-session
$ psql -q -c'select * from pg_user' postgres
```

## ちなみにユーザを削除するには
以下のコマンドを使う。

```shell-session
$ dropuser postgres
```
stringからio.Readerへの変換したい


testとかで使いたいと思ったタイミングがありました。

http://play.golang.org/p/QAiO7tmFY_

```golang:main.go
package main

import (
	"fmt"
	"strings"
)

func main() {

	r:=strings.NewReader("(1,2,34,55,666)")
	var d [5]int
	fmt.Fscanf(r,"(%d,%d,%d,%d,%d)",&d[0],&d[1],&d[2],&d[3],&d[4])
	fmt.Println(d)
}

```
Hubotを導入してSlackで使えるようにする


gamba!開発チームではhubotを使って本番環境へのデプロイなどしています。

Heroku上で動かしており、導入した時の手順をご紹介します。

まず、ローカルの開発環境にhubutをいれてプロジェクトを作成します。

```bash
$ npm install -g hubot coffee-script
$ hubot --create hubot
$ cd hubot
$ echo "web: bin/hubot --adapter slack" > Procfile
$ git add .
$ git commit -am'First commit'
```

Herokuに環境を構築します。

```bash
$ heroku create gamba-hubot
$ heroku addons:add redistogo:nano
```

Slackの[Configure Integrations]メニューからHubotを追加します。追加するとトークンが発行されるのでそのトークンを設定します。

```bash
$ heroku config:add HEROKU_URL=http://gamba-hubot.herokuapp.com
$ heroku config:add HUBOT_SLACK_TOKEN=********************
$ heroku config:add HUBOT_SLACK_BOTNAME=hubot
```

ここで、

* HEROKU_URLには上記で指定したアプリ名を設定します
* HUBOT_SLACK_TOKENはSlackで設定したトークンを設定します
* HUBOT_SLACK_BOTNAMEにはSlack上で表示したい名前を指定します

Herokuに上にデプロイします。

```bash
$ git push heroku master
```

以上です。
Python - Most elegant way to read lines of file into list



Ref:
[1] - [Python: read file line by line into array](http://stackoverflow.com/questions/3277503/python-read-file-line-by-line-into-array)

For most cases, to read lines of file to a list, we just use 

```python 
with open(fileName) as f:
  lineList = f.readlines()
```

In this case, every element in the list contain a `\n` in the end the string, which would be extremely annoying in some cases.

And there will be same problem if you use:

```python
lineList = list()
with open(fileName) as f:
  for line in f:
    lineList.append(line)
```

To overcome this, you could use:

```python
lineList = [line.rstrip('\n') for line in open(fileName)]
```
Guiceを使った動的なインジェクション

## 通常のインジェクション

Google Guiceを使ったインジェクションはこんな感じになります。

```java
Injector injector = Guice.createInjector(new AbstractModule() {
    @Override
    protected void configure() {
        bind(Logic.class).to(LogicImpl.class);
    }
});

Logic logic = injector.getInstance(Logic.class);
logic.doLogic();
...
```


## 問題点

ここの`LogicImpl.class`をソースに直で書いているので違う実装を使おうと思ったらソースを変更するしかありません。JUnit等でテストする場合はそれで問題ないのですが、実際の業務で使おうと思った場合はこれだと柔軟性に欠けます。


## 対応

ここは`Class<?>`を指定できればいいので外部ファイルに出してしまって `Class.forName()`で`Class<?>`を得れば柔軟性が上がります。

```java
ConfigBean config = JAXB.unmarshal(file, ConfigBean.class);

Injector injector = Guice.createInjector(new AbstractModule() {
    @Override
    protected void configure() {
        @SuppressWarnings("unchecked")
        Class<? extends Logic> cls = (Class<? extends Logic>)Class.forName(config.getLogic());
        bind(Logic.class).to(cls);
    }
});
```


こうすることで、

* ファイル受信処理の骨格は共通
* Aシステムから来たファイルは`LogicAImpl`で処理
* Bシステムから来たファイルは`LogicBImpl`で処理

ということを実行時に解決させることができます。

## 発展

さらに、`LogicAImpl`や`LogicBImpl`の中で使っているインタフェースも同じようにインスタンス化したい場合、だけど`LogicAImpl`と`LogicBImpl`で使っているものが違う場合

例えば

* `LogicAImpl`では`MasterADAO`
* `LogicBImpl`では`MasterBDAO`

を使っているとすると、上記の方法だとちょっとうまくありません。不要なクラスまでインスタンス化してしまいます。

こういうときは

```java
// インタフェース名を定義ファイルから取得
@SuppressWarnings("rawtypes")
Class intf = Class.forName(config.getInterface());

// 実装クラス名を定義ファイルから取得
@SuppressWarnings("rawtypes")
Class impl = Class.forName(config.getImplement());

bind(intf).to(impl);
```

こうしておきます。
`Class<?>`にはできないので、あえて`Class`を使っています。

定義ファイルにインタフェース名と実装クラス名を書いておけば、`Logic`をインスタンス化した場合に引きずられてインスタンス化してくれます。

定義ファイルはこんな感じで用意すればいいのではないでしょうか。

```xml:定義ファイルサンプル
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <file type="A">
    <logic implements="xxx.yyy.LogicAImpl">
      <with interface="xxx.yyy.dao.MasterADAO" implement="xxx.yyy.dao.impl.MasterADAOImpl" />
      <with interface="xxx.yyy.Parser" implement="xxx.yyy.util.CSVParser" />
    </logic>
  </file>
  <file type="B">
    <logic implements="xxx.yyy.LogicBImpl">
      <with interface="xxx.yyy.dao.MasterBDAO" implement="xxx.yyy.dao.impl.MasterBDAOImpl" />
    </logic>
  </file>
</configuration>
```


---
## 参考

* [Google Guice 使い方メモ](http://qiita.com/opengl-8080/items/6fb69cd2493e149cac3a)
* [Guice Provide instance based on Class name read from file](http://stackoverflow.com/questions/10524998/guice-provide-instance-based-on-class-name-read-from-file)
CLion触ってみた

# CLion

C++用のIDE。候補補完、文法チェック、デバッガーが簡単に導入できました。まだEarly Access Program。DLは以下から

http://confluence.jetbrains.com/display/CLION/Early+Access+Program


## C++コードのビルド

CMakeでした。いずれ使い方を覚えようと思ってたので便利。
新規作成のデフォルトでHello, worldができるようになってました。

Google Testを書いてみる。gtestの導入は[こちら](http://qiita.com/kuchida1981/items/9bb8fa4cc04635e7e909)を参考にしました


``` CMakeList.txt
# CLion デフォルト
cmake_minimum_required(VERSION 2.8.4)
project(TMP) # <- ここプロジェクト名
set(SOURCE_FILES main.cpp)

# 追加分
add_definitions("-Wall")
add_definitions("-std=c++1y")

set(GTEST_ROOT $ENV{HOME}/usr/src/gtest-1.7.0)

include_directories(
    ${GTEST_ROOT}/include
    )

add_executable(TMP ${SOURCE_FILES})

target_link_libraries(TMP # <- ここプロジェクト名
    pthread
    ${GTEST_ROOT}/build/libgtest.a
    ${GTEST_ROOT}/build/libgtest_main.a
    )
```

環境によっては解析に時間がかかります。

## エディタ

templateの中でも文法チェック(お手軽なやつみたい、結構早い)とか、候補補完できました。

![clion_editor.png](https://qiita-image-store.s3.amazonaws.com/0/37859/51bdb8ed-2ccf-dacd-b95a-a041da632fc6.png)


## デバッガ

GDBを使ってました。vectorの中身も見れたり優秀っぽい

![clion_debugger.png](https://qiita-image-store.s3.amazonaws.com/0/37859/d5cea86e-6a17-0c2b-2bf2-210d4743b286.png)


## 他

EAPということで、今後色々と機能追加があるみたいです。一番楽しみなのはGoogle Testが機能としてサポートされることでしょうか。

http://blog.jetbrains.com/clion/2014/09/clion-eap-whats-next/

あと、現状ちょっと読み込みが遅いCMake周りも改善されそうです。CMakeを採用しているのは、ポータブルで便利なので頑張ってほしいです


## 追記: Google Test出力について

実行結果に色がつかず gtest の緑とか赤が見えなくて寂しいです。私はとりあえず Terminal タブで実行してます。CMakeList.txtと同じディレクトリにシェルスクリプトを置いて実行。

``` sh:run_test.sh
#!/bin/sh

if [ ! -e build ]; then
    mkdir build
fi

projectName=`grep project CMakeLists.txt | sed -E 's/(project\()(.*)(\))/\2/'`

cd build && cmake .. && make && $projectName && cd ..
```

``` sh run_test.sh ```

(左: CLion実行結果、右: Terminal実行結果)
![clion_test.png](https://qiita-image-store.s3.amazonaws.com/0/37859/76876c9f-707b-1a44-4b8c-aca43b35a4c7.png)
zshプロンプトのカスタマイズ


# 使用できる特殊文字

|文字|出力|
|:---|-----:|
|%n|ユーザー名|
|%m|ホスト名|s
|%~|カレントディレクトリ|
|%T|時間(HH:MM)|
|%*|時間(HH:MM:SS)|
|%D|日付(YY-MM-DD)|

# 改行を入れる
文字列中に改行をいれると表示も改行される

```bash
PROMPT='%n
%m $ '
```

```:表示結果
user_name
host_name $ 
```

# 色

##書き方
文字をシアンにする方法は以下の通り

```
PROMPT='%{${fg[cyan]}%} $n %{${reset_color}%}'
```

##色の一覧

色の文字、もしくは番号で色を指定することもできる。

|番号|色|
|:--|:--|
|0|black|
|1|red|
|2|green|
|3|yellow|
|4|blue|
|5|magenta|
|6|cyan|
|7|white|


#参考URL
* [zsh 設定 - プロンプト -](http://tegetegekibaru.blogspot.jp/2012/08/zsh_2.html)
【Cocos2d-x】setScaleを使わずにスプライトを拡縮表示する方法

通常`CCSprite`を拡縮するには`setScale`を使うのが一般的です。

ですが、`CocosBuilder`をはじめとしてプログラムで記述する以外からスケーリングされる場合この方法は使えません。アニメーションの再生中に`setScale`した値が上書きされてしまうからです。

これはたとえば、`CocosBuilder`で作ったアニメーションしているスプライトをプログラムで拡大させたままアニメーションは`CocosBuilder`そのまま使いたい、という時に問題になります。

上記の書き方だと特殊な事例のように思えますが`CocosBuilder`でデータを作ったものの、後からTexture容量削減のために、Textureサイズは半分に、でも表示される画像はそのままにしたい、という時にも当てはまります。

ということで、`setScale`を使わずに拡縮するには、下記のメソッドをオーバーライドします。

`void CCSprite::setVertexRect(const cocos2d::CCRect &rect);`
`void CCSprite::setContentSize(const cocos2d::CCSize &contentSize);`

これらを下記のようにすると、2倍に拡大されて表示されるはずです。

```
void MySprite::setVertexRect(const cocos2d::CCRect &rect) {
	CCSprite::setVertexRect(rect);
	m_obUnflippedOffsetPositionFromCenter = m_obUnflippedOffsetPositionFromCenter * 2;
	m_obRect.size = m_obRect.size * 2;
}

void MySprite::setContentSize(const cocos2d::CCSize &contentSize) {
	CCSprite::setContentSize(contentSize * 2);
}
```

詳しい中身は`CCSprite`のソースを追って頂くとして、上記のように継承したクラスを使うと簡単に`setScale`を使わなくても拡大することができます。

ただし、基本的にこれはスプライト生成時にのみ呼ばれるので、デフォルトのスケーリング、という意味合いが強いです。

上記を踏まえて、`CocosBuilder`で作ったデータに含まれる`CCSprite`を拡大させたい場合は、下記のようにするのが簡単です。

```
class MySprite : public CCSprite {
public:
	CREATE_FUNC(MySprite);
	void setVertexRect(const cocos2d::CCRect &rect);
	void setContentSize(const cocos2d::CCSize &contentSize);
};

class MySpriteLoader : public CCSpriteLoader
{
public:
    CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(MySpriteLoader, loader);
protected:
    CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(MySprite);
};
```

このようなクラスを作成し、`ccbiファイル`を読み込む時の`CCNodeLoaderLibrary`に

```
CCNodeLoaderLibrary* ccNodeLoaderLib = CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary();
ccNodeLoaderLib->unregisterCCNodeLoader("CCSprite");
ccNodeLoaderLib->registerCCNodeLoader("CCSprite", MySpriteLoader::loader());
```

としてやると、`CCSprite`をロードするときに`MySprite`が使われ拡縮した大きさで表示されるようになります。

拡縮したくない場合には

```
CCNodeLoaderLibrary* ccNodeLoaderLib = CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary();
ccNodeLoaderLib->unregisterCCNodeLoader("CCSprite");
ccNodeLoaderLib->registerCCNodeLoader("CCSprite", CCSpriteLoader::loader());
```

として、デフォルトで使われる`CCSpriteLoader`に戻しておくことを忘れずに！
psqlのちょっとしたこと


psqlは以下のように打つと指定したDBに接続した状態で起動する。尚、 `-d`はなくても良い。

```
psql -d db_name
```

しかしこれだと、接続したいDBの名前が長い場合に全部自分で入力しなければならない。

psql内ではタブキーでDB名の補完が効くので、まずpsqlを立ち上げてそこからDB名を指定して接続する。
`\l`でDB一覧を表示することが出来る。
`\c`で指定したDBに接続する。

ちょっとしたことだが、補完を使うようにするだけで長いDB名をtypoしないように慎重に打つことがなくなるので良い。

```psql
$ psql
psql (9.3.4)
Type "help" for help.

localuser=# \l
                                         List of databases
         Name         |   Owner   | Encoding |   Collate   |    Ctype    |    Access privileges
----------------------+-----------+----------+-------------+-------------+-------------------------
 localuser            | localuser | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 postgres             | localuser | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 sandbox              | localuser | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |
 template0            | localuser | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/localuser           +
                      |           |          |             |             | localuser=CTc/localuser
 template1            | localuser | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/localuser           +
                      |           |          |             |             | localuser=CTc/localuser
 test                 | localuser | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 |

(6 rows)

localuser=# \c test
You are now connected to database "test" as user "localuser".
test=#
```
クラッシュレポートをシンボル付きに変換する

以下のコマンドでやっていた。
確かdSYMのファイルは jenkins のビルドディレクトリから取ってきたはず


```
$ export PATH=$PATH:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
$ export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"

$ for f in `ls -1 *`; do symbolicatecrash $f ../dSYM_dir/build/xxx.app.dSYM > $f.symbolicated; done
```
Backbone.js事始め その3


###ソースコード

[前回](http://qiita.com/tajihiro/items/2d2f15c8c08dd9c53f21)の記事に引き続き、`Collection`を使ってみた。


```index.html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

	<title>こんにちは。動物さん</title>

	<!-- テンプレート作成 -->
	<script type="text/template" id="animal-template">
		<div>
			こんにちは。<b><%- name %>ちゃん。</b>(<%- species %>)
		</div>
	</script>

	<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
	<script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script>
	<script type="text/javascript" src="http://backbonejs.org/backbone-min.js"></script>
</head>
<body>
	<h3>こんにちは。動物さん。</h3>
	<div id="myList"></div>

	<script type="text/javascript">
	(function() {
		//----------
		// Model作成
		//----------
		var Animal = Backbone.Model.extend({
			//Attribute(属性)
			defaults: {
				species: "Animal",
				name: "None"
			},
			//コンストラクタ
			initialize: function(){
				console.log("初期化処理 : " + this.get("species"));
			},
			//メソッド
			call: function(){
				console.log("動物 : " + this.get("species"));
				console.log("私の名前は" + this.get("name") + "です。");
			}
		});

		//Animal Collection のインスタンス化	
		//---------------
		// Collection作成
		//---------------
		var Animals = Backbone.Collection.extend({
			model: Animal
		});
		var animals = new Animals([
			{species: "猿", name: "えて吉"},
			{species: "鳥", name: "ピーコ"},
			{species: "牛", name: "モン助"},
			{species: "蛙", name: "けろっぴ"},
			{species: "馬", name: "馬之介"}
		]);

		//----------
		// View作成
		//----------
		var BaseView = Backbone.View.extend({
			tagName: "div",
			className: "myDivClass",
			//テンプレート作成
			template: _.template($('#animal-template').html()),
			render: function(){
				this.$el.html(this.template(this.model.toJSON()));
				return this;
			},
			//イベント定義
			events: {
				"click": "call"
			},
			//イベント実装
			call: function(){
				alert(this.model.get("name"));
			}
		});

		//Collection の展開
		animals.each(function(animal){
			var animalDiv = new BaseView({model: animal});
			$('#myList').append(animalDiv.render().el);
		});

	})();
	</script>
</body>
</html>

```


`Collection`を`each`で回して、`View`の`Model`としてインスタンス化して、対象の`<div>`へ追加してあげる感じ。

###実行結果

`Collection`に登録された`Model`が`View`に追加されている。前回と同様`View`には`Events`が設定されている。という流れかな?

![スクリーンショット 2014-09-18 19.38.29.png](https://qiita-image-store.s3.amazonaws.com/0/3184/2df1712c-b840-59fa-0126-6580ee149278.png "スクリーンショット 2014-09-18 19.38.29.png")

手を動かしているうちに、何となくだが`MVC`の役割と処理の流れが理解できるようになってきた。

まだまだ`el`の理解が不十分であるが・・・。
IISのカスタムFTP認証プロバイダー作成でのハマリポイント

#概要
IISのFTPサービス向けのカスタム認証プロバイダーをC#で作成したのですが、その過程でハマったポイントなどをまとめます。

基本的には以下チュートリアルのサンプルを参考にしました。

 * [マネージ コード (C#) を使用して単純な FTP 認証プロバイダーを作成する方法](http://technet.microsoft.com/ja-jp/library/ff454139.aspx)

##環境
 * Windows 7 Professional
 * Visual Studio 2012
 * IIS 8.0 Express

##使用可能な.Net Frameworkのバージョン

上記の環境で、チュートリアルの通りにサンプルプログラムをビルドしてみましたが、FTPでの認証ができず、DLLも呼び出されていないようでした。

以下のページにも記載がありますが、IIS 8.0のFTP拡張機能では.Net Framework 4.0は使用できないようです。.Net Framework 3.5をVisual Studioのプロジェクトのプロパティから、「アプリケーション」>「対象のフレームワーク」で指定する必要があります。

 * [Custom FTP Authentication Problem](http://forums.iis.net/t/1170208.aspx?Custom+FTP+Authentication+Problem)

##DLLの再インストール(グローバルアセンブリキャッシュ)

カスタムFTP認証プロバイダを作成する上で、もっとも挙動がわからなかったのは、グローバルアセンブリキャッシュ関連です。カスタムFTP認証プロバイダはチュートリアルにもあるように、作成されたDLLをgacutil.exeコマンドを使用してインストールします。その際、一度DLLをインストールした後に同一のアセンブリバージョンのDLLをインストールしても、そちらが使用されている気配がありません。インストール時にFTPサービスの停止、インストール後に起動などをしても読み込まれていないようでした。

ネットで検索した結果、以下の手順でマシンを再起動することなく、新しいDLLを使用することができました。

以下のコマンドでDLLを使用しているプロセスを調べる。

```console
> tasklist /M <dllファイル>
```

そして、そのプロセスをKILLする。

```console
> taskkill /PID <pid> /F
```

この後、新しいDLLをgacutil.exeコマンドでインストールすればオッケーです。FTPサービスの再起動も不要でした。

##デバッグ方法(Event Tracing for Windows)

DLLの問題にハマっているときに以下のページで、WindowsのEvent Tracing for Windowsという機能を使用して、何が起っているのか調べる方法を見付けました。

* [FTP and ETW Tracing](http://blogs.msdn.com/b/robert_mcmurray/archive/2008/08/29/ftp-and-etw-tracing.aspx)

このページのバッチファイルをコピーし、実行してみましたが、該当イベントがないというメッセージが出るだけでした。

しかたがないので、バッチファイルの中身を確認したところ、logmanコマンドでデータを収集する箇所が以下のようになっていました。

```bat
logman start "ftp" -p "IIS: Ftp Server" 255 5 -ets
```

そこで、以下のコマンドで、イベントプロバイダーの一覧を表示しました。

```console
> logman query providers
```

その結果、日本語Windowsでは"IIS: Ftp Server"ではなく、"IIS: FTP サーバー"となっているではないですか。

結局、上記ページのバッチファイルの文字列を"IIS: FTP サーバー"に修正することでうまく、情報を取得できるようになりました。

##FTPの認証キャッシュ

開発の途中で、IISのFTPサービスが認証情報のキャッシングを実施していそうなことに気付きました。開発中にキャッシュされることで少し混乱したので、これも切っておきました。

 * [FTP Caching \<caching\>](http://www.iis.net/configreference/system.ftpserver/caching)

IISマネージャーの構成エディターから「system.ftpServer/caching」を選択し、「credentialsCache - enabled」をFalseに変更しました。

##カスタム認証プロバイダーに設定を与える

開発していた認証プロバイダーをファイルなどで設定できるようにする方法も調べました。最終的には、以下ページのIIS設定ファイルから読み込ませる方法がスマートそうなので、これを採用しました。

* [IFtpAuthenticationProvider.Initialize Method \[IIS 7\]](http://msdn.microsoft.com/en-us/library/dd692902%28v=vs.90%29.aspx)
msdos ラベルで運用していたマシンの再インストール時に gpt ラベルに置き換える


# 概要
タイトル通りですいません。
2TB の壁を超えるためのアレです。

# インストール環境
pxe boot でのインストールです。

# 実施内容
* 既存の環境を壊していいことが前提のため何も考えずに突破しています。
* 間違っても運用中のマシンに勢いでやらないようにしてください。
* もっと良いやり方があるかもしれません(たぶんある...)。
	* ご存知の方教えてください。

```
# parted /dev/sda
(parted) mklabel gpt
```

* Warning メッセージが出ますが無視して突き進みます。

```
(parted) print
```
* なくなったことを確認して reboot し pxe boot します

* kickstart のファイルで下記に注意
	* この2つはディスクラベルを壊して MSDOS ラベル配置します

```
zerombr
clearpart --all --initlabel
```
* cleanpart については以下に置き換えると良いです

```
clearpart --none
```

インストールが完了し ```parted -l``` で確認すると Partition Table が　GPT になっていました。

一段落。

# 参考情報
* [Installing CentOS/RedHat on disks larger than 2Tb](https://peterpap.net/index.php/Installing_CentOS/RedHat_on_disks_larger_than_2Tb)
kafka partition reassign

ここではサーバーを２台から４台に増設すると想定

現状を確認

```bash
$ kafka-topics.sh --describe --zookeeper localhost:2181/kafka  --topic test_queue
Topic:test_queue	PartitionCount:64	ReplicationFactor:2	Configs:
	Topic: test_queue	Partition: 0	Leader: 1	Replicas: 0,1	Isr: 1,0
	Topic: test_queue	Partition: 1	Leader: 1	Replicas: 1,0	Isr: 1,0
...
```

0,1のみに割り振られている

config作成

```topics-to-move.json
{"topics":
     [{"topic": "test_queue"}],
     "version":1
}
```

実行

```bash
$ kafka-reassign-partitions.sh  --zookeeper localhost:2181/kafka --topics-to-move-json-file test.json  --broker-list "0,1,2,3"  --generate

Current partition replica assignment
{"version":1,"partitions":...

Proposed partition reassignment configuration
{"version":1,"partitions":...

```
'Proposed partition reassignment configuration'以下のJSONをpartitions-to-move.jsonというファイルに保存

```bash
$ kafka-reassign-partitions.sh  --zookeeper localhost:2181/kafka --reassignment-json-file partitions-to-move.json  --execute
```

確認

```bash
$ kafka-topics.sh --describe --zookeeper localhost:2181/kafka  --topic test_queue
Topic:test_queue	PartitionCount:64	ReplicationFactor:2	Configs:
	Topic: test_queue	Partition: 0	Leader: 0	Replicas: 0,3	Isr: 0,3
	Topic: test_queue	Partition: 1	Leader: 1	Replicas: 1,0	Isr: 1,0
	Topic: test_queue	Partition: 2	Leader: 1	Replicas: 2,1	Isr: 1,2
...
```

Replicas, Isrが2,3にも割り振られていればOK


参考
https://cwiki.apache.org/confluence/display/KAFKA/Replication+tools#Replicationtools-6.ReassignPartitionsTool
UnityのNetworkViewで複数のシーンをリアルタイム連携

![スクリーンショット 2014-09-18 18.46.40.png](https://qiita-image-store.s3.amazonaws.com/0/38279/dd16e1d6-337d-d3ca-03e6-b68e99414cdf.png)

１つのシーンと同じ動きを複数のシーンで管理する場合に
NetworkViewを使うのが便利です。

やりたいことは
カメラを上下に動かしてカメラの動きを複数のシーンへ連携させる。
http://youtu.be/beyzL0q8C8c
※大和ちゃんを提供してくれたのは、pixiv絵師の澪りりさん。
かわいい絵をありがとう！
http://www.pixiv.net/member.php?id=5061172

NetworkViewは、以下のようにComponentから追加できます。
動きを連携させたいオブジェクトに追加しましょう。
![スクリーンショット 2014-09-18 18.59.10.png](https://qiita-image-store.s3.amazonaws.com/0/38279/a862b4a5-1fb1-aa41-7495-355b38340a0f.png)

次に、ローカルIP(127.0.01)指定で接続する為にスクリプトを
ちょこっと書きます。

```csharp:NetworkMenu
using UnityEngine;
using System.Collections;

public class NetworkMenu : MonoBehaviour
{

	public string connectionIP =  "127.0.0.1";
    public int portNumber =  8632;
	private bool connected = false;

	private void OnConnectedToServer()
	{
		connected = true;
	}

	private void OnServerInitialized()
	{
		connected = true;
	}

	private void OnDisconnectedFromServer()
	{
		connected = false;
	}

	private void OnGUI()
	{
		if (!connected) {
		    connectionIP = GUILayout.TextField (connectionIP);

		int.TryParse (GUILayout.TextField (portNumber.ToString ()), out portNumber);

			if (GUILayout.Button ("Connect")){
				Network.Connect (connectionIP, portNumber);
			}
			if (GUILayout.Button ("Host")){
				Network.InitializeServer (4, portNumber, true); 

			}
		} else {
			GUILayout.Label("connections:" + Network.connections.Length.ToString ());
		}
	}

}
```

こんな感じ。
![スクリーンショット 2014-09-18 19.02.33.png](https://qiita-image-store.s3.amazonaws.com/0/38279/39fc2762-2c2b-4093-258e-e57d855d5e31.png)

ポート番号は、参考にした動画に準じました。
使われてなければ、7000でも8000でも問題ないです。

実行の際は、制御したい方をHOST、受け取りたい方をConnectにして下さい。

やっぱりUnityは簡単で便利だなあー。


※これは、カメラの動きようのスクリプト
```C#:MoveCam
using UnityEngine;
using System.Collections;

public class MoveCam : MonoBehaviour {

	// Update is called once per frame
	void Update () {
        if (Input.GetKey(KeyCode.UpArrow))
        {
            this.transform.position += new Vector3(0, 1, 0);
        }
        
        if (Input.GetKey(KeyCode.DownArrow))
        {
            this.transform.position -= new Vector3(0, 1, 0);
        }
	}
}
```

以下の動画をNetworkViewの参考にしました。
すごくわかりやすいです。
http://www.youtube.com/watch?v=jjOe5dNOI34

※公式の参考
http://docs-jp.unity3d.com/Documentation/Components/class-NetworkView.html
AWS OpsWorks上でのchefリポジトリの構成について


# 概要
OpsWorksではカスタムのChef cookbooksを指定して自前のレシピを流せます。更に、opsworks-cookbooksというaws側で作成されているレシピもあり、こちらをカスタムレシピでも使用したいという場面があると思います。
今回は、opsworks-cookbooks内のnginxのレシピを使用したく自前のレシピからインクルードして使用したいと考えていました。

git、chefともに初心者レベルに毛が生えた程度のレベルです。

## OpsWorks上でのディレクトリ構成
実際にレシピが動作する環境を調査したところ以下のようにOpsworksはchefを実行するみたいです。

![opsworks-cookbook-dir.png](https://qiita-image-store.s3.amazonaws.com/0/10435/31ba10e0-73b6-f852-4204-f181c71da2b5.png "図1. Opsworks上に展開されるディレクトリ構成")
図1. Opsworks上に展開されるディレクトリ構成

図1.のsite-cookbooks配下に自前のレシピが展開されるのですが当然gitのリポジトリの構成そのままが展開されます。
つまり、
site-cookbooks
:
+- site-cookbooks
+- cookbooks
:

みたいな構成になります。ただし、これでもレシピ自体を実行することは可能です。
自前のレシピでcookbooks内のレシピを参照している場合に、図1.のcookbooksを参照することになります。ここでBerskfileはnginxを落とそうとするのですが、community cookbookのnginxを落としてきます。
そしてそれが、merged-cookbookへ展開されることになり、意図したレシピを実行することが出来ませんでした。


課題

* このような状況でopsworks-cookbooks/nginxを指定する方法 

## gitのリポジトリ構成
そこでの対応は、gitリポジトリの構成を以下のようにすることで対応しました。
![m-okamura_—_tmux.png](https://qiita-image-store.s3.amazonaws.com/0/10435/114f9a0c-85ea-7c41-2469-2f3c696b207e.png "図2. ローカルのレシピリポジトリ")
図2. ローカルのレシピリポジトリ

ポイント 

* ここをgitのリポジトリとして管理する
* レシピをフラットに構成する

ただ、こうするとせっかく用意したtest-kitchenを動かすことが出来ません。
試行錯誤の末、テストを動かすためのリポジトリを用意することにしました。

## テスト用のgitリポジトリ構成
以下のようにすることで、テスト用の環境も維持しながらOpsworksのリポジトリ構成も管理できる状態になりました。

![m-okamura_—_tmux.png](https://qiita-image-store.s3.amazonaws.com/0/10435/f2465ca7-adb9-9b4a-e44a-04e3897b369b.png "図3. テスト用リポジトリ構成")
図3. テスト用リポジトリ構成

ただ若干手間がかかるのが難点です。

ポイント

* テスト用のgitリポジトリとして管理
* テストしたいレシピはBerkshelfで管理

### まとめ
以上が、今回とった解決方法でした。
これより、いい方法があるように思いますが現状ではわからず、皆さんの突っ込みをお願いしたいところです。
テストについては端折りましたが、test-kitchen、kitchen-ec2を利用して、インスタンス上でテストをするようにしております。実際に流されるnode情報をenvironmentsに設定して、Opsworksで実行される状況に近いようにやってます。
その辺については[AWs OpsWorks User Guide]("http://docs.aws.amazon.com/opsworks/latest/userguide/welcome.html", "AWS OpsWorks User Guide")を参照してください。