OmniAICreator/Qiita-1.07M huggingface dataset:
Rails3のActiveResourceは賞味期限切れ？

Rails4からActiveResourceはコアライブラリから除外され、単独のgemに切り出されたようですが、Rails3にバンドルされているActiveResourceもかなり以前から既にメンテナンスされていないようです。

#####rails/rails:3-2-stableのActiveResource
https://github.com/rails/rails/tree/3-2-stable/activeresource/lib/active_resource
version.rbのバージョン番号以外は1年以上コードのメンテナンスがされていません。

#####GemのActiveResource
https://github.com/rails/activeresource/tree/master/lib/active_resource
こちらは頻繁に更新されています。


#####ActiveResource::Base.include_root_in_jsonの問題
これに気がついたのは「ActiveResource::Base.include_root_in_json = false」という設定をしたのに反映されない問題を調査していたときでした。
[githubのissue](https://github.com/rails/rails/issues/5063)を見ると確かに修正されているはずなのですが、rails本家のactiveresourceには反映されていませんでした。

Rails3を使いつつ、activeresourceだけ単独gemを使いたかったのですが、Gemfileに
`gem 'activeresource', :require => 'active_resource'`
と書いてもrails3にバンドルされているほうが読み込まれているみたいで使えませんでした。（だれかいい方法があったら教えてください・・・）

しょうがないので、config/initializersの下にこんなパッチファイル置いてしのぎました。

```ruby:activeresource_patch.rb
module ActiveResource
	class Base
    def to_json(options={})
			super(include_root_in_json ? { :root => self.class.element_name }.merge(options) : options)
		end
	end
end

ActiveResource::Base.include_root_in_json == false
```
Haml HTML5 Boilerplate

```haml:index.haml
!!!
/[if lt IE 7] <html class="no-js lt-ie9 lt-ie8 lt-ie7">
/[if IE 7] <html class="no-js lt-ie9 lt-ie8">
/[if IE 8] <html class="no-js lt-ie9">
/[if gt IE 8] <!--> <html class="no-js"> <!--
%head
  %meta{:charset => "utf-8"}
  %meta{:content => "IE=edge,chrome=1", "http-equiv" => "X-UA-Compatible"}
  %title
  %meta{:content => "", :name => "description"}
  %meta{:content => "width=device-width", :name => "viewport"}
  / Place favicon.ico and apple-touch-icon.png in the root directory
  %link{:href => "css/normalize.css", :rel => "stylesheet"}
  %link{:href => "css/main.css", :rel => "stylesheet"}
  %script{:src => "js/vendor/modernizr-2.6.2.min.js"}
%body
  /[if lt IE 7]
    <p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p>
  / Add your site or application content here
  %p Hello world! This is HTML5 Boilerplate.
  %script{:src => "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"}
  :javascript
    window.jQuery || document.write('<script src="js/vendor/jquery-1.9.1.min.js"><\/script>')
  %script{:src => "js/plugins.js"}
  %script{:src => "js/main.js"}
  / Google Analytics: change UA-XXXXX-X to be your site's ID.
  :javascript
    var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
    (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
    g.src='//www.google-analytics.com/ga.js';
    s.parentNode.insertBefore(g,s)}(document,'script'));
!= "</html>"
```

## Version

HTML5 Boilerplate Version 4.2.0

## References

* http://html2haml.heroku.com/
* https://raw.github.com/kaosf/haml-h5bp/v4.2.0/index.haml
* https://raw.github.com/h5bp/html5-boilerplate/v4.2.0/index.html
as-create-or-update-auto-scaling-group.sh 作った

AWSのオートスケーリンググループを作る際に、新規はcreateすればいいけど更新はupdate使わなきゃいけない＆**一部オプションはupdateで使えない**という違いがあって不便なので、同じ引数でupdateもcreateも出来るコマンド作った。


## 仕様
- 同名のAutoScalingGroupNameが既に存在すればupdate、無ければcreateを実行する。
- updateで使えない引数は勝手に除外してくれる。

```as-create-or-update-auto-scaling-group.sh
#!/bin/bash
#
# 同じ引数でcreateもupdateも出来る便利コマンド
#
update_opts=() create_opts=("$@") name="$1"
while [[ $# != 0 ]]; do
  if [[ $1 == --load-balancers || $1 == --tag ]]; then
    echo "Skip options for update: $1 $2"
    shift 2
  else
    update_opts+=("$1")
    shift
  fi
done
if as-describe-auto-scaling-groups "$name" | grep -q ^AUTO-SCALING-GROUP; then
  as-update-auto-scaling-group "${update_opts[@]}"
else
  as-create-auto-scaling-group "${create_opts[@]}"
fi
```

## 実行例

### 今まで

```
# 新規作成
as-create-auto-scaling-group \
  my-asg \
  --launch-configuration my-lc \
  --min-size 1 \
  --max-size 5 \
  --load-balancers my-lb \
  --tag "k=Name, v=my-autolaunch" \
  --availability-zones ap-northeast-1a
OK-Created AutoScalingGroup

# ちょっと修正したいのでヒストリーやコピペをupdateに変えて実行
as-update-auto-scaling-group \
  my-asg \
  --launch-configuration my-lc \
  --min-size 1 \
  --max-size 9 \
  --load-balancers my-lb \
  --tag "k=Name, v=my-autolaunch" \
  --availability-zones ap-northeast-1a
as-update-auto-scaling-group:  Malformed input-Unrecognized option:  --load-balancers
Usage: …

# なんかエラーになった！使えないオプションを削って再実行
as-update-auto-scaling-group \
  my-asg \
  --launch-configuration my-lc \
  --min-size 1 \
  --max-size 9 \
  --availability-zones ap-northeast-1a
OK-Updated AutoScalingGroup

# ちょっとの手間だけど面倒だなぁ…
```

### これから

```
# 新規作成
./as-create-or-update-auto-scaling-group.sh \
  my-asg \
  --launch-configuration my-lc \
  --min-size 1 \
  --max-size 5 \
  --load-balancers my-lb \
  --tag "k=Name, v=my-autolaunch" \
  --availability-zones ap-northeast-1a
OK-Created AutoScalingGroup

# ちょっと修正したいのでヒストリやコピペから値を変えて再実行
./as-create-or-update-auto-scaling-group.sh \
  my-asg \
  --launch-configuration my-lc \
  --min-size 1 \
  --max-size 9 \
  --load-balancers my-lb \
  --tag "k=Name, v=myserver-autolaunch" \
  --availability-zones ap-northeast-1a
Skip options for update: --load-balancers my-lb
Skip options for update: --tag k=Name, v=my-autolaunch
OK-Updated AutoScalingGroup

# 楽ちん！
```
#WordPress enqueue scripts/styles by custom fields

```php:customfield_scripts_styles.php
<?php
/*
Plugin Name: Customfield Add Header
Author: Takuro Hishikawa
Version: 0.1
*/

function customfield_scripts_styles(){
	if ( is_singular() ) {
		$post = get_post();
		if ( is_a( $post, 'WP_Post' ) ) {
		
			$custom_scripts = get_post_meta( $post->ID, 'custom_scripts', false );
			$queue_id = 0;
			foreach ( (array) $custom_scripts as $custom_script ) {
				wp_enqueue_script( 'custom-script-'.$post->ID.'-'.$queue_id, $custom_script );
				$queue_id++;
			}
			
			$custom_styles = get_post_meta( $post->ID, 'custom_styles', false );
			$queue_id = 0;
			foreach ( (array) $custom_styles as $custom_style ) {
				wp_enqueue_style( 'custom-style-'.$post->ID.'-'.$queue_id, $custom_style );
				$queue_id++;
			}
		}
	}
}
add_action( 'wp_enqueue_scripts', 'customfield_scripts_styles' );
```
Bashで変数を大文字小文字変換(uppercase/lowercase)する

bashのバージョン4以降から使えるようになった構文なんだけど、大文字小文字無視した文字列で比較したい時とかに地味に便利なのでメモ。

| 記述   | 説明                   | 例                             |
|:-------|:----------------------|:-------------------------------|
|`${v^}` | 大文字化(１文字目のみ)    |`v="ho ge"; echo ${v^}`→Ho ge  |
|`${v^^}`| 大文字化(全文字)        |`v="ho ge"; echo ${v^^}`→HO GE |
|`${v,}` | 小文字化(１文字目のみ)    |`v="HO GE"; echo ${v,}`→hO GE  |
|`${v,,}`| 小文字化(全文字)        |`v="HO GE"; echo ${v,,}`→ho ge |
|`${v~}` | 大小反転(１文字目のみ)    |`v="ho GE"; echo ${v~}`→Ho ge  |
|`${v~~}`| 大小反転(全文字)        |`v="ho GE"; echo ${v~~}`→HO ge  |


## 利用例

```sh
#!/bin/bash
echo -n "押すなよ！絶対押すなよ！ [y/N]"
read confirm
if [[ ${confirm,,} = y ]]; then
  echo "素直か！"
else
  echo "どーん！"
fi
```

## bashが古い場合は…
`tr`でも使っとけばいいんじゃね。

```sh
$ tr '[a-z]' '[A-Z]' <<<hoge
HOGE
```
Passengerをruby2.0,rails4に対応させる


Apache2で動作させる事前提としています。
そして、今回はバージョンアップする場合の手順

```bash
sudo su
cd /usr/local/src/
git clone git://github.com/FooBarWidget/passenger.git
cd passenger/
gem build passenger.gemspec
gem install passenger-4.0.0.rc6.gem
```

```bash
passenger-install-apache2-module
```

soファイルの出力先が表示されますので、控えておく事

> /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.0.rc6/libout/apache2/mod_passenger.so

```/etc/httpd/conf.d/passenger.conf
# Passengerの基本設定。
# passenger-install-apache2-module --snippet を実行して表示される設定を使用。
# 環境によって設定値が異なりますので以下の3行はそのまま転記しないでください。
#
# ↓ここでsoファイルのパスを記述
LoadModule passenger_module /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.0.rc6/libout/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.0.rc6
PassengerRuby /usr/bin/ruby

# Passengerが追加するHTTPヘッダを削除するための設定（任意）。
#
Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

# 必要に応じてPassengerのチューニングのための設定を追加（任意）。
# 詳しくはPhusion Passenger users guide(http://www.modrails.com/documentation/Users%20guide%20Apache.html)をご覧ください。
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerUseGlobalQueue on
PassengerHighPerformance on
PassengerStatThrottleRate 10
PassengerSpawnMethod smart
RailsAppSpawnerIdleTime 86400
RailsFrameworkSpawnerIdleTime 0
```

### httpd再起動

```bash
/etc/rc.d/init.d/httpd restart
```

バージョンアップって大変ですね＞＜

### 参考
http://d.hatena.ne.jp/akishin999/20130224/1361716958
Bundler::Dsl::YAMLが出て、bundle installができなくなった場合の対処法


redmine環境をruby2.0,rails4.0に更新したら以下のエラーが出て、bundle installが通らなくなった。

>uninitialized constant Bundler::Dsl::YAML (NameError)

色々調べた結果以下の方法で解決
Gemfileに以下の一行を追加

>require 'yaml'

そして、bundle install

>Your bundle is complete!

これだけにどれだけなやんだことか

### 参考
https://github.com/fdv/typo/issues/161
Turnip で placeholder のマッチングを柔軟にする

たとえば，以下のような step を定義した場合，

```ruby
step "ユーザが「:entry」をユーザ欄に入力する" do |user_id|
  fill_in "user_id", :with => user_id
end
```

以下のような条件節は定義した step にマッチしません。

```cucumber
When ユーザが「hoge」をユーザ欄に入力する      # マッチする

When ユーザが「」をユーザ欄に入力する          # 空文字列はマッチしない
When ユーザが「foo bar」をユーザ欄に入力する   # 複数 words はマッチしない
When ユーザが「山田太郎」をユーザ欄に入力する  # 日本語はマッチしない
```

これは `Turnip::Placeholder.default` で定義されているデフォルトマッチャが次のようになっているから。

```ruby
      def default
        @default ||= new(:default) do
          match %r((?:"([^"]*)"|'([^']*)'|([a-zA-Z0-9_-]+))) do |first, second, third|
            first or second or third
          end
        end
      end
```

なので，以下のように `"` や `'` で囲うか，

```cucumber
# 囲ってあれば日本語だろうと空文字列だろうとマッチする
When ユーザが「""」をユーザ欄に入力する
When ユーザが「'foo bar'」をユーザ欄に入力する
When ユーザが「'山田太郎'」をユーザ欄に入力する
```

以下のようにカスタム placeholder を定義してみましょう。

```ruby
placeholder :any do
  match /.*?/ do |any|
    any
  end
end

step "ユーザが「:any」をユーザ欄に入力する" do |user_id|
  fill_in "user_id", :with => user_id
end
```

```cucumber
# 囲わなくてもマッチする
When ユーザが「」をユーザ欄に入力する
When ユーザが「foo bar」をユーザ欄に入力する
When ユーザが「山田太郎」をユーザ欄に入力する
```
本当は怖い HTML5 Canvas の Retina対応

モバイル向けに、Canvasでつくったゲームを
Retinaディスプレイ対応をしたときにハマったこと。


## CanvasのRetina対応は一筋縄にはいかないッ

基本的にCanvasのRetina対応は以下のように、
実際のサイズの2倍のサイズでつくったCanvas要素を、CSSで実際のサイズに縮める。

```html:HTML
<canvas id="sample_canvas" width="640" height="800" style="width: 320px; height: 400px"></canvas>
```

これで、Retinaディスプレイできれいに表示できる。
しかし、このままでは以下のような問題が起きちゃう。  

* 2倍のサイズのCanvasに描画を行うため、処理が重くなる
* そのため 一部のAndroid端末にて、ブラウザが落ちる、端末が発熱する
* 一部のAndroid端末にて、Canvas要素のstyle属性を動的に変更するとブラウザが落ちる

そこで、Retina以外の端末向けに、処理の切り分けが必要になる。
Canvas要素は実際のサイズ。Canvas上の座標系をあわせるために、
Canvasのscaleを0.5にする。

```html:HTML
<canvas id="sample_canvas" width="320" height="400"></canvas>
```

```javascript:JavaScript
var canvas  = document.getElementById("sample_canvas");
var context = canvas.getContext("2d");

context.scale(0.5,0.5);
```

これで、Canvas内の座標は同じ数値を指定できるようになる。

window.devicePixelRatioの値に応じてCanvasサイズを決める方法もあるが、
上記のstyle属性をいじると落ちるバグがあるため、
iOSのRetinaディスプレイとそれ以外で切り分けるのがおすすめ。

***

## その他 注意すること

### widthとheightは変更しない

一部のAndroid端末では、Canvas要素のwidthとheightを変更すると、
Canvasの描画が2重になり、clearRect してもクリアされないというバグがある。

一度設定したwidthとheightは変更しないッ（再代入はOK


### drawImage での縮小だと画像がボケる

Canvas APIのdrawImageでも、2倍の大きさの画像を実際のサイズに縮小して表示できる。


```javascript:JavaScript
var image = new Image();

image.src = "sample.png"; // 実際のsample.pngのサイズ 200x200

image.addEventListener("load", function() {

	context.drawImage(image,0,0,100,100); // 半分のサイズを指定

}, false);
```

しかし、これだとCanvas上のピクセルは2倍にならないため
Retinaディスプレイでは画像がボケる。


***


## まとめ

今回は、Android端末にも広く対応を考えた場合に必要な話なので、
対応端末が限られる場合（iOSだけとか）の場合は気にする必要なしッ

とはいえ、結構シェアの高い端末でも発生する問題だったりします...！
Perlでメソッドをoverloadする方法

Perlではメソッドのオーバーロードが出来ない様ですね。まぁこんなだけ変数の型にゆるゆるだったら、出来るわけもないのかと思ったりもしますが、、、

代替策としてこんなのがあるみたい。
私としては、まとまってていいなーって感じです。

````Triangle.pm
package Triangle;
use Carp qw(croak);

my $subSpace = sub {
        my($a,$b,$c) = @_;
        my $s = ($a + $b + $c) / 2;
        my $inRoot = $s * ($s - $a) * ($s - $b) * ($s - $c);
        if ($inRoot >= 0){
                return sqrt($inRoot);
        }else{
                croak "you cannot construct the triangle with the sides $a, $b, $c !";
        }
};
sub new{
        my ($class,$a,$b,$c) = @_;
        bless{a=>$a, b=>$b,c=>$c, s=>$subSpace->($a,$b,$c)};
#       my $self = {a=>$a, b=>$b, c=>$c};
#       bless $self, $class;
#       return $self;
}

sub space{
        my ($self) = shift;
        warn "You are about to calculate the space of ", ref($self), "!!!\n";
        return $self->{s};
}


sub getSides{
       my $self = shift;
       return ($self->{a}, $self->{b}, $self->{c});
}

sub setSides{
       my ($self, $a, $b, $c) = @_;
       $self->{a} = $a;
       $self->{b} = $b;
       $self->{c} = $c;
       $self->{s} = $subSpace->($a,$b,$c);
}

1;
````

このgetter setterの部分を、同じメソッド名にして、それぞれ引数の数に応じて呼ぶモジュールを変えます。

````Triangle.pm～その2～
sub sides{
        my $self = shift; # invocant
        unless (@_) { # getter
                return ($self->{a}, $self->{b}, $self->{c}); # return properties
        } else { # setter
                my ($a, $b, $c) = @_;
                # get values from arguemnts and set properties
                $self->{a} = $a;
                $self->{b} = $b;
                $self->{c} = $c;
                $self->{s} = $subSpace->($a,$b,$c);
        }
}
````

モジュールはこんなもんで、あとはコレを呼ぶ側で、呼ぶメソッドをsetSides, getSidesからそれぞれsidesに統一したら完了です。

呼ぶ側のコードの例はこんな感じです。


````triangleSpace.pl
#! /bin/perl -w

use Triangle;

my $tri = Triangle->new(3,4,5);
my $space = $tri->space;
print "sides are ", join(",",$tri->sides), ". \n";
print "Triangle is ",$tri," and its space is ",$space,"\n";

my ($a,$b,$c) = $tri->sides;
$tri->sides($a,$b,$c);
$space = $tri->space;
print "sides are ",join(", ",$tri->sides), ". \n";
print "Triangle is ",$tri," and its space is ",$space,"\n";
````


同じ結果になっていることを確認して頂けたでしょうか？

めんどいんだかなんだかわかりませんが、こんなやり方も出来るんですね～　勉強になりました。
Jenkinsのシェルの実行について

## デフォルトの「シェルの実行」について

Jenkinsの「シェルの実行」で実行されるシェルは

```
/bin/sh -xe
```

で実行される(コンソール出力にも出てる)

 * オプション-x：シェルスクリプト内で実際に実行されたコマンドを表示する
 * オプション-e：0でない終了コードを返した時点でスクリプトがexitする

## 「シェルの実行」のシェルのオプションのカスタマイズについて

「シェルの実行」で先頭に以下のように記述しておくとオプションを付けない状態で実行出来る

```
#!/bin/sh
```

上記のように記述した場合、途中の終了コードは無視され最後の終了コードによってjenkinsの成功、失敗が判定される

````
#!/bin/sh

diff test # <= デフォルトだとここで0以外が返ってスクリプトがexitしjenkinsは失敗となるが無視される
echo "test" # <= 終了コードで0が返るのでジョブは成功する
````

## 参照サイト

 * [Things you didn't know about Jenkins - Why does Jenkins think my build succeeded?](http://thingsyoudidntknowaboutjenkins.tumblr.com/post/30255425955/why-does-jenkins-think-my-build-succeeded)
Haml と markdown を組み合わせるときの注意点

以下のような Sinatra プロジェクトを想定．

```ruby:Gemfile
source 'https://rubygems.org'

gem 'sinatra', '1.4.2'
gem 'haml', '4.0.2'
gem 'redcarpet', '2.2.2'
```

```ruby:config.ru
require 'sinatra'
run Sinatra::Application
get '/' do
  haml :index
end
```

```haml:views/index.haml
!!! 5
%html
  %head
    %meta{'http-equiv' => 'content-type', 'content' => 'text/html', 'charset' => 'utf-8'}
    %meta{'name' => 'robots', 'content' => 'nofollow, noindex'}
    %title My Title
  %body
    ~ markdown(:index, layout: false, fenced_code_blocks: true)
```

```markdown:views/index.md
# header

here is markdown area

\```
cd
ls
\```
```

(※ \`\`\` の中で \`\`\` を書く方法が分からなかったので \\\`\`\` となっています)

`index.haml` の中で `= markdown` ではなく `~ markdown` と書いているところがポイント．

こうしないと，\`\`\` の中身が `<pre><code>` として変換されたときに，インデントを保ってしまうので

```html
...
  <body>
    ...
    <pre><code>cd
    ls
    </code></pre>
    ...
  </body>
...
```

となってしまい，表示が

```
cd
    ls
```

と崩れてしまいます．しかし `~ markdown` としておけば，\`\`\` 内だけの改行を `&#x000A;` にしてくれるので崩れなくなります．`&#x000A;` ってのは `\n` です．

## サンプルとソースコード

Heroku にサンプルをアップしました．http://ka-haml-md.herokuapp.com

GitHub にソースコードをアップしました．https://github.com/kaosf/haml-md

## 参考

* [Haml Documentation - Whitespace Preservation: ~](http://haml.info/docs/yardoc/file.REFERENCE.html#tilde)
* [haml中のpreタグ問題 - komagata](http://docs.komagata.org/4250)
* [hamlでtext_areaを使う時のメモ - Hello, world! - s21g](http://blog.s21g.com/articles/1462)
Bulletが2.81でiOS最適化が入った件について

言わずと知れたオープンソースの物理エンジンbulletですが、
最新のリリースでは
It includes an Apple contribution of SIMD and Neon optimizations  for Mac OSX and iOS. 
SIMDとNeon最適化が入ったようです。
これは使うしかないですね！

http://bulletphysics.org/wordpress/?p=353
http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=8490
vimでコメントを非表示にする

[naoty/vim-folcom · GitHub](https://github.com/naoty/vim-folcom)

このプラグインをNeoBundle等でインストールすると、下のスクリーンショットのようにコメントを折りたたんで非表示にできます。`zm`, `zr`, `za`などで表示／非表示を切り替えられます。

```vim
NeoBundle 'naoty/vim-folcom'
```

コメントアウトしたソースコードを非表示にするのに役に立ちます。あとは、設定ファイルやライブラリを読むときにも読みやすくなります。

---

### C
![sample1](https://dl.dropboxusercontent.com/u/1235413/images/qiita/vim-folcom1.png)

![sample2](https://dl.dropboxusercontent.com/u/1235413/images/qiita/vim-folcom2.png)

### Ruby
![sample3](https://dl.dropboxusercontent.com/u/1235413/images/qiita/vim-folcom3.png)

![sample4](https://dl.dropboxusercontent.com/u/1235413/images/qiita/vim-folcom4.png)

### JavaScript
![sample5](https://dl.dropboxusercontent.com/u/1235413/images/qiita/vim-folcom5.png)

![sample6](https://dl.dropboxusercontent.com/u/1235413/images/qiita/vim-folcom6.png)

---

以上、自分で作ったプラグインのステマでした。初めて作ったプラグインです。斧まってま〜す。
Miller-Rabin素数判定法の実装(Java)

ミラー-ラビン素数判定法 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%A9%E3%83%BC-%E3%83%A9%E3%83%93%E3%83%B3%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A%E6%B3%95

少なくとも5桁くらいまでの整数は正確に判定できると思います。


```java:MillerRabinTest.java
// Miller-Rabin素数判定クラス
class MillerRabinTest{

	// nが素数ならtrue、nが合成数ならfalseを返す
	// kは判定サイクル数で、kが大きいほど素数判定が正確になり、速度は低下する。
	public static boolean isPrime(int n, int k) {
		// 2は素数
		if (n == 2) {
			return true;
		}
		// 1は素数ではない
		// 2以外の偶数は素数ではない
		if (n == 1 || n % 2 == 0) {
			return false;
		}
		// n-1を2のべき乗で割って2^s*dの形式に変形
		int d = n - 1;
		int s = 0;
		while (d % 2 == 0) {
			d = d / 2;
			s++;
		}
		// 判定サイクル
		for (int i = 0; i < k; i++) {
			boolean isPP = false;
			// 1からn-1の範囲から整数aをランダムに選ぶ
			int a = (int) (Math.round((n - 2) * Math.random()) + 1);
			// a^d mod n が1もしくはn-1なら、nはprobably prime
			int r = modPow(a, d, n);
			if (r == 1 || r == n - 1) {
				isPP = true;
			}
			// r^2 mod n が-1なら、nはprobably prime
			for (int j = 0; j < s; j++) {
				r = modPow(r, 2, n);
				if (r == n - 1) {
					isPP = true;
				}
			}
			// 上記のどちらにも当てはまらない場合、nはcomposite
			if (!isPP) {
				return false;
			}
		}
		return true;
	}
	
	// べき剰余の計算
	private static int modPow(long x, int k, int m) {
		if (k == 0) {
			return 1;
		}
		if (k % 2 == 0) {
			return modPow(x * x % m, k / 2, m);
		} else {
			return (int) (modPow(x, k - 1, m) * x % m);
		}
	}
}
```
第10回オフラインリアルタイムどう書くの参考問題。Python による実装例。

イベント : http://atnd.org/events/38678
問題 : http://nabetani.sakura.ne.jp/hena/ord10pokarest/
解答リンク集 : http://qiita.com/items/d819d1e5f2378317511e

Python で書いてみた。
2.7.2 と 3.3 の両方で動くことを確認。

```python:ord10pokarest.py
#coding:utf-8
import re

def  isroyal( hand ) :
    ranks=sorted( [ r[0] for r in hand ] )
    return ranks==[1,10,11,12,13]

def  isstraight( hand ) :
    ranks=sorted( [ r[0] for r in hand ] )
    return (
        ranks==list( range( ranks[0], ranks[-1]+1) ) or 
        ranks==[1]+list( range( ranks[1], 14) ) )

def  isflash( hand ) :
    return len(set( [ r[1] for r in hand ] ))==1

def score( hand ):
    return (( 1 if isroyal( hand) else 0 ) +
    ( 2 if isstraight( hand) else 0 ) +
    ( 4 if isflash( hand) else 0 ) )

def rank( c ):
    if re.match( "\d", c ):
        return int(c)
    else:
        return { "J":11, "Q":12, "K":13, "A":1 }[c]

def solve( src ):
    hand = [ ( rank(c[0]), c[1] ) for c in re.findall( "([^shdc]+)([shdc])", src ) ]
    return (
        { 0:False, 7:"RF", 6:"SF", 4:"FL", 2:"ST", 3:"ST" }[
            score(hand)
        ] or { 0:False, 6:"4SF", 4:"4F", 2:"4S"}[
            max( [ score(h) for h in (
                [ hand[0:i]+hand[i+1:5] for i in range(0,5) ]
            ) ] )
        ] or "-" )


def test( samples ) :
    for line in samples.splitlines():
        a=re.split( "\s+", line ) # num, input, expected
        if len(a) != 3:
            continue
        actual = solve( a[1] )
        ok=actual==a[2]
        print( [ "ok" if ok else "***NG***", a, actual ] )

test( """
0   Qs9s3dJd10h 4S
1   KdAdJd10dQd RF
52  10dKdQdAdJd RF"""    )
```

テストデータの大半は省略。

ruby版( http://qiita.com/items/c6ebf2c1a9c750568e97 )をそのまま移植した。

ruby から移植すると、return を書かなくてはいけないのがすごく新鮮。

for ループの else を使いたいと思ってたんだけど、使う場面がなかった。残念。

python には全然慣れてないので、普通はこう書かないよ！みたいな情報を教えて下さるとありがたいです＞python の人
QBzrのフォントを変更する

手元の環境（Windows + Bazaar 2.5.1 Standalone版）でしか試していない上に、Python は全然わからないのですが、とりあえずできたので投稿します。

QBzr でファイルの差分等を表示するとき、フォントが固定されていてユーザは設定することができません。
好きなフォントに変更するために直接 QBzr のコードを編集してみます。

(Bazaarのインストールフォルダ)/plugins/qbzr/lib/util.py というファイルをエディタで開きます。
Bazaar 2.5.1 では 1091行目あたりに以下のようなコードがあります。

```python:utli.py
    for font_family in ("Monospace", "Courier New"):
        font = QtGui.QFont(font_family, size)
        # check that this is really a monospace font
        if QtGui.QFontInfo(font).fixedPitch():
            return font
```
この、フォント名の配列の先頭に私の好きな Migu 1M フォントを追加しました。
(コメントを読む限り等幅フォントである必要がありそうですが)

```python:utli.py
    for font_family in ("Migu 1M", "Monospace", "Courier New"):
        font = QtGui.QFont(font_family, size)
        # check that this is really a monospace font
        if QtGui.QFontInfo(font).fixedPitch():
            return font
```

これで、以降 QBzr でコードを表示するときは設定したフォントで表示されるはずです。
当然、Bazaar をインストールし直したりすれば同じ作業が必要になるので、あまり実用的ではありませんが。。。
BitBucket に Sphinx ドキュメントを push したら自動的にウェブサーバーに反映するようにしてみた

とあるソフトウェアの新しいバージョンを BitBucket に push するたびに Sphinx ドキュメントを make html してドキュメントを生成し、make dist して tar ball を作り web サーバーにコピーして・・・、というのを繰り返すのがイヤになったので自動化してみた。ReadTheDocs でもいいんだけど、そこまで大がかりなシステムを使いたくなかったのと make dist して tar ball をコピーするところをやってくれないので自前で実装してみた、というところ。

ドキュメントやコードは https://bitbucket.org/mkasa/bitbucket_sphinx_autobuild にアップロードしてある。作ってみたら意外に面倒だった。
Compassを使ってみる

##Compassとは
Sass(Syntactically Awesome Stylesheets)を元に開発したフレームワーク。
Sassで記述されたファイルをコンパイルしてCSSファイルを生成出来る！

##Compassのインストール
rubyをインストールした状態で、下記を実行

```
$ sudo gem update -system
$ sudo gem install compass
```


##設定
プロジェクトの中身をみてみると、config.rbというファイルがある。
デフォルトは

```
http_path = "/"
css_dir = "stylesheets"
sass_dir = "sass"
images_dir = "images"
javascripts_dir = "javascripts"
```

+ http_path：サイトのパス
+ css_dir：CSS ファイルが書き出される場所
+ sass_dir：SCSS ファイルの場所
+ images_dir：画像ディレクトリ　※画像サイズを取得する時、この指定したディレクトリ以下を見るようです
+ javascript_dir：JavaScript ファイルの場所
+ output_style：SASS の書き出し方設定。:expanded, :nested, :compact or :compressed
「:expanded」{} で改行する形。よくみる CSS の記述形式はこれです。可読性たかし。
「:nested」Sass ファイルのネストがそのまま引き継がれる形。
「:compact」セレクタと属性を 1 行にまとめて出力。可読性低め。
「:compressed」圧縮して出力（全ての改行・コメントをトルツメ）。可読性は投げ捨て。
+ line_comments：CSS に SCSS での行番号を出力するかどうか。true or false

##モジュールのインポート
Compassを使うには、まずメインモジュールをインポートしなければならない。

```
@import "compass";
```
これで以下のモジュールをインポートしていることになる。

+ CSS3
+ Typography
+ Utilities


##実行
新規プロジェクトを作成し、compassの初期化を行う

```
compass create プロジェクト名
```

sassファイルを監視して、セーブされたらcssにコンパイルする

```
compass watch [プロジェクトのパス]
```

下記のようなエラーが出たらファイルパスをチェック！
config.rbなどを見なおして設定し直す

```
Nothing to compile. If you're trying to start a new project, you have left off the directory argument.
Run "compass -h" to get help.
```

きちんと実行されると下記が表示されて、ちゃんとscssファイルがコンパイルされています。

```
>>> Change detected at 20:07:25 to: test.scss
identical stylesheets/ie.css 
identical stylesheets/print.css 
identical stylesheets/screen.css 
overwrite stylesheets/test.css 
>>> Compass is polling for changes. Press Ctrl-C to Stop.

```


##余談

config.rbがおいてある場所に、拡張子.commandを付けてファイルを保存

```
#!/bin/bash
htdocs=$(dirname $0)
cd $htdocs
compass watch
```

今回はstart.commandという名前で保存。
これを開くか`Cmd + O`で実行するだけでプロジェクトを監視してくれるようになります。
<br/>
<br/>
<br/>


これを手で打っていたことを考えると、相当便利ですね。。

```
scss sass/test.scss stylesheets/test.css
```
[Starling] Flash DisplayListからStarlingにプロパティーをコピーする技

```ruby:ActionScript
function syncProperty(objA:starling.display.DisplayObject, objB:flash.display.DisplayObject):void
{
	objA.name = objB.name;
	objA.transformationMatrix = objB.transform.matrix;
	objA.alpha = objB.alpha;
	objA.blendMode = objB.blendMode;
}
```

他にも必要なプロパティーがあれば追加してやってくださいませ。
ポイントとしては transformationMatrix に Matrix を突っ込んでやることで座標・角度・スケールがコピーされます。
スタックオーバーフロー

謎なスタックオーバーフローに遭遇したので共有

``` AS3:as3
(function (): void {
	var a: *, b: *, c: *, d: *;
	d == d;
})();
```

**※実際は間に色んな処理があったが、最小で再現するところまで小さくした結果です。**

## 条件
* リリースビルドで再現。
* ちなみにデバッグビルドでは再現しない。
* リリースビルドでも Verbose Stack Traces が True の時は再現しない。
* `a, b, c, d` は何の型でもよい。
* 必ず一つはローカル変数を宣言する。
* 引数を含め4つ以上宣言する。
* 引数から順に数え始めて、最後のローカル変数を `==` や `!=`, `>` などで比較する。


もしかしたら FlexSDK のみかも、試してないからわかんない
テンプレートエンジン => Haml、Slimって何？


##テンプレートエンジンとは
テンプレートと呼ばれるHTMLのひな形を元にプログラムで加工し、画面に出力するためのライブラリ。
プログラマーとWebデザイナーとの分業を目的とし、特別なタグを解釈して実行することで処理を行う。

利点：

+ テンプレートエンジンを利用することでいくつかの恩恵が受けられる。
+ 見た目 (View) とロジックが分離できる
+ 例えばMVCのようなモジュール化を容易にする
+ デザイナーとプログラマーなど、作業の分担ができ、チームでの開発がやりやすくなる
+ ドキュメント生成のための同じようなコードの重複が避けられる

##Hamlとは
HamlはHTMLを生成するためのマークアップ言語。
インデントとCSSセレクタを用いた記述を行うことによって，少ない行数で正しい(X)HTMLを記述することができる．

Haml主義

+ Markup should be beautiful
+ Markup should be DRY
+ Markup should be well-indented
+ XHTML structure should be clear

##記述方法
#####タグとコンテント
|テンプレートエンジン|記述|
|:---|:--- |
| ERB| `<strong><%= item.title %></strong>`|
| Haml| `%strong= item.title`|

Hamlで"%ほげ"はタグを表す。

#####タグの属性
|テンプレートエンジン|記述|
|:---|:--- |
| ERB| `<strong class="code" id="message">Hello, World</strong>`|
| Haml| `%strong.code#message Hello, World`|

#####タグは省略するとdivタグと見なされる
|テンプレートエンジン|記述|
|:---|:--- |
| なし(HTML)| `<div clas='content'>Hello, world.</div>`|
| Haml| `.content Hello, world`|


#####変数の展開
属性は#{}での変数展開ができる。

ERB

```
<div class='item' id='item<%= item.id %>'>
  <%= item.body %>
</div>
```

Haml

```
.item{:id => "item#{item.id}"}= item.body
```

入れ子の構造を表す場合、インデントを使用する。
ERB

```
<div id='content'>
  <div class='left column">
    <h1>Welcome to our site!</h2>
    <p><%= print_information %></p>
  </div>
  <div class="right column">
    <%= render :partial => "sidebar" %>
  </div>
</div>
```


Haml

```
#content
  .left.column
    %h2 Welcome to our site!
    %p= print_information
  .right.column
    = render :partial => "sidebar"
```


##Slimとは
Rail界隈では、HTML(ERB)よりシンプルなHalm、から更に記号を減らしたようなテンプレートエンジンが人気らしいです。

記述例）

```
! doctype html
html
  head
    title Hello Slim

  body
    h1 Hello, Slim!

    div id="main"
      | これはSlimのサンプルです。
      | シンプルでしょう？

      p.note
        | Hamlのように「#」や「.」を使うこともできます。
```


あとで読む: erb, slim or haml
http://stackoverflow.com/questions/11390512/new-to-rails-which-one-do-you-suggest-and-why-erb-haml-or-slim
Sublime Text2でRailsCasts Themeを手に入れる


#####RailsCastsのThemeを手に入れる！
ちなみにRailsCastsとは、RailsのTipsをPodcasting！
Rails + 英語の勉強が出来てしまう２度美味しいオープンソース！

http://railscasts.com/

##Package Controleのインストール
インストールするにはメニューから`View > Show Console`でコンソールを立ち上げて下記のコマンドを実行。

```
import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print('Please restart Sublime Text to finish installation')
```
Package ControleはCommand Palleteから実行されており、Command Pallet は`cmd + shift + p`(OS X)で開けます。

Command Palletはパッケージのインストール、リポジトリの追加、パッケージの削除などいろいろ便利。
他にもいろいろなコマンドもあります。

http://wbond.net/sublime_packages/package_control/usage


##各種設定
#####コマンドラインのセットアップ
コマンドラインからSublime Text2を起動するためにsublへのシンボリックリンクを作成する。

```
$ ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl
```
※シンボリックリンクとは：あるファイルやディレクトリに別の名前を与え、ユーザやアプリケーションがその名前をファイル本体と同様に扱えるようにする仕組み。lnコマンドで実行。

これでsublをコマンドラインで動かせるようになります。
きちんと実行されていれば`subl --help`でヘルプが参照できます。

##テーマの適用
#####RailsCastsのテーマを適用
下記からテーマをダウンロード

<a href="http://media.railscasts.com/resources/textmate_theme.zip">Download Textmate Theme</a>

######設定
ダウンロードしたテーマファイルをSublime Text2のパッケージディレクトリへ配置

```
% cp ~/Downloads/Railscasts.tmTheme ~/Library/Application\ Support/Sublime\ Text\ 2/Packages/
```

これでSublime Text2を起動して`Sublime Text2 > Preference > Color Scheme > Railscasts`を選択すると、Railscastsのテーマが適用されます！
DateTimeオブジェクトにUNIXタイムスタンプとタイムゾーンを指定した時の挙動に関する備忘録

`DateTime` オブジェクト生成時、第1引数に UNIX タイムスタンプを指定した場合、 第2引数にどんなタイムゾーンを指定しようとオブジェクトにはタイムゾーンが設定されない:

    % php -a
    Interactive shell

    php > var_dump((new DateTime('2013/02/20', new \DateTimeZone('Asia/Tokyo')))->getTimestamp());
    int(1361286000)

    // なぜか日付がずれる
    php > var_dump((new DateTime('@1361286000', new \DateTimeZone('Asia/Tokyo')))->format('Y/m/d'));
    string(10) "2013/02/19"

    // date() だとずれない
    php > var_dump(date('Y/m/d', 1361286000));
    string(10) "2013/02/20"

    // Timezone が設定されていない！！
    php > var_dump((new DateTime('@1361286000', new DateTimeZone('Asia/Tokyo')))->getTimezone()->getName());
    string(6) "+00:00"

    // インスタンス化後に DateTime::setTimezone() でタイムゾーンを設定しなければならない
    php > var_dump((new DateTime('@1361286000'))->setTimeZone(new \DateTimeZone('Asia/Tokyo'))->format('Y/m/d'));
    string(10) "2013/02/20"

UNIXタイムスタンプにはタイムゾーンという概念がないことはわかってるけど、  `DateTime` オブジェクト的には保持しておくのがベターだと思うなー。

確かにドキュメントにも書いてあるんですけどねー。
http://www.php.net/manual/ja/datetime.construct.php

> `$time` パラメータが UNIX タイムスタンプ (`@946684800` など) であったりタイムゾーンつきで指定した場合 (`2010-01-28T15:00:00+02:00` など) は、 `$timezone` パラメータや現在のタイムゾーンは無視されます。

逆に、設定されると問題になることって何かあるんですかね？ `new DateTime($time, $timezone)` と `new DateTime($time)->setTimeZone($timezone)` でどんな差があるか詳しく知らないんですけど、現状の僕の知識ではこの仕様に対して納得のいく説明がつかないのでモヤモヤしています。

そうたろうに聞いたらそんな感じの議論どっかでみたとかいってたのでなんか理由あるのかなー。
create.js の使い方

# create.js

HTML5 Canvasのフレームワーク  
http://www.createjs.com/


## EaselJSの基本的な使い方
https://jsfiddle.net/1kxc7zhn/4/  

```html
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>

<canvas id="my-canvas" width="640" height="480"></canvas>

<script src="https://code.createjs.com/easeljs-0.8.2.min.js"></script>
<script>
window.onload = function() {

  // 使用するcanvasを取得
  var canvas = document.getElementById("my-canvas");

  // ステージを関連付ける
  var stage = new createjs.Stage( canvas );
  
  // 赤い丸を描画
  var circle = new createjs.Shape();
  circle.graphics.beginFill("#FF0000");
  circle.graphics.drawCircle(0, 0, 50);
  circle.graphics.endFill();
  circle.x = 100;
  circle.y = 100;
  stage.addChild(circle);

  // ステージを更新
  stage.update();
}
</script>
</body>
</html>
```

### 参考
canvasをFlashライクに扱える！EaselJSの基本的な使い方 | kudox.jp
http://kudox.jp/java-script/createjs-easeljs



## トゥイーン
https://jsfiddle.net/q9u7ruwc/

```html
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>canvas</title>
</head>
<body>

<canvas id="my-canvas" width="640" height="480"></canvas>

<script src="https://code.createjs.com/easeljs-0.8.2.min.js"></script>
<script src="https://code.createjs.com/tweenjs-0.6.2.min.js"></script>

<script>
window.onload = function() {

  // 使用するcanvasを取得
  var canvas = document.getElementById("my-canvas");

  // ステージを関連付ける
  var stage = new createjs.Stage( canvas );
  
  // 赤い丸を描画
  var circle = new createjs.Shape();
  circle.graphics.beginFill("#FF0000");
  circle.graphics.drawCircle(0, 0, 50);
  circle.graphics.endFill();
  circle.x = 100;
  circle.y = 100;
  stage.addChild(circle);

  // フェードイン
  circle.alpha = 0;
  createjs.Tween.get(circle).to({alpha:1}, 3000);

  // フレームレート30で、ステージを更新
  createjs.Ticker.setFPS(30);
  createjs.Ticker.addEventListener("tick", stage);
  stage.update();
}
</script>
</body>
</html>
```
### 参考
トゥイーンで簡単canvasアニメーション！TweenJSの使い方 | kudox.jp
http://kudox.jp/java-script/createjs-tweenjs  

TweenJSのTimelineを使ったテキストアニメーション | kudox.jp
http://kudox.jp/java-script/createjs-tweenjs-timeline

CreateJSでキラキラと輝くTwinkle表現に挑戦 | kudox.jp
http://kudox.jp/java-script/createjs-shape-twinkle


EaselJSのMouseEventを理解しよう | kudox.jp
http://kudox.jp/java-script/createjs-easeljs-mouseevent


## その他

#### スマートフォンやタブレットのタッチイベントに対応させる

```
if (createjs.Touch.isSupported()) {
  createjs.Touch.enable(_stage);
}
```


### 参考

JavaScript | kudox.jp
http://kudox.jp/java-script/


バージョンアップしたCreateJSを試してみたよ | kudox.jp
http://kudox.jp/java-script/createjs-update-2012-august

- CreateJSの名前空間 
- EaselJSのマルチタッチサポート
- TweenJSのonChangeイベントハンドラ
- PreloadJSのXML対応
- その他の変更点・新機能

PreloadJSで外部ファイルを読み込む | kudox.jp
http://kudox.jp/java-script/createjs-preloadjs
leaflet の紹介

leaflet は、Googleマップライクに地図操作ができるJavaScriptライブラリです。
leaflet の利用例をいつくか　github に置きました。  

https://github.com/katoy/leaflet  
 
(現状のものは　いずれも web 上でみつけた使用例であり、私の独自アイデアでの利用例ではありません。)
Go言語でdebugログの実現方法

標準ライブラリをのぞいていたらdebugログを下記の様に実装してたので備忘録までに・・・

```go
var debug = debugT(false)
type debugT bool
func (d debugT) Printf(format string, args ...interface{}) {
      if d {
            log.Printf(format, args...)
      }
}
```
って感じで定義しといて使うときには

```go
debug.Printf("hogehoge: %s", s)
```
#チルダ(~)って何を表すの？


チルダ(~)はユーザのホームディレクトリを指す。

試しにターミナルを開いて以下のコマンドを実行すると

#####~/に移動

```
4dusers$ cd ~/
4dusers$ pwd
/Users/4dusers
```

#####/に移動

```
4dusers$ cd /
4dusers$ pwd
/
```

~/はユーザのホームディレクトリを指し
/はルートディレクトリを指しているのですね。

余談ですが、なぜUnix&Linuxでチルダがホームディレクトリを表現するのか、というのは昔のキーボードのレイアウトが関係あるそうです。
http://www.aivy.co.jp/BLOG_TEST/nagasawa/c/2013/01/unixlinux.html

そう言えばhjklの位置に矢印がついてるキーボードが昔あったような。
zshとは

##zshとは

bourne　shell系コマンドとcsh系のコマンドが両方使える上に、ksh系のコマンドライン編集機能も実装された究極のシェル。

「zshに出来ないことがあったら、それはバグだ」

##Bシェル系とCシェル系ってなに？

### Bourne　Shell系
sh(Bourne　シェル): UNIX上の一番古いシェル。履歴機能や補完機能などの対話機能はないため、ログインシェルとして採用されることは殆ど無い。

bash(Bourne Again　シェル): shを基本に様々な機能を加えたもの。Linuxでは基本のシェル。Mac OS Xの/bin/shも実体はbash!!

### C　シェル系
csh: C言語風文法のシェル。

tcsh: cshに機能を加えたもの。

<<<<<<< HEAD
### 便利すぎるそうなのでひとまず触ってみよう

=======
## 便利すぎるそうなのでひとまず触ってみよう

参考
[zsh - 良いとこ取りをしたシェル](http://technique.sonots.com/?UNIX%2F%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%2F%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%BB%E3%82%B7%E3%82%A7%E3%83%AB%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF%2Fzsh)

[zsh入門してみたら便利すぎて鼻息が抑えられない](http://ama-ch.hatenablog.com/entry/20090109/1231526834)

[zshで究極のオペレーションを](http://gihyo.jp/dev/serial/01/zsh-book)
GoogleMap v2 のMyLocationボタンのクリックイベントを拾う

GoogleMapで現在位置に移動するボタン？がマップに表示されますが、それをクリックした時のイベントは取得できないようです。。。

[http://stackoverflow.com/questions/14777951/my-location-button-event-listener](http://stackoverflow.com/questions/14777951/my-location-button-event-listener "My location button event listener")

リンク先にあるように、自分でそれっぽいボタンを配置して、GoogleMap.getMyLocation()で位置を取得して、地図を移動させるしかないようです。

```java:map.java
// MyLocationレイヤーを有効にする
googleMap.setMyLocationEnabled(true);
// 設定の取得
UiSettings settings = googleMap.getUiSettings();
// 標準のMyLocationボタンの無効化
settings.setMyLocationButtonEnabled(false);

// 標準のMyLocationボタンに代わりになるボタンを自分で用意して、
// そのクリックイベントでMyLocationを取る
void onMyLocationButtonClicked() {
    Location myLocation = googleMap.getMyLocation();
    LatLng latLng = new LatLng(myLocation.getLatitude(), myLocation.getLongitude());

    // 地図の中心に移動する
    CameraUpdate camera = CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder().target(latLng).zoom(10f).build());
    googleMap.animateCamera(camera);

    // なにかの処理・・・
}
```
bashでの変数について

##値の代入と参照

```値の代入
$ x = hove
```

```変数の参照
$ echo $x
```

```変数の開放
$ unset x
```

##クォート内
```パラメータは空白,タブ,改行コードで区切られる.変数にこれらの値を代入するには,その値をダブルクォーテーションで囲う.
$ x="hoge foo"
```
gzのファイルを展開せずにgrepする

ログファイルをgrepして何かを集計する場合があると思いますが、webアプリログとかはファイルサイズも大きく、月ごとにtar.gzになってたり、日ごとにgzになってる場合が多いと思います。

一回展開してからgrepをかけたりしてるとファイルサイズがでかいのでちょっとやっかいだったりするんです。

今回は日ごとにgzされているファイルを展開せずにgrepする方法。

```
zgrep "aaa" hoge.log.gz
```

以上です。
ぇ…grepコマンドの前にzつけるだけです。。。
シンプルなCSS整形ツールのまとめ (調査中)

Sass/LESS/Stylusのメリットとして、ベンダープリフィクスを付けてくれるというのがあります。ただ、それだけをしたいならちょっと大仰なので、もう少しシンプルなツールを探しています。それこそ、正規表現で置換するだけでも構わないのですが、日々変わるベンダー対応を追い続けるのは、かなり面倒。今、気づいているものを、ひとまず並べてみます。

他にもオススメあれば、ぜひコメント下さい!

※追記 (2014/5/6) : [gulp-autoprefixer](https://www.npmjs.org/package/gulp-autoprefixer)を追加。これが決定版かと思います。

## gulpjsで

[gulp-autoprefixer](https://www.npmjs.org/package/gulp-autoprefixer)というプラグインを使うと、

```js
gulp.src('./css/*.css')
  .pipe(prefix("last 1 version", "> 1%", "ie 8", "ie 7"))
  .pipe(gulp.dest('./dist/'));
```

みたいに書くだけで、よしなに計らってくれます。すばらしい。


## ブラウザ上でJavaScriptを使って
### cssFx
cssFx is a standalone polyfill that inserts the vendor-specific CSS3 properties necessary for old and new browsers. 
http://imsky.github.io/cssFx/

###Prefix free
Break free from CSS vendor prefix hell!
http://leaverou.github.io/prefixfree/

## Webサービス
### prefixr
http://prefixr.com
コマンドラインから (API経由)
https://github.com/js-coder/Prefixr-CL
※node.jsのバージョンが0.8じゃないとインストールに失敗する...

## Pythonで
###cssprefixer
https://github.com/myfreeweb/cssprefixer

インストール方法

```sh
$ brew install python
$ easy_install pip
$ sudo pip install cssutils
$ sudo pip install cssprefixer
```

使い方

```sh
$ cssprefixer my1.css my2.css --minify > result.css
```
Jenkinsでビルド結果をUnstable(不安定)にする

 * [Text-finder Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Text-finder+Plugin)を使えばコンソールログに出力された文字に応じてビルド結果をUnstable(不安定)にできる
  * この手法を用いれば任意のジョブの結果を成功、失敗、不安定の3種類で表現でき、結果によって他のプロジェクトを呼び分けられたりすることができる。

## Unstableにしてみる手順
TextFinder plugin 1.9で確認

 * Text-finder Pluginをjenkinsに入れる
 * 適当時なジョブを作成する
 * ビルドにシェルの実行を追加し以下のような設定にする

```
echo "TESTS FAILED!"
```

 * ビルド後の処理にJenkins Text Finderを追加し以下のような設定にする
  * Jenkins Text Finder：何も入力しない
  * Also search the console output：チェックする
  * Regular expression：TESTS FAILED!
  * Succeed if found：チェックしない
  * Unstable if found：チェックする
 * ジョブを実行する => 結果がUnstable(不安定)になる

## 参考
 * [php - How to mark a build unstable in Jenkins when running shell scripts - Stack Overflow](http://stackoverflow.com/questions/8148122/how-to-mark-a-build-unstable-in-jenkins-when-running-shell-scripts)
Google App Engine で Go


https://developers.google.com/appengine/docs/go/gettingstarted/

# インストール

Googleのサイト [Google App Engine SDK for Go](
https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go) からインストールできる。

でもbrewにあったのでそこから入れてみる。

```
brew install go-app-engine-64
```

(32bit版は ``go-app-engine-32`` )

これで ``dev_appserver.py`` や ``appcfg.py`` は ``/usr/local/bin`` に配置された。

でもPythonのSDKとかとバッティングしても大丈夫なのかよくわからないので共存させるときは自分で別の場所に配置した方がいいかもしれない。

## [Hello, Wolrd!](https://developers.google.com/appengine/docs/go/gettingstarted/helloworld)

``myapp``, ``myapp/hello`` というディレクトリをつくって２つのファイルを用意する。

```
myapp/
  app.yaml
  hello/
    hello.go
```

まず 1 つ目のファイルとして ``hello`` サブディレクトリに ``hello.go`` ファイルを書く。mainパッケージはSDK側にあるので作らなくていい。

```go:myapp/hello/hello.go
package hello

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}
```

次に 2 つ目のファイルとしてアプリケーション構成 ``app.yaml`` ファイルを書く。

```yaml:app.yaml
application: helloworld
version: 1
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app
```

そして ``dev_appserver.py`` にアプリケーションのディレクトリを渡して起動する。

```
dev_appserver.py --admin_port=9998 --port=9999 myapp/
```

[http://localhost:9999/](http://localhost:9999/) を開くと表示される。

ファイルの変更を監視しているので ``dev_appserver.py`` を再起動しなくても、ブラウザをリロードしたら変更を確認できるよとあるが、OS Xの場合、python からシステムにアクセスするために **PyObjC** が必要。Homebrewでpythonをインストールしていれば ``pip`` も入っているので

```
pip install -U pyobjc
```

でインストールする。これでGo SDKからファイルの変更が検出できるようになる。
ProjectEulerでObjective-Cを学ぶ その１

######これはObjective-Cを学習するために[ProjectEuler](http://projecteuler.net/)の問題を解いていこうという思いつきだけで始まったいつまで続くかわからない企画である。


##Problem 1
>10未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり, これらの合計は 23 になる.
同じようにして, 1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.
>[Problem 1](http://projecteuler.net/problem=1)
>[Problem 1 - PukiWiki](http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%201)

###回答
```objectivec
        NSMutableArray *array = [NSMutableArray array];// (1)
        for (int i=1; i<1000; i++) {// (2)
            if (i%3 == 0 || i%5 == 0) {
                [array addObject:@(i)];// (3)
            }
        }
        int ans =0;
        for (NSNumber *n in array){// (4)
            ans =ans + [n intValue];// (5)
            //NSLog(@"%@",n);// (6)
        }
        NSLog(@"%d",ans);// (7)
/*
2013-04-22 10:40:27.045 Euler[53449:303] 233168
*/
```

##解説
まず、以下の部分で条件に合致する配列を作成する。

```objectivec
        NSMutableArray *array = [NSMutableArray array];// (1)
        for (int i=1; i<1000; i++) {// (2)
            if (i%3 == 0 || i%5 == 0) {
                [array addObject:@(i)];// (3)
            }
        }
```

##NSMutableArray

Objective-Cでは配列として主に2つの型が存在する。
**NSMutableArray**と**NSArray**だ。
前者は更新可、後者は更新不可である。
今回は条件に合致した要素を追加するため**NSMutableArray**を使用する。

初期化は(1)の部分。
以下の2行は等価である。

```objectivec:NSMutableArray
NSMutableArray *array = [NSMutableArray array];
NSMutableArray *array = [[NSMutableArray alloc]init];
```

さて、NSMutableArrayに追加できる要素はオブジェクトのみである。
intやdouble等の値型は配列に追加できない。
なのでint型からオブジェクトである**NSNumber**型に変換する必要がある。
それが（３）の部分である。

```objectivec:NSMutableArray.addObject
[array addObject:@(i)];// (3)
```

逆に、配列から取り出した**NSNumber**型をintにパースするのは**intValue**

```objectivec:NSNumber.intValue
ans =ans + [n intValue];// (5)
```

そして**NSNumber**型を書式指定して出力する時は"%d"ではなく"%@"

```objectivec:NSLog
NSLog(@"%@",n);// (6)
```
もちろんint型の書式指定子は"%d"です。

```objectivec:NSLog
NSLog(@"%d",ans);// (7)
```

##for
forには2種類ある。
for-inを使う時は適切な型を指定しないとダメらしい。

```objectivec:NSLog
for (int i=1; i<1000; i++) {// (2)
}
for (NSNumber *n in array){// (4)
}
```

##疑問点

- NSIntegerとintって違うの？
- for-inで型指定する時ってid型使えないの？


##おねがい
えらそーに書いてますけどObjective-Cは初心者なので間違ってる所があったら暖かくツッコんでくださいおねがいします。
NSImageCell の objectValue と image の違い

**TL;DR:** 違いはない。

`NSImageCell` には、 `NSCell` から受け継いだ `objectValue` プロパティと `image` プロパティがある。これらは同じインスタンス変数を参照しているので、一方に値をセットすれば他方に反映される：

```objc
NSImageCell *cell = [[NSImageCell alloc] init];
cell.image = [NSImage imageNamed:@"..."];
// Now cell.image == cell.objectValue and vice versa.
```
scala.collection.mutable.Map の使い方

関数をメモ化するときのメモとして使うことを想定した私的メモ．

## Import

    import scala.collection.mutable

## 初期化

例:

    val dp = mutable.Map.empty[(Int, Int), Int]
    
## 利用

未設定のキーにアクセスすると例外が発生するので，`contains` で事前に存在を確認する．

+ `contains`
  - 未設定のキーにアクセスすると例外なので事前確認
+ `apply`
  - `apply(key)` で値にアクセスできる
+ `+=`
  - キー値のペアを追加する

例：

    val k = (1, 3)
    if (dp.contains(k)) dp(k)
    else {
      dp += (k -> result)
      result
    }

`get` してパタンマッチするよりも速そうなので，このようにしています．
WinUnitでテスト対象クラスのprivateメンバにアクセスする方法

テスト対象のTargetクラスがあります。
friendでprivateのメンバにアクセスできるテスト用のクラスを宣言します。

```cpp:Target.h
class Target {
private:
    friend class TargetTest;
    int m_value;
};
```

テスト用のTargetTestクラスはこうなります。
usingを使ってprivateなメンバにアクセスできるように定義しています。 

```cpp:TargetTest.h
#include <Target.h>
class TargetTest : public Target {
public:
    using Target::m_value;
};
```

TargetTestクラス使えば、Targetクラスと同じ記述でTargetクラスのメンバにアクセスでるようになります。

```cpp
#include "stdafx.h"
#include "TargetTest.h"

BEGIN_TEST(Test1)
{
    TargetTest obj;
    obj.m_value = 10;
    WIN_ASSERT_EQUAL(10, obj.m_value);
}
END_TEST
```
Arch Linux で wheel グループ以外の su を禁止する

ArchWiki には手順が記載されているのですが、日本語化されてないようなのでまとめてみました。

※ 追記 2013/04/23 3:00
下記の設定だとログアウト時に正常にアンマウントされず、2回目以降のログイン時にマウントポイントのマウントに失敗するようです。これが設定の問題なら修正すればいいのですが、どうも pam_mount のバグっぽい雰囲気もあったりで微妙です。

※ 追々記 2013/05/01 12:30
原理はイマイチわかってませんがとりあえずできてるっぽいので更新。
上記の問題は (表面上) なくなりました。

参考
[su (日本語) - ArchWiki] (https://wiki.archlinux.org/index.php/su_\(%E6%97%A5%E6%9C%AC%E8%AA%9E\))
[Pam mount - ArchWiki] (https://wiki.archlinux.org/index.php/Pam_mount)

# 1. 前置き

CentOS 等では、`/etc/pam.d/su` を一行コメントアウトするだけでできます。

```:/etc/pam.d/su
#auth   required    pam_wheel.so use_uid    ← コメントアウトを外す
```

Arch Linux の場合そもそも PAM を使っていないため、これだけでは su ユーザーを制限できません。

そこで Arch Linux にも PAM を導入して su を PAM で管理しよう、というのが流れになります。

(実のところこの変よくわかってません。ツッコミ大歓迎)

# 2. 手順

## pam_mount をインストール

pacman でぶち込むだけです。

```
# pacman -S pam_mount
```

## pam_mount.conf.xml を編集

`/etc/security/pam_mount.conf.xml` に下記を追記します。追記場所はどこでもいいはずですが、\<mkmountpoint enable="1" remove="true" /\> の直前がいいと思います。

なお、`path` は環境に合わせて適切に変更してください。

```:/etc/security/pam_mount.conf.xml

<volume user="^(?!root).*" fstype="auto" path="/dev/sdaX/home" mountpoint="/" options="fsck,noatime" />
<mkmountpoint enable="1" remove="true" />

</pam_mount>
```

正規表現が使えるようなので、root 以外はすべて PAM で管理します。
(root を除いているのは PAM がおかしくなった時にログインできなくなったらやだなーと思ってのことです。user="*" でも問題ないかもしれません)

## system-auth を編集

`/etc/security/system-auth` に下記を追記します。

(ArchWiki よりそのまま引用)

```:/etc/security/system-auth
#%PAM-1.0

auth      required  pam_env.so
auth      required  pam_unix.so     try_first_pass nullok
auth      optional  pam_mount.so    <- 追加
auth      optional  pam_permit.so

account   required  pam_unix.so
account   optional  pam_permit.so
account   required  pam_time.so

password  optional  pam_mount.so    <- 追加
password  required  pam_unix.so     try_first_pass nullok sha512 shadow
password  optional  pam_permit.so

session   optional  pam_mount.so    <- 追加
session   required  pam_limits.so
session   required  pam_env.so
session   required  pam_unix.so
session   optional  pam_permit.so
```

ディスプレイマネージャーとして SLiM や GDM を使ってる場合、`/etc/pam.d/login` と、それぞれ `/etc/pam.d/slim` `/etc/pam.d/gdm-password` も編集するようです。
(この辺は試してません)

## su を編集

`/etc/pam.d/su` を編集します。

```:/etc/pam.d/su
#auth   required    pam_wheel.so use_uid    ← コメントアウトを外す
```

これだけだと `su -` によるユーザーの変更は制限できないので、`su-l` も編集しておいた方がいいと思います。

```:/etc/pam.d/su-l
#auth   required    pam_wheel.so use_uid    ← コメントアウトを外す
```

`sudo` できるユーザーも wheel のみにする場合、`visudo` を編集します。

```
# visudo

#%wheel ALL=(ALL) ALL    ← コメントアウトを外す
```

## 再起動

再起動後に反映されます。

以上です。
Redmineをnginx + unicornで構築

Ubuntu上にRedmineをnginxとunicornで構築しました。

情報を探し始めるとすぐに、そのものズバリの記事がわんさかヒットしました。
今回は、その中でも最も丁寧に記述されていた[くじらにっき++](http://kujira16.hateblo.jp/entry/2012/09/04/144953)さんの記事を参考に構築しました。半年位前の記事ですが、大きな問題もありませんでした。

付け足す情報も特にありませんが、その時に補足情報として役だったサイトと、引っ掛かった部分をまとめます。

### 参考サイト
[くじらにっき++ - Ubuntu 12.04 + ruby 1.9.3 + nginx + unicorn + Redmine](http://kujira16.hateblo.jp/entry/2012/09/04/144953)

[コードを舐める日々 - さくらVPSで nginx + MySQL + Unicorn + Redmine の運用](http://t.nzk.me/entry/2012/12/28/144730)
[kaz_shuの日記 - nginx + unicorn + redmine 2.0 を ubuntu で動かしてみた。](http://d.hatena.ne.jp/kaz_shu/20120520/1337527540)
[Redmine.jp - Redmineのインストール](http://redmine.jp/guide/RedmineInstall/)
[oiax - Ruby on Rails 3.2 を Ubuntu にインストールする手順をかなり丁寧に説明してみました](http://www.oiax.jp/rails/zakkan/rails_3_2_installation_on_ubuntu.html)

## 引っ掛かりポイント

### サンプルの場所
くじらにっき++さんの記事では、unicorn.rbやnginx.confのサンプル位置が

```
~/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/unicorn-4.3.1/examples
```

と紹介されているが、こちらの環境では

```
/var/redmine/vendor/bundle/ruby/1.9.1/gems/unicorn-4.6.2/examples
```

以下にあった。


### マシンのメモリ量
今回は、VMware上にUbuntuを構築したが、マシンのメモリを何故か500MB程度しか割り振っていなかった。
にも関わらず、unicornのworker processes数を4のままにしていた。
これが原因で、接続してもレスポンスが帰って来なかったり、unicornが落ちたりしていた。

メモリを増量することで問題なく動作するようになった。
sinatraの導入

アプリケーション名のディレクトリを作り，
その中にGemfileを作成．

```ruby:Gemfile
source 'https://rubygems.org'

gem 'sinatra'
gem 'passenger'

group :development do
 gem 'sinatra-contrib'
end
```

`bundle install`

`config.ru`を作成

```ruby:config.ru
require 'rubygems'
require 'sinatra'
require './[app_name].rb'

run Sinatra::Application
```

```ruby:[app_name].rb
get '/' do
 'Sinatra Sample.'
end
```

public,tmpディレクトリを作成し，シンボリックリンクをはる
`ln -s [app_name]/public /var/www/html/[app_name]`

`/etc/hhtpd/conf.d/passenger.conf`に`RackBaseURI /[app_name]`を追加

`service httpd restart`で実行

参考URL
[SinatraによるWebアプリケーション開発入門](http://grow.pe/dojo/tips/41/Sinatra%E3%81%AB%E3%82%88%E3%82%8BWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80/)
[ざくにく定食:【Ubuntu】さくらのVPSでSinatraを動かす ](http://zakuni.blogspot.jp/2011/02/ubuntuvpssinatra.html)