OmniAICreator/Qiita-1.07M huggingface dataset:
Xpra

## 概要

仮想画面を作り出し、リモートからその画面に接続。
描画命令としてではなく画像として送られてくるので表示が遅い。

## 使い方

```bash:インストール
$ sudo apt-get install xpra
```

```bash:xpraディスプレイ起動
$ xpra start :100
```

```bash:xpraに接続
$ xpra attach :100
```

```bash:xpraディスプレイ終了
$ xpra stop :100
```

## macクライアント

* https://www.xpra.org/dists/osx/x86/Xpra.dmg

![スクリーンショット 2015-03-19 19.00.31.png](https://qiita-image-store.s3.amazonaws.com/0/25728/b92acd14-0d68-3739-9e9c-d4b2c6e0161e.png)

* Xpraサーバにログインし、`DISPLAY=:100 xterm`とすると画面が表示される。

## 長所

VNCでは起動できないようなゲームもXpraなら動作する。
ただし描画が1FPSくらい
digでIPアドレスだけを出力する

digコマンドに+shortオプションを指定して正引きするとIPアドレスだけを取得できます。

```shell-session:
$ dig example.com +short
93.184.216.119
```

[Understanding the dig command](https://kb.mediatemple.net/questions/909/Understanding+the+dig+command)で知りました。

[dig(1): DNS lookup utility - Linux man page](http://linux.die.net/man/1/dig)では

> +[no]short
>   Provide a terse answer. The default is to print the answer in a verbose form.

としか書いてないです。
Rails4 ActiveSupport::TimeWithZone as_jsonの仕様変更

Rails3からRails4にアップデートする時の細かい変更ポイントです。

ActiveSupport::TimeWithZoneのas_json内で xmlschema -> xmlschema(3)に変更になっています。


```rb:time_with_zone.rb
module ActiveSupport
  class TimeWithZone
    def as_json(options = nil)
      if ActiveSupport::JSON::Encoding.use_standard_json_time_format
        xmlschema(3)
      else
        %(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)})
      end
    end
  end  
end
```

例
Rails3  2013-08-02T09:22:34Z 
Rails4  2013-08-02T09:22:34.060Z
という違いになります。

コミットログ
https://github.com/rails/rails/pull/9128
CentOS 6.4 に AWS Command Line Interface をインストールする

CentOS 6.4 に <a href="http://aws.amazon.com/cli/">AWS Command Line Interface</a> をインストールする手順

```bash:
sudo rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo yum -y install gcc python-devel python-pip
sudo pip install awscli
```
ImageRotate.c

問題はこちら
http://qiita.com/Nabetani/items/9d80de41903775296ca6

少し複雑なコードになってしまったので、解説を追加していく予定です。

```c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void solve(const int n, const char * const d, char * const r)
{
    unsigned int i, j, b=0, h=0, c=0, k=0, p=0;
    for(i=0; i<n; i++) {
        for(j=n-1; j<n; j--) {
            b  = j*n+i;
            h  = d[b>>2]-( (d[b>>2]>='a')?'a'-0xa:'0' );
            c |= ((h<<(b%4))&0x8)>>(k%4);
            k++;
            if(k%4==0 || k==n*n) {
                r[p] = c+( (c>=0xa)?'a'-0xa:'0' );
                p++;
                c=0;
            }
        }
    }
}

void test(char * const * const input)
{
    char result[32] = {0};
    solve(atoi(input[0]), input[1], result);
    printf("%s\t%s\n", result, (strcmp(input[3],result)==0) ? "ok": "*****NG*****");
}

int main()
{
    char input[] = "\
    3:5b8   3:de0\
    1:8   1:8\
    2:8   2:4\
    2:4   2:1\
    2:1   2:2\
    3:5d0   3:5d0\
    4:1234   4:0865\
    5:22a2a20   5:22a2a20\
    5:1234567   5:25b0540\
    6:123456789   6:09cc196a6\
    7:123456789abcd   7:f1a206734b258\
    7:fffffffffffff   7:ffffffffffff8\
    7:fdfbf7efdfbf0   7:ffffffffffc00\
    8:123456789abcdef1   8:f0ccaaff78665580\
    9:112233445566778899aab   9:b23da9011d22daf005d40";

    char *code = strtok(input,"\t :"), *buf[4] = {code,0,0,0};
    int i;
    for(i=1; code!=NULL; i++) {
        if(i%4==0) {
             test(buf);
        }
        buf[i%4] = code = strtok(NULL,"\t :");
    }
    return 0;
}
```
ZenCodingでHTML記述速度を上げる1

自分はコーディングが遅いので、常々少しでも早くできないものかと考えています。
その一環でZenCodingというものを見つけたので、防備録的なものを。
ZenCodingを導入した際に参考にしたサイト様を一番下に置いときます。

WinではEclipse、MacではNetBeansをいれています。
展開キーは
Win ……` Ctrl` +` E`
Mac……` comand` +` E`

（僕がMacに入れたときには何か別のコマンドと重なっていた（ように思う）、別のショートカットキーをあてました。

とりあえずテンプレート的なもの作成

```htmlFive.html
/* html:5と書いて、展開キーを押すと以下が展開される */
<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8" />
	<title>Document</title>
</head>
<body>
	
</body>
</html>
```

```linkCss.html
/* link:cssと書いて、展開キーを押すと以下が展開される */
<link rel="stylesheet" href="style.css" media="all" />
```

参考にしているサイトとちょっと出力が違う。バージョンの違い？
（この記事は基本WinのEclipseで確認してる）
→Macで確認したら、`  href="${l:style}.css`　の属性が増えてた。



```script.html
/* scriptと書いて、展開キーを押すと以下が展開される */
<script type="text/javascript" src=""></script>
```

書いてて気づいたけど、なぜかWinだと出てくれない（` <script></script>`となる）。
Macの方では動いた。
細かい挙動の違いはちょっと分からないので、保留。。。


```div.html
/* divと書いて、展開キーを押すと以下が展開される */
<div></div>
```

これだけだとインテリセンス’（タブキー）と変わらない。

```divTest.html
/* div#testと書いて、展開キーを押すと以下が展開される */
<div id="test"></div>
```

\#がid属性の指定

```divSample.html
/* div.sampleと書いて、展開キーを押すと以下が展開される */
<div class="sample"></div>
```

.がclass属性の指定

```div3.html
/* div*3と書いて、展開キーを押すと以下が展開される */
<div></div>
<div></div>
<div></div>
```
\*3で3つ並べる

```組み合わせ.html

/* div#test*3 */
<div id="test"></div>
<div id="test"></div>
<div id="test"></div>

/* div.sample*3 */
<div class="sample"></div>
<div class="sample"></div>
<div class="sample"></div>

/* div#test.sample*3 */
<div id="test" class="sample"></div>
<div id="test" class="sample"></div>
<div id="test" class="sample"></div>

```

id class 並べる数 の順に指定

 メモ

* Eclipseのショートカットキー変更
ウィンドウ→設定の「一般」のキー項目から変更可能

* NetBeansのショートカットキー変更
右上の検索フォームから「一般オプション」と検索
→オプションウィンドウの「キーマップ」タブから変更可能

* Eclipse(Win)でのHTMLコメントアウト(ZenCodingのショートカットでできなかったのでメモ）
範囲指定　`  Ctrl`+ `  Shift`+ `  /`

* NetBeans(Mac)でのHTMLコメントアウト
範囲指定　`  Command`+`  /`

*  参考サイト

//ゆるふわ☆エンジニアリング EclipseにZen Codingをインストールする 
http://www.yuhei-tsukahara.com/2012/11/eclipsezen-coding.html?spref=tw

//NetBeans 7.2 へ Zen-codingプラグインを導入する 
http://krakenbeal.blogspot.jp/2012/12/netbeans-72-zen-coding.html#.UgG51cU6GMM.twitter

//@IT
http://www.atmarkit.co.jp/fwcr/design/tool/zencoding02/02.html

//Zen-codingの基本を理解しよう 
http://dotinstall.com/lessons/basic_zencoding/5803

* 参考書籍

『HTML+CSSコーディングが10倍速くなるZen Coding 』　著こもり　まさあき 、岡部 和昌
関数名とクラス名が被っても大丈夫

ふと疑問に思ったので試してみた。

関数名とクラス名が被っても大丈夫。

```php
<?php
function zz()
{
    return "hoge";
}

class zz
{
    public static function xx()
    {
        return __METHOD__;
    }
}

var_dump(zz());
var_dump(new zz());
var_dump(zz::xx());
```

```
string(4) "hoge"
class zz#1 (0) {
}
string(6) "zz::xx"
```

やらないけど。
Javascriptでヒアドキュメント 改悪版

## 偉大なる元ネタ
[Javascriptでヒアドキュメント](http://qiita.com/_shimizu/items/837b529de9f3302e315c)

## でもこれSafariだと動かないのよね……。
よろしい、ならば嘘コーディングだ。

```js:eseheredoc.js
var css = (function(){/*
#target-red {
    background-color: #ff0000;
}
*/}).toString().match(/\/\*[\s\S]*\*\//)[0];
css = css.replace(/\/\*|\*\//g,'');
```

こんな感じで後はお好きなように。多分、もっと良い書き方があるはずですので、得意な人にお任せします。
カスタム投稿の編集権限だけつける

新規投稿はさせたくないけど、公開済みで自分がauthorになっているものは編集させたい、って時に。

管理者がひな形を作って、後はユーザに記事のメンテを任せたい、ってケースはあるのじゃないかな。ページ的なカスタム投稿と言えば良いのだろうか。edit_postsだと投稿はできないのだけど、新規作成画面を開けてしまうので、それはNG.

新規投稿ができる＝削除もできると考えて、register_post_typeでcapabilitiesを登録するときに、

```php:
$capabilities = array(
  //他の権限
 'create_posts' => 'delete_xxxs' 
); 
```

として、編集させたいユーザに'edit_xxxs'をつけて、'publish_xxxs'はつけない（当然delete_xxxsも）。こうすると、自分が編集できるものを編集出来るだけなので、新規投稿画面がメニューに出なくなった。
PythonでCSRF対策のトークン生成

PHPのCSRF対策で使う　md5( uniqid(mt_rand(),true) )　をPythonで再現を目指してみたんだけどツッコミよろしくお願いします。

```py:
import uuid
import hashlib

token = hashlib.md5( str(uuid.uuid4()) ).hexdigest()
```
ファイルパスによってインデントを変更する

***(この記事には補足があります。最後までお読みください)***

個人的に書くコードはソフトタブ(空白文字でインデント)だけど、仕事のJavaScriptのコーディングルールはハードタブ(水平タブ文字でインデント)なんだよー、仕事で書くコードは全て `hoge` が含まれるディレクトリにあるよー、な場合。

なんか適当。正規表現も `setq` する内容もフックの名前も各自よしなに。要するにモードにフックを追加するだけです。 `.emacs.d/init.el` とかにどうぞ。

```el
(add-hook
 'js-mode-hook
 (lambda ()
   (when (string-match ".*hoge.*/.*\\.js"
		               (or (buffer-file-name) ""))
     (setq indent-tabs-mode t tab-width 4))))
```

追記
----

`js2-mode` とか使ってる場合は `js2-mode-hook`、PHPなら `php-mode-hook` とか、よしなに書いてくださいね。

メジャーモードによってはフックが提供されてない場合は、[さあどうすれば良いのでせうね](http://www.gnu.org/software/emacs/manual/html_node/elisp/Mode-Hooks.html) ヾ(〃＞＜)ﾉﾞ☆

補足
----

@yasuyk@github さんのおっしゃる通り、 `.dir-locals.el` による <dfn>ディレクトリ変数</dfn> を活用するのも良い方法です。 *(僕もコメントで指摘いただくまで存じ上げませんでした…!)*

ただし、ディレクトリ変数が階層構造による「変数の制禦」を目的とするものであること、上記のコード断片はディクトリ階層ではなく *パス中に含まれる文字列* による判定を主眼としたもの *(階層に依存しない)* であることを理解の上で、目的に合致したものを活用するのが良いですね ヾ(〃＞＜)ﾉﾞ☆

 * [Directory Variables - GNU Emacs Manual](http://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html)
 * [EmacsWiki: Directory Variables](http://www.emacswiki.org/emacs/DirectoryVariables)
お手軽にsinatraをdaemonizeする

# お手軽なsinatraでお手軽なdeamonize

sinatraかわいいよsinatra。

内部で利用するような簡単なアプリとか作るのにいい感じですね。

お手軽なツールで面倒な設定とかしたくないので

```shell-session:
$ nohup ruby server.rb >> path/to/logfile 2>&1 &
```

で十分な場合も多いんじゃないでしょうか。

余談ですがsinatraはdevelopmentモードだとリモートからのアクセスを受け付けないみたいです。
公開する場合は`ruby server.rb -e production`で起動してやればOKです。
OSXでpyenvインストールメモ


環境 macosx10.8(ホストOS)

[ansible](http://apatheia.info/blog/2013/04/06/about-ansible/)を使う雰囲気になってきたのでちょっとローカルに入れるか!!と思ったので
その前にpythonのバージョン管理ができる[pyenv](https://github.com/yyuu/pyenv#homebrew-on-mac-os-x)を入れようと思った時のメモ
[rbenv](https://github.com/sstephenson/rbenv)とかと一緒でenv系のpython版ですね
※[rbenv](https://github.com/sstephenson/rbenv)がわからない方は[コチラ](http://qiita.com/ryurock/items/1cb882b48b1a827a420d)を参考にしてみてください。

## 参考にしたサイト

* [yyuu/pyenv](https://github.com/yyuu/pyenv#homebrew-on-mac-os-x)
* [plenvとpyenvに乗り換えた](http://d.hatena.ne.jp/pasela/20130219/llenv)


## 事前準備が必要なもの

* [Homebrew (パッケージ管理システム)](http://ja.wikipedia.org/wiki/Homebrew_(%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0))

## homebrewのアップデート

サクッと

```shell
brew update
brew install pyenv
```

## .bashrcもしくは.bash_profileの追加

[rbenv](https://github.com/sstephenson/rbenv)と同じですね

```shell
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile
```

## .bash_profileの反映

これだけ

```shell
source .bash_profile
```


##　確認

```shell
pyenv --help

yenv 0.4.0-20130726
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using the python-build plugin
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/yyuu/pyenv#readme
```

## インストールしてみる

下記のコマンドでインストールできるバージョン一覧が見れます

```shell
pyenv install -l
```


```shell
pyenv install 3.3.2

Downloading readline-6.2.tar.gz...
-> http://yyuu.github.io/pythons/67948acb2ca081f23359d0256e9a271c
Installing readline-6.2...
Installed readline-6.2 to /Users/ユーザー名/.pyenv/versions/3.3.2

Downloading Python-3.3.2.tgz...
-> http://yyuu.github.io/pythons/0a2ea57f6184baf45b150aee53c0c8da
Installing Python-3.3.2...
Installed Python-3.3.2 to /Users/ユーザー名/.pyenv/versions/3.3.2

Downloading setuptools-0.9.7.tar.gz...
-> https://pypi.python.org/packages/source/s/setuptools/setuptools-0.9.7.tar.gz
Installing setuptools-0.9.7...
Installed setuptools-0.9.7 to /Users/ユーザー名/.pyenv/versions/3.3.2

Downloading pip-1.4.tar.gz...
-> https://pypi.python.org/packages/source/p/pip/pip-1.4.tar.gz
Installing pip-1.4...
Installed pip-1.4 to /Users/ユーザー名/.pyenv/versions/3.3.2
```

## pythonのグローバル設定をする

デフォルトで使用するpythonのバージョンを指定しないと
macのデフォルトのpythonをみてしまうので設定しましょう

```shell
pyenv global 3.3.2
python --version
Python 3.3.2
```


まあ、基本rbenvと一緒なので
rbenv入れた人なら問題なく入れられるかと思います。
docker を利用開始するまでのメモ




## 背景
### Why?
インフラの構築作業を自働化したい
### How?
ミドルウェアのレイヤーを対象とし、Chefを利用して実装する
### What?
何度も繰り返し構築と破壊を繰り返せる開発環境を用意する



## 作業環境
| software | version |
|:--|:--|
| Mac OS X | 10.8.4 |
| zsh | 4.3.11 (i386-apple-darwin12.0) |
| git | 1.7.12.4 (Apple Git-37) |
| VirtualBox | 4.2.16-86992 |
| rbenv | 0.4.0-51-ga2adc61 |
| ruby | 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.1] |
| bundler | 1.3.5 |
| vagrant | 1.2.7 |
| docker | 0.5.3 |

| rbenv plugins | github |
|:--|:--|
| rbenv-binstubs | https://github.com/ianheggie/rbenv-binstubs.git |
| rbenv-gem-rehash | https://github.com/sstephenson/rbenv-gem-rehash.git |
| rbenv-gemset | https://github.com/jf/rbenv-gemset.git |
| ruby-build | https://github.com/sstephenson/ruby-build.git |

```zsh:.zshrc
# Source User definitions
if [ -d $HOME/.rbenv/bin ]; then
    export PATH="$HOME/.rbenv/bin:./.bundle/bin:$PATH"
    eval "$(rbenv init -)"
fi
```



## 1. VirtualBox のインストール
https://www.virtualbox.org/wiki/Downloads

上記サイトからバイナリパッケージをダウンロードして実行する

- VirtualBox platform packages
- VirtualBox xx.xx.xx Oracle VM VirtualBox Extension Pack ( xx.xx.xx はバージョン )



## 2. vagrant のインストール

```ruby:Gemfile
source "https://rubygems.org"
gem 'vagrant',      :git => 'https://github.com/mitchellh/vagrant',
                    :tag => 'v1.2.7'
```

```zsh
bundle install --path vendor/bundle --binstubs .bundle/bin
source ~/.zshrc
```


## 3. docker のインストール
https://www.docker.io/gettingstarted/#anchor-0

```zsh
git clone https://github.com/dotcloud/docker.git .docker
```


## 4. docker の起動

```zsh
cd .docker
vagrant up
vagrant ssh

vagrant@precise64:~$ which docker
/usr/bin/docker

exit
vagrant halt
```

docker を起動して、そのまま利用するのであればとりあえずここまで



## 5. Dockerfile
仮想サーバのOSなどを指定する

Todo : そのうち書く
scpでハマった件

## はじめに

scpでハマったんですが僕の環境が少し特殊なので、自分の為に忘失防止ということで書きます.

すみませんが乱文となるでしょう.

## scpとは

Secure CopyのコマンドでSSHにファイルを乗せて安全にファイルを送るコマンドです.

参考URL
[SCP - wikipedia](http://ja.wikipedia.org/wiki/Secure_copy)
[ITproコマンド集 - scp](http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230878/)

僕のよく使うコマンドの一つですが、なんと使えなくなりました.

## scpが使えなくなった原因

結論から言うと、シェルのbashが起動してないということでした.

なんだそれと.

## 解決方法

まずgoogle先生に聞いてみたところ、これじゃないかと思いました.

[いつの間にか SCP でファイル転送ができなくなってて困った](http://www.smallstyle.com/20110828.html)

[scpが出来なくて超ハマったメモ(原因は.bashrc)](http://www.akiyan.com/blog/archives/2008/02/scpbashrc.html)

[ssh authorized_keysにコマンドを指定してるときscpできない件について。](http://smokycat.info/shellscript/366)

scp の -v オプションをつけて実行したらやっぱりここで止まってました

`debug1: Sending command: scp -v filename`


ここで、自分の環境を整理します.

開発環境
__1.開発マシン → 2.ビルドサーバー(SSH接続) → 3.実行環境(ここにscpでファイルを送りたい)__

シェルは何を使っているかというと
__1.zsh → 2.bash → 3.独自のコンソール__

デフォルトシェルを bash に変更すると
__1.zsh → 2.bash → 3.bash__

となりまして、いざ scp 実行!!!

無事ファイル送れました.

いやーよかったよかった.
Rubyのバージョンによるブロックローカル変数の挙動の違い


一度ハマったのでメモ。
以下のテストスクリプトを、1.8 1.9 2.0 それぞれで実行してみる。

```ruby:test_block.rb
puts "ruby version: #{RUBY_VERSION}"

a = 1
puts "before: #{a}"

# 外側にある変数と同名のブロックローカル変数に、値を代入
lambda{|a| a = "foo"}.call(nil)

puts "after : #{a}"
```

```:1.8の実行結果
ruby version: 1.8.7
before: 1
after : foo
```

```:1.9の実行結果
ruby version: 1.9.3
before: 1
after : 1
```

```2.0の実行結果
ruby version: 2.0.0
before: 1
after : 1
```

ruby 1.8 だと、ブロックの外側の同名の変数に代入をした場合に、外側の変数も上書きされる。
rails gem meta-tagsでヘッダーをキレイに書く。

##meta-tags
railsでmetaタグをスマートに書けるgemです。
https://github.com/kpumuk/meta-tags

##how to 
erbでもコントローラーでもできますが、下記の要に書くパラメータをセットします。
```erb: xxxxs/xxxx.html.erb
set_meta_tags :title => "作品一覧" ,
                 :keywords => ["aaa" , "bbbb"]
```
※注意: set_meta_tagsは上書きでは無いので、再度値をセットしても反映されません。
そのかわり、display_meta_tagsの時にデフォルト引数を指定することができます。


```erb:application.html.erb
<head>
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0-rc2/css/bootstrap.min.css" rel="stylesheet">
  <%= csrf_meta_tags %>
 <%= display_meta_tags({
        :title => "" ,
        :site => t('site') ,
        :description => 'welcome todescpriton',
        :keywords => 'ミニ四駆ギャラリー, ギャラリー, ミニ四駆, mini4wd',
        :open_graph => {
           :title => 'mini4wg -ミニ四駆ギャラリー',
           :url   => root_url ,
        },
       :twitter => {
            :card => 'product',
            :site => '@mini4wg'
        } ,
       :viewport => "width=device-width, initial-scale=1.0" ,
       :reverse => true
    })
  %>
  <%= render :partial => "components/analytics" %>
</head>
```

###備考
公式サイトのデフォルトパラメータの項にはapplication_helperに書いてデフォルト引数を設定しましょうとなっています。記述箇所がそこまで長くならないので僕はどっちでも良いと思います。
指定された日の曜日を取得する

指定された日の曜日を取得したい場合、 gnu 版の *date* (1) がインストールされている場合は以下のコマンドで取得可能です(0 が日曜日を示す)。

```shell
$ date -d YYYYMMDD '+%w'
0
```

gnu 版の *date* (1) がインストールされていない場合でも、 FreeBSD 版の *date* (1) は独自拡張されているので以下のコマンドで取得可能です(0 が日曜日を示す)。

```shell
$ date -j YYYYMMDDHHMM '+%w'
0
```

但しどちらも **posix** に準拠していない独自拡張な機能を利用しているため環境依存となってしまうので、 環境に依存しない方法での解決方法を考えてみました。

日付から曜日を取得するためには **ツェラーの公式** という計算式があるので、  **posix** に準拠したシェルの機能だけでその計算式を実装してみます。

```shell
$ y=YYYY; m=MM; d=DD
$ test $m -lt 3 && y=$(($y - 1)) && m=$(($m + 12))
$ echo $(($(($y + $y/4 - $y/100 + $y/400 + $(($((13 * $m + 8))/5)) + $d)) % 7))
```

年と月の値によって調整が必要なのでワンライナーにはならないのが残念ですが、基本的には単純な四則演算なのでシェルの機能のみで実装が可能です。

これで環境に依存せずに任意の日付の曜日が簡単に取得できます。
shift, @_, Perl Begginer

sometimes I forget these differences. 

```pl:
sub hoge {
  my $self = @_; 
```

```pl:
sub hoge {
  my($self) = @_;
```

```pl:
sub hoge {
  my ($self) = @_;
```

First of all, show the result.

```pl:
  my $self = @_;
  warn "aaaaaaaaaaaaaaaaaaaaaaa";
  warn Dumper $self;
  warn "bbbbbbbbbbbbbbbbbbbbbbb";
  my($self) = @_;
  warn Dumper $self;
  warn "ccccccccccccccccccccccc";
  my ($self) = @_;
  warn Dumper $self;
```

I know the result, but I could not understand the reason.

```pl:
my $self = @_;
# This means Receiving Value of Array by Scalar. $self is Scalar. @_ is Array.
# $self receives the number of Elements of Array.
```

```pl:
my($self) = @_;
# This means Receiving Value of Array by Array. ($self) is array.
# So $self receives only the 1st value of @_ as Array. 
```

↑↑ Then I think you should use **my $self = shift**.

```pl:
my ($self) = @_;
# same to above.
```
select option 

Just easy memos for coding simple html

## Automatic Submit as Choosing item in pulldown menu

```html:
<form action="/hoge/fuga" method="get">
  <select name="search" onChange="this.form.submit()">
    <option value="title" selected disabled>Choose item you like</option>
    [% FOREACH key IN hoge%]
      <option value="[% key.id %]">[% key.id %] : [% key.name %]</option>
  </select>
</form>
```

cf )normal one

```html:
<form action="hoge/fuga" method="get">
  <input type="hidden" name="hoge" value="[% hoge %]">
    <select name="id">
      <option value="title" selected disabled>Choose item you like</option>
      <option value="0" name="title0">fuga0</option>
      <option value="1" name="title1">fuga1</option>
    </select>
    <input type="submit" value="view">
</form>
```

## Changing img file with mouseover and mouseout

```html:
<img alt="myLoveImgs" height="80px" width="240px" src="baseImageUrl" onmouseover="this.src='mouseonverImgUrl'" onmouseout="this.src='mouseoutImgUrl'" />
```
Gitフックを使っておかしいRubyコードをコミットできないようにする

Rubyコードを[Rubocop](https://github.com/bbatsov/rubocop)を使って静的に解析していますが、それを自動化するべくGitフックにしました。

下記の内容の.git/hooks/pre-commitファイルを作ります。

```bash:.git/hooks/pre-commit
#!/bin/sh
git diff --cached --name-only --diff-filter=AM | grep '\.rb$' | xargs rubocop
exit $?
```

`grep '\.rb$'` で拡張子が `rb` であるファイル、という意味なので、必要に応じてこの部分を変更してください。例えば `app` ディレクトリ以下のみにしたければ `^app/.*\.rb$` にします。
忘れずに実行権限をつけます。

```bash
chmod +x .git/hooks/pre-commit
```

すると `git-commit` 時に自動的に追加・変更されたRubyファイルに対してRubocopが走るようになります。Rubocopに通らないとコミットできません :trollface: 

## 背景

[Ruby - Rubocopをsyntasticを使ってVimから自動実行する - Qiita](http://qiita.com/yuku_t/items/0ac33cea18e10f14e185) でVimからRubocopを使うようにしたのはいいけど、保存の度に一瞬Vimが止まってしまうのが非常にストレスフルだったので、Gitフックに移動させたのでした。
capistranoで、デプロイ環境毎にGemfileを変更したい時の設定

capistrano-extなどで、複数環境でデプロイをしているときに、環境毎にGemfileを切り替えようとして、はまったのでメモ

```ruby:環境用デプロイファイル
#環境変数設定
set :default_environment, {
	  'BUNDLE_GEMFILE' => "Other_Gemfile",
}

# require 'bundler/capistrano'用設定
set :bundle_gemfile, "Other_Gemfile"
set :bundle_flags, "--quiet"
```

bundler/capistranoでGemfileを指定して実行される場合と、環境変数でよしなに実行される場合の、それぞれに、Gemfileを指定してあげればなんとかなった。
scss-modeでインデント幅をスペース2個(タブ無し)にする

scssのインデントをタブを使わずに、スペース2個にしたい。

scss-modeのインストールはこちらを参照。 https://github.com/antonj/scss-mode

こんな風に書いたらいけました。

```
(defun scss-custom ()
  (setq indent-tabs-mode nil)
  (setq css-indent-offset 2)
  )

(add-hook 'scss-mode-hook
  '(lambda() (scss-custom)))
```
BubbleWrapのRSSParserの接続エラーをキャッチする

BubbleWrapのRSSParserは内部的にHTTPリクエストを自分で送ってパースしてくれるが、
そのHTTPリクエストで失敗した時の接続エラーをキャッチする方法がマニュアルに全然書いていない。

ソース読むと、 ```when_parser_errors``` が接続エラー時のdelegateメソッドであることがわかる。

https://github.com/rubymotion/BubbleWrap/pull/99#issuecomment-22923877 に

マニュアルに書いてくれるように一応お願いしてみた。
【PHP】週始まりが月曜日のFrom、Toの求め方

```php
<?php
$today = $_SERVER['REQUEST_TIME'];
$w     = (date('w', $today) + 6) % 7;
$from  = date('Y-m-d', $today - 86400 * $w);
$to    = date('Y-m-d', $today + 86400 * (6 - $w));
```
Rails + HAML: 特定の間隔でネストしたタグ構造を作る

## 実現したいこと
Rails + HAMLでこんな構造のタグを作りたい (特定の間隔でネストさせる)

````html
<ul>
  <li>山田</li>
  <li>田中</li>
</ul>

<ul>
  <li>鈴木</li>
  <li>佐藤</li>
</ul>

<ul>
  <li>高橋</li>
  <li>山本</li>
</ul>
````

## こうやってもダメ
直感的にこんなコードを書いてみましたが・・・・

````haml
- @users.each_with_index do |user, i|
  - if i % 2 == 0
    %ul
  %li= user.name
````

あれっ？ネストしなかった。。。orz

````html
<ul></ul>
<li>山田</li>
<li>田中</li>

<ul></ul>
<li>鈴木</li>
<li>佐藤</li>

<ul></ul>
<li>高橋</li>
<li>山本</li>
````

## each_sliceメソッドを使えばOK
こんなときはEnumerableモジュールのeach_sliceメソッドを使いましょう。

````haml
- @users.each_slice(2) do |users|
  %ul
    - users.each do |user|
      %li= user.name
````

こうすれば特定の間隔でネストするタグ構造を作れます。
めでたしめでたし。

````html
<ul>
  <li>山田</li>
  <li>田中</li>
</ul>

<ul>
  <li>鈴木</li>
  <li>佐藤</li>
</ul>

<ul>
  <li>高橋</li>
  <li>山本</li>
</ul>
````
続・最速podspec自炊研究会

http://qiita.com/laiso/items/f7509a953b08f7cb8469 から

今は以下のようにできるので楽です。

https://github.com/CocoaPods/CocoaPods/wiki/Dependency-declaration-options

```rb:Podfile
pod 'PonyDebugger', :podspec => 'config/pods/PonyDebugger.podspec'
pod 'libPusher', :path => '~/path/libPusher'
```

開発中自作モジュール、Specsリポジトリにないもの。デバッグなどに使います。

またlintがかなり精密に検査してくれるようになりました。git submoduleの依存ソースを実際に取得してテンポラリなプロジェクト作ってxcodebuildでビルドできるかどうかまで検査してくれる。

```
pod spec lint --verbose *.podspec
```
ubuntu 12.04 + rbenv ruby 1.9.3でbundle installしようとするとCould not load OpenSSL. が出てしまうので対処

rbenv + ruby-buildを利用して`rbenv install 1.9.3-p392`したは良い物の`bundle install`実行時に

```shell-session:
Could not load OpenSSL.
You must recompile Ruby with OpenSSL support or change the sources in your Gemfile from 'https' to 'http'.
Instructions for compiling with OpenSSL using RVM are available at rvm.io/packages/openssl.
```

と言われてしまいました。

大抵

```shell-session:
sudo apt-get install zlib1g-dev libssl-dev
```

の実行で解決しているみたいですが、自分の場合は

```shell-session:
RUBY_CONFIGURE_OPTS="--with-openssl-dir=/usr/bin/" rbenv install 1.9.3-p392
```

とopenssl対応の形でbuildしないとダメだったみたいです。
UIWebViewにBASIC認証サポート用のUIを追加する

UIWebViewは標準ではBASIC認証に対応していませんが、URLProtocolの仕組みを使うことで認証が要求されたタイミングで任意の処理フックできます。

そこで、モバイルSafariと同様にUIAlertViewでユーザー名・パスワードを入力するダイアログをポップアップ表示するライブラリを作成しました。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/28357/01453073-0f26-e013-444d-e3e55525c25c.png)![2.png](https://qiita-image-store.s3.amazonaws.com/0/28357/a6b2d0e2-4382-7500-07e6-d6bbf0ef20dd.png)

ソースコードはMITライセンスで公開しています
https://github.com/synapsesoft/UIWebViewAuthentication

# インストール

Cocoapodsで行います。

```rb:Podfile
platform :ios, '5.0'

pod 'UIWebViewAuthentication', :podspec => 'https://raw.github.com/synapsesoft/UIWebViewAuthentication/master/UIWebViewAuthentication.podspec'
```

# 使い方

本ライブラリはUIWebViewを継承したUWAWebViewクラスを提供します。
典型的な使い方としては、ViewControllerに追加するUIWebViewをUWAWebViewに置き換えます。

```objc:RootViewController.m
// #import <UIWebViewAuthentication/UWAWebView.h>
- (void)viewDidLoad
{
  [super viewDidLoad];
  
  self.webView = [[UWAWebView alloc] initWithFrame:self.view.frame];
  [self.view addSubview:self.webView];
  
  NSString* url = @"http://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx";
  NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
  [self.webView loadRequest:request];
}
```

一度入力したパスワードはiOSが管理の認証情報に登録されます。これを一時的に保存しないように変更する場合 authentication.persistence プロパティへ NSURLCredentialPersistenceForSessionを設定します。

```objc:RootViewController.m
self.webView.authentication.persistence = NSURLCredentialPersistenceForSession;
```

アラート内のメッセージについてはiOSアプリの国際化の機構を使って変更できます。Example アプリソース https://github.com/synapsesoft/UIWebViewAuthentication/tree/master/Example などを参照してください。

```:Localizable.strings
"Authentication Required" = "認証が必要です";
"Cancel" = "キャンセル";
"Log In" = "ログイン";
```

本ライブラリは株式会社シナプスソフトの実プロジェクトのアプリで使用していますが、現実の様々なパターンのアプリに組込むテストは不十分だと思われます。使い方や挙動について質問ありましたらお気軽に https://github.com/synapsesoft/UIWebViewAuthentication/issues へ投稿ください。
npm install socket.ioでエラー

```
make: Entering directory `/var/www/node/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
make: Leaving directory `/var/www/node/node_modules/socket.io/node_modules/socket.io-client/node_modules/ws/build'
npm http 200 https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz
npm ERR! cb() never called!
npm ERR! not ok code 0
```


こんなエラーが出た

原因はよくわからないけど以下のコマンドでキャッシュ消したらうまく行った。

```
$ npm cache clean
```
Install R3.0.1 on Ubuntu 12.04LTS

リモートサーバで勝手に解析走らせたりしたいのでRを入れました。
RからMySQLにアクセスしたりMongoにアクセスしたりしたいので、その辺りも含めてメモ。

## Installing R
ソース落としたりするの面倒なのでapt-get使います。
最新のが使いたいので、rdevを追加します。

```shell-session:
# add source to apt.
sudo vim /etc/apt/sources.list
# add line below
+ deb http://cran.rstudio.com/bin/linux/ubuntu precise/
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
sudo add-apt-repository ppa:marutter/rdev
sudo apt-get update
sudo apt-get upgrade
# install!
sudo apt-get install r-base
```

## Install packages in usr/local/lib/R/site-library
標準のpackageインストール先には `usr/local/lib/R/site-library` が指定されている為、普通にR起動して `install.packages('something')`しようとすると別の場所に保存しても良い？と聞かれます。packageが共有じゃなくなるっぽかったので、保存出来る設定をしました。

```shell-session:
# to install packages in share directory.
sudo vim /etc/group
- staff:x:50:
+ staff:x:50:ubuntu # ubuntu will be your user name

sudo vim /etc/group
- staff:x:50:
+ staff:x:50:ubuntu
```

## Install RMySQL
RMySQL packageを導入前に

```shell-session:
sudo apt-get install libmysqld-dev
```

しておきましょう。

## Install RMongo
RMongoの利用にはrJavaが必要になります。
色々やり方があるみたいですが、一番簡単なので。

```shell-session:
sudo apt-get install r-cran-rjava
sudo R CMD javareconf
```

後はRで

```r:
install.packages('RMySQL')
install.packages('RMongo')
```

すればOKです。 Yay!

# 追記

## Install Devtools
githubからパッケージインストールする時とか必須のdevtoolですが、linux系だと大抵RCurlで怒られます。

```shell-session:
install.packages('devtools')
...
* installing *source* package ‘RCurl’ ...
** package ‘RCurl’ successfully unpacked and MD5 sums checked
checking for curl-config... no
Cannot find curl-config
ERROR: configuration failed for package ‘RCurl’
* removing ‘/usr/local/lib/R/site-library/RCurl’
ERROR: dependency ‘RCurl’ is not available for package ‘httr’
* removing ‘/usr/local/lib/R/site-library/httr’
ERROR: dependencies ‘httr’, ‘RCurl’ are not available for package ‘devtools’
* removing ‘/usr/local/lib/R/site-library/devtools’

# RCurlを入れようとすると…
install.packages('RCurl')
...
* installing *source* package ‘RCurl’ ...
** package ‘RCurl’ successfully unpacked and MD5 sums checked
checking for curl-config... no
Cannot find curl-config
ERROR: configuration failed for package ‘RCurl’
```

RCurlの導入前にubuntuではcurl packageの導入が必要です。
[“curl” source package in Precise](https://launchpad.net/ubuntu/precise/+source/curl)
多分どれでも行けると思いますが僕は`libcurl4-openssl-dev`にしました。

```shell-session:
sudo apt-get install libcurl4-openssl-dev
```
GAE で appcfg rollback

GAE へのデプロイを途中で中断してしまったとき、もう一度やり直そうとすると以下のようなエラーが出ました。

```
Unable to update app: Error posting to URL: https://appengine.google.com/api/appversion/create?app_id=rpubsrecent&version=7&
409 Conflict
Another transaction by user hoxo.smile is already in progress for app: s~rpubsrecent, version: 7. That user can undo the transaction with "appcfg rollback".
```

中断したプロセスと新しいプロセスでコンフリクトが起こっているようです。
これを修復するためには `appcfg rollback` を行えと書いてあります。

調べてみると、下記のようなサイトを発見。
http://stackoverflow.com/questions/11675632/how-do-i-execute-the-command-appcfg-rollback

`war` フォルダを指定してこのコマンドを打つだけのようですね。

```
C:\eclipseJuno\plugins\com.google.appengine.eclipse.sdkbundle_1.8.3\appengine-java-sdk-1.8.3\bin>appcfg rollback "C:\ほげほげ\war"
```

途中でメールアドレスとパスワードを聞かれるので入力してください。

```
Beginning interaction for module default...
0% Rolling back the update.
Email: hogehoge@gmail.com
Password for hogehoge@gmail.com:
Success.
Cleaning up temporary files for module default...
```

うまくいきました。
Railsはassetsに注意しろ

productionで運用するときに注意すべきこと。

##application.cssとapplication.jsの動作
アプリケーションで利用するcssとjsをassets:precompileで一つのファイルにまとめてます。その上でlayout/application.html.hamlでincludeして、アプリケーションで利用します。

##cssとjsの設計に注意
デザイナーさんが画面ごとにCSSやJSを別ファイルにして、名前空間が被ってしまうとapplication.cssやapplication.jsにまとめることができません。そうすると、compileの対象ファイルとならずにproductionだと404になってしまいます。


##config.assets.precompileに記述
compileの対象とするために、config.assets.precompileに記述をします。

##assetsの設定はこうしろ

* config.serve_static_assets = false

これ超重要。nginxで見つからないとunicornにいちいち問い合わせがいくのでサーバーの負荷が劇的にあがってしまう。

* config.assets.compress = true

下りgzにするため必須

* config.assets.compile = false

trueにするとサーバーで動的にcompileするためにfalseにしないとだめ

* config.assets.digest = false

digest付与はお好きに。私は好きじゃないのでオフにしています。

* config.assets.debug = false

debug=trueにすると、application.css/jsと個別のファイルの二重読み込みがされます。

##Railsの本が出ます！
[RailsとiPhoneではじめるアプリケーション開発 ](http://www.amazon.co.jp/dp/4844334476)
![画像](http://ecx.images-amazon.com/images/I/51B%2BC7K3RRL._SL500_AA300_.jpg)
グローバル変数を作らずにファイル間で値をやり取りする

requireかincludeを使う。最近？よく見かけるような気がする書き方。

```php:config.php
<?php
/**
 * あちこちで共有される設定値
 */
return [
  'hoge' => 'fuga',
];
```

```php:receiver.php
<?php
//値を使いたい場合はrequire式を埋め込む
var_dump(require 'config.php');
```

グローバル変数とは違って、こちらは受け渡されるものが値なので書き換えの心配もなく、安心して使いやすい。

PHPの場合、式では書けず文にせざるを得ない構文が多いので、上記のままだとうまく書けないケースがあるかもしれない。その場合はJavaScript風に即時関数を組み合わせるとよい。

```php:config.php
<?php
/**
 *  あちこちで共有される設定値
 */
return call_user_func(function(){
  //この中で変数初期化を色々やってもグローバル変数は汚れない
  $date = new DateTime;
  $date->modify('+1 day');

  return [ 'moge' => $date ];
});
```

注意点として、このパターンではrequire_once、include_onceが使えないことがあげられる。
_once系は初回読み込みだけは値を返すが、２回目以降はtrueを返すようになってしまう。

```php:期待通りに動かないパターン
<?php
var_dump(require_once 'config.php'); //['hoge'=>'fuga']
var_dump(require_once 'config.php'); //true
```

requireを使うようにすればいいのだけれど、毎回変数を構築するので、巨大なオブジェクトを作るようなコードだとコストが気になるところ。

初期化を一回に限定する方法としては、あまりカッコいいものが思いつかない。
適当な一時関数用の名前空間を作って、static変数を活用する感じだろうか。

```php:config.php
<?php
namespace My\Temp;

if (!function_exists('My\Temp\getConfig')) {
  function getConfig() {
    static $config;
    if (!$config) {
      $config = ['hoge' => 'fuga'];
    }

    return $config;
  }
}

return getConfig();
```
Macで仮想PC（Windows）経由でVPN接続（多段SSH、リバースプロキシ）


なかなか変則的なパターンですが、仮想で立てたWindowsのVPN経由で、ホストのMacからVPN越しのサーバーにSSHアクセスしたくて、いろいろ試しながら構築したので、そのメモです。下記のような経路です。

Mac → 仮想Windows（VMWare） → VPN → 接続したいサーバー

SSH接続はもちろん、WindowsのIISでリバースプロキシを使用してWebもVPN経由でアクセスできるようにしました

## 前準備

#### VPN接続する

なにはともあれ、仮想WindowsでVPN接続をしてください

#### WindowsにSSHサーバーを立てる（cygwin）

Windows経由でSSH接続するには、Windowsを踏み台にするためにSSHサーバーを立てる必要があります。今回はcygwinを使いました。

このあたりを参考にさせていただきました。
http://www.uhero.info/techinfo/CygwinSSH_setup/

インストール時に、nc（netcat）をインストールし忘れないようにしてください、多段SSHで使用します。

## 多段SSH

とりあえず、cygwinでsshdが起動したら、Macから接続してみます。
下記のようなネットワークと思ってください。

| マシン | IP |
|:---|---:|
|Mac |  192.168.1.2|
|Win | 192.168.1.3|
|Win（VPN割当IP）|192.168.2.1|
|接続したいサーバー|192.168.2.2|

まずはWindowsにSSH経由でつながるか試す

```Mac
$ ssh 192.168.1.3
接続成功したらOK
```

成功したら、そっから接続したいサーバーにつながるか試します

```Windows
$ ssh 192.168.2.2
接続成功したらOK
```

ここまできたらあとは多段SSHの設定

```Mac
$ vi ~/.ssh/config
```

```~/.ssh/config
Host 192.168.2.2
  HostName 192.168.2.2
  ProxyCommand ssh 192.168.1.3 nc %h %p
```

これで、192.168.2.2に接続しようとすると、192.168.1.3経由になるはずです

```
$ ssh 192.168.2.2
接続成功したらOK
```

簡単！めっちゃはかどります！


## WebもVPN経由でアクセスするようにしたい場合

これまた変速ですが、接続したいサーバーのWebサーバーがIP制限かけてるなんかして、WebアクセスもVPN経由にしたいときがあります。これはいろいろ考えた結果、WindowsのIISのリバースプロキシでやりました。下図のようなフローです

Mac（Webアクセス） → Windows（IIS リバースプロキシ） → 接続したいサーバー

#### IISをインストール

IISはWindowsに最初から入ってはいるのですが、有効化する必要があります。

手順を全部記載するのは大変なので、このへん参考になります！
http://awoni.net/personal-site/iis

IISがインストールできたら、あとはリバースプロキシを入れます

これまたこのへんが参考になります
http://codezine.jp/article/detail/7018

例えばgoogle.co.jpへの接続をリバースプロキシ経由でしたい場合は、

|マッチするパターン|URL書き換え|
|:---|---:|
|^(https?)://google.co.jp|https://google.co.jp/{R:1}|

とかしておきます
そして、/etc/hostsを書き換えて、google.co.jpへのアクセスをWindowsを経由するようにします

```Mac
$ sudo vi /etc/hosts
```

``` /etc/hosts
192.168.1.3	google.co.jp
```

これで、ブラウザからgoogle.co.jpを入力したときに、WindowsはIISのリバースプロキシの設定に従って、裏でgoogle.co.jpのHTMLを取得してきて、Macに返してくれます。Googleのページが表示されれば成功です！

#### httpsが接続できないときは・・・

これ、すごいレアですが、接続したいサーバーがhttpsを提供していて、しかもこのサーバー証明書がオレオレ証明書だったとき、リバースプロキシは502を返したりします（リバースプロキシの先が信頼できないので、エラーを返してしまいます）
そんな時は、そのオレオレ証明書をダウンロードして、Windowsにルート証明書（サードパーティールート証明書）としてインストールしておきましょう。そうすれば、きっとうまくいきます

※今回の僕のケースでは自分で用意したサーバーかつ自分で用意したオレオレ証明書だったのでルート証明書に入れていますが、オレオレ証明書をルート証明書としてインストールすることは推奨しません

参考
http://www.jcsinc.co.jp/support/xp_root.html

#### hostsをいちいちいじるなんて嫌だ！というときは

おいおい、hostsいじるなんて面倒だよ・・・。という場合は（僕のことですが）
Macだとhostsを切り替えるのに便利なGas Maskという便利ツールがあるので、こちらを使っています。

参考サイト
http://www.moongift.jp/2010/11/2010111012/
【Unity】iTweenでハマったことメモ

###MoveBy関数には「islocal」パラメータがない
MoveByでislocalパラメータを追加してもエラーにならないため要注意!!!
ちなみにMoveToやMoveFromはありました。

###アニメーションが終わったら呼ばれる関数(コールバック関数)にはターゲットが必要
たとえば、iTweenの移動処理が終わってゲームオブジェクトを削除したい場合は
oncompleteを保有しているゲームオブジェクトを明記したほうがいい

```csharp:itween.cs
void OnTriggerStay(Collider other) {
    ins = Instantiate(PlusMoneyPrefab) as GameObject;
			
    Vector3 startPosition = new Vector3(startX, startY, -1);
    ins.transform.parent = Respawn.transform;
    ins.transform.localPosition = startPosition;
    ins.transform.localScale = new Vector3(50, 50, 0);
			
    Hashtable parameters = new Hashtable();
    parameters.Add("y", startY + 80);
    parameters.Add("islocal", true);
    parameters.Add("easeType", "easeInOutExpo");
    parameters.Add("time", 2);
    parameters.Add("oncomplete", "CompleteHandler");
    parameters.Add("oncompletetarget", gameObject);

    iTween.MoveTo(ins, parameters);
}

void CompleteHandler() {
    Destroy (ins);
}
```
javascriptでメソッドチェーンをしたい

javascriptはrubyやscalaと比べて下記の様な残念な点がある ( あくまで私個人の意見です )。

* 便利なメソッドが少ない ( permutationsやuniqueなど )
* メソッドチェーンを使えない

そこで、下記の様なメソッドを作ってみた。

```js
// utility.js
/**
 * prototypeオブジェクトにメソッドを追加
 * @param name 追加するメソッド名
 * @parame func 追加するメソッドの処理
*/
Function.prototype.method = function(name, func) {
    if(!this.prototype[name]) {
        this.prototype[name] = func;
        return this;
    }
};

/**
 * 特定の要素のみ残した配列を作成
 * @param condition 残す要素の条件
*/
Array.method('filter', function(condition) {
    var ret = [];
    for(var i = 0; i < this.length; ++i) {
        if (condition(this[i])) {
            ret.push(this[i]);
        }
    }
    return ret;
});

/**
 * 配列の各要素に指定した処理を実行
 * @param func 配列の各要素に実行する処理
*/
Array.method('foreach', function(func) {
    for(var i = 0; i < this.length; ++i) {
        func(this[i]);
    }
});

/**
 * 配列の各要素に指定した処理を実行し新たな配列を作成
 * @param func 配列の各要素に実行する処理
*/
Array.method('map', function(func) {
    var i = 0;
    var ret = [];
    while(i < this.length) {
        ret.push(func(i));
        i += 1;
    }
    return ret;
});

/**
 * 配列の各要素の合計値を計算
 * @param initialValue 初期値
*/
Array.method('sum', function(initialValue) {
    var sum = initialValue;
    for(var i = 0; i < this.length; ++i) {
        sum += this[i];
    }
    return sum;
});

/**
 * 順列を計算
 * @param src 順列を生成する配列 [1,2,3]など
 * @param size 順列のサイズ
*/
function permutation(src, size) {
    if(src.length < size) {
        return;
    }
    var ret = [];
    if(size === 1) {
        for (var i = 0; i < src.length; ++i) {
            ret[i] = [src[i]];
        }
        return ret;
    }
    for(var i = 0; i < src.length; ++i) {
        var parts = src.slice(0);
        parts.splice(i, 1)[0];
        var s = permutation(parts, size - 1);
        for (var j = 0; j < s.length; ++j) {
            ret.push([src[i]].concat(s[j]).join(''));
        }
    }
    return ret;
}
```

以下、使い方のサンプル。

```js
permutation([1, 2, 3], 3).foreach(function(arg) { console.log(arg); }); // => 123 132 213 231 312 321

[1, 2, 3].map(function(arg) { return arg * 2; }).foreach(function(arg) { console.log(arg); }); // => 2 4 6

[1, ,2, 3].filter(function(arg) { return 2 <= arg; }).foreach(function(arg) { console.log(arg); }); // => 2, 3

console.log([1, 2, 3].sum(0)); // => 6
```

他にも追加したいメソッドはあるが、それはまた後日。
psql で新しいデータベースを作る時にとりあえず接続するDB

何でそんな仕様になってるかはよくわかりませんが、psql コマンドでPostgreSQLを使う時は必ず何かデータベースに接続しないといけません。 **新しいデータベースを作りたいだけなのに何故か別のデータベースにログインしないとダメなんです。** 頭の良い人の考えることはよくわからん。

## postgres ってデータベースが始めっからあるのでそれに繋ぐ

なので新しいデータベースを作りたいだけの時はデフォルトで作成される postgres データベースに繋ぐそうです。 (バッドノウハウじゃないですかこれ？)

> CREATE DATABASEコマンドを実行するためには、データベースサーバに接続している必要があります。 そうすると、あるサイトの最初のデータベースはどのようにして作成するのかという疑問が出てきます。 最初のデータベースはinitdbコマンドでデータ格納領域が初期化される（項17.2を参照してください。）時、必ず作成されます。 このデータベースはpostgresと呼ばれます。 したがって、最初の"通常の"データベースを作成するにはpostgresに接続してください。

http://www.postgresql.jp/document/9.2/html/manage-ag-createdb.html
ArtRage4 用の Custom Sizes を生成


ArtRage は、初期状態だと新規作成時に A4 や B5 といったサイズが用意されていません。
もっとも、カスタムサイズとして追加することが可能なので、それ自体はたいした問題ではないのですが、ひとつひとつ追加するのがちょっと手間でしたので、試しに自動生成するスクリプトを書いてみました。（動作は、 ArtRage4(4.0.4) で確認しました。）

使い方はこんな感じです。

```bash
$ python artrage_papersize.py A4 A5 B5 --dpi 300
```

上記の例では、

* A4 Land.spr … A4横 300dpi
* A4 Port.spr … A4縦 300dpi
* A5 Land.spr … A5横 300dpi
* A5 Port.spr … A5縦 300dpi
* B5 Land.spr … B5横 300dpi
* B5 Port.spr … B5縦 300dpi

というファイルがカレントフォルダに生成されます。

生成されたファイルは、必要に応じて ArtRage の Custom Sizes に保存してください。

```python:artrage_paparsize.py
#!/usr/bin/env  python
# -*- coding: utf-8 -*-
#
# ------------------------------------------------------------------ import(s)
import  sys
import  struct
import  argparse



# ------------------------------------------------------------------- param(s)
ARTRAGE_HEAD  = u"ARSizePresetFileVersion-1\r\n"
PAPER_SIZE    = {
  "A" : { "X" :  841, "Y" : 1189 },
  "B" : { "X" : 1030, "Y" : 1456 },
}
MM_INCH       = 0.03937



# ---------------------------------------------------------------- function(s)

# ============================================================================
##
#
def calc_size( fX, fY ):

  return( fY / 2, fX )



# ============================================================================
##
#
def export_file( strFilename, fX, fY, nDPI ):

  with open( strFilename, "wb" ) as hFile:
    hFile.write( ARTRAGE_HEAD.encode( "utf-16-le" ) )
    hFile.write( struct.pack( "BBBBIIf", 0x01, 0x34, 0x00, 0xFF, 4, 0,   fX ) )
    hFile.write( struct.pack( "BBBBIIf", 0x02, 0x34, 0x00, 0xFF, 4, 0,   fY ) )
    hFile.write( struct.pack( "BBBBIIf", 0x01, 0x31, 0x00, 0xFF, 4, 0, nDPI ) )
    hFile.write( struct.pack( "BBBBIII", 0x00, 0x34, 0x00, 0xFF, 4, 0,    0 ) )
    hFile.close()



# ============================================================================
##
#
def main():

  oCParser  = argparse.ArgumentParser( description = "ArtRage Paper Generator" )
  oCParser.add_argument(
    "paper",
    help  = "Set paper (ex: A4, B5)",
    nargs = "+"
  )
  oCParser.add_argument(
    "-d", "--dpi",
    help    = "Set dpi",
    default = 300
  )

  oCParams  = oCParser.parse_args( sys.argv[ 1: ] )


  for strPaper in oCParams.paper:

    if( len( strPaper ) != 2 ):
      continue
    if( strPaper[ 0 ].upper() not in ( "A", "B" ) ):
      continue

    try:
      strP  = strPaper[ 0 ].upper()
      nSize = int( strPaper[ 1 ] )
      nDPI  = oCParams.dpi
    except:
      continue


    fX  = PAPER_SIZE[ strP ][ "X" ] * nDPI * MM_INCH
    fY  = PAPER_SIZE[ strP ][ "Y" ] * nDPI * MM_INCH

    for nSplitCount in range( nSize ):
      fX, fY  = calc_size( fX, fY )

    strFilenameP = "%s%d Port.spr"  % ( strP, nSize, )
    strFilenameL = "%s%d Land.spr" % ( strP, nSize, )
    export_file( strFilenameP, fX, fY, nDPI )
    export_file( strFilenameL, fY, fX, nDPI )



if( __name__ == "__main__" ):
  main()



# ---------------------------------------------------------------------- [EOF]
```
MacでElasitcSearchことはじめ


※ElasticSearchはJava製なので、あらかじめJavaをインストールする必要があります。

# インストール

```
brew install elasticsearch
```

# 起動

```
elasticsearch -f

```
```bash:起動ログ
[2013-09-08 17:40:16,969][INFO ][node                     ] [Trapper] version[0.90.3], pid[32210], build[5c38d60/2013-08-06T13:18:31Z]
[2013-09-08 17:40:16,970][INFO ][node                     ] [Trapper] initializing ...
[2013-09-08 17:40:16,984][INFO ][plugins                  ] [Trapper] loaded [analysis-kuromoji], sites []
[2013-09-08 17:40:19,777][INFO ][node                     ] [Trapper] initialized
[2013-09-08 17:40:19,778][INFO ][node                     ] [Trapper] starting ...
[2013-09-08 17:40:19,942][INFO ][transport                ] [Trapper] bound_address {inet[/127.0.0.1:9302]}, publish_address {inet[/127.0.0.1:9302]}
[2013-09-08 17:40:23,087][INFO ][cluster.service          ] [Trapper] new_master [Trapper][d7aP7UwWRQi5Ml2mxJJHhQ][inet[/127.0.0.1:9302]], reason: zen-disco-join (elected_as_master)
[2013-09-08 17:40:23,125][INFO ][discovery                ] [Trapper] elasticsearch_yabuki-ryosuke/d7aP7UwWRQi5Ml2mxJJHhQ
[2013-09-08 17:40:23,141][INFO ][http                     ] [Trapper] bound_address {inet[/127.0.0.1:9202]}, publish_address {inet[/127.0.0.1:9202]}
[2013-09-08 17:40:23,141][INFO ][node                     ] [Trapper] started
[2013-09-08 17:40:23,165][INFO ][gateway                  ] [Trapper] recovered [0] indices into cluster_state
```

このようなメッセージがでればOK

# アクセスしてみる

```
[2013-09-08 17:40:23,141][INFO ][http                     ] [Trapper] bound_address {inet[/127.0.0.1:9202]}, publish_address {inet[/127.0.0.1:9202]}
```
ここにあるように `127.0.0.1:9202` にアクセスしてみましょう。
まちがって transportの`27.0.0.1:9302にアクセスしないようにしましょう。
(これで自分は20分ほど嵌ってました orz)

```
curl  127.0.0.1:9202
```

```
{
  "ok" : true,
  "status" : 200,
  "name" : "Trapper",
  "version" : {
    "number" : "0.90.3",
    "build_hash" : "5c38d6076448b899d758f29443329571e2522410",
    "build_timestamp" : "2013-08-06T13:18:31Z",
    "build_snapshot" : false,
    "lucene_version" : "4.4"
  },
  "tagline" : "You Know, for Search"
}%
```

このようなメッセージがでれば問題ないです。
Node.js + Expressのアプリをherokuにデプロイしたときのメモ

herokuにはじめてデプロイした際に手間取ったので忘れないうちにメモ

## 前提
* herokuのアカウント作成
* herokuの[toolbelt](https://toolbelt.heroku.com/)をインストール済み
* デプロイしたいexpressアプリ作成済み

## コマンド

### 作成したherokuアカウントでコマンドラインからログイン

> $ heroku login

下記内容が表示

> Enter your Heroku credentials.
> Email: XXXXXX
> Password (typing will be hidden):

### 鍵作成
本来は上記でid_rsa等鍵が作成されるはずだが、うまくいかなかった為下記で作成

> $ ssh-keygen -t rsa -C "メールアドレス"
> $ heroku keys:add ~/.ssh/id_rsa.pub

### アプリのclone
作成しておいたアプリを下記で落としておく

> $ git clone XXXXXXXXXXXXX ${appname}
> $ cd ${appname}

### gitignoreに設定を追加
heroku側のgitにソースをコミットする際に不要なものを設定

> $ vi .gitignore

下記を追記

> node_modules
> .sass-cache

### heroku用にpackage.jsonにengineを追加

>  "engines": {
>      "node": "XXX",
>      "npm": "XXX"
>  }

### herokuで起動するプロセスの起動コマンドを設定ファイルに記述

> $ vi Procfile

下記を記述して新規作成

 > web: node app.js

### heroku側にアプリを作成

> $ heroku create ${appname}

下記表示

> Creating ${appname}… done, stack is cedar
> http://${appname}.herokuapp.com/ | git@heroku.com:${appname}.git
> Git remote heroku added

### アプリのソースコードをherokuにpush
pushと同時にnpmのインストールが実行される
またProcfile内のコマンドが実行される

> $ git push heroku master


## その他コマンド

### ローカルでアプリ起動
> $ foreman start

### webプロセス確認
> $ heroku ps:scale web=1

### ログ
> $ heroku logs

### heroku内でコマンド実行
> $ heroku run コマンド
高速な編集距離の計算方法


今日紹介するコードはここにおいてあります。 https://gist.github.com/aflc/6482587

編集距離（levenshtein距離）の計算方法で一番有名なのが動的計画法を使ったもので、これは[Wikipedia](http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2)にも載っているお手軽でよく使われているものです。

しかし、この方法は結構時間がかかるので、他にも高速な手法がいくつか提案されています。	
[NOXさんのブログエントリ](http://handasse.blogspot.com/2009/04/c_29.html)を読んでいただくのが一番手っ取り早いのですが、ビットパラレル法というのが上手くハマると10倍以上高速です。

ここで紹介されている論文では64文字以上の比較ができないのですが、今回は
[Heikki Hyyrö, "Explaining and extending the bit-parallel approximate string matching algorithm of Myers", 2001](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.19.7158&rep=rep1&type=pdf)
という論文中で紹介されている、64文字以上への拡張を含めて実装してみました。

違いは、配列の境界をまたがる際にプラスの演算とビットシフトの演算に相当する部分を一個前の配列から伝搬させているだけです。

早速やってみた結果がこちら。

ベンチマークコードはNOXさんのコードを拝借しました。ありがとうございます。

まずは64文字以内の場合。

```
# g++ -O3
# gcc 4.9 のMac book Air 2011, core i5で計測

# str1 = "aaabcacbcacbbcabcbcacbcbabcbacbassssssssssssssssssssssssssssssss"
# str2 = "cvahavacabcbabcaabcbsdfsdfsfeoacbcababdfjsfasdasdabababababababa"

dp : 49
Time: 3.32257s (100000 times)

bp-map : 49
Time: 0.275121s (100000 times)

bp-256 : 49
Time: 0.068569s (100000 times)

bpv-map : 49
Time: 0.294881s (100000 times)

bpv-256 : 49
Time: 0.072087s (100000 times)
```

dp: 動的計画法
bp-map: ビットパラレル法で、かつパターンマッチ配列にstd::mapを使ったもの
bp-256: ビットパラレル法、かつパターンマッチ配列にchar[256]を使ったもの、すなわち一バイト文字列のみに対応
bpv-*: ビットパラレル方の拡張版

今回DP版の配列は固定長ではなく二重のstd::vector配列を採用しているためその分かなり遅くなってます。固定長配列に戻すと1.56279sでした。

bp-256とbpv-256の差はあまり無いので64文字以下の場合に拡張版を使っても遜色はなさそうです。

そして、例えば単語単位とか日本語とかで編集距離を出そうと思った場合にはmapを使うしか無いわけですが、とりあえずstd::mapだと４倍位遅くなってしまいました。
ただし、同じパターン文字列を使って順次距離を求めるような場合、パターンマッチ配列は一度だけ計算すればいいためほぼ無視出来る計算量です。今回のベンチマークでは毎回パターンマッチ配列を作成しています。

次に、文字数が増えた場合です。

```
# g++ -O3
# gcc 4.9 のMac book Air 2011, core i5で計測 
# str1 = "aaabcacbcacsdvaabcbabcbacabccabbbcabcbcacbcbabcbacbassssssssssssssssssssssssssssssss"
# str2 = "cvahavacabcbabcaabcbsdfsdfsfeoasaacbabcabaacbcbaacbcbcababdfjsfasdasdabababababababa"


dp : 59
Time: 5.40564s (100000 times)

bpv-map : 59
Time: 0.378752s (100000 times)

bpv-256 : 59
Time: 0.135761s (100000 times)
```

文字数が増えても安定した速さです。bpvは64bit型配列２つ分（=128文字までOK）を使っています。相対的にbpv-mapが健闘しているという感じでしょうかね。実際はこんなに長い文字列で編集距離求めたりしないでしょうけど。

補足までにunordered_mapに変えると二倍くらい遅くなります。一般的にはunordered_mapの方が速いと思っていただけに意外な結果に。どなたか原因のわかる方教えて下さい。
ホストのWindowsとvagrantの仮想マシンを同時に起動する

下記の内容でバッチファイルを作成して、ホスト側のvagrantフォルダに配置しておく。スタートアップに入れておくことで起動と同時にvagrantの仮想マシンが起動、復帰される。

```bat:vagrant_suspend.bat
cd /d %~dp0
call vagrant up
```

vagrantは`vagrant suspend` `vagrant halt` のコマンドでサスペンド、終了が可能なので、同様のバッチファイルを作成してホストOS終了時に実行されるようにしておけば、電源を落とす際にゲストOSも任意の動作をさせることが可能になる。
rubyのmecabバインディングnattoを使う

### 背景

[macでmecab-rubyをビルドせずにインストールする](http://qiita.com/k-shogo/items/64d554322d308745fed9)では、mecabの基本的な言語バインディングを用いました。  
このバインディングはSWIGを用いてMeCabと密に結合しているため、mecab gemのバージョンとMeCabのバージョンを合わせる必要がありました。  
今回はmecab gem以外の選択肢を使ってみます。

### 納豆

今回はrubyからmecabを利用するために[natto](https://bitbucket.org/buruzaemon/natto/overview)というgemを使用します。

nattoは、FFI（foreign function interface：外部関数インタフェース）を使用して、RubyとMeCabを繋ぐgemです。  
nattoはC言語拡張ではないためコンパイルは必要ありません。  
そのためCRuby（MRI / YARV）でもJRuby（JVM）でも実行できる利点があります。  
（`jruby 1.7.4 (1.9.3p392) 2013-05-16 2390d3b on Java HotSpot(TM) 64-Bit Server VM 1.7.0_25-b15 [darwin-x86_64]`で動作確認）

### mecabを最新に

mecab gemをbundlerから管理するために、mecab本体のバージョンを0.98にしていました。  
nattoを利用するに当たって最新のバージョンに戻します。

既に古いバージョンがインストールされている場合、
いったんアンインストールします。

```
brew uninstall mecab mecab-ipadic
```

次に、最新のバージョンを確かめます。

```
brew versions mecab
```

最新バージョンを確認したら、
`/usr/local`に移動してformulaをチェックアウトします。  
このとき最新バージョンは`0.996`でした。

```
git checkout ee21df2 /usr/local/Library/Formula/mecab.rb
```

改めてmecabをインストールします。

```
brew install mecab mecab-ipadic
```

`mecab -v`してバージョンが0.996になっていれば大丈夫。

### natto gemを使う

`Gemfile`に`gem 'natto'`を追加して`bundle install`でインストールします。

使い方は`Natto::MeCab.new`して、
`parse`メソッドに渡すだけです。

```ruby
require 'natto'

text = <<"EOS"
悪質な業者によるトラブルが全国で急増している。
EOS

nm = Natto::MeCab.new
nm.parse(text) do |n|
  puts "#{n.surface}\t#{n.feature}"
end
```

```
悪質　　　名詞,形容動詞語幹,*,*,*,*,悪質,アクシツ,アクシツ
な　　　　助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
業者　　　名詞,一般,*,*,*,*,業者,ギョウシャ,ギョーシャ
による　　助詞,格助詞,連語,*,*,*,による,ニヨル,ニヨル
トラブル　名詞,一般,*,*,*,*,トラブル,トラブル,トラブル
が　　　　助詞,格助詞,一般,*,*,*,が,ガ,ガ
全国　　　名詞,一般,*,*,*,*,全国,ゼンコク,ゼンコク
で　　　　助詞,格助詞,一般,*,*,*,で,デ,デ
急増　　　名詞,サ変接続,*,*,*,*,急増,キュウゾウ,キューゾー
し　　　　動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て　　　　助詞,接続助詞,*,*,*,*,て,テ,テ
いる　　　動詞,非自立,*,*,一段,基本形,いる,イル,イル
。　　　　記号,句点,*,*,*,*,。,。,。
　　　　　BOS/EOS,*,*,*,*,*,*,*,*
```
プログラミング用フォントをMacに homebrew でインストール


メモ

## インストール方法

```
$ brew tap sanemat/font
$ brew install ricty
```

```
$ cp -f /usr/local/Cellar/ricty/3.2.2/share/fonts/Ricty*.ttf ~/Library/Fonts/
$ fc-cache -vf
```



## 参考URL

brew install ricty | 實松アウトプット
http://sanematsu.wordpress.com/2013/05/11/brew-install-ricty/
ruby 1.9.3 用の Devkit が上手く動かない？

Windows 環境で native gem をインストールするために https://github.com/oneclick/rubyinstaller/wiki/Development-kit のとおりに Devkit を入れているつもりだが…

* どうしても 1.9.3 用の環境だとエラーになる。
* 試しに 2.0.0 用の環境で入れたら全く問題なかった。

ということで、rails 4 を試したかっただけなので、2.0.0 で行くことにする。