OmniAICreator/Qiita-1.07M huggingface dataset:
FuelPHPでAgentクラスを使っている人はconfigのアップデートを！

FuelPHPがUserAgent判定の為に使用している、brawscapファイルの配布URLが3月30日時点で変更になっています。

デフォルトで1週間キャッシュされるようになっていますが、それを過ぎると取得時にエラーとなりエラーログ祭りが発生します。

対応として、`fuel/core/config/agent.php` を `fuel/app/config/agent.php` にコピーし、configのurlを以下のように編集します。

```php:agent.php
'url' => 'http://browscap.org/stream?q=Lite_PHP_BrowsCapINI',  
```

参考

https://github.com/fuel/core/commit/478ba0c0140e740cb63ed23e4a659adc8985745b
cliでインターネットの速度計測(speedtest.net)

今まで[BNRスピードテスト](http://www.musen-lan.com/speed/)を使ってきたが、Linuxのcliからでは測定できないため別のものを探すことにした。

http://www.speedtest.net
がよく使われている様子。

```bash:インストール
$ sudo easy_install speedtest-cli
```

```bash:測定開始
$ speedtest
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from NTT PC Communications,Inc. (122.122.122.144)...
Selecting best server based on ping...
Hosted by World's Fastest Indian (Tokyo) [10.39 km]: 13.51 ms
Testing download speed........................................
Download: 65.87 Mbit/s
Testing upload speed..................................................
Upload: 21.29 Mbit/s
```

```bash:東京決め打ち
$ speedtest --server 251
```

```bash:これが良さそう
$ speedtest --server 251 --simple
Ping: 23.762 ms
Download: 51.55 Mbit/s
Upload: 41.98 Mbit/s
```

```bash:オプション
$ speedtest -h
usage: speedtest [-h] [--share] [--simple] [--list] [--server SERVER]
                 [--mini MINI] [--source SOURCE] [--version]

Command line interface for testing internet bandwidth using speedtest.net.
--------------------------------------------------------------------------
https://github.com/sivel/speedtest-cli

optional arguments:
  -h, --help       show this help message and exit
  --share          Generate and provide a URL to the speedtest.net share
                   results image
  --simple         Suppress verbose output, only show basic information
  --list           Display a list of speedtest.net servers sorted by distance
  --server SERVER  Specify a server ID to test against
  --mini MINI      URL of the Speedtest Mini server
  --source SOURCE  Source IP address to bind to
  --version        Show the version number and exit
```

## CentOS5へのインストール手順

```bash:
$ sudo yum install python-setuptools
$ sudo easy_install speedtest-cli
```
Google Compute Engine を使うための準備（Google Cloud SDK インストール - Windows 編）

この記事は以下の一部です。

googlecomputeengine - Google Compute Engine 入門 - Qiita
http://qiita.com/yuko/items/460ac35d8706e8df1290

![cloud-sdk-logo_short_900px.jpg](https://qiita-image-store.s3.amazonaws.com/0/40971/d0dd3cf2-61af-571c-22a1-148d1a0ba456.jpeg "cloud-sdk-logo_short_900px.jpg")

Google Cloud SDK — Google Developers
https://developers.google.com/cloud/sdk/

>System Requirements: Google Cloud SDK runs on Windows, Mac OS X and Linux, and requires Python 2.7.x. Some of the individual tools bundled with Cloud SDK have more stringent requirements: using App Engine tools for Java development requires Java 1.7+, and using SSH functionality from gcutil tool on Windows requires a 32-bit Cygwin installation.

Windows の場合は
- 32-bit Cygwin 
- Python 2.7.x
- Java 1.7+ (GAE/Jをしたい人。Google Compute Engine を試すためだけなら不要)

これよりは仮想環境を立てて、その中でUbuntuを動かし、そこから Google Cloud SDK をインストールしていただけるといいなあと思っていますので今回はそちらをご案内します。
もちろんQiitaにもCygwinのインストール方法が沢山載っていますのでそれをお試し頂いてもOKです。

###1. VirtualBoxインストール
![vbox_logo2_gradient.png](https://qiita-image-store.s3.amazonaws.com/0/40971/93378ad6-8a70-c079-a9b8-dd1f40a8b193.png "vbox_logo2_gradient.png")

Downloads – Oracle VM VirtualBox   https://www.virtualbox.org/wiki/Downloads

上記より `VirtualBox 4.3.10 for Windows hosts` をダウンロードしてインストールして下さい。

###2. Ubuntuイメージダウンロード（約1GBなので少し時間がかかります。）
![ubuntu-logo.gif](https://qiita-image-store.s3.amazonaws.com/0/40971/98af46cf-9070-fcae-de92-9b3754b79bf2.gif "ubuntu-logo.gif")


仮想ハードディスクイメージのダウンロード | Ubuntu Japanese Team
http://www.ubuntulinux.jp/download/ja-remix-vhd

上記より `ubuntu-ja-12.04-desktop-i386-vhd.zip` をダウンロードして下さい。
しばらくお茶を飲みながら待ちましょう。

ダウンロードが終わったら、ZIPファイルをダブルクリックして開き、中のファイルを取り出して下さい。
置き場所はどこでも構いません。
上記のリンクを参考に、VirtualBoxを起動して、Ubuntuを設定して下さい。

+[New]をクリック

`Name` に「Ubuntu」と入力してください。
`Type` は「Linux」となっていればOKです。
`Version` は「Ubuntu (32bit)」を選択して下さい。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/40971/da1f7cec-4f34-208f-2ddb-0542d0088216.png "01.png")

このまま何もせず[Continue]
![02.png](https://qiita-image-store.s3.amazonaws.com/0/40971/6c956361-6534-dfbd-b94c-50192f3f4547.png "02.png")

一番下の「Use an existing vertual hard drive file」を選択して先ほど取り出したファイルを選択して下さい。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/40971/ec897f29-291a-9933-d9fd-c36480acad3b.png "03.png")

![04.png](https://qiita-image-store.s3.amazonaws.com/0/40971/5741aadd-848c-575b-91b7-f6e61e0c7a1d.png "04.png")
一覧にubuntuが表示されるので右クリックして、[Start]を選択すると画面が起動します。

画面の中をクリックすると抜けられなくなります。
そんな時は、Ctrlキーを押すと画面から抜けるようになりますので、困ったときはCtrlキーを押してみてください。

###3. Ubuntuインストール

下記を参考にインストールを実施します。

Ubuntu 12.04 のインストール
http://www.kkaneko.com/rinkou/linux/ubuntudesktop1204.html

###4. Google Cloud SDK インストール

端末（ターミナルクライアント）を起動します。
左に表示されている一番上のアイコンをクリックすると検索モードになります。
そこで「端末」と入力すると端末が表示されますのでそれをダブルクリックして起動して下さい。
![05.png](https://qiita-image-store.s3.amazonaws.com/0/40971/58e2d43b-fb59-6e79-b64c-7693cdf6e670.png "05.png")

そのあとは下記を参照して下さい。

Google Compute Engine を使うための準備（Google Cloud SDK インストール - Linux & OS X 編）
http://qiita.com/yuko/items/aaac6ea9536cd529106f
数値をカンマ区切りにする


##数値（もしくは文字列）をカンマ区切りにする関数を書いてください##

その場で何も見ずに書いてくれみたいな事があったので残しときます
何かの参考になれば。何かの。

あれ、Qiitaの使い方ってこんな感じでもいいのかな…

####追記####
コメント欄より、一番簡単に実装するなら

```js:toLocaleString.js
var num = 12345;
num.toLocaleString();
```

で良いです。
しかし、ブラウザによって異なる挙動を起こすことも有りますので注意してください。

#### 2015 / 04 / 09追記 ####
コメント欄より、toLocaleStringに関してはSafariはそもそも対応していないようです。

###正規表現###
まず、[正規表現]('https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions')でやるやつ

```js:regex.js
// 正規表現でセパレート
function separate(num){
	return String(num).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,');
}
```

実際使うときはこれでいいはず。
でも正規表現をしっかり理解していないと絶対書けない
すくなくとも私は書けません

###ループ###
つぎ、ループでやる
多分多くの人がこんな感じだと思う（特に自分達みたいな学生）

```js:loop.js
// ループでセパレート
function separate(num){
	// 文字列にする
	num = String(num);

	// 返却用
	var separated = '';

	// 位置文字ずつ配列にする
	var nums = num.split('');

	// 長さを入れとく
	var len = nums.length;

	// 一文字ずつ追加してくよ
	for(var i = 0; i < len; i++){
		// 後ろから追加していく
		separated = nums[(len-1)-i] + separated;

		// 3桁ごとにカンマ追加
		if(i % 3 === 2 && len > 3){
			separated = ',' + separated;
		}
	}

	return separated;
}
```


今回はJavaScriptだけど、どの言語でもできそうな実装
配列の反転（reverse）使えばもうちょい短くなるし？
無難でいいと思う。多分文句も言われませんよね？

ふむ、でも私これで書いてません
再帰関数使いました

###再帰関数###
自分自身を呼び出すアレです

```js:recursive.js
// 再帰関数でセパレート
function separate(num){
	// 文字列にする
	num = String(num);
	
	var len = num.length;
	
	// 再帰的に呼び出すよ
	if(len > 3){
		// 前半を引数に再帰呼び出し + 後半3桁
		return separate(num.substring(0,len-3))+','+num.substring(len-3);
	} else {
		return num;
	}
}
```

個人的に結構いい感じ
スマートでわかりやすいと思うんですけどどうでしょう

###んで###
結局何が言いたかったのかって言うと、
プログラムの世界っておんなじ動作でも中身が全然違うからおもしろい
もっと(かっこ)いい書き方あったら教えてください
Bitcoinの技術 Namecoin とは何か? 非集権型DNS?

以下に移行しました<br><a href="http://block-chain.jp/tech/bitcoin-namecoin/" title="Bitcoinの技術 Namecoin とは何か? 非集権型DNS?">Bitcoinの技術 Namecoin とは何か? 非集権型DNS?</a>
vagrant でディレクトリを共有するとブラウザから192.168.33.10がForbiddenになる

vagrantとvirtualboxで仮想開発環境を作ってプログラミグを勉強したいです。

とりあえず、両方のインストールと設定は終えました。

#sudo yum -y install httpd
#sudo /sbin/service httpd start (/sbinを付けないとエラーになる為、付けたら成功しました)
#sudo /sbin/chkconfig httpd on
#sudo /sbin/service iptables stop
#sudo /sbin/service iptables off

ここまでで、httpdのインストールとファイヤーウォールをオフにしました。
#vi vagrantfile
# #config.vm.network "private_network", ip: "192.168.33.10"　部分のコメントアウトを外します。

#vagrantをexitして
#vagrant reload
#vagrant ssh
#cd /var/www/html
#vi index.html (hello woldを作成)

google chormeで192.168.33.10を開くと hello world　が表示されました。

ここまでは、特に間違っていないと思いますが、ココからが問題です。
ホームと共有されている/vagrantを/var/www/htmlとリンクさせます。

#sudo rm -rf /var/www/html
#sudo ln -fs /vagrant /var/www/html

これでホーム・/vagrant・/var/www/htmlのどこにファイルを作成しても全てに反映されるようになりました。
しかし、この状態でブラウザから192.168.33.10を開いてもForbiddenが出て次のようなメッセージがでます。
#You don't have permission to access / on this server.
その下にはこれが。
#Apache/2.2.3 (CentOS) Server at 192.168.33.10 Port 80

ホーム・/vagrant・/var/www/htmlの全てのディレクトリとindex.htmlのパーミッションをls -lで調べたところ
"drwx-r-x-r-x" か"-rwx-r--r--"となり読み込みは可能なはずです。


私の知識ではもうお手上げ状態です。どなたか、分かる方がいらっしゃいましたら教えてください！
これが分からないと勉強が先に進みません。。。
どうか、お願いいたします。
Rubyで9×9掛け算表を表示する

この記事にインスパイアされました。

[Rで9×9掛け算表を表示する（ネタ） - Qiita](http://qiita.com/kurogelee/items/73852c61e423dc1ae6eb)

>こんなに短く書ける言語は他には存在しない！？

ということなので、Rubyで頑張ってみたけど、たしかに勝てそうになかった、というだけ


```rb:print_kuku.rb
1.upto(9){|n|puts"\t%3d"*9%[*n.step(n*9,n)]}
```

```text:結果
	  1	  2	  3	  4	  5	  6	  7	  8	  9
	  2	  4	  6	  8	 10	 12	 14	 16	 18
	  3	  6	  9	 12	 15	 18	 21	 24	 27
	  4	  8	 12	 16	 20	 24	 28	 32	 36
	  5	 10	 15	 20	 25	 30	 35	 40	 45
	  6	 12	 18	 24	 30	 36	 42	 48	 54
	  7	 14	 21	 28	 35	 42	 49	 56	 63
	  8	 16	 24	 32	 40	 48	 56	 64	 72
	  9	 18	 27	 36	 45	 54	 63	 72	 81
```


配列として得る場合

```rb:kuku_array.rb
(1..9).map{|n|[*n.step(n*9,n)]}

#=>[[1, 2, 3, 4, 5, 6, 7, 8, 9], [2, 4, 6, 8, 10, 12, 14, 16, 18], [3, 6, 9, 12, 15, 18, 21, 24, 27], [4, 8, 12, 16, 20, 24, 28, 32, 36], [5, 10, 15, 20, 25, 30, 35, 40, 45], [6, 12, 18, 24, 30, 36, 42, 48, 54], [7, 14, 21, 28, 35, 42, 49, 56, 63], [8, 16, 24, 32, 40, 48, 56, 64, 72], [9, 18, 27, 36, 45, 54, 63, 72, 81]]
```

2文字長くなるけど`(1..9).map{|a|(1..9).map{|b|a*b}}`のほうが分かりやすい、かも

## 追記
Arrayのメソッド一覧見てたら使えそうなのがあったので使ってみる

```rb:multiplication_table
n = 9

# 作成
table = [*1..n].repeated_permutation(2).map{|x, y| x * y }.each_slice(n)

# 表示
table.each{|a| puts "%4d" * n % a }
```

```text:result
   1   2   3   4   5   6   7   8   9
   2   4   6   8  10  12  14  16  18
   3   6   9  12  15  18  21  24  27
   4   8  12  16  20  24  28  32  36
   5  10  15  20  25  30  35  40  45
   6  12  18  24  30  36  42  48  54
   7  14  21  28  35  42  49  56  63
   8  16  24  32  40  48  56  64  72
   9  18  27  36  45  54  63  72  81
```

やってることはシンプルなんだけど、メソッド名が長いものばかりでやけにごちゃごちゃする
エンジニアがデザインの設計を学ぶのに良いサイトまとめ


デザインにもシステムと同じように設計と実装があると考えるなら、今回は設計に役立つツールばかりを集めた。

#色
## colourlovers
http://www.colourlovers.com/

- 「[ベースカラー:メインカラー:アクセントカラー＝7:2:1]の色が決められないんじゃボケぇ」って思ってたら出会った
- 「[色も設定より規約(CoC)](http://sssslide.com/speakerdeck.com/machida/railsenziniafalsetamefalsetwitter-bootstrapkasutamaizuli)」ということで、色パターンパクる。デザインセンス皆無なのでテンプレを繰り返すのじゃ。
- [地味な色:好きな色:目立つ色]って考えたら覚えやすかった

## colourco.de
http://colourco.de/

- 色々な色を試せる
- 「和風」「中華風」「欧風」「フラット」みたいに自分でテーマを決めて色を並べるの楽しい。
- とにかくたのしい

# 美的センスを養う

## Pttrns
http://pttrns.com/

- スマホデザインの宝庫
- モーダルとか読み込み時とかちょっとした背景とか勉強になる
- その画面を構成要素に分解すると、割と技術的には簡単だったりする。「モーダルウィンドウ＋おしゃれフォント＋ピントずらした写真」とか。

## mobile patterns
http://www.mobile-patterns.com/

- 同上
- ひとつのアプリを徹底的に掘り下げているので一貫した狙いみたいなものが分かるし、こちらのほうが好き

## dribbble
http://dribbble.com/

- 有名ですけど、ロゴとかアイコンとかがたくさん
- 単体でみると「わーすごい」で終わる
- 「これはどのような技術で実現されているのか」という視点大事
- 「これはどのようなケースに使えるか」という視点大事

# プロトタイプを作る

## Prototyper Pro
http://designup.jp/app-prototype-justinmind/

- ウェブとモバイルのワイヤーフレームを作るためのテンプレが豊富
- Xcodeのstoryboardより使いやすい

## Pop
http://www.glpgs.com/d-blog/archives/600

- iOS/Android両対応
- 手書きワイヤーフレームを撮影して画像取り込み
- 手書きワイヤーフレームにボタンをつけて使用感を速攻試せる
- 手書きのほうがワイヤーフレーム作成スピードが速いので重宝
- 実際の操作感をテストするルーチンが細かく回せるので、使用感を容易に煮詰められる点が優秀。失敗できるのは素敵。
カレントカテゴリIDを取得する関数

現在表示しているページのカレントカテゴリIDを取得する関数です。

## ソースコード

```php5:functions.php
<?php
/**
* @function get_current_cat_id
* @return int
*/
if(!function_exists('get_current_cat_id')){
	function get_current_cat_id(){
		global $wp_query;
	
		foreach($wp_query->query as $key=>$val){
			if($key == 'category_name'){
				$slug = end(explode('/', $val));
				$cats = get_category_by_slug($slug);
				$output = $cats->term_id;
	
			}elseif($key == 'cat'){
				$output = $val;
			}
		}
	
		if(empty($output)){
			return false;
		}
	
		return $output;
	}
}
?>
```


## パラメータ

**なし**


## 使用例
**タイトルタグにカテゴリ名を表示したい場合**

```php5:ソース
<?php
//カテゴリーページの場合【出力：カテゴリ名】
if(is_category()){
	$cur_cat_id = get_current_cat_id();
	if($cur_cat_id){
		$title = get_cat_name($cur_cat_id);
	}
//記事詳細ページの場合【出力：記事名 - カテゴリ名】
}elseif(is_single()){
	$cur_cat_id = get_current_cat_id();
	if($cur_cat_id){
		$title = get_the_title().' - '.get_cat_name($cur_cat_id);
	}
}
?>
<title><?php echo $title; ?> │ <?php bloginfo('name'); ?></title>
```
Google Developer Console を日本語にする


英語だとなんだかわかりにくいんだよねという方は下記をどうぞ。

###1. Google Developers Console にアクセス
https://console.developers.google.com/accountsettings

###2. 日本語を選択
Language : 日本語
Formats : japan (日付や通貨の表示形式を変えられます)
![02.png](https://qiita-image-store.s3.amazonaws.com/0/40971/72ddedc1-d531-ed3a-1c85-56aa61966fe3.png "02.png")
[Save] ボタンをクリック。

###3. 日本語に変わります。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/40971/86a2f660-d1d0-d61c-1aea-d4b4bae9241f.png "03.png")
社内LAN環境など、インターネットに繋げない環境でのJenkinsの運用について

本エントリは「今更始めるJenkins勉強会 ハンズオン」のチートシートの一つになります。
一覧については下記エントリをご確認ください。
http://qiita.com/n_rooms/items/cdd4783997140235ddc4


###1. プラグインの手動インストール
インターネットに繋がらない環境でJenkinsを運用している場合、プラグインを追加する場合は、*.hpiを取得して所定のフォルダ ( $JENKINS_HOME/plugins) に格納し、Jenkinsを再起動すれば可能です。
アップデートする場合は*.hpiを上書きして再起動です。

Jenkins公式のプラグインは下記のリンクより取得できます。
http://updates.jenkins-ci.org/download/plugins/

再起動はコンソール画面からでも可能ですが、ブラウザから行うことも可能です。覚えておくと割と便利です。
http://{JENKNS_HOST}/safeRestart
英語環境のVagrantboxを日本語化する - Debian編


##経緯
いつもCentOSばかりいじっていたので、Debianも触ってみたい。
→ せっかくならMac/vagrant([Vagrantbox.es](http://www.vagrantbox.es/)使用)で触りたい。
  CentOSみたいにできるかな?と思ってやってみたら、aptのアップデートでロケールエラーが出てしまったorz
 → 最近ようやく日本語化できたので、備忘録的に書いておく。

CentOS編は[こちら](http://qiita.com/AH_korikori/items/fdf1e7c346f7629ae03a)

##利用したBox
Debian Wheezy 7.2 amd64 (VirtualBox Guest Additions 4.3.0)

##日本語化する方法(Debianの場合)
入っているかもしれませんが、localeパッケージをインストールしておきます。

```
sudo aptitude install locales
```

ロケールを日本語に設定する。

```
sudo dpkg-reconfigure locales
[*] ja_JP.EUC-JP EUC-JP
[*] ja_JP.UTF-8 UTF-8
```

![ロケール設定](https://qiita-image-store.s3.amazonaws.com/0/23370/8c8b99be-96c9-25a3-893b-48366857ae5c.png)

デフォルトのロケール設定を聞かれるので、ja_JP.UTF-8に設定。

```
Default locale for the system environment:
ja_JP.UTF-8
```

![デフォルトのロケール設定](https://qiita-image-store.s3.amazonaws.com/0/23370/56bd1d95-7f0c-fa0f-27a7-1deb28e9d417.png)

環境変数LANGをja_JP.UTF-8に設定。

```
export LANG="ja_JP.UTF-8"
```

コンソールメッセージは英語にしたい、という場合には
LC_MESSAGESの環境変数部分をen_US.UTF-8に設定。

```
export LC_MESSAGES="en_US.UTF-8"
```

##参考
[第08回 「ロケールを正しく設定する」](http://landisk.kororo.jp/diary/08_locale.php)

##余談

1. perlでロケールエラーが出る(今、再現しないので経過観察中)
参考サイトの一番下にあるperlのロケールエラーでずっと悩んでましたw
今はなぜか出てこないので、様子見中です。

2. ロケールにおける環境変数を知っておく
・[ITmedia / 環境変数によるロケールの管理](http://www.itmedia.co.jp/enterprise/articles/0605/16/news027.html)
・[環境変数LC_ALLは未定義のほうがよい?ロケール用環境変数について](http://d.hatena.ne.jp/kakurasan/20070711/p2)

| 環境変数 | 意味 |
|:------:|:----:|
| LANG | 言語の指定 |
| LANGUAGE | GNU gettext<br>(多くのプログラム向けにメッセージの翻訳結果を提供する仕組み)<br>を利用する場合 |
| LC_CTYPE | 文字クラス<br>(さまざまなプログラム、<br>特に正規表現のマッチャが用いる名前付きの文字セット) |
| LC_NUMERIC | 数値の書式 |
| LC_TIME | 日付および時刻の書式 |
| LC_COLLATE | ソート順序の制御 |
| LC_MONETARY | 通貨の書式 |
| LC_MESSAGES | メッセージのエンコーディングの指定 |
| LC_PAPER | 用紙サイズ |
| LC_NAME | 個人名の書式 |
| LC_ADDRESS | 住所の書式 |
| LC_TELEPHONE | 電話番号の書式 |
| LC_MEASUREMENT | 測定法の単位 |
| LC_IDENTIFICATION | ?<br>(すみません、分かりませんでした) |
| LC_ALL | "LC"と付く環境変数を全て上書きする |

※ すべてに同じ値を用いる場合は、LANGを設定するだけでよい、とのこと。
プラグインのインストール方法

本エントリは「今更始めるJenkins勉強会 ハンズオン」のチートシートの一つになります。
一覧については下記エントリをご確認ください。
http://qiita.com/n_rooms/items/cdd4783997140235ddc4


Jenikinsはプラグインアーキテクチャを採用しており、プラグインをインストールすることで機能拡張を簡単に行うことがでます。
下記にプラグインのインストール、アップデート方法を纏めます。


###1. プラグインのインストール
管理画面を利用してプラグインをインストールする方法が一般的です。
サイドメニューより、「Jenkinsの管理」- 「プラグインの管理」を選択し、プラグインマネージャー画面を表示。
![プラグインマネージャ.jpg](https://qiita-image-store.s3.amazonaws.com/0/27240/8f54d920-5b35-20e4-6705-62e8c32f1cbb.jpeg)

プラグインの一覧より、インストールするプラグインを選択します。
![プラグインマネージャ2.jpg](https://qiita-image-store.s3.amazonaws.com/0/27240/efb076c6-f9b5-c57f-5ed3-5f542b1cb901.jpeg)

画面最下部にスクロールすると「再起動せずにインストール」ボタンと「ダウンロードして再起動後にインストール」ボタンの２つが存在します。
前者が再起動無しでインストールするモードで、後者が再起動後にインストールをするモード。
![プラグインインストール.jpg](https://qiita-image-store.s3.amazonaws.com/0/27240/23aa52b1-374d-a044-d165-3827a0506344.jpeg)

ボタンをクリックするとダウンロード＆インストールが始まります。


###2 . プラグインのアップデート
プラグインをアップデートは、プラグインマネージャーのアップデートセンター画面にて行います。
Jenkinsのトップ画面
より、Jenkins → プラグインマネージャーを選択し、プラグインマネージャー画面のアップデートタブを選択します。
アップデートが公開されているプラグインの一覧が表示されているので、互換性を確認し、必要に応じてプラグインをアップデートを行います。
![アップデート.jpg](https://qiita-image-store.s3.amazonaws.com/0/27240/bf066fe1-b204-4817-48d7-895296bff860.jpeg)
$ npm install -g でインストールされるディレクトリを変更する

## npmrc

`$HOME/.npmr` というファイルに以下のような行を追加します。user-nameは適当に入れてください。

```.npmrc
prefix = /home/user-name/local
```

すると、npmのモジュールをグローバルモードでインストールすると、ソースファイルは
`/home/user-name/local/lib/node_modules/foobar`
に配置され、そのモジュールに実行可能ファイルがあれば
`/home/user-name/local/bin/foobar`
にリンクが作成されるようになります。

これでルート権限がなくてもグローバルモードでインストールすることができるようになりました。

## おまけ

.npmrcはnpmコマンドからも追加することができます。
`$ npm set prefix $HOME`

## 参考資料

http://d.hatena.ne.jp/sugyan/20110909/1315575343
https://www.npmjs.org/doc/cli/npm-config.html
https://www.npmjs.org/doc/misc/npm-config.html
マックスTips！(Did You Know? 拾い読み)-2

Cycling'74 の公式 Tips集 ["Did You Know?"](http://cycling74.com/category/articles/did-you-know/) から、 特に捗りそうなトピックを取り上げてみるシリーズの第二弾です。

・前回: [マックスTips！(Did You Know? 拾い読み)](http://qiita.com/tgck@github/items/e88fab458405a167084f)

動作確認は Max 6 / Mac OS X でおこないました。
Windows の場合は `Cmd` を `Ctrl` で読み替えてください。


#18. ビューを追加してパッチを拡大縮小する

> [Week 18:Multiple Windows](http://cycling74.com/2011/05/23/week-18/)
> Use two windows and zoom in to look at the same patch

巨大なパッチの細かい部分を調整する時に便利な Tips。

`View > New View` でパッチにビュー(ウィンドウ)を追加することができます。

また `Cmd + '+'` `Cmd + '-'` での表示の拡大/縮小とあわせて活用することで、パッチの全体を見ながら細かいレイアウトを調整したり、パラメータを調整するのに使えそうです。

![newview1.png](https://qiita-image-store.s3.amazonaws.com/0/8510/3f8f4337-93c6-2a6d-9435-81eaba906aad.png)

![newview3.png](https://qiita-image-store.s3.amazonaws.com/0/8510/0287dc47-1f25-e826-0223-f81305d61a6f.png)


#19. パッチを圧縮テキストにして共有する

> [Week 19: Compress Patch](http://cycling74.com/2011/05/31/week-19/)
> You can make Copy-Compressed ther default menu option.

パッチを人と共有するときに便利な方法です。

`Copy Compressed`と`New from Clipboard` コマンドにより、パッチの任意の選択箇所を圧縮テキスト化/復元することができます。

パッチを開き任意の範囲を選択して `Edit >Copy Compressed` 。
クリップボードにパッチの圧縮テキストが取り込まれます。

![copycomp1.png](https://qiita-image-store.s3.amazonaws.com/0/8510/c058fe05-bb55-0d5d-82a2-aecc29a19932.png)

クリップボードの中身はこんな感じ。
![copycomp2.png](https://qiita-image-store.s3.amazonaws.com/0/8510/4dbb596e-fbcc-745a-0e2d-af4a657b83d1.png)

`File > New From Clipboard`　すると、圧縮形式のテキストからパッチを復元できます。

パッチ全体がテキスト変換されるのではなく、選択した範囲が変換される点に留意してください。フォーラムなどでパッチを検討する時に論点が明確にできますね。

#41. routepass : 先頭要素を落とさない [route]

> [WEEK 41: Routepass](http://cycling74.com/2011/10/31/week-41-routepass/)
> Route lists without slicing off the first element.

リスト先頭要素により出力経路を分岐させる [route] オブジェクトは、幅広い局面で使えますが、オブジェクトを通過するときに先頭要素をはぎ取る仕様になっています。

したがって、リストを加工せず使い回したい場合は、従来ちょっとした工夫が必要だったのですが、Max6では先頭要素を維持しつつ経路分岐させるオブジェクトが導入されました。

[routepass] というオブジェクトで、ヘルプパッチはこんな感じです(キャプチャはMax6.0です。カケコミで追加したのか、解説文がごっそり抜けてます。なんか寂しい)。
![routepass.png](https://qiita-image-store.s3.amazonaws.com/0/8510/66af581f-5d31-87fe-5fb2-9a4fd59f7e2e.png)


#7. Max をクラッシュさせる

> [WEEK 7: Make Max Crash](http://cycling74.com/2011/04/12/week-7/)
> Make Max crash-intentionally

一見、なんの用途か思いつきませんが、Max アプリケーションを故意に異常終了させることができます。

やり方は Max に `crash` を送るだけ。

![maxcrash1.png](https://qiita-image-store.s3.amazonaws.com/0/8510/064fdf33-5008-78db-f09b-0bd2dc8d16fb.png)

![maxcrash2.png](https://qiita-image-store.s3.amazonaws.com/0/8510/e85e5886-da99-97d1-9271-5f12b696f457.png)

動画の解説によると、パッチの異常時の挙動を確認したり、堅牢性を高めるために使うことを想定しているようです。


## 参考にした記事

- [Cycling '74:Did You Know?] (http://cycling74.com/category/articles/did-you-know/)
Tips の引用元

- [マックス裏技メーリングリスト] (http://groups.yahoo.co.jp/group/maxtips/)
有用な Tips の判断基準の参考にしました。Max 4.x 時代の古い記事ですが今でも使える Tips があります。


もう、2〜3回くらい続きます。
ハッピーパッチング！
Titanium Androidアプリがスプラッシュ画面でハングしたら


下記手順で直った。

[1] Android Debug Monitorを起動

[2] File Explorerから下記ファイルを探し出して削除

- sdcard/{appid}/deploy.json 

- Galaxy S3だと/storage/sdcard0/{appid}/deploy.jsだった

[3] アプリを起動

#参考URL

http://stackoverflow.com/questions/20764718/titanium-sdk-3-2-0-my-android-apps-stop-at-splash-screen
Google Compute Engine を使うための準備（プロジェクト登録編）

この記事は以下の一部です。

googlecomputeengine - Google Compute Engine 入門 - Qiita
http://qiita.com/yuko/items/460ac35d8706e8df1290


##用意するもの

- クレジットカード
- 電話番号（携帯電話で可）

##サマリ

1. クラウドコンソールで Google Compute Engine を利用するプロジェクトを作成します。
2. 作成したプロジェクトにクレジットカードを登録して Google Compute Engine を利用できるようにします。

##登録方法

###1. Google Cloud Console にアクセスします。
https://console.developers.google.com

###2. Create Project をクリック。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/40971/e66613a1-f73f-8328-dd51-bc1ebf719bbd.png "01.png")

###3. プロジェクトを作成します。
![02.png](https://qiita-image-store.s3.amazonaws.com/0/40971/1033ad42-768a-c0bc-6a2c-26bfee6147a3.png "02.png")
最初開いた時は自動で生成された値が入ります。そのまま利用してもOKです。
Project Name : プロジェクト名です。自分がわかり易い名前をつけましょう。
Project ID : 世界にただひとつのユニークなIDをつけます。
名前が決まったら、[Create] ボタンをクリック。
Google Cloud Platform は作成したプロジェクト毎に予算を管理できます。

###4. プロジェクトが作成できたら、プロジェクトの中に入ります。
![04.png](https://qiita-image-store.s3.amazonaws.com/0/40971/f769b82a-3af4-2efd-fea7-a230812f60c2.png "04.png")
上で作成したプロジェクト名をクリックします。

###5. Compute Engine をクリックします。
![05.png](https://qiita-image-store.s3.amazonaws.com/0/40971/5e589ea7-e2e7-274f-f6fc-fc1cb4a8155d.png "05.png")

###6. Compute Engine を利用するためには、支払いの登録が必要ですと表示されます。
![06.png](https://qiita-image-store.s3.amazonaws.com/0/40971/609ecf71-70d8-a25e-a8fe-e5a5b1efdb65.png "06.png")
[Enable Billing] をクリック。

###7. 住所国の選択
"japan" を選択して、[Confirm]をクリック。
![07.png](https://qiita-image-store.s3.amazonaws.com/0/40971/5aa8b793-5a37-1ea9-9762-6055033d6a29.png "07.png")

###8. クレジットカードの登録
クレジットカードの登録画面に必要事項を記載して登録を実施して下さい。
![08.png](https://qiita-image-store.s3.amazonaws.com/0/40971/d5b18cb3-965d-ce8d-0e89-8e24c85204bc.png "08.png")
電話番号は海外からもかかるような形式で入力して下さい。
(課金はいまのところ月額課金のみです)

入力完了したら、[Submit and enable billing] をクリック。

###9. これで Google Compute Engine が利用できるようになりました。
![09.png](https://qiita-image-store.s3.amazonaws.com/0/40971/54d35a6f-62be-d464-180b-c299cda17505.png "09.png")
Rで9×9掛け算表を表示する（ネタ）

こんなに短く書ける言語は他には存在しない！？

```
> 1:9 %*% t(1:9)
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
 [1,]    1    2    3    4    5    6    7    8    9
 [2,]    2    4    6    8   10   12   14   16   18
 [3,]    3    6    9   12   15   18   21   24   27
 [4,]    4    8   12   16   20   24   28   32   36
 [5,]    5   10   15   20   25   30   35   40   45
 [6,]    6   12   18   24   30   36   42   48   54
 [7,]    7   14   21   28   35   42   49   56   63
 [8,]    8   16   24   32   40   48   56   64   72
 [9,]    9   18   27   36   45   54   63   72   81
```
ユーザ作成を含む最低限のセキュリティ設定(Jenkins)

本エントリは「今更始めるJenkins勉強会 ハンズオン」のチートシートの一つになります。
一覧については下記エントリをご確認ください。
http://qiita.com/n_rooms/items/cdd4783997140235ddc4

インストール直後のJenkinsはだれでもログイン出来る状態です。
下記の手順で最低限のセキュリティ設定及び、ユーザ作成を行いましょう。


###1. ユーザ作成
#### 1-1. ログイン認証の追加
Jenkinsの管理＞グローバルセキュリティの設定
「セキュリティを有効化」にチェック
アクセス制御＞ユーザー情報＞「Jenkins のユーザーデータベース」、「ユーザーにサインアップを許可」にチェック
アクセス制御＞管理権限＞「ログイン済みユーザーに許可」にチェック
保存 (トップ画面に戻される)

![グローバルセキュリティの設定.jpg](https://qiita-image-store.s3.amazonaws.com/0/27240/d309049a-129c-0746-2970-8f56d77701f3.jpeg)

#### 1-2. ユーザ作成
Jenkins トップから、
アカウント登録＞サインアップ
「ユーザー名」、「パスワード」、「パスワードの確認」、「フルネーム」、「メールアドレス」を入力して、サインアップ

#### 1-3. ログイン認証の設定変更
** 設定を失敗すると誰もログインできなくなってしまうので、要注意。** 
Jenkinsの管理＞グローバルセキュリティの設定
アクセス制御＞ユーザー情報＞「ユーザーにサインアップを許可」　のチェックオフ
アクセス制御＞ユーザー情報＞管理権限＞「行列による権限設定」 にチェック
登録済みユーザー名(自分)を入力して、追加
ユーザー名(自分) の行のチェックを全てオン
匿名ユーザー の行のチェックを全てオフ 
保存

ここで一度Jnekinsからログアウトを行い、下記の状態になっていれば設定完了。
・ログインパネルのみ表示されて、新規のサインアップが出来なくなっている
・自分のユーザー名、パスワードでログインできる

![ログイン認証の設定完了.jpg](https://qiita-image-store.s3.amazonaws.com/0/27240/f48e2d95-b783-9df4-e52e-9d141913f1e1.jpeg)
ファイルコピーとプログレス

# 練習がてら書いてみた。
PowerShellだけで書きたかったけど。

```ps1:CopyItemWithProgress.ps1
function Copy-ItemWithProgress ([string]$source, [string]$destination, [string]$title) {
    $count = (Get-ChildItem $source -Recurse).Count
    $i=0
    Get-ChildItem $source -Recurse | % {
        $p = $_.FullName.replace($source, "")
        $to = $destination+$p
        if ([IO.File]::Exists($_.FullName)) {
            Copy-Item $_.FullName $to
        } else {
            if (-not ([IO.Directory]::Exists($to))) {
                [void][IO.Directory]::CreateDirectory($to)
            }
        }
        $i++
        $status = "コピー {0} / {1}: {2}" -f $i,$Count,$_.Name
        Write-Progress -Activity $title  -Status $status -PercentComplete ($i / $count*100)
    }
}
```

# Copy-Itemの-PassThruを見つけたのでパパッと書いてみた
未テスト
Write-Progressの-PercentCompleteのとこでで怒られる
$countの値がおかしい？

```ps1
Function Copy-ItemWithProgress([string] $Source, [string] $Destination, [string] $Title)
{
    $count = (Get-ChildItem $Source -Recurse).Length
    $i=0
    Copy-Item $Source $Destination -PassThru -Recurse -Force | % {
            $i++
            $status = "コピー {0} / {1}: {2}" -f $i,$count,$_.Name
            Write-Progress -Activity $title  -Status $status -PercentComplete ($i / $count*100)
    } | Out-Null
    $i=0
}
```
HerokuにRackでdeployする(初級編:静的HTMLページ)

私は自作Webアプリケーションの公開に[Heroku](https://www.heroku.com/)を利用しています。Ruby on Rails tutorialにHerokuデプロイの入門編があり、最初はこれで勉強しました。

<http://railstutorial.jp/chapters/beginning?version=4.0#top>

Ruby on Railsで開発している場合はこの本の通りにやればできます。しかし(昔のレンタルサーバのように)単純に静的なHTMLをアップしたい場合が逆に分かりません。Railsではstaticディレクトリに送れば可能ですが、わざわざこのためにRailsを使うのはいくら何でも重すぎる感じがします。

> Sinatraを使えばずっと身軽になると思いますが、私はSinatraについてよく知りません。

ここではRackを使う方法を紹介します。RackはRuby on Railsのコアモジュールに採用されており、最下層のHTTP処理を担当しています。今回はそのRackだけを使うRubyベースでは最軽量のHerokuデプロイ方法です。

## Gemfileの設定

Herokuのデプロイではバージョン管理にBundlerが用いられています(Bundlerをインストールしていない人はRuby on Rails Tutorialの1章を参照して下さい)。

まずGemfileを作成します。Rails Tutorialに比べると嘘みたいに短いですがこれだけでOKです。`ruby 2.0.0`の部分は実際に自分が使っているRubyバージョンを指定します。

``` ruby:Gemfile
source 'https://rubygems.org'
ruby 2.0.0
gem 'rack'

```

> Rubyバージョン指定はなくても動きますが、省略するとHerokuがdeploy時にwarningを表示します。Rackは十分安定しているのでバージョン指定不要ですが、もし万一deployで問題を生じた場合は`gem 'rack', '1.5.1'`のように指定して下さい。

Gemfileを作ったら`bundle install`を実行してGemfile.lockを生成します。

## config.ruの設定

次にconfig.ruを設定しますが、ここでプロジェクトディレクトリの構造を決めておきます。HTMLファイルはpublicディレクトリの中に配置することにします。

```
public/
    index.html
    ...
Gemfile
Gemfile.lock
config.ru

```

config.ruは公開方法によっていくつかバリエーションがあります。まずディレクトリへのアクセスに対してリスティング表示する場合はRack::Directoryを使います(開発中のテスト時に便利)。

``` ruby:config.ru
run Rack::Directory.new 'public'

```

ディレクトリは公開せず、publicディレクトリ内部のファイルアクセスだけ提供する場合はRack::Fileを用います。

``` ruby:config.ru
run Rack::File.new 'public'

```

さらにディレクトリへのアクセスをindex.htmlに割り当てる場合の例を示します。

``` ruby:config.ru
use Rack::Static, urls: [''], root: 'public', index: 'index.html'
run lambda {|env|}

```

> なお小さな不具合があります。サブディレクトリdocに`public/doc/index.html`があった場合、`http://.../doc/`のように末尾に/を付けないと動作しません。ルートのindex.htmlに対してはこの問題は発生しません。

## ローカルサーバ立ち上げ

開発時は`rackup`コマンドで`localhost:9292`にローカルサーバを立ち上げることができます。ポート番号は`rackup -p 8888`のように指定できます。

## Herokuへのデプロイ

この状態でそのままHerokuにdeployすれば完了です。gitやHerokuの操作方法はRuby on Rails Tutorialの1章を参照して下さい。

<http://railstutorial.jp/chapters/beginning?version=4.0#top>
メソッド名に依らない再帰表現

```rb
def 将来名前を変更する可能性が高く、再帰で階乗を計算するメソッド(x)
  (x == 1) ? 1 : x * 将来名前を変更する可能性が高く、再帰で階乗を計算するメソッド(x-1)
end
```

みたいな場合に、

```rb
def 将来名前を変更する可能性が高く、再帰で階乗を計算するメソッドの名前を変更しても中身を書き換えずに済む書き方をしたメソッド(x)
  recursion = lambda{|x| __send__(__method__, x)}
  (x == 1) ? 1 : x * recursion[x-1]
end
```

のように書くことでメソッド名に依らず再帰を表現できる。

のだけれども、メソッドごとにいちいち

```rb
recursion = lambda{|x| __send__(__method__, x)}
```

とか書くのも面倒くさいのでもっといい方法あれば教えてください

----

組み込みで`__recursion__`とか欲しい
Clojureでオプションで場所指定可能なスレッディングマクロを作る

Clojureの`->` `->>`スレッディングマクロで前回フォーム結果を任意の場所に展開したい場合、以下のようにラムダを使用することができます。

```
(->> (range 10) (map -) (#(nth % 3)))
```

ただ、この方法だと `(#(` となるのが少し気持ち悪いです。また、ラムダはネストすることができないので、なるべく節約したいところです。
`as->`マクロもありますが`as->`は毎回場所を指定しないといけないので面倒です。

そこで、シンボルとして`<>`が出現したときだけその場所に前回フォーム結果が展開され、`<>`がないときは`->` `->>`と同じ動作をするスレッディングマクロとして`o>` `o>>`を作ってみます。

```optional_threading_macro.clj
(defn cons-nth [index x coll]
  (concat (take index coll) [x] (drop index coll)))
(defn cons-last [x coll]
  (concat coll [x]))

(defn- find-symbol [form sym]
  (cond (or (sequential? form) (set? form)) (some #(find-symbol % sym) form)
        (map? form) (or (find-symbol (keys form) sym)
                        (find-symbol (vals form) sym))
        :else (= form sym)))

(defmacro o> [x & forms]
  (loop [x x forms forms]
    (if-not forms x
      (let [form (first forms)
            threaded (if (seq? form)
                       (-> (if (find-symbol form '<>)
                             (list 'let ['<> x] form)
                             (cons-nth 1 x form))
                           (with-meta (meta form)))
                       (list form x))]
        (recur threaded (next forms))))))

(defmacro o>> [x & forms]
  (loop [x x forms forms]
    (if-not forms x
      (let [form (first forms)
            threaded (if (seq? form)
                       (-> (if (find-symbol form '<>)
                             (list 'let ['<> x] form)
                             (cons-last x form))
                           (with-meta (meta form)))
                       (list form x))]
        (recur threaded (next forms))))))
```

このマクロを用いたサンプルは以下のとおりです。`<>`が現れたときのみ、その場所に前回フォーム結果が展開されています。

```
user=> (o>> 10 (range) reverse (map -) (nth <> 3) (identity {:a [1 <>]}))
{:a [1 -6]}
user=> (o> 10 (range) reverse (nth 3) (map - (range <>)))
(0 -1 -2 -3 -4 -5)
```
CentOS6.3へのJenkinsインストール

本エントリは「今更始めるJenkins勉強会 ハンズオン」のチートシートの一つになります。
一覧については下記エントリをご確認ください。
http://qiita.com/n_rooms/items/cdd4783997140235ddc4


Jenkinsをインストールする場合、単体でインストールする方法とTomcatにアプリケーションとして追加する方法があります。
今回は単体でインストールする方法を纏めます。

Jenkins公式の手順も一読しておくことをお勧めします。
Installing Jenkins on RedHat distributions
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+RedHat+distributions

###1. CentOSにJavaはインストール済みですか?
JenkinsはJVM上で動作するのでまずはJavaをインストールしましょう。
` $ sudo yum install java-1.7.0-openjdk.x86_64` 

Javaのインストール確認
` $ java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (rhel-2.4.4.1.el6_5-x86_64 u51-b02)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)` 

###2. Jenkinsのインスール
` $ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ sudo yum install jenkins` 

###3. Jenkinsの動作確認
` $ sudo /etc/init.d/jenkins start` 

ブラウザで「http://Jenkinsが稼働しているサーバ:8080」とアクセスしてJenkinsの画面が表示されていればOK

リモートで確認できない人はローカルからcurlコマンドで確認する
` $ curl http://localhost:8080/` 

CentOS起動時にJenkinsが起動するように設定する
` $ sudo /sbin/chkconfig jenkins on` 

![インストール完了.jpg](https://qiita-image-store.s3.amazonaws.com/0/27240/a7806656-be95-e178-2845-d469350bcfd0.jpeg)
requireとincludeの違い

## require

requireはKernelモジュールのメソッド
外部ライブラリを読み込む
requireは１度だけ読み込む、無条件に読み込ませたい場合はload

## include

includeはModuleクラスのメソッド
ファイルの読み込みはしない
引数にモジュールを取り、includeしたクラスにincludeされたモジュールの性質を追加する

* includeは「モジュールを使うよって宣言」ではなくて「モジュールが持ってる性質を、クラスに組み込むメソッド」
* class/module文の中で使うと、モジュールの特徴をそのクラスに追加する
* モジュールの中でdef self.hogeとして定義されてたやつはそのクラスのクラスメソッドになる
* モジュールの中でdef fugaとして定義されてたやつはそのクラスのインスタンスメソッドになる
* class/module文の外で使うと、モジュールの特徴をObjectクラスに追加する
* モジュールの中でdef fugaとして定義されてたやつは全てのクラスのインスタンスメソッドになる
* モジュールのメソッドがincludeしたクラスのインスタンスメソッドとして使えるようになる。
wordpressの投稿でPHP

ためしに動作確認

１．プラグインで「Exec-PHP」インストール
２．インストールしたら有効化
３．あなたのプロフィールで下記のチェックをオン
　　Disable WYSIWYG Conversion Warning!
４．ではさっそく
![0001.jpg](https://qiita-image-store.s3.amazonaws.com/0/37958/38b75f53-84f3-1f2c-ba92-101dc7ed79a1.jpeg)

５．で、プレビュー
![0002.jpg](https://qiita-image-store.s3.amazonaws.com/0/37958/ec637fdc-5e5c-8830-7f0d-6b75551da1b7.jpeg)
６．あ、PHP実行してる

これってたぶん危険ですよね。
次はそこを調査してみます。
パス末尾 `/` の有無を統一する

入力されるパスはファイルかもしれないしディレクトリかもしれない。

ディレクトリが指定されるときも`/var/tmp/hoge`かもしれないし 、ひょっとすると`/var/tmp/hoge/`かもしれない、ってとき。

```php
$finfo = pathinfo($input);
$path = $finfo['dirname'] . '/' . $finfo['basename'];
```

[`pathinfo()`](http://www.php.net/manual/ja/function.pathinfo.php)は配列を返すのだけれど、`basename`, `dirname`は常にあるのに対して、`filename`, `extension`はキーが存在しないことがあるので要注意。つまりは`isset`で慎重に確認しながら利用する必要があるのだけれど、それが嫌な場合は[SplFileInfo](http://www.php.net/manual/ja/class.splfileinfo.php)とか使ってみるといいんじゃないかな。

挙動は下記のようなコードを実行することで確認できる。

```php
$filenames = [
    '',
    '/',
    '/foo',
    '/foo/bar',
    '/foo/bar/',
    '/foo/bar/',
    '/foo/bar/buz',
    '/foo/bar/buz.',
    '/foo/bar/buz.txt',
];

foreach ($filenames as $f) {
	echo "\"$f\" => ";
	var_dump(pathinfo($f));
}
```

> ⇒ [実行結果](http://ideone.com/X5dsu0)

ちなみにシェルだと(僕は) ``echo `dirname $1`/`basename $1` `` とかやる。てきとー。
Rails.composed_of

## はじめに

調べ物をしていたら、複数カラムをバリューオブジェクトに構成することで仮想的に一つのカラムとして扱う、`composed_of`なるものを見つけたので備忘録します。

## 住所-よくあるパターン

```rb
class User
  attr_accessor :city_address, :town_address, :building_address
  def address
    city_address + town_address + building_address
  end
end
```

`attr_accessor`の部分は実際にはカラムになってると思ってください。
上のパターンにはいくつかの問題があります。

- `address`のような整形用メソッドがモデルを汚してしまう
- 本来意味を持つのは`address`なのに、メソッドで返ってくるのは単なる文字列
- 一旦`address`を取得しても、そこからcity_addressを取り出すのは容易ではない

## 住所-改善されたパターン

根本的な問題は、`address`は本当は`Address`クラスのオブジェクトであるべきなのにDBの都合でそうなっていない、という点にあります。そこで、`address`メソッドで`Address`クラスのオブジェクトを返すような実装が思い浮かびます。

```rb
class User
  attr_accessor :city_address, :town_address, :building_address
  def address
    Address.new(city_address, town_address, building_address)
  end
end

class Address
  attr_reader :city, :town, :building
  def initialize(city, town, building)
    @city, @town, @building = city, town, building
  end
end
```

ここで、`Address`クラスが単なるRubyオブジェクト（PORO, **Plain Old Ruby Object**）であることが重要です。これで、`address`自体が意味を持ちますし、`city`の取り出しもできます。

## 住所-composed_ofを使うパターン

`address`メソッドはいいのですが、どうにも単純なメソッドです。これはもしかして、 *Rails Way*で楽ができるのではないでしょうか。

```rb
class User
  attr_accessor :city_address, :town_address, :building_address
  composed_of :address, mapping: [%w(city_address city), %w(town_address town), %w(building_address building)]
end

class Address
  attr_reader :city, :town, :building
  def initialize(city, town, building)
    @city, @town, @building = city, town, building
  end
end
```

`composed_of`を使うことで、よりシンプルに書けるようになりました。
`mapping`オプションには、配列の配列を指定します。内側の配列は2要素で、まずカラム名を、次にバリューオブジェクトの属性名を指定します。これにより、`user.city_address`が`user.address.city`にマップされるようになります。

## まとめ

`composed_of`を使ってみたわけですが、実は重要なのは`composed_of`ではなく、バリューオブジェクトの方なのかな、と思ったりします。要は、アプリケーション内でそれ自体の意味があるものをそれ自体のクラスにくくりだすということです。
これは最近思っていることですが、「アプリケーション内でPOROが多く使われているほど、そのアプリケーションは見通しが良い」ということは考えられないでしょうか。この点についてはもっと熟達した方々の意見を待ちたいと思います。

【追記：参考資料】
http://api.rubyonrails.org/classes/ActiveRecord/Aggregations/ClassMethods.html
http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/
SlickGridメモ

SlickGridを使い始めたのでメモ。
https://github.com/mleibman/SlickGrid

## はじめに
### 本家の更新はしばらく期待できない。(Github-Wiki参照)

活動的なのはGer Hobbelt / Visyond Inc.のFork。
https://github.com/GerHobbelt/SlickGrid

### jQueryのバージョン
ソース上は1.7だけど、1.9/2.0互換。（作者談）
https://github.com/mleibman/SlickGrid/issues/518

ただし、jquery.event.drag-2.2.jsがjQuery 1.7で、更新止まってる？

## 本家で実装されていない機能（一部）
Fork版では実現されていたりする。

* 列固定（frozen column）
* 複数行ヘッダー（header group）
* 行サイズ自動調整
そういえば

# そういえば

## こないだ、二回目以降のjsでの書き換えに失敗した話

 * ```$(hoge).attr(foo, 'bar');```したら、二回目以降で怒られた＞＜
 * jQuery1.7以降はprop使えってことらしい
 * [http://less.carbonfairy.org/post/20340904205](jQuery 1.7.2のattr、propには罠がある)
 * 知らんがなw
iOSで○日後の狙った時間にローカル通知を出す！


ローカル通知の例はいろいろあるけど、何日後に出すってのがほとんど。
何日後の何時にだしたいんだ！　俺は！
ということで作ってみました。
以下を組み込んで、ローカル通知を設定したい場所で呼び出せばOK！



```objectiveC:rocalNotification.m

- (void)viewLocalNotificationDidAppear
{

    /*--設定値を宣言するよ--*/
    int targetDay = 4;//何日後に出すか
    int targetHour = 12;//何時に出すか

    
    /*--ローカル通知を削除するよ--*/
    //バッチを０にするよ
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;

    //このアプリ名義で登録しているローカル通知を削除するよ
    [[UIApplication sharedApplication] cancelAllLocalNotifications];


    /*--日時操作に必要なもろもろ用意--*/
    //現在日時を取得するよ(標準日時だよ)
    NSDate *today = [NSDate date]; 

    //日付操作に必要なカレンダーを作成するよ。
    NSCalendar *cal = [NSCalendar currentCalendar];

    //日付を取り出しやすくするコンポーネントを作成するよ。
    NSDateComponents *comps = [[NSDateComponents alloc] init];

    /*--指定の日付、時間に通知するロジック--*/
    //タイムゾーンをiPhoneで指定したものに変更するよ
    [comps setTimeZone:[NSTimeZone systemTimeZone]];

    /*現在日時をカレンダーを通して、年|月|日に分解して
    **コンポーネントに登録するよ
    **時分秒はいらないので登録しないよ
    **登録しなかったら0で登録されるよ
    */
    comps = [cal components:(NSYearCalendarUnit   |
                             NSMonthCalendarUnit  |
                             NSDayCalendarUnit)
                   fromDate:today];

    //コンポーネントに入れた日付に◯日後を追加するよ
    targetDay += comps.day;

    //日時をコンポーネントにセットし直すよ
    [comps setDay:targetDay];
    [comps setHour:targetHour];

    //コンポーネントにセットした日時を標準日時に訳しなおすよ
    NSDate *date = [cal dateFromComponents:comps];
    NSLog(@"date:%@",date);
    

    /*--通知を作ってセットするよ--*/
    //通知を作るよ
    UILocalNotification *notification = [[UILocalNotification alloc]init];

    //通知に時間関係をいろいろセットするよ
    notification.fireDate = date;
    notification.repeatInterval = NSWeekCalendarUnit;
    notification.timeZone = [NSTimeZone localTimeZone];

    //通知で登録するバッチ数を決めるよ
    notification.applicationIconBadgeNumber = 1;

    //通知で表示する文言を決めるよ
    notification.alertBody = [NSString stringWithFormat:@"ローカル通知で出したい文言"];

    //通知でユーザーに鳴らす音を決めるよ
    notification.soundName = UILocalNotificationDefaultSoundName;
    notification.alertAction = @"鳴らしたい音";

    //通知でユーザーにお知らせする文言を決めるよ
    NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"通知したい文言。" forKey:@"EventKey"];

    //ユーザへのお知らせを登録するよ
    notification.userInfo = infoDict;

    //通知を登録するよ
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];

}
```
AngularJSアプリケーションをCoffeeScriptで書くよ(Yeomanを利用)


簡単に CoffeeScript を導入できます。そう、Yeoman の AngularJS雛形ジェネレータならね。

## 前提

- 環境は Mac OS です。
- Yeoman および AngularJSのジェネレータ(generator-angular)を使います。

> もし Yeoman や ジェネレータ をまだインストールしていない場合、こちらを参考にインストールしてください → [Yeoman で AngularJS ＆ UI Bootstrap の開発環境構築](http://qiita.com/hkusu/items/7d748b55ba73cc8a3675)

## 手順

といっても、ジェネレータを起動する際に、`--coffee` オプションをつけるだけです。

```
$ yo angular --minsafe --coffee
```

## 中身をみてみましょう

こんな感じで、本来は `.js` のファイルが `.coffee` で作成されています。

![スクリーンショット 2014-04-04 19.28.18.png](https://qiita-image-store.s3.amazonaws.com/0/35733/7218c1ba-b527-574b-5951-754f4122c01f.png "スクリーンショット 2014-04-04 19.28.18.png")

2つのファイルの中身を見ています。CoffeeScriptの文法で書かれてるぽい！

```javascript:app.coffee
'use strict'

angular.module('coffeeTest3App', [
  'ngCookies',
  'ngResource',
  'ngSanitize',
  'ngRoute'
])
  .config ['$routeProvider', ($routeProvider) ->
    $routeProvider
      .when '/',
        templateUrl: 'views/main.html'
        controller: 'MainCtrl'
      .otherwise
        redirectTo: '/'
  ]
```

```javascript:main.coffee
'use strict'

angular.module('coffeeTest3App')
  .controller 'MainCtrl', ['$scope', ($scope) ->
    $scope.awesomeThings = [
      'HTML5 Boilerplate'
      'AngularJS'
      'Karma'
    ]
  ]
```

## 動作確認をする

もちろん `.coffee` ファイルを `.js` ファイルにコンパイルしないとブラウザは認識できません。が、コンパイルは Grunt がやってくれます。

```
$ grunt serve
```

そうすると、`.tmp` 的なフォルダにJSファイルが自動でコンパイルされ、ブラウザで動作確認できます。開発が終わって配信用のファイルを作る場合は `grunt build` で。`dist` ディレクトリにコンパイルされたJSファイルが展開されます。

## ほか

本来、CoffeeScriptを使うには次のようにインストールする必要があるのですが、

```
# npm install -g coffee-script
```

今回の手順では、Gruntか何かに含まれているのか、別途インストールは不要なようです。ただもし上手くいかなければインストールしてみてください。
【js】スムーズスクロールで不具合

不具合？メモ

#現象
FirefoxとIE9あたりでjsのスムーズスクロールとブラウザのスムーズスクロールがバッティング？
ページ下部にスムーズスクロールすると、いったん行きたいscrollTopまで移動した後、弾むように少し戻る。

#直し方
不明
※```$(window).load```で読むと、大抵のブラウザでは直るが、FirefoxとIE9では直らない模様
Perlでwarn出す時にラベル？貼りたい時は

# Perlでwarn出す時にラベル？貼りたい時は

 * がんばって、```warn '###############'```とか書いてるヒトたまに見るけど
 * 下記でいいお？
```
warn '#' x 108;
```

 * 108とは煩悩の数なり
findコマンドの結果をダブルクリックした時に既に絶対PATHは得られている！！

# findコマンドの結果をダブルクリックした時に既に絶対PATHは得られている！！

 * カレントディレクトリで find したら ./hoge とかになっててしょんぼりんこ
  * このままだと新規ファイルを開いてしまってつらたん
 * そんな時は```pwd```食わせりゃいいお

```
$ find `pwd` -name foo
```

* エイリアス貼っとけば、もっと幸せになれるかな？

```
$ alias findpf='find `pwd` -type f -name '
$ alias findpd='find `pwd` -type d -name '
```

* Windows？アイツはダメだ。
重複行を取得するワンライナー

# 重複行を取得するワンライナー

* 特に書くことないおね？
 * リファクタリングとかに使えるかなー

```
$ find `pwd` -type f -name '*.p[l|m]' | \
xargs cat | \
sort -b | uniq -c | \
sed -e 's/^  *//g' | \
grep -v '^1 ' | \
sort -n
```
fabricとChatWorkApiでデプロイ時に自動でChatWorkに投稿するようにしてみた

pythonのデプロイツール fabricを使ってデプロイした際にChatWorkに投稿するようにしてみました。

```py:fabric.py
from fabric.api import run,cd,sudo,env
env.use_ssh_config=True

def chatwork_notification():
   env.chatwork_token = your token
   env.chatwork_roomid = your room id
   with cd("%s" % env.deploy_target_dir):
      git_log = run('git -p log --oneline ORIG_HEAD.. | cat')
      run('curl -X POST -H "X-ChatWorkToken: %s" -d "body=[hr]deploy complete\n%s [hr]" "https://api.chatwork.com/v1/rooms/%s/messages"' %(env.chatwork_token, git_log, env.chatwork_roomid))

def production():
  env.hosts = your host
  env.deploy_target_dir = your dir


def deploy():
  with cd("%s" % env.deploy_target_dir):
      sudo("git pull)
      chatwork_notification()

```

だいたいこんな感じ。

実行はこんな感じ

```shell-session
fab production deploy
```

これで直近デプロイされたコミットが自動で送られてくる＾＾

 [チャットワーク api](http://developer.chatwork.com/ja/)
[Objective-C] this class is not key value coding-compliant for the key *HOGEHOGE* でアプリが落ちる


半日ほどハマっていた問題。

##結論

結論から書いちゃうと、 **Organizerの「Derived Data」を消したら直った。**

![cap.png](https://qiita-image-store.s3.amazonaws.com/0/5616/93aa14b3-7d65-d22e-6b28-29b3ec357c3b.png "cap.png")

ただ念のため、上記以外にも

* アプリの削除
* Cleanの実行

もやっておいたほうがよさげです。


##色々試したメモ

せっかくなので、このことに気づくまでにやった対応などをメモしておく。

###xibファイルからの参照

すぐに行き当たったのはxibファイルを消したから、とか、xibファイル内で指定しているクラス名をそのままにしてクラス名を変更しちゃった、とか。
そういうのは出てきたんですが、どちらも問題なし。（確かにxibファイルは消していた）
Cleanしたりアプリ消してみたりしてもダメでした。

###loadViewをオーバーライドするとなぜか動く

xibファイルをずっと疑っていた理由として、エラーが出ているViewControllerクラスの`loadView`メソッドをオーバーライドすると落ちなくなる、というもの。理由は不明。

```objc
- (void)loadView
{
	// こうすると落ちなくなる
	[super loadView];
}
```

###NSSetUncaughtExceptionHandler関数

色々やっていてとにかく少しでも情報を集めようとして教えてもらったのがこれ。
キャッチされていないエラーが発生した際に呼び出される関数。
プロトタイプは以下。

```objc
typedef void NSUncaughtExceptionHandler(NSException *exception);
FOUNDATION_EXPORT NSUncaughtExceptionHandler *NSGetUncaughtExceptionHandler(void);
FOUNDATION_EXPORT void NSSetUncaughtExceptionHandler(NSUncaughtExceptionHandler *);
```

`NSException`クラスにはエラーの内容が入っています。

```objc
// 例
NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
```
[SyncStitch]divergence

[SyncStitchユーザガイド](http://www.principia-m.com/jp/ss-docs.html)から。
divergenceを解決する例。

```scm:Definitions
(define-event in)
(define-event out)

(define-event send)
(define-event data)
(define-event err)

(define-event ack)
(define-event nak)
```

```scm:SENDER
(define-process SENDER (! in S1))
(define-process S1 (! send S2))
(define-process S2 (alt (! ack SENDER) (! nak S1)))
```

```scm:RECEIVER
(define-process RECEIVER (alt (! data R1) (! err R2)))
(define-process R1 (! ack R3))
(define-process R2 (! nak RECEIVER))
(define-process R3 (! out RECEIVER))
```

Retry回数を保持する変数の使い方。

```scm:MEDIUM
(define-process MEDIUM (M 3))

(define-process (M k)
  (! send
	 (if (= k 0)
		 (! data MEDIUM)
		 (ndc
		   (! data MEDIUM)
		   (! err (M (- k 1)))))))
```

```scm:SYSTEM
(define-process SYSTEM
  (hide (list send data err ack nak)
	(par (list send data err)
	  MEDIUM
	  (par (list ack nak)
		SENDER
		RECEIVER))))
```
気になったツールまとめ


# RubyMine
## 特徴
- RailsのためのIDE
- ファイル間移動やメソッド補完など(http://qiita.com/HirokiTakaba/items/700a46409ece49aa0d4b)
- IntelliJ IDEAベース
- グループ利用2万円、経費計上可（http://samuraism.com/products/jetbrains/rubymine）
- 個人利用1万円
- Qiitaには記事が25件

## 感想
それ、emacsでも出来るよね？って思う（けど面倒なので設定しないﾊﾟﾃｨーﾝ）
どこまでツールに頼るかの線引きとしてIDEを使用するのは越えてはいけない壁感がある（短期的な生産性向上と長期的な知識流用のバランス悩む）

# magit
## 特徴
- emacs上でgitを使用できる
- 導入が楽(http://qiita.com/takc923/items/c7a11ff30caedc4c5ba7)

## 感想
いま.zshrcで一元管理しているgit用自作シェルスクリプトを、git configでgitコマンドに作り替えてmagitから使用できないか確認してみたい

# Ruboto
## 特徴
- JVMバイトコードを吐き出すscala、cloujure、Jrubyはandroidアプリを作れる。Jrubyでandroidのライブラリをwrapしてる。
- 人と情報が少ない

## 感想
- Rails, RubyMotion, Ruboto間でrubyで書かれたビジネスロジックを共有できたら幸せそうだけど、銀の弾丸に釣られて足下掬われそうなので様子見
- なんでRubyMotionほどコミュニティが育っていないのか

# Fluid
## 特徴
- WEBサイトをラップしてデスクトップアプリのように扱える（http://fluidapp.com）
- 使いやすいアイコンはflickerにまとめてある（https://www.flickr.com/groups/fluid_icons/）

## 感想
- サービスに到達するまでのアクションが少なくなるの個人で使う分には良い
- ユーザーに使用を強制させる類のものではないので、macユーザーにユースケースのひとつとして紹介する程度が良い

# kimono
## 特徴
- ブラウザ上でクリックした項目をAPIにできる（http://www.kimonolabs.com/）
- Beta版なので無料でProアカウントになれる
- ストレージやサーバーはkimono持ち
- Proアカウントじゃなければ容量全然足りなさそう

## 感想
- ちゃんと動けばいちいちDOM調べてスクレイピングしなくて良い
- ページネーションを含めたの全てのデータをAPIにしようとすると上手く動かないのでProアカウントだけ持っておいて様子見してる

# SketchDeck
## 特徴
- メモ書きを送信すると２４時間以内にプレゼンになって返ってくる
- 見習いデザイナー１時間１０＄
- プロデザイナー１時間５０＄

## 感想
- 料金が不明瞭なので手が出ない
- 渡す資料によって何時間かかるか目安が分かれば良いのに
EC2を使用したVagrantfileをGitHubに上げたらイカンかった

##あらまし
あちゃー。やっちゃいました。
VagrantでEC2の仮想マシンを定義する場合にVagrantfileにAccess KeyとSecret Keyを記載しますが、間違ってGitHubで公開してしまいました。

##はじまり
vagrantとchef soloとGitHubの勉強を兼ねて、まぁこんな感じのことをやってました。
1. mkdir aaa
2. cd aaa
3. vagrant init
4. vagrant ssh-config --host medaka >> ~/.ssh/config
5. vi Vagrantfile
6. ここでEC2のAMI指定やインスタンスタイプやらキーを設定。
7. vagrant up --provider=aws
8. 立ち上がったので、`vagrant ssh`でつないでみる。ここまではnaoyaさんの教えに忠実。次はchef-soloの準備。
9. knife solo init chef-repo
10. ここからがまずかった。ここで敢えて`cd chef-repo`しなかった。
11. git init
12. git add .
13. echo 'sample repository' >README
14. git commit -m 'my first commit'
15. git remote add origin https://github.com/xxx/xxx.git
16. git push origin master

##なにが起きたのか？
あ、なんかAWSからメールが来てるぞ。メールタイトルは **''Your AWS account is compromised''**
本文は「オマエノSecret Keyは危険に晒されている。アカウントをとりあえずブロックしておいたから、見知らぬアクティビティやアカウントや課金がないか全部確認して、キーを作り直してくれ。もう二度とこんなことをすんなよ、ボケ。」とのこと。
ヤバいことをやってもうた。。すぐに以下実施。
- GitHubリポジトリ削除
- IAMからAccess Keyを削除して、新たなものを作り直し
ほー。とりあえずこれで大丈夫やろ。

##これで解決か？
さて、作業再開。
新しいSecret KeyをVagrantfileに設定して、`vagrant up`をしたらエラーが。。
**''This account is currently blocked and not recognized as a valid account. Please contact aws-verification@amazon.com if you have questions.''**
え、なんで。マネジメントコンソールからインスタンススタートしても同じメッセージが。
とりあえず、こんなときはAWSサポートに連絡するしかない。とりあえず、「ブロック解除してください。もうやりませんから。」と連絡。
ついでに、aws-verification@amazon.comにも「ブロックカイジョシテクダサイ。」と連絡。
＃今のところ４時間経過したがまだ解除されていない。つづきはあとで。

##解除に２４時間かかった
AWSサポートからは「アカウントはブロックされていません」との回答があったが、やはりインスタンスのスタートもできない状態でパスワードリセットなど色々試したものの改善せず。
諦めかけていたところ、問題発生から２４時間後に、AWSサポートから **''Thank you for deleting your compromised access key''**というメールが到着。
その後少し時間がたって無事インスタンススタートができるようになっていました。

##結論　（まだ、結論が出てないが。）
AWS様、本当にありがとうございました。貴方にご指摘いただかなかったら、私のお小遣いはマイナスを記録しているところでした。
gitでコミットメッセージを修正する


コミットメッセージを修正したいときに使えます。以下のコマンドを実行すると、エディタが立ち上がってコミット内容を変更できます。このときはissueとcommitを対応させるために「#issue番号」を追加しました。

```bash:
$ git commit --amend
```
Youtube iframe API を使ったプレイヤー読み込み

# HTML

```html
<div id="player" data-movieid="動画ID"></div>
```

# CoffeeScript
```coffeescript
loadScript =
  (obj)->
    $.ajax(
      url:"http://www.youtube.com/iframe_api/"
      dataType:"script"
      success:
        (data)->
          window.onYouTubeIframeAPIReady =
            ->
              target = obj.target
              id = obj.id
              width = obj.width
              height = obj.height
              loadPlayer(target,id,width,height)
      error:
        (xhr, status, thrown)->
          loadScript()
    )

loadPlayer =
  (target,id,width,height)->
    if !window.ytPlayer
      window.ytPlayer = new YT.Player(target,
        width: width
        height: height
        videoId: id
        playerVars:
          hl:'ja_JP'
          fs:1
          hd:1
          rel:0
          showinfo:0
          autohide:1
          theme:'light'
      )
    else
      ytPlayer.loadVideoById(id)

movie =
  target:$('#player').attr('id')
  id:$('#player').attr('data-movieid')
  width:260
  height:146

loadScript(movie)
```
サーバへのリクエストをProxyPassでS3に流すときに502エラー


WebサーバにきたリクエストをS3に流そうとおもって設定をかけたところ

~~~
ProxyPass /hoge http://xxxxxx.s3-ap-northeast-1.amazonaws.com/hoge
ProxyPassReverse /hoge http://xxxxxx.s3-ap-northeast-1.amazonaws.com/hoge
~~~

error_logに時々こんなエラーが出て、502エラーで返してしまう
(全リクエストの3%くらい)

~~~
[Thu Apr 01 00:00:00 2014] [error] [client xxx.xxx.xxx.xxx] (20014)Internal error: proxy: error reading status line from remote server xxxxxx.s3-ap-northeast-1.amazonaws.com
[Thu Apr 01 00:00:00 2014] [error] [client xxx.xxx.xxx.xxx] proxy: Error reading from remote server returned by /hoge
~~~

この辺りを見ながら、proxy-initial-not-pooled を有効にすればよさそうと判断
http://lasecwww.epfl.ch/manual/ja/mod/mod_proxy_http.html
http://ttaka.dip.jp/maniax/?ReverseProxy%E3%81%AE%E8%A8%AD%E5%AE%9A

設定を以下のように修正し、502エラーが発生しなくなりました

~~~
SetEnv proxy-initial-not-pooled 1

ProxyPass /hoge http://xxxxxx.s3-ap-northeast-1.amazonaws.com/hoge
ProxyPassReverse /hoge http://xxxxxx.s3-ap-northeast-1.amazonaws.com/hoge
~~~