OmniAICreator/Qiita-1.07M huggingface dataset:
RequireJSをつかって囲碁を書いてみた

## はじめに

以前、Ruby on Railsをつかって囲碁を書いたことがあったのですが、実装がよみにくく、デバッグがむずかしかった思い出があります。

実装を複数のファイルに分割できれば、実装を小さくでき、読みやすくなると考えていました。けれど、どうすればいいのか分からずにこれまで放置してきました。

NodeJSにrequireというやつがあって、これをつかえばいいはずと思ったのですが、サーバーサイドの話なので、同じようにはできないようです。NodeJSのrequireの詳細についてはよくわかっていないので、ここでは取り扱いません。

## はじまりは

ひさしぶりに、[Backbone.jsガイドブック](http://yuku-tech.hatenablog.com/entry/2013/05/02/121515)を読み返していました。たしか、ユニットテストを書いてみようとおもって読み始めたはずです。

ユニットテストについてQUnitの章に書かれています。QUnitを読み始めると、テストを書くときに[RequireJS](http://requirejs.org/)をつかっているようでした。なので、さきにモジュール管理のRequireJSの章を読んでおこうということになりました。

RequireJSの章を読んでみると、簡単に実装を複数のファイルに分割できることがわかってきました。それで、放置してきた問題に着手しはじめることになりました。

## それで

[go](https://github.com/t-mochizuki/go)を書きました。CSSを実装していないので、みためがわるいです。けれど、実装はシンプルになりました。

実装の話になりますが、MVCを意識してみました。モデルにいろいろな処理を持たせればいいとおもって書き始めたのですが、ビューとモデルの間にいろいろな処理を実装することになりました。正しいかどうかはわかりませんが。。。

## つまずいたこと

読んだだけでは理解できていなかったようで、次のような失敗をしてしまいました。これだと依存元（このモジュールを参照するモジュール）でheloを参照できません。

```my_helo.js
define(function () {
  var module = {
    helo: "hello"
  }
});
```

次のように書けば、依存元のモジュールでheloを参照できます。my_helo.jsのmodule変数の可視性はpublicになります。ただし、ops変数は依存元のモジュールからは参照できません。可視性がprivateだからです。

```my_helo.js
define(function () {
  var ops = "ops";

  var module = {
    helo: "hello"
  }

  return module;
});
```

[RequireJS](http://requirejs.org/)にGetting Startedなどドキュメントがありますので、そちらも参照していただければと思います。
グローバル用の.hgignoreの設定

初めてMercurialを使ったのでよくわからなったメモ

SourceTreeが`.hgignore_global`を作ってくれたっぽいので`.idea`を追加したんだけどSourceTree内でしか反映しなかった。コマンドラインでも反映させたかったけど、ローカルではなくグローバルに設定したい。

``` ~/.hgignore_global
syntax: glob

*~
.DS_Store
.idea
```

設定ファイル`.hgrc`をホームディレクトリに作成

``` ~/.hgrc
[ui]
ignore = ~/.hgignore_global
```
Rendr入門(3): CoffeeScriptでRendrアプリを書く

Rendrは最初CoffeeScriptで書かれていたのですが、より多くのエンジニアに開発に参加してもらいたいという理由でピュアJavaScriptになりました。しかし、アプリ・コードはCoffeeScriptで記述することができます。

下記の３ステップが必要です。

## package.jsonに'coffee-script'を追加

```js

"dependencies": {
    "express": "~>3",
    "underscore": "~1.4.4",
    "async": "~0.1.22",
    "request": "~2.16",
    "rendr-handlebars": "0.0.5",
    "rendr": "0.5.0-alpha04",
    "debug": "*",
    "coffee-script": "*" ← これを追加
```

$ npm install
も忘れずに。

## index.jsでrequire('coffee-script')する

そのままですね。index.jsの先頭に`require('coffee-script');`と書きます。

## index.jsでserverの'view engine'の設定を上書きする

```js
app.use(server);

server.configure(function(rendrExpressApp) {
  rendrExpressApp.set('view engine', 'coffee');
});
```

これをしないと、CoffeeScriptで書かれたView(app/views/の下)が認識されません。

以上です！
zip関数の挙動を少し試した


はい。頂いたコメントでzip使っているものがあったのですが、使い方も挙動も知らなかったので大雑把に確認を

```py:op.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#from __future__ import print_function
import sys
import io
import re
import math

#### メモリ使用量と動作時間チェック仕込み
from guppy import hpy
import time
start = time.clock()
h = hpy()
#### 仕込みここまで
i1=[1,2,3,4,5]
i2=[1,2,3,4,5]
z = zip(i1,i2)
print z
print type(z)
print z[0]

i1=[1,2,3,4,5]
i2=[3,4,5]
z = zip(i1,i2)
print z

s1=['dog','cat','bird','kame']
s2=['dog','cat','bird','kame']
z = zip(s1,s2)
print z
s1=['dog','cat','bird','kame']
s2=['dog','kame']
z = zip(s1,s2)
print z
#print m

#### メモリ使用量と動作時間出力
end = time.clock()
print (h.heap())
print (end - start)
```

結果
[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]
<type 'list'>
(1, 1)
<type 'tuple'>
[(1, 3), (2, 4), (3, 5)]
[('dog', 'dog'), ('cat', 'cat'), ('bird', 'bird'), ('kame', 'kame')]
[('dog', 'dog'), ('cat', 'kame')]

ふーむ、(x,y)でとか辞書型にしてリストに入れて返って来てるのかな。
要素数の少ない方に合わせられて多い方の余り？は無視されてるっぽい。
全然使い道が思いつかないので他の人が書いているのを真似をする＆挙動は確認をする でないと自分ではホントに使い道がわからないな。
iTerm2上で256色のvimを使う

Macのデフォルトのターミナルの上位互換として有名な[iTerm2](http://www.iterm2.com/#/section/home)ですが、インストールした直後の設定ではvimが256色で使えません。多くのサイトでエミュレートするターミナルの種類を変更すればよいと書かれていますが、少なくとも私の環境ではもう一手間必要だったのでメモしておきます。
結局の問題は、色の設定を変更しない限りiTerm2は色の設定を再読み込みしないというものでしたorz

## 必要な手順

1. エミュレートするターミナルの種類を変更する
2. 色の設定を変更する(256色用の設定を再度読み込ませる)

## 1. ターミナルの種類を変更する

メニューバーから

`iTerm > Preferences > Profiles > Terminal`

と進み、"Report Terminal Type"を"xterm-256color"に変更します。

![ターミナルの種類を変更する](http://i.imgur.com/Ufvnh8j.png)

## 2. 色の設定を変更する

ターミナルの種類以外の項目を変更していたら不要な可能性が高いのですが、必要最小限で済ませようと思う場合はこの手順がとても大切です。
前述のとおり、iTerm2は色の設定を変更するまで再読み込みが行われないようで、ターミナルの種類を変更しただけでは256色になりません(本当の原因は不明です)。

そこで、メニューバーから

`iTerm > Preferences > Profiles > Colors`

と進み、任意の色の設定を変更します。

私はForegroundを白っぽくなるように変更しました。

![色の設定を変更する](http://i.imgur.com/diaqFPT.png)

## 3. 確認する

iTerm上でvimを起動して、デフォルトのターミナル上で開いた時と同じ配色になることを確認します。
angularjsのはじめの一歩

Angular.jsをダウンロードして、
Windows上で確認するには下記のサイトからNode.exeをダウンロードして、コンソール起動するのが楽ちん

https://github.com/joyent/node/wiki/Installation

angular.jsのTutorialで記述されているscripts/web-server.jsを下記の通り実行する。

'''
node.exe scripts/web-server.js
'''
「第14回オフラインリアルタイムどう書くの問題」をPHPで解く

http://qiita.com/Nabetani/items/0597bd3af481e5834ae1
http://nabetani.sakura.ne.jp/hena/ord14linedung/
眠れるモンスターを狩ります。
武器AでモンスターBを狩れる、モンスターBは武器Cを落とす、武器CはモンスターDを狩れる、という連鎖です。

```php
<?php
	
	class MONSTER{
		// 武器で狩れるモンスターと落とす武器
		private $list = [
			'a' => 'Bc',
			'c' => 'De',
			'e' => 'Fg',
			'g' => 'Hi',
			'i' => 'Jk',
			'k' => 'La',
		];
	
		/**
		* 狩ったモンスターの数を返す
		* @param String 「gLDLBgBgHDaD」みたいな文字列
		* @return int 「6」みたいな数値
		*/
		public function get($input){
			// 初期値
			$weapons = new ArrayIterator();
			$monsters = [];
			$ret = 0;
		
			// 入力値を整形
			foreach(count_chars($input, 1) as $key=>$val){
				// 小文字は武器、大文字はモンスター
				if($key < 97){
					$monsters[chr($key)] = $val;
				}else{
					$weapons[chr($key)] = $val;
				}
			}
			
			// 武器でくるくる
			foreach($weapons as $weapon=>$val){
				// その武器で狩れるモンスターがいれば
				if(isset($monsters[$this->list[$weapon][0]])){
					// 狩る
					$ret += $monsters[$this->list[$weapon][0]];
					// 落とした武器を入手
					$weapons[$this->list[$weapon][1]] = 1;
				}
			}
			
			return $ret;
		}
	}
	
	// 以下はテスト
	$test = [
		['gLDLBgBgHDaD', '6'],
		['DBcDLaLgDBH', '6'],
		['JJca', '0'],
		['FJDLBH', '0'],
		['HJBLFDg', '6'],
		['HBaDLFJ', '6'],
		['DJaHLB', '2'],
		['gDLHJF', '3'],
		['cJFgLHD', '5'],
		['FFBJaJJ', '1'],
		['FJeJFBJ', '2'],
		['iJFFJJB', '3'],
		['JBJiLFJF', '5'],
		['JDiFLFBJJ', '8'],
		['BDFDFFDFFLLFFJFDBFDFFFFDDFaDBFFB', '28'],
		['DDFBFcBDFFFFFFLBFDFFBFLFDFDJDFDF', '24'],
		['FDLBFDDBFFFeFFFFFDFBLDDFDDFBFFJF', '16'],
		['FDBFFLFDFFDBBDFFBJDLFgDFFFDFFDFF', '0'],
		['FDiFLDFFFFBDDJDDBFBFDFFFBFFDFLFF', '31'],
		['FDFDJBLBLBFFDDFFFDFFFFFDDFBkFDFF', '30'],
		['HBkFFFFHBLH', '3'],
		['FBHHFFFHLaB', '2'],
		['LFHFBBcHFHF', '0'],
		['LFBHFFeFHBH', '7'],
		['LgFHHHBFBFF', '3'],
		['FFiFHBHLBFH', '0'],
		['BFHHFFHBeFLk', '10'],
		['FHFaBBHFHLFg', '5'],
		['FFgacaFg', '0'],
		['JHDaDcBJiiHccBHDBDH', '9'],
		['FHJJLckFckFJHDFF', '12'],
		['DeDHJHDFHJBLHDLLDHJLBDD', '22'],
		['gJLLLJgJgJLJL', '0'],
		['DaaaDDD', '0'],
		['HFeJFHiBiiBJeJBBFFB', '9'],
		['FJFFJDBHBHaLJBHJHDLHkLLLFFFgJgHJLHkJkB', '32'],
		['giFLBiBJLLJgHBFJigJJJBLHFLDLL', '23'],
		['cgkLJcLJJJJgJc', '2'],
		['LDFHJHcFBDBLJBLFLcFJcDFBL', '22'],
		['JJHHHkHJkHLJk', '1'],
		['kHHBBaBgHagHgaHBBB', '11'],
		['HDBFFDHHHDFLDcHHLFDcJD', '20'],
		['HFFFHeFFee', '7'],
		['gLLDHgDLgFL', '1'],
		['JJJBBaBBHBBHaLBHJ', '7'],
		['FBFBgJBDBDgF', '0'],
		['LLLLakakLakLL', '7'],
		['HeJHeJe', '0'],
		['LDFLBLLeBLDBBFFBLFBB', '4'],
	];

	$monster = new MONSTER();
	foreach($test as $key=>$data){
		$answer = $monster->get($data[0]);
		if($answer !== (int)$data[1]){
			print('えらー');
		}
	}
```

単純に、手持ちの武器でモンスターを狩って、その戦利品で次のモンスターを狩って、を繰り返しただけです。
[ArrayIterator](http://www.php.net/manual/ja/class.arrayiterator.php)は、反復処理中に値の変更が可能という便利な配列です。
ここが普通の配列だとaddしたループ中は参照してくれません。

かかった時間は1時間くらい。
最初上で書いたとおり普通の配列でやろうとして動かなかった。
あとモンスターと武器の文字が順に並んでるので、ビット演算とかで解けないかと思ったがさっぱりわからなかった。
TOPIX の時系列を表示する

# 何をするのか

Yahoo ファイナンス の TOPIX の時系列をプロットして経済の変化を観察してみる

# 何のパッケージを使うのか
## urllib2
http のリクエストを出して html を得る

```py
urllib2.urlopen(url).read()
```

## lxml
xml, html のパーサ
変数 html に 次のような html の文字列が入っているとすると

```html
<table>
<tr><td>aa</td><td>bb</td></tr>
<tr><td>aa</td><td>bb</td></tr>
<tr><td>aa</td><td>bb</td></tr>
</tr>
```

次のようなコードで全部　td の中身を表示できる。

```py
root  = lxml.html.fromstring(html)
root.xpath("//table")
for tr in root.xpath("descendant::tr"):
    for td in root.xpath("descendant::td"):
         print td
```

# コード

```py
import pylab
import urllib2
import lxml
import lxml.html
import re

dateFr = {"year": 2000, "month":1, "day":1}
dateTo = {"year": 2013, "month":11, "day": 1}

data = []
for page in range(1, 30):
    print page
    url = "http://info.finance.yahoo.co.jp/history/?code=998405.T&sy=%d&sm=%d&sd=%d&ey=%d&em=%d&ed=%d&tm=d&p=%d"
    url = url % (dateFr["year"], dateFr["month"], dateFr["day"], dateTo["year"], dateFr["month"], dateFr["day"], page)

    html = urllib2.urlopen(url).read()
    root = lxml.html.fromstring(html)
    table = root.xpath('//*[contains(concat(" ",normalize-space(@class)," "), " boardFin ")]')[0]

    for tr in table.xpath("descendant::tr"):
        tmp = [td.text for td in tr.xpath("descendant::td")]
        if len(tmp) != 5:
            continue
        begin = float(tmp[1].replace(",", ""))
        high  = float(tmp[2].replace(",", ""))
        low   = float(tmp[3].replace(",", ""))
        end   = float(tmp[4].replace(",", ""))
        data.append([low, high, low, high])
pylab.boxplot(data)
pylab.show()
```

# 画像
![topix.png](https://qiita-image-store.s3.amazonaws.com/0/29984/d7461f10-c2be-e5ff-a616-bcc3eb5eae47.png)
-bash: __rvm_add_to_path: コマンドが見つかりません

```
-bash: __rvm_add_to_path: コマンドが見つかりません
```

rvmを削除したら、ssh接続時にこんな表示が出るようになった。

```
sudo rm /etc/profile.d/rvm.sh
```

このコマンドで直った。
Apacheでリダイレクトする。


http://mrubysearch.ongaeshi.me/ を http://mruby-code-search.ongaeshi.me/ に引っ越しした時の例です。

mrubysearch.ongaeshi.me にアクセスした時に、mruby-code-search.ongaeshi.me にリダイレクトしてくれます。

変更前

```html
<VirtualHost *:80>
  ServerName mrubysearch.ongaeshi.me
  DocumentRoot /path/to/mrubyseach/public
</VirtualHost>
```

変更後

```html
<VirtualHost *:80>
  ServerName mruby-code-search.ongaeshi.me
  DocumentRoot /path/to/mruby-code-seach/public
</VirtualHost>

<VirtualHost *:80>
  ServerName mrubysearch.ongaeshi.me
  Redirect / http://mruby-code-search.ongaeshi.me
</VirtualHost>
```

基本はRedirect属性を設定するだけです。
HARK をソースからコンパイルする

# なぜコンパイル？
HARK は、 Windows インストーラと .deb パッケージと、ソースコードだけなので
Ubuntu 以外の環境ではコンパイルする必要がある。

# HARK のソースコードを手に入れる

ここから最新版をダウンロードして、全部解凍する
http://www.hark.jp/wiki.cgi?page=Softwares#p10
とりあえず hark-src に入れておく

```shell-session
mkdir hark-src
cd hark-src
wget http://www.hark.jp/src/2.0.0/hark-designer_2.0.0.tar.gz
wget http://www.hark.jp/src/2.0.0/hark-fd_2.0.0.tar.gz
wget http://www.hark.jp/src/2.0.0/julius-4.2.3-hark_2.0.0.tar.gz
wget http://www.hark.jp/src/2.0.0/julius-4.2.3-hark-plugin_2.0.0.tar.gz
wget http://www.hark.jp/src/2.0.0/harktool4_2.0.0.tar.gz
wget http://www.hark.jp/src/2.0.0/harktool4-cui_2.0.0.tar.gz
wget http://www.hark.jp/src/2.0.0/libharkio2_2.0.0.tar.gz
wget http://www.hark.jp/src/2.0.0/flowdesigner-0.9.1-hark_2.0.0.tar.gz
find . -name "*.tar.gz" -exec tar xzvf {} \;
```

# 順番にコンパイル

## libharkio2

```shell-session
cd libharkio2_2.0.0/
sudo apt-get install g++ libboost-dev libxml++2.6-dev libboost-regex-dev
./configure
make
sudo make install
cd ..
```

## flowdesigner
```shell-session
cd flowdesigner-0.9.1-hark_2.0.0 
sudo apt-get install libgnomeui-dev
./configure
make 
sudo make install
cd ..
```

## hark-fd
```shell-session
cd hark-fd_2.0.0
sudo apt-get install libasound2-dev libboost-thread-dev
./configure
sudo make install
cd ..
```

## harktool4-cui
```shell-session
cd harktool4-cui_2.0.0
sudo apt-get install libboost-program-options-dev libboost-filesystem-dev libsndfile1-dev
CXXFLAGS=-std=c++0x ./configure
make 
sudo make install
cd ..
```

## harktool4

```shell-session
cd harktool4-2.0.0
sudo apt-get install qt4-qmake libqt4-dev tidy
make 
sudo make install
cd ..
```

## hark-designer

```shell-session
cd hark-designer_2.0.0
sudo add-apt-repository -y ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs graphviz
npm install
node app.js
cd ..
```

これでサーバが立ち上がるので、ブラウザを立ち上げて http://localhost:3000 にアクセス

## julius

```shell-session
cd julius-4.2.3-hark_2.0.0
sh configure
make
sudo make install
cd ..
```

## julius-plugin

```shell-session
cd julius-4.2.2-hark-plugin_2.0.0
sudo make install
cd ..
```
NSUserdefaultsにNSMutablearrayを格納する/読み出す

- 格納

```objc
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    NSMutableArray *array = [[NSMutableArray alloc] init];
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
    [ud setObject:data forKey:@"array_key"];
```
MutableArrayの名前がarray, array_keyは読み出すときのkey.

- 読み出し

```objc
 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    NSData *data = [ud objectForKey:@"array_key"];
    NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data];
```
あとは煮るなり焼くなり。
要素を変更したときは、格納コードをもう一回書いて、
`[ud synchronize];`
しましょう。
【iOS】非公開の共用ライブラリ構築手順

# 動作環境
当方の環境です。iOSに限ったお話です。

|  | Version |
|:-----------|------------:|
| MacOS      | 10.9.1 |
| Xcode      | 5.0.2  |


# 発端
個人でも会社でもですが、いろんなアプリ出してるとアプリ毎に同じメソッドやクラスやら定数
などを使ったりしているかと思います。

これらいろんなアプリで使っているものを１つの共用ライブラリにしてしまって、
一元管理しようと思ったのが事の発端です。
もちろん部外者には共用ライブラリへアクセス出来ない仕組みで。
（別に見られても良い方はGithubで公開するなりCocoaPodsに登録してもらって下さい）

# 導入のメリット
・共通部分はPodsプロジェクトに移って、プロジェクト固有のコードのみになるので見やすい。
・新規でプロジェクト作るとき楽チン。
・共用部分の更新の反映が楽チン。
・会社だと、プロジェクト毎で同じ事してんのに微妙にコード違うものを減らせる。
　（会社のように複数人でいろんなプロジェクトやってる時の効果はかなり大きいと思います）

最近はこの構想を実現出来るうる環境が整ってきました。使うのは以下です。
（Xcode等、通常のiOS開発で使うものは割愛）
・[CocoaPods] (http://cocoapods.org/)
・[Bitbusket] (https://bitbucket.org/)
　別にGithubでもGitlabでも問題ないですが、Bitbusketが一番楽に無料でプライベートリポジトリを使えるので。。
・[SourceTree] (http://www.sourcetreeapp.com/)
 　必須ではないです。お好みで。

## 前準備
詳細は割愛します。皆さんならなんら問題ないでしょう。
・使用する端末でCocoaPodsが使える状態にする
・Bitbusketへログインしてプライベートリポジトリを作れる状態にしておく
・gitに関して初歩的でもいいので基礎知識を身につける

## 手順１
Bitbusket上に共用ライブラリ用のプライベートリポジトリを作っておく。

## 手順２
Xcodeで共用ライブラリ用のプロジェクトを作成し、共用ライブラリを構築。

## 手順３
上記プロジェクトにCocaPods用のpodspecファイルを作成する。内容はこんな感じ

```
Pod::Spec.new do |s|

s.name = "共用ライブラリ名"
s.version = "バージョン"
s.summary = "説明"
s.license = { :type => 'MIT', :file => 'LICENSE.txt' }
s.homepage = "Bitbusketの共用ライブラリのURL"
s.author = { "SOMTD" => "自分のメールアドレス" }
s.source = { :git => "Bitbusketの共用ライブラリのgitのURL", :tag => "#{s.version}" }
s.platform = :ios, '7.0' ←対象iOS下限を指定
s.requires_arc = true　←ARCの指定
s.prefix_header_contents = '#import "xxxDefine.h"'　←インポートするものがあれば書く
s.source_files = "xxx/xxx/*.{m,h}" ←ソースファイルを指定
s.frameworks = 'QuartzCore' ←必要なフレームワークを指定
s.xcconfig = { 'HEADER_SEARCH_PATHS' => '(inherited)′,′LIBRARYSEARCHPATHS′=>′(inherited)', 'OTHER_LDFLAGS' => '$(inherited)' }
s.dependency 'AFNetworking' ← 既にPodfile使って他のライブラリ入れてるなら指定

end
```

以下、本家サイトを見たらだいたいわかるかと。
http://docs.cocoapods.org/specification.html

上記podspecファイルがあるディレクトリ上に上に「README.md」と「LICENSE.txt」も
作って入れておく。これないとCocoaPodsに怒られる。

## 手順４
上記プロジェクトをコミットし、Bitbusket上に作った共用ライブラリ用の
プライベートリポジトリへプッシュする。
その際、podspecファイルのversionで指定したversion番号をgitのtagで打っておく。

## 手順５
ここからは共用ライブラリを使用するプロジェクト側。
そのプロジェクトの「xxx.xcodeproj」があるディレクトリ上にPodfileを作成する。
内容はこんな感じ

```
platform :ios, '7.0' ←プロジェクトの対象iOS下限を指定

pod '共用ライブラリ名', :git => 'https://xxx@bitbucket.org/xxxx/xxxxxx.git' ←Bitbusketの共用ライブラリのgitのURL
```

## 手順６
ターミナルより上記ディレクトリ上まで移動してから、下記を実行。

```
pod install 
```

Bitbusketのパスワードを聞かれるので答える。

## 手順７
CocoaPodsによりxxxx.xcworkspaceが作られるので、今後はここからプロジェクトを開くようにする。
プロジェクトのTargetのBuild Setting内、「Other Linker Flags」と「Header Search Paths」に「$(inherited)」が
入ってなかったら入れておく。
これで共用ライブラリが使えるようになっているはず。
この後、共用ライブラリで事足りる部分を移行してスッキリさせます。

# 共用ライブラリの更新
更新内容をBitbusket上のリポジトリへ反映してから、利用しているプロジェクトのディレクトリで下記を実行すれば反映。

```
pod update
```

# 共用ライブラリ使用以降の注意点
・共用ライブラリを使ってるプロジェクトから共用ライブラリを変更しない。
・会社なら、共用ライブラリを勝手にいじらせない（レビューする）、更新したら通知する等の運用ルールを決める。
Windows + PhpStorm Local Terminal + Symfony Console で色付けする

PhpStorm 7.0 から Local Terminal が追加されましたが、このターミナル、Windows でもエスケープシーケンスで色付けすることができます。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/8734/6b732a97-3ee4-fbde-c813-e8018fdaa53d.png)


ですが、残念なことに自動で認識はされず Symfony Console の場合は `--ansi` を明示的に指定する必要があります。

![02.png](https://qiita-image-store.s3.amazonaws.com/0/8734/c6d16b17-8845-4582-226d-e79bdae9ff1d.png)

が、次のように環境変数を設定すると `--ansi` を指定しなくても色付けされます。

```
set ANSICON=ON
```

![03.png](https://qiita-image-store.s3.amazonaws.com/0/8734/8c0dc484-9aab-fcd3-af80-aae36c916a94.png)

どういうことかと言うと・・・こういうことでした。

 - [symfony/src/Symfony/Component/Console/Output/StreamOutput.php#L101](https://github.com/symfony/symfony/blob/v2.3.6/src/Symfony/Component/Console/Output/StreamOutput.php#L101)

msysgit を使っている場合は Default shell を次のように設定しても大丈夫です。

```
env ANSICON=ON bash.exe -l
```
openFrameworks MacOSX 10.6において　動画からframe 関連の操作ができない件

openFrameworks をMacOSX 10.6で使用するときofVideoPlayerのsetFrame()とかfirstFrame()で軒並みエラーが出ます。
[ error ] ofQtUtils: MovieGetStaticFrameRate(): couldn't get static frame rate: OSErr -9461

以下のサイトの対策を行うことでなおりました。
http://forum.openframeworks.cc/index.php?topic=12523.0

openFrameworks はMacOSX 10.6 の時と10.7以降で使用するライブラリ（っていうの？モジュールっていうの？）が違うようで、これがエラーの原因のようです。10.6でもQTKit使えばいいよねっていう対策です。

でも、僕は昨日からMaverickになっちゃったので・・・。
僕はずいぶん、この件でつまづいたので書き残しておきます。
mxmlで作ったカスタムコポーネンをコンテナにする


ウィンドウなどのベースとなるビューをmxmlを作った時に
それを継承したmxmlでボタンやラベルなどを追加したかったりは意外と多いと思う。

参考
http://www.memorycraft.jp/2008/04/mxml.html


```as3:base.mxml
<s:Group>
	<fx:Metadata>
		[DefaultProperty("children")]
	</fx:Metadata>
	<fx:Script>
		<![CDATA[
			private var customChildren:Array = [];
			private var customChildrenChanged:Boolean = false;

			public function set children(value:*):void{
				if(value is IVisualElement){
					customChildren = [value];
				}else{
					suctomChildren = value;
				}
				customChildrenChanged = true;
				invalidateProperties();
			}

			override protected function commitProperties():void{
				super.commitProperties();
				if(customChildrenChanged){
					for each(var child:IVisualElement in customChildren){
						contents.addElement(child);
					}
				}
			}
		]]>
	</fx:Script>
	<s:VGroup>
		<s:Group width="100%" height="40">
			<s:Label text="タイトル"/>
		</s:Group>
		<s:Group id="contents">
			<!-- 継承したmxmlでここにビューを追加 -->
		</s:Group>
	</s:VGroup>
</s:Group>
```


```as3:child.mxml
<base>
	<s:Label text="追加したよ"/>
</base>
```

こんな風に書けばいいらしい。






// 2014.01.15追記
こんなまどろっこしい方法を使わなくてもスキンを使えばいいことを知ったので追記

```SampleSkin.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
		xmlns:mx="library://ns.adobe.com/flex/mx" width="800" height="600">
	<!-- host component -->
	<fx:Metadata>
		[HostComponent("spark.components.BorderContainer")]
	</fx:Metadata>

	<!-- states -->
	<s:states>
		<s:State name="disabled"/>
		<s:State name="normal"/>
	</s:states>

	<s:Rect width="100%" height="100%">
		<s:fill>
			<s:LinearGradient>
				<s:GradientEntry color="0x000000"/>
				<s:GradientEntry color="0xFFFFFF"/>
			</s:LinearGradient>
		</s:fill>
	</s:Rect>
	<!-- コンテンツ表示領域 -->
	<s:Group id="contentGroup" width="100%" height="100%"/>
</s:Skin>
```

```main.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx">
	<s:layout>
		<s:BasicLayout/>
	</s:layout>
	<fx:Declarations>
		<!-- 非ビジュアルエレメント (サービス、値オブジェクトなど) をここに配置 -->
	</fx:Declarations>
	<s:BorderContainer skinClass="SampleSkin">
		<s:Label text="test"/>
	</s:BorderContainer>
</s:Application>
```

スキン内にid="contentGroup"のコンテナを用意する事でその中にコンポーネントが勝手に入ってくれる。
rails console(irb)でASCII以外のUnicodeの文字列がコード表記になってしまう時の対処法

Rails consoleで`ä`と打つと、`\U+FFC3\U+FFA4` が表示されてしまう。当然日本語もハングルもダメ。

## 対策
readline が ruby のコンパイル時に使われてないのが原因らしい。なのでreadlineを指定して再インストールする。 readlineのディレクトリは環境に合わせてかえてください。特にバージョン`6.2.4`は変わってる可能性が高し。

```
CONFIGURE_OPTS="--with-readline-dir=/usr/local/Cellar/readline/6.2.4/" rbenv install 2.0.0-p247
rbenv: /Users/ironsand/.rbenv/versions/2.0.0-p247 already exists
continue with installation? (y/N) y
```

## 参考
How to input Unicode character in Rails console? - Stack Overflow
http://stackoverflow.com/questions/19857471/how-to-input-unicode-character-in-rails-console?noredirect=1#comment29535126_19857471
`git push -u` オプションの意味

`man git-push` して `-u` オプションについて調べた。

```
-u, --set-upstream
           For every branch that is up to date or successfully pushed, add
           upstream (tracking) reference, used by argument-less git-pull(1)
           and other commands. For more information, see branch.<name>.merge
           in git-config(1).
```

*全く何を言ってるのかわからない！*

## 答え

ネットで検索してみたら答えがわかった。

`git push -u origin master` とすると次回から `git push` だけで勝手に origin master で push してくれる。

ちなみに `git push` とかの マニュアルは全て `man git-push` とか `man git-pull` のようにダッシュで繋げて書けば見れます。`man git push` だと git と push それぞれのマニュアルを探そうとするので気をつけましょう。

## 参考

ブランチ
http://marina.sys.wakayama-u.ac.jp/vmlab/git/node6.html
RLoginのSFTP

ここのところWindows上で使うSSHクライアントはRLoginを使用している。その小ネタで、RLoginは簡易的なSFTP機能も持っている。なんかまぁWinSCPとか立ち上げるのだるいな、って時に重宝している。

#環境

- [CentOS-6.4-x86_64](http://www.centos.org/)
- [RLogin Version 2.14.7](http://nanno.dip.jp/softlib/man/rlogin/)

#やり方
ファイル -> SFTPファイルの転送　を選択する。
![rlogin_sftp_001.jpg](https://qiita-image-store.s3.amazonaws.com/0/31934/7416f8ae-6562-34fa-0429-406ead503996.jpeg)

シンプルなファイルエクスプローラが開くので、適当にドラッグ＆ドロップをして操作する。
![rlogin_sftp_002.jpg](https://qiita-image-store.s3.amazonaws.com/0/31934/fe114b89-7ef9-c87d-3c37-cdbe27f603db.jpeg)

#参考URL
- [Windows向け高性能SSHクライアント RLogin - にーと てくのろじー](http://neat-tech.info/2013/02/27/rlogin-ssh-client-for-windows/)
Xtendでの匿名クラス

自分メモです。


```java
b.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // @todo
    }
});
```

これをXtendだったら

```xtend
b.addActionListener([e|
    // @todo
])
```

メソッドが一個のインターフェースならなんでも、ラムダと同じでokぽい。
importについて

pythonではあるパスに属するディレクトリ以下のライブラリがインポート可能となる。

あるパスとは以下である。
優先順位は

* カレントパス
* PYTHONPATH
* sys.path
* sys.path.appendで追加したパス

```py
import sys
print sys.path
```
とするとリストでパスが戻るのでどのライブラリがインポート可能か確認できる。

ちなみにdjangoでつくったプロジェクトのモジュールが自動的にライブラリとしてインポート可能となるのは以下の仕組みによるものである。

```py
# -*- coding:utf-8 -*-
import sys, os

# project_directoryはdjangoのプロジェクトディレクトリ
# 例) /var/user/django_test_projectなどプロジェクトのパス
sys.path.append(os.path.join(project_directory, os.pardir))
import django_test_project
```
でエラーが出なければOKです。
Macで簡易httpサーバ立ち上げコマンドスニペット



## pythonのSimpleHTTPServer

Macにはpythonはデフォルトインストールされてるので、すぐ立ち上げられる

```bash:server.command
#!/bin/bash
cd `dirname $0`
python -m SimpleHTTPServer 8080
```


## PHP5.4~のビルトインウェブサーバ

PHP5.4以降が入ってなかったらインストールしてから利用する。
下記のスニペットは、パスが5.4に向いてない場合の指定。

```bash:server.command
#!/bin/bash
cd `dirname $0`
/usr/local/php5/bin/php -S 127.0.0.1:8088
```

ほかに簡易httpサーバとして<a href='https://github.com/learning/SublimeServer' target='_blank'>SublimeServer</a>使ったりnodeで立ち上げたり。

おしまい
Redmine Install


メモ

```bash:

## 必要なモジュールインストール
yum -y install httpd httpd-devel
yum -y install openssl openssl-devel
yum -y install mysql mysql-devel mysql-server mysql-libs
yum -y install ruby ruby-devel rubygems
yum -y install git git-svn
yum -y install libxml2 libxml2-devel
yum -y install libxslt libxslt-devel
yum -y install ImageMagick-devel
yum -y install gcc gcc-c++
yum -y install curlpp curlpp-devel
yum -y install curl libcurl libcurl-devel
yum -y install libyaml libyaml-devel

# ruby version up ( ruby -v < 1.9.3 )
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p429.tar.bz2
# tar -jxf ruby-1.9.3-p429.tar.bz2
# cd ruby-1.9.3-p429
# ./configure --prefix=/usr
# make
## get git repos "http://checkinstall.izto.org/checkinstall.git"
# checkinstall --fstrans=no
# 

# スタートアップ設定
/sbin/chkconfig mysqld on
/sbin/chkconfig httpd on

# 起動
/etc/init.d/mysqld start
/etc/init.d/httpd start

# ダウンロード
git svn clone http://svn.redmine.org/redmine/branches/2.4-stable/
cd 2.4-stable/

# DB作成
dbuser=redmine
dbpassword=redmine
sql="CREATE DATABASE $dbuser CHARACTER SET utf8"
echo  $sql | mysql -u root -p -t
sql="GRANT ALL ON $dbuser.* TO $dbuser@localhost IDENTIFIED BY '$dbpassword'"
echo  $sql | mysql -u root -p -t
echo  FLUSH PRIVILEGES | mysql -u root -p -t

# 初期設定
vi config/database.yml

#########################
#  config/database.yml  #
#########################
#
# production:
#   adapter: mysql2
#   database: redmine
#   host: localhost
#   username: redmine
#   password: redmine
#   encoding: utf8
#   socket: /var/lib/mysql/mysql.sock
#


# GEM install
gem install bundler
gem install passenger
gem install rails
gem install ruby-mysql
gem install mysql2
gem install nokogiri -v '1.5.10'
gem install rmagick -v '2.13.2'

# ruby httpd chain
passenger-install-apache2-module
vi /etc/httpd/conf.d/ruby.conf

#########################
#  /etc/httpd/conf.d/ruby.conf
#########################
#
## 1.9.1  ( ruby-gems version ) 
## 4.0.23 ( ruby-passenger version )
#
# LoadModule passenger_module /usr/lib/ruby/gems/1.9.1/gems/passenger-4.0.23/buildout/apache2/mod_passenger.so
# PassengerRoot /usr/lib/ruby/gems/1.9.1/gems/passenger-4.0.23
# PassengerDefaultRuby /usr/bin/ruby
#

 /etc/init.d/httpd configtest

# bundle
bundle install
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate

mv public public_html 
ln -snf public_html public


vi /etc/sysconfig/selinux
#########################
# /etc/sysconfig/selinux
#########################
#
# SELINUX=disabled
# SELINUXTYPE=targeted


```
google speechをclojureから使う

`[hellonico/speech-recognition "1.0.1"]`を使う。

```clj:project.clj
(defproject aaa "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [hellonico/speech-recognition "1.0.1"]])
```

replで実験。flacの音声ファイルを指定するだけ。

```shell-session
$ lein repl
user> (use '[speech-recognition.hear :as hear])
nil
user> hear
#<hear$hear speech_recognition.hear$hear@7f23663b>
user> (binding [
    hear/*language* "ja" 
    hear/*sample-time* 1720]
   (hear/post-to-google "a.flac"))
"{\"status\":0,\"id\":\"91a29a29cb62ce5095019a632ee76dff-1\",\"hypotheses\":[{\"utterance\":\"すごいね\",\"confidence\":0.69594836}]}\n"
user> 
```

`すごいね`と認識された。
まさに`すごいね`。
Apache Wicket User Guideを grails doc してみた


# 経緯
[Apache Wicket User Guideが正式に公開](http://wicket.apache.org/guide/)されていたので、どうやってHTML/PDFを出力してるのか気になった。

# how-to

[28 Contributing to this guide (Appendix)](http://wicket.apache.org/guide/guide/contributing.html)を見ると、Grailsのdoc生成機能をつかっているとのこと。Grailsは全くの素人なので、Grailsのインストールからやってみる。

## Grailsのインストール（Mac Homebrew）

HomebrewでGrailsをインストールする。
本稿執筆時点では、User Guide側でバージョンの指定がある。

> - To preview your changes you should have Grails installed.  
>   - Download it from here.
>
> Note: Download version 2.2.4. Newer versions are not supported at the moment.

現時点でHomebrewでそのままインストールされる Grails は 2.3.7 なので、2.2.4 を指定してインストールする。

```bash
$ cd /usr/local/
$ brew versions grails
    2.2.4    git checkout 265d2d4 Library/Formula/grails.rb
    # （結果は一部省略している）
$ git checkout 265d2d4 Library/Formula/grails.rb
$ brew install grails
$ grails -version
    Grails version: 2.2.4

# 以下はやらなくてもいいけど一応。
# (すでに最新版をインストールしてる時とか）
$ git checkout master Library/Formula/grails.rb
$ brew switch grails 2.2.4 
```

## Wicket User Guide ソースコードのCheckout

[28 Contributing to this guide (Appendix)](http://wicket.apache.org/guide/guide/contributing.html)の指示の通り、WicketのWebサイトのソースコードを丸ごとCheckoutする（実際にはguideディレクトリだけでいいんじゃないかと思うけど、試してない）。
どこか作業用のディレクトリに移動して、

```bash
$ svn checkout https://svn.apache.org/repos/asf/wicket/common/site/trunk/_site/
```

## grails doc

_site/guide/guide/ ディレクトリに移動して、grails docコマンドを実行。

なお、2014年3月28日現在、Java8では以下のコマンドは失敗するので、Java7に切り替えて実行する必要があるようだ。

```bash
$ cd _site/guide/guide/
$ grails doc
    # HTMLのみ生成される
$ grails doc --pdf
    # PDFも生成される
```


たとえば、_site/guide/guide/src/docs/guide/chapter1.gdoc を編集してから上記のコマンドを実行すると、編集が反映された形でHTMLやPDFが生成される。 **しかし、PDFファイルでは日本語が表示されない**。

ググってみると、[解決にはちょっと工夫が必要](https://twitter.com/masanobuimai/status/288277640341749762)のようなので、今回はここまで。

## 参考にした資料
- [Homebrewで複数versionはいってるformulaをきりかえるには
](http://marutanm.github.io/blog/2012/02/01/homebrew-switch-formula-version/)
- [brewのversionsで最新がとれなくなったとき](http://d.hatena.ne.jp/irof/20120804/p2)
- [GRAILS doc](http://grails.org/doc/2.2.4/ref/Command%20Line/doc.html)
tinymceで先頭のスペースが消えてしまう件・・・

TinyMceで先頭文字をスペースが消えないようにする方法を何とか見つけたのでメモ。

  remove_linebreaks : false

が検索すると一番に出てきたが効かない。。。
何か文字が入っていれば先頭にスペース使えるようだったので

    forced_root_block : 'div',

divを追加することでスペース削除されなくなりました。
ただ、ｲﾗﾅｲdivタグはいっちゃうので登録時に削除が必要であれば削除するｐｑ
dispatch.cgi not found errorについて

Head First RailsというRuby on Rails入門書を読んでいて気づいたのでメモ。
Rails 2.3.2で動かすと、dispatch.cgiは自動的に生成されませんでした。

```
$ ls $HOME/Rails/test/public/

404.html        dispatch.cgi    favicon.ico     javascripts
stylesheets422.html        dispatch.fcgi   images
public500.html        dispatch.rb     index.html      robots.txt
```

Rails2.2.2で作成したTodoアプリのdispatch.cgiとdispatch.fcgiはこんな感じ。

## dispatch.cgi
```
$ less $HOME/Rails/Todo/public/dispatch.cgi
```

```rb
#!/usr/local/bin/ruby18

require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)

# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
require "dispatcher"

ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
Dispatcher.dispatch
```
## dispatch.fcgi
```
$ less $HOME/Rails/Todo//public/dispatch.fcgi
```

```rb
#!/usr/local/bin/ruby18
#
# You may specify the path to the FastCGI crash log (a log of unhandled
# exceptions which forced the FastCGI instance to exit, great for debugging)
# and the number of requests to process before running garbage collection.
#
# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
# and the GC period is nil (turned off).  A reasonable number of requests
# could range from 10-100 depending on the memory footprint of your app.
#
# Example:
#   
# Default log path, normal GC behavior.
#   RailsFCGIHandler.process!
#
#   
# Default log path, 50 requests between GC.
#   RailsFCGIHandler.process! nil, 50
#
#   
# Custom log path, normal GC behavior.
#   RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
#
require File.dirname(__FILE__) + "/../config/environment"
require 'fcgi_handler'

RailsFCGIHandler.process!
```
ggplot2で、複数の時系列を一枚にプロット

```
> head(dat)
           X1       X2          X3 t
1 -0.50643974 1.047231  0.27683366 1
2 -0.09770514 3.045507 -0.35219898 2
3 -1.34254553 3.454165  0.02047701 3
4 -2.80358361 3.052366 -0.35403137 4
5 -3.84976651 2.441114  0.68818969 5
6 -4.64718281 1.449005  1.68518642 6
```

こんな感じに、データフレームに多次元の時系列が入っていて、それらを一枚のグラフに重ねてプロットする。

```r:melt.r
temp <- melt(dat,
             id="t",
             measure=c(
                 "X1",
                 "X2",
                 "X3"))
ggplot(temp,
       aes(x=t,
           y=value,
           colour=variable,
           group=variable)) + geom_line()
```

こんな時、データフレームを良い感じ(ggplot2で扱い易いよう)にしてくれる便利関数がmelt。

```
> head(temp)
  t variable       value
1 1       X1 -0.50643974
2 2       X1 -0.09770514
3 3       X1 -1.34254553
4 4       X1 -2.80358361
5 5       X1 -3.84976651
6 6       X1 -4.64718281
```

![melt.jpeg](https://qiita-image-store.s3.amazonaws.com/0/7973/0ddca15a-c31e-910b-a252-ee815503079b.jpeg)

![参考ページ](http://stackoverflow.com/questions/13324004/plotting-multiple-time-series-in-ggplot)
isset, in_array, array_key_exsistsの使い分け


PHPで、配列中に特定のキーが存在するか真偽値を取りたい場合、isset、in_array、array_key_existsという関数があります。

in_arrayの速度は、O(n)なので、キーの数が増えるほど重くなります。

issetとarray_key_existsは、O(1)なのでin_arrayよりもはるかに高速でした。

また、issetとarray_key_existsでは、NULLに対しての処理が違うようです。

```php
<?php
$array_data = array('1' => NULL, '2' => 'test');

// FALSE
isset($array_data['1']);

// TRUE
array_key_exists('1', $array_data);
```

指定したキーの値がNULLでも検知したい場合は、array_key_exists。

それ以外は、issetを使うと良いと思います。

[in_array - PHP Manual](http://us2.php.net/in_array)
[isset - PHP Manual](http://us2.php.net/is_set)
[array_key_exists - PHP Manual](http://us2.php.net/array_key_exists)
[Titanium Studio]プロジェクト名変更


Titaniumで作成したアプリ名を変更する必要があり、Titaniumのプロジェクト名を変更する必要があった。
（設定ファイルいじるだけじゃアプリ名変更されないみたい）

しかしTitaniumStudioにはプロジェクト名変更の機能が無いらしい。
なので、新しくプロジェクトを作成、その後元プロジェクトから必要なものをコピーする。

（その後ビルドが通らない祭りだったり・・・ｗ）

その後、古くなったプロジェクトの削除はAppExplorerでプロジェクトを選択→メニューボタン（歯車のやつ）→Delete Project...
ソースコードも全消しする場合はチェックボックスにチェックを入れる
knife-soloができるまではまったこと

Vagrant＋chef環境作ろうとしてドはまりしてまして。

○Windows
Windows環境はWindow7

○[ruby 2.0.0＋DevKit](http://rubyinstaller.org/)
gemを入れるうちに、DevKitがどうこう言われてよくわからなかったが、
ここから拾ってインストールしておかないといろいろ面倒らしい。
DevKitは、c:\DevKit配下に展開して、PATHを通してあげる

○[virtualBox](https://www.virtualbox.org/)
https://www.virtualbox.org/
ここから。

○[Vagrant](http://www.vagrantup.com/)
ここから。

Vagrat自体の説明や、やり方は他のサイトを参考に。

○chef,knife
をgemで入れると、どうもうまく実行できなく悩んでいた。
絶対、同じようにハマった人がいるだろうと、ぐぐったら
[vagrant + chefをwindowsで使えるようにした(わすれっぽいきみえ)](http://kimikimi714.hatenablog.com/entry/2013/08/28/vagrant_%2B_chef%E3%82%92windows%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%9F)
ここを参考に
[http://www.opscode.com/chef/install/](http://www.opscode.com/chef/install/)
ここからWindowsバイナリを拾う。
installして
C:\opscode\chef\bin
にPATHを通す。knifeも同梱されているので（多い日も）安心。

○knife configure
これをやっておかないとknifeコマンドがうまくいかなかった。
規定値で進む。

○knife-solo
そして、いざテンプレート出力。

> knife solo init chef-repo

→失敗。どうやら、knife-soloは上記chefに入っていないらしい。

>gem install knife-solo

ここだけはgemでインストール。

>D:\home\vmtest>knife solo init chef-repo
>Creating kitchen...
>Creating knife.rb in kitchen...
>Creating cupboards...

ようやくうまく行った！

ということでこれからchef編へ。
chefのdeployでシンボルリンクしたくない場合の対処方法

chefのdeployリソースではデフォルトでdatabase.ymlなどがシンボルリンクされます
このシンボルリンクしたくないよ、という場合の方法をメモしておきます

* 詳細は[deploy — Chef Docs](http://docs.opscode.com/resource_deploy.html)の下の方に書いてあるみたい
* 自分なりにdeployリソースについてまとめてみた記事は、[chefのdeployリソースを使ってみる · mechamogera/MyTips Wiki](https://github.com/mechamogera/MyTips/wiki/chef%E3%81%AEdeploy%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B)

----

* 以下のようなdatabase.ymlがないリポジトリからのデプロイレシピにおいて、この対処方法をしていないとdatabase.ymlがないからシンボルリンクできないよと怒られる

```rb
deploy_revision "/home/ec2-user/app" do
  repo 'https://github.com/mechamogera/Hello-World'
end

# => Chef::Exceptions::FileNotFound
# ------------------------------
# Cannot symlink /home/ec2-user/app/shared/config/database.yml to /home/ec2-user/app/releases/dc057376f17e31ce2c7d5095fabeb2ae2201ffda/config/database.yml before migrate: No such file or directory
```

## 対処方法
 * 下記のようにdeployリソースでclearする(空配列を渡すのでは無理だった)

```rb
deploy_revision "/home/ec2-user/app" do
  repo 'https://github.com/mechamogera/Hello-World'

  symlink_before_migrate.clear
  create_dirs_before_symlink.clear
  purge_before_symlink.clear
  symlinks.clear
end
```
時系列付きのリモートブランチ一覧を表示

コマンドラインでも、GitHubやGitLabのように、ブランチの最終更新日時を確認できるようにする。

## .gitconfigの設定

`.gitconfig`のaliasに、下記を追加。

```
[alias]
        remote-branch = !"for k in `git branch -r | grep -v HEAD | perl -pe s/^..//`; do echo `git show --pretty=format:'%Cgreen%ci %Cblue%cr%Creset' $k -- | head -n 1` \t$k; done | sort -r"
```

## 実行結果

```
$ git remote-branch
2013-11-08 15:07:58 +0900 46 minutes ago origin/dev
2013-11-08 12:09:08 +0900 4 hours ago origin/master
2013-11-08 10:33:06 +0900 5 hours ago origin/staging
```
vim7.4をソースからインストール

# 最新版を取得
```
wget http://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2
tar jxvf vim-7.4.tar.bz2
cd vim74/
```

# パッチ用のディレクトリを作成
```
mkdir patches
cd patches/
```

# パッチを取得(2013/10/16時点)
```
seq -f http://ftp.vim.org/pub/vim/patches/7.4/7.4.%03g 052 | xargs wget
cd ..
```

# パッチをあてる
```
cat patches/7.4.* | patch -p0
```

# src/Makfileを修正
これをやらないとsedが戻らなくなる
http://www40.atwiki.jp/hirukiyo/m/pages/18.html

# インストール

```
# インストール先を/usr/local/vim74にして、古いvimも共存させる。
# リモートホストのvimを使う想定。
./configure --prefix=/usr/local/vim74 --disable-selinux --enable-multibyte --with-features=huge --enable-pythoninterp --disable-netbeans --enable-perlinterp --disable-xsmp-interact --disable-xsmp --without-x --disable-gui

# コンパイル
make

# makeでperl関連のエラーが出たら以下
yum -y install perl-ExtUtils-Embed

# インストール
make install
```

# 古いvimと入れ替え
※ コメントでiwaimさんが言っているように環境変数変えたほうが良いと思う。

prefix指定なしでconfigureしていればこの手順はいらないと思う。

```
# 古いvimをmv
mv /usr/bin/vim /usr/bin/vim72

# 新しいvimをパスに入れる
ln -s /usr/local/vim74/bin/vim /usr/bin/vim
```
[Unity] iTweenで動作完了を待つ


iTweenでアニメーションをしていてハマったのでメモ。

## iTweenは２度呼び出しても、２度アニメーションするとは限らない


```csharp
	public void OnGUI(){
		if(GUI.Button(new Rect(0, 0, 100, 50), "Push"){
			iTween.MoveAdd(target, new Vector3(0, 50, 0), 0.1f);
		}
	}
```

上記のようなスクリプトがあるとする。
GUI上のボタンが押されたら、targetオブジェクトがy軸上を５０上に移動するというものである。

このスクリプトを実行して、ボタンを２度押したとしても、１００移動するとは限らない（移動する場合もある）。

ようは、２度目にボタンを押したタイミングで、１度目のiTweenの処理が終わっていればもう一度実行されるが、終わっていない場合は１度目の処理がキャンセルされて２度目の処理だけしてしまうようだ（推測）。

特に問題のないケースも多いだろうが、何度押されたかによって処理がかわる場合などには好ましくない。

## １度目の処理中は、２度目の呼び出しを無視する

そこで、iTweenの処理が終わってからしか、次の入力を受け付けないようにしてみた。

```csharp:
	// 処理が終わったどうかを示すフラグ
	bool iTweenMoving = false;
	// 処理が終わったら呼び出され、フラグをクリアする。
	void OnCompleteHandler(){
		iTweenMoving = false;
	}

	public void OnGUI(){
		if( ! iTweenMoving && GUI.Button(new Rect(0, 0, 100, 50), "Push"){
			// 処理中のフラグをたてとく。
			iTweenMoving = true;
			iTween.MoveAdd(target, iTween.Hash(
				"y", 50,
				"time", 0.1f,
				"oncomplete", "OnCompleteHandler",
				"oncompletetarget", this.gameObject));
		}
	}
```

iTweenが処理中はフラグをたてといて、終わったらコールバック関数を呼び出してもらい、そこでフラグをクリアしているだけである。
FireMobileSimulator が UserAgent を置き換えてくれない


Firefox のバージョンが上がって挙動がかわったのが理由なのかわからないが、UserAgent がどうも素の Firefox のままなので、以下の add-on を導入。

[User Agent Switcher :: Add-ons for Firefox](https://addons.mozilla.org/ja/firefox/addon/user-agent-switcher/)

デフォルトの一覧の中には iPhone5 の UserAgent が無いので追加する。

![kobito.1383888511.306385.png](https://qiita-image-store.s3.amazonaws.com/0/8219/93f68ea7-a4bb-1e10-bc48-f631efbc9706.png "kobito.1383888511.306385.png")


User Agent の中は以下のとおり

```
Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A501 Safari/9537.53
```
rbenv でインストールした ruby 環境で readline が有効でない


readline が無いと irb で BS や矢印キーでの移動ができないので非常に辛い。

ruby をインストールしたときに、 readline-devel パッケージが入っていなかったのが原因っぽい。

以下のように、readline-devel を入れた後、ruby を再インストール

```
$ sudo yum install readline-devel
$ rbenv uninstall 1.8.7-p374
$ rbenv install 1.8.7-p374
```
AdMobSDK iOS 利用時に必要なframeworkまとめ


GoogleAdMobAdsSdkiOS-x.x.x について

* googlemobileadssdkios.zip とか

### GoogleAdMobAdsSdkiOS-6.8.0 で必要なframework

* **CoreTelephony (6.8.0~)**
* AdSupport
* AudioToolbox
* AVFoundation
* CoreGraphics
* MessageUI
* StoreKit
* SystemConfiguration

### GoogleAdMobAdsSdkiOS-6.7.0 で必要なframework

* 6.6.0 に同じ。

### GoogleAdMobAdsSdkiOS-6.6.0 で必要なframework

* AdSupport
* AudioToolbox
*  **AVFoundation** <- iOS7 から new!
* CoreGraphics
* MessageUI
* StoreKit
* SystemConfiguration

### GoogleAdMobAdsSdkiOS-6.5.1で必要なframework

* AdSupport
* AudioToolbox
* CoreGraphics
* MessageUI
* StoreKit
* SystemConfiguration

### いつの間にか要らなくなってるframework

※いつ消えた？

* CoreLocation
* QuartzCore
mkdir_p "~/foo"

* やりたかったこと

ホームディレクトリにディレクトリ「foo」をつくる。

* やった結果

```ruby
require 'fileutils'
FileUtils.mkdir_p "~/foo"
```

カレントディレクトリに、「~/foo」という階層のディレクトリができた。

* 正解

```ruby
require 'fileutils'
FileUtils.mkdir_p File.expand_path("~/foo")
```

* わかったこと

"~" の展開があくまでシェルの機能であることを念頭に置かずにやってみたら、変なことになったというおバカな例でした。
正しく展開されないにしろ、何かしらのエラーになると予想していたところに "~" そのままのフォルダが作成された、というのも意外でした。
しかしこれもよくよく考えれば、シェルでも正しくエスケープすれば、「~*&\!?"'<>(){}」 みたいなフォルダだって作れてしまうし、記号だからと言って特別扱いされる、という単純な話ではないということですね。
Dojo.queryのパターン


Dojo tool kitでdojo.queryを使うとき
公式のショートカット 

指定したもの全て返すので
dojo.query().forEach()が普通。

```
dojo.query("div#main")
dojo.query("#id")
dojo.query(".class")
dojo.query(".class1.class2") => and
dojo.query(".class1, .class2") => or
dojo.query(".class1:not(.class2)") => not
```

http://dojotoolkit.org/reference-guide/1.9/dojo/query.html
如何为Sass写出的代码增加更大的复杂度

Less与Sass在前年几乎是风头最猛的两种美工时髦玩具，它提供了一种所谓的变量与继承机制，二次过度定义了原本就有类似概念的CSS。但是，由于样式表本身带有标记语言的常见特征，这种类似语言转换编译器的内容无疑大大增加了开发成本，在新鲜的浪潮过去之后，留给当年大力推广的开发公司的是无尽的痛苦和混乱的管理，而仍然在狂热的美工似乎忘记了决定语言的重点之一就是语义，基于陈述性语义的样式表注定不需要Sass这种二次编译的产物。

但是，这又能否能说明Sass已经走到了末路，逐渐消亡了？大错特错，经过日常的改造，Sass的规则和诱导，几乎可以让我们写出最难以维护的样式表。

Sass有一种神器被称作`!default`，它拥有最高优先权，简单说与CSS 1.0就被提出的`!important`有异曲同工之妙，但是由于Sass的所有样式描述都是可以基于变量的，于是开发人员可以通过滥用这条语句，为开发增加更多的挑战。

比如我们先以美工最喜欢使用Sass的原因——方便颜色管理为由，**少年A**将下列代码文件保存为`main.scss`：

```sass
      $gray: #eee !default
      $dark-gray: #8d8d8d !default
```    

接着，有一个倒霉蛋B哥参与了工作，经过了Sass基础的教育，B哥决定定义完变量，之后想起来应该要引入我们的基础样式文件：

```sass
      $gray: #8d8d8d
      @import 'main'
```    

现在文件内的所有变量`gray`被错误替换成了`#8d8d8d`的颜色，但这并不算完，我们的源头开发者A君再次用Sass-lang更新了自己的代码，他将两个看起来差不多的变量合并成了一个list，并且为主站声明了一个这次开发常用到的文字阴影样式：

```sass
      $gray: #eee !default, #8d8d8d !default
      $formal_pixel: 1px, -1px
      @mixin text($value: red 0 1px 0) 
            text-shadow: $value
      
      @include text(text-shadow(nth($formal_pixel,2) nth($formal_pixel,2) 0 nth($gray,1), nth($formal_pixel,1) 2px 0 nth($gray,2)))
```    

A君现在觉得自己非常有编程的感觉，被自己帅到了。而此时的B哥仍然不知道发生的事情，在阅读完文档之后，B哥也逐渐找到了感觉，将一个重复复制粘贴的样式写出了符合Sass风格的代码：

```sass
      @if lightness($color) > 30% 
            @for $i from 1 to 10 .border-#{$i border: #{$i}px solid $gray
      else
            background-color: $gray
      
```    

我们可以看到，这时候`$gray`作为错误的源头，实际上已经几乎不重要了，原本简单粗暴的CSS样式，已经彻底升级为一种无交流结对编程的噩梦。即使毫无出错，拥有完善的约定俗成，在一个使用Sass的团队中，最后编译很可能经常可能要面对长达几百行以上类似这种风格的代码，重复的调试与修正让原本就被大括号占领的层级关系变得更加复杂，原本只是单调机械的美工有了更加编程一般的挑战（吃屎）与感觉（吃屎）。

现在，深吸一口气一起赞美Sass，保佑那些还在使用Sass的团队，God bless complex.
DBD::Pgのインストール時のエラー

# DBD::Pgをインストールする時にエンコーディングのエラーが発生した

```pl
t/12placeholders.t .. 71/243 
#   Failed test 'Dollar quotes with valid characters are parsed as identifiers'
#   at t/12placeholders.t line 609.
#          got: 'DBD::Pg::st execute failed: ERROR:  invalid byte sequence for encoding "EUC_JP": 0xe58c at t/12placeholders.t line 606.
# '
#     expected: ''

#   Failed test 'Dollar quotes with valid characters are parsed as identifiers'
#   at t/12placeholders.t line 609.
#          got: 'DBD::Pg::st execute failed: ERROR:  invalid byte sequence for encoding "EUC_JP": 0xe58c at t/12placeholders.t line 606.
# '
#     expected: ''

#   Failed test 'Dollar quotes with valid characters are parsed as identifiers'
#   at t/12placeholders.t line 609.
#          got: 'DBD::Pg::st execute failed: ERROR:  invalid byte sequence for encoding "EUC_JP": 0xe58c at t/12placeholders.t line 606.
# '
#     expected: ''
DBD::Pg::db do failed: ERROR:  current transaction is aborted, commands ignored until end of transaction block at t/12placeholders.t line 618.
```

- client_encodingがEUC-JPになっていることが原因であった。

```pl
t/01connect.t ....... 15/15 # 
# DBI                         Version 1.63
# DBD::Pg                     Version 2.19.3
# Perl                        Version 5.18.1
# OS                          freebsd
# PostgreSQL (compiled)       90102
# PostgreSQL (target)         90102
# PostgreSQL (reported)       PostgreSQL 9.1.2 on amd64-portbld-freebsd9.0, compiled by cc (GCC) 4.2.1 20070831 patched [FreeBSD], 64-bit
# Default port                5432
# DBI_DSN                     dbi:Pg:db="postgres"
# DBI_USER                    pgsql
# Test schema                 dbd_pg_testschema
# LANG                        C
# array_nulls                 on
# backslash_quote             safe_encoding
# client_encoding             EUC_JP
# server_encoding             EUC_JP
# standard_conforming_strings on
# Adjusted:                   DBI_DSN DBI_USER
```

- どこで設定されているのか判らなかったが、`export PGCLIENTENCODING=UNICODE` してインストールするとうまくいった。
GitHub wiki にサイドバーなどを表示する

http://stackoverflow.com/questions/9239588/toc-or-sidebar-in-github-wiki

単に「_Sidebar」なり「_Footer」なりといった名前のページを作成すれば良いだけっぽい。

![スクリーンショット 2013-11-08 12.19.06.png](https://qiita-image-store.s3.amazonaws.com/0/569/e1508b55-34e5-7187-9349-0542e7f64b4c.png)

![スクリーンショット 2013-11-08 12.17.43.png](https://qiita-image-store.s3.amazonaws.com/0/569/77d97a3c-010b-b413-a69a-b84c25a7bd46.png)

その後は、Homeを編集すればSidebarの編集フォームもでてきて便利だ。

![スクリーンショット 2013-11-08 12.18.05.png](https://qiita-image-store.s3.amazonaws.com/0/569/2d831f44-cde5-0656-5edf-ac8ad710409f.png)
ビューの基本

ERB(Embedded Ruby)という形式。
HTMLにRubyを埋め込んだもの。
最終的なイメージを描きながら作業できる。

プログラム側で必要な情報を用意（Controller）
↓
テンプレート側では、
データを埋め込む場所や表示方法を定義。（View）

これがController&Viewの基本的な関係

@msg = ''
インスタンス変数

動的な処理は
<% %>か<%= %>
で記述する。

<% %>はコードを実行するのみ
<%= %>は中身の式の結果を出力する

テンプレートファイルがなんらかの出力を行うという役割を
しっかりと意識するならばほとんどは
<%= %>で記述するでしょう。

空白の制御
<% -%>,<%= -%>のように、-で閉じると-%>の後方の
スペースや改行を除去することもできます。

ビューの自動生成：
コントローラークラスと合わせて、ビューも自動生成できる。

> rails generate controller hello show
= helloコントローラのshow.html.erbを生成

> rails generate controller hello index show new
= index.html.erb, show.html.erb, new.html.erbを生成
あらかじめ必要なファイルが分かっている場合、まとめて生成する方が良い。

アクションメソッドは省略可
e.g. http://localhost:3000/hello/nothing
Railsはhelloコントローラのnothingアクションを探すが、無い場合そのままhello/nothing.html.erbを健作氏、実行します。

共通レイアウトの適用：
共通要素はapplication.html.erbで定義されている。
その中<%= yield %>をreplaceして出力する。

コメントアウト：
Rubyのコメント構文を使う！
<%# コメント %>
Net::SSLeayのビルド失敗回避

Net::SSLeayをインストールするときに、

```
*** Found OpenSSL-1.0.0 installed in /usr
*** Be sure to use the same compiler and options to compile your OpenSSL, perl,
    and Net::SSLeay. Mixing and matching compilers is not supported.
Do you want to run external tests?
```

みたいな警告が出て、そのまま強行するとコンパイルエラーになってしまい、ビルドに失敗してしまった。

[ここ](http://ryo14-a.hatenadiary.jp/entry/2013/07/22/222739)の話がビンゴで、OpenSSLのライブラリが入っていなかったのが原因。

素直に、

```bash:
$ yum install openssl-devel zlib-devel readline-devel
```

として、解決。
Maverickにしたら、VMware Fusion 5上で動かしているWindowsのネットワークが不調になった

下記URLを参考にして、仮想マシン＞設定＞ネットワークアダプタ＞インターネット共有　を「Macを共有」ではなく「WiFi」にしたら安定した。原因は全然ワカラナイ。

http://webooker.info/2013/10/mavericks-vmware-fusion-5-windows-8/
JavaでHTML5をDOMパースしてXPATHを使えるようにする - Validator.nu HTML Parser

HTML5ではタグを閉じなくてもよいのでjava.xmlのDocumentBuilderでそのままパースできません。
Validator.nu HTML Parserを利用するのが一番簡単です。

日本語のドキュメントが少ないのでメモを共有します。

http://about.validator.nu/htmlparser/

このライブラリはFirefox4系のコアでC++にコード変換して利用されているとのことでかなり信頼性が高いと考えられます。これまでに数百のサイトのhtmlを解析してみましたがパースでエラーが出たことはまだありません。英語のドキュメントでの利用方法もそれなりに充実しています。
本投稿時点でのバージョンは1.4です。

# 使い方
まずは上記URLにあるzipをダウンロードしhtmlparser-1.4.jarにビルドパスを通します。
nu.validator.htmlparser.dom.DocumentBuilderクラスを利用することで簡単にorg.w3c.Documentに変換できます。

```java:文字列bodyをパースするサンプル

    // Validator.nu HTMLParser付属のHtmlDocumentBuilderでパース
    HtmlDocumentBuilder builder = new HtmlDocumentBuilder();
    StringReader reader = new StringReader(body);
    Document doc = builder.parse(new InputSource(reader));

    // XPathの準備
    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();

    // XPathでid=foo要素直下の文字列を取得
    String path = "//*[@id='foo']/text()";
    String fooString = xpath.evaluate(path,doc);
    System.out.println(fooString);

    // XPathでid=var要素をw3c.dom.Nodeとして取得
    path = "//*[@id='var']";
    Node node = (Node) xpath.evaluate(path,doc, XPathConstants.NODE);

```

XPathの利用方法の詳細は触れません。

# 既知の問題？
下記のHTMLの文字列を正確に取得できません。

```html:ソース
  <div id="foo">
    hoge A
    <div class="large">large B</div>
    foo C
  </div>
````

上記HTMLではXPath仕様で私の理解ではtext()で直下の文字列[hoge A foo C]が取得できるべきと思うのですが「hoge A」しか取得できません。（間違っていたらご指摘ください。)
Git で不要になったローカルブランチ・リモートブランチを削除する方法


## ローカルブランチ

### ブランチの一覧を見る
- ローカルブランチの一覧を表示する

```bash
% git branch
master
foo
bar
```

### 削除
- HEAD にマージしたブランチを削除する

```bash
% git branch --delete foo
```
- マージしたかどうかを問わずに削除する

```bash
% git branch -D foo
```

## リモートブランチ
### ブランチの一覧を見る
- リモートブランチの一覧を表示する

```bash
% git branch --remote
origin/HEAD -> origin/master
origin/foo
origin/bar
```
- ローカルブランチとリモートブランチの一覧を表示する

```bash
% git branch --all
master
foo
bar
origin/HEAD -> origin/master
origin/foo
origin/bar
```

### リモートブランチを削除する
- リモートブランチ foo を削除する
 
```bash
% git push --delete origin foo
```
または

```bash
% git push origin :foo
```

## 参照
[3.5 Git のブランチ機能 - リモートブランチ](http://git-scm.com/book/ja/ch3-5.html)
[Gitの内側-参照仕様（Refspec）](http://git-scm.com/book/ja/Git%E3%81%AE%E5%86%85%E5%81%B4-%E5%8F%82%E7%85%A7%E4%BB%95%E6%A7%98%EF%BC%88Refspec%EF%BC%89)
GitHub Gistで擬似的にタグを付加する

[GitHub Gist](https://gist.github.com/)で検索する際にタグで検索ということをしたいと思い、擬似的なタグ検索を考えてみました。素直に[GistBox](http://www.gistboxapp.com/)等を使えば良いとは思うのですが、まあ、それは置いておいて……

## Gistの検索について

Gistの検索の仕様について、現状私が知っていることと言えば

- 検索対象となるもの
  - ファイル名
  - コード
- 検索対象とならないもの
  - description

くらいでしょうか……

## 考えたこと

で、ここから考えついたことはファイル名に`#tag1 #tag2 #tag3`というような形で入力しておけば、検索時に`#tag2`で検索できるのでは、ということです。もしくはコード中にコメントとして書いておく、でしょうか。（コメントとはいえコード中にタグを書くというのは若干気持ちが悪いような気がしますが）

## 結果

これで試しに検索してみたところ、思った通り検索にヒットしました。
なのでファイル名に`#javascript .js`などとしておけば、後から`#javascript`で検索するとヒットします。

## 欠点

ただ、ファイル名にタグなどを書いているので、`Download Gist`から　ダウンロードした書庫を展開するとファイル名にそのままタグなどが付加されてしまっているのが欠点でしょうか……
GitHub Gistで特定のユーザのGistだけを検索する

[GitHub Gist](https://gist.github.com/)で検索する際に、自分のGistだけを検索できないか試してみたところ、検索できてしまったのでメモです。APIでは標準で検索できるようなので、特別なものではないのかもしれませんが……

```:検索ボックス
user:sasaplus1
```

という風に、`user:ユーザ名`と入力して検索すると指定したユーザのGistだけが検索結果に表示されます。また、

```:検索ボックス
user:sasaplus1 closure
```

とすることにより、指定したユーザ名のGistの中から`closure`にヒットするGistが検索結果に表示されます。