OmniAICreator/Qiita-1.07M huggingface dataset:
おみくじを作ってみた

前回の入門編を終えたばかりだがfunctionやif文のような機能を具体的にどう使うのかがピンとこないので早速[JavaScriptで作る「簡単おみくじ」 (全3回)](http://dotinstall.com/lessons/omikuji_js)に挑戦してみた。ここで使用するのはfunction, varや配列、ランダム表示などの習ったばかりのものなので、とてもわかりやすかった。

```JavaScript
function getOmikuji() {
   var omikuji = ["大吉", "中吉", "小吉", "凶"];
   var result = Math.floor(Math.random() * omikuji.length);
   document.getElementById('result').innerHTML = omikuji[result];
}
```
#失敗した点
##大文字と小文字は別物
関数名のgetOmikujiにつられてvar resultの中のomikujiをOmikujiとしたせいでボタンを押しても反応がなく10分ほど画面と、にらめっこすることになった。「同じように書いたのに動かない。もしかしたら動画の内容が間違っているんじゃないのか？」と初日から師を疑うという暴挙をやってのけたが原因がわかったと同時に「ごめんなさい」と心の中で謝った。たった1文字の違いだけど、これがとても重要だということがわかった。

#気になった点
##"と'の違い
いわゆるシングルクォーテーションとダブルクォーテーションの違いについて気になったのでググってみた。同じような疑問を持った人が多くいたおかげですぐに解決した。結果として、どちらも大きな違いはないということだった。慣れるまでは動画と同じ書き方で進めようと思う。

#総評
はじめてのプログラムはおみくじ。10分も格闘して実際に動いたときには「おーー！！」と声をあげたほど嬉しかった。おみくじプログラムを今度は何も見ないで作れと言われたら、まだ無理だが4行を見てどう動いているかはわかるようになった。配列の中身を「アホ」や「バカ」に変えて遊んでいたら30分も経っていた。きっと、小学生でも同じことをやるだろう。

ところでQiitaの投稿の書き方はこれで合っているのだろうか。Markdownという記法がよくわからないまま手探りで書いているので自信がない。
historyコマンドとコマンド再実行のメモ

# history

`history` コマンドでコマンドの実行履歴を表示する。

```bash
$ history
  101  bundle exec rake db:migrate
  102  git branch master
  103  pwd
  104  bundle install
  105  bundle exec rake db:migrate
  106  bundle exec rails s
  107  mysql.server stop
  108  mysql.server start
  109  bundle exec rails s
  110  mysql.server stop
```

# 指定の履歴番号を実行する

例えば履歴番号 `101` の `bundle exec rake db:migrate` を実行したい場合は下記の通り。

```bash
$ !101
```
Ruby と RubyGems セットアップの冪等な自動化


Ruby 環境の整備は [rbenv](https://github.com/sstephenson/rbenv) で。想定は OS X 環境。予め Homebrew で `openssl`, `readline`, `ruby-build` をインストールしておく。

```bash
CWD=$(pwd)

RBENV="${HOME}/.rbenv"
RBVER='2.2.3'

if ! which rbenv &> /dev/null
then
    [ ! -d ${RBENV} ] && git clone git://github.com/sstephenson/rbenv.git ${RBENV}
    export PATH="${RBENV}/bin:${PATH}"
    eval "$(rbenv init -)"
else
    cd ${RBENV}
    git pull
    cd ${CWD}
fi

if ! rbenv versions | grep ${RBVER} &> /dev/null
then
    CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl) \
                    --with-readline-dir=$(brew --prefix readline)" \
    rbenv install ${RBVER}
fi

rbenv global ${RBVER}
rbenv rehash

unset RBENV RBVER

if which gem &> /dev/null
then
    GEMS=(
        'bundler'
        'foreman'
        'gisty'
        'mdl'
    )

    for GEM in "${GEMS[@]}"
    do
        if ! gem list --local | grep ${GEM} &> /dev/null
        then
            gem install ${GEM}
        else
            gem update ${GEM}
        fi
    done

    gem cleanup
    rbenv rehash

    unset GEMS
fi

unset CWD
```

インストール後 ${HOME}/.bash_profile とかに下記行を追記の事:

```
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
[ -f "${HOME}/.rbenv/completions/rbenv.bash" ] && source "${HOME}/.rbenv/completions/rbenv.bash"
```
Python と PyPI セットアップの冪等な自動化


Python 環境の整備は [pyenv](https://github.com/yyuu/pyenv) で。想定は OS X 環境。予め Homebrew で `readline` をインストールしておく。

```bash
CWD=$(pwd)

PYENV="${HOME}/.pyenv"
PYVER='3.5.0'

if ! which pyenv &> /dev/null
then
    [ ! -d ${PYENV} ] && git clone git://github.com/yyuu/pyenv.git ${PYENV}
    export PATH="${PYENV}/bin:${PATH}"
    eval "$(pyenv init -)"
else
    cd ${PYENV}
    git pull
    cd ${CWD}
fi

if ! pyenv versions | grep ${PYVER} &> /dev/null
then
    CFLAGS="-I$(brew --prefix readline)/include" \
    LDFLAGS="-L$(brew --prefix readline)/lib" \
    pyenv install ${PYVER}
fi

pyenv global ${PYVER}
pyenv rehash

unset PYENV PYVER

if which pip &> /dev/null
then
    PIPS=(
        'ansible'
        'awscli'
        'fabric'
        'flake8'
    )

    for PIP in "${PIPS[@]}"
    do
        pip install --upgrade ${PIP}
    done

    pyenv rehash

    unset PIPS PIP
fi

unset CWD
```

インストール後 `${HOME}/.bash_profile` とかに下記行を追記の事:

```
export PATH="${HOME}/.pyenv/bin:${PATH}"
eval "$(pyenv init -)"
[ -f "${HOME}/.pyenv/completions/pyenv.bash" ] && source "${HOME}/.pyenv/completions/pyenv.bash"
```
PHP セットアップの冪等な自動化


PHP 環境の整備は [phpenv](https://github.com/phpenv/phpenv) で。想定は OS X 環境。予め Homebrew で `libjpeg`, `libpng`, `openssl`, `mcrypt` をインストールしておく。

```bash
CWD=$(pwd)

if ! which phpenv &> /dev/null
then
    PHPENV="${HOME}/.phpenv"

    if [ ! -d ${PHPENV} ]
    then
        git clone git://github.com/phpenv/phpenv.git ${PHPENV}
    else
        cd ${PHPENV}
        git pull
        cd ${CWD}
    fi

    export PATH="${PHPENV}/bin:${PATH}"
    eval "$(phpenv init -)"

    unset PHPENV
fi

if ! phpenv versions | grep php-5.5.7 &> /dev/null
then
    CONFIGURE_OPTIONS="--with-jpeg-dir=$(brew --prefix libjpeg) \
                       --with-png-dir=$(brew --prefix libpng) \
                       --with-openssl=$(brew --prefix openssl) \
                       --with-mcrypt=$(brew --prefix mcrypt) \
                       --with-apxs2=/usr/sbin/apxs" \
    phpenv install php-5.5.7
fi

phpenv global system
phpenv rehash

unset CWD
```

インストール後 `${HOME}/.bash_profile` とかに下記行を追記の事:

```
export PATH="${HOME}/.phpenv/bin:${PATH}"
eval "$(phpenv init -)"
[ -f "${HOME}/.phpenv/completions/phpenv.bash" ] && source "${HOME}/.phpenv/completions/phpenv.bash"
```
vagrant-berkshelf 2.0.1がwindows 7 64bitでインストール出来ない問題とその解決法

現在Windows 7 64bit上のVagrant 1.6.3にvagrant-berkshelfをインストールすることができません。

原因はこちらで説明されてるtarが正常に実行できないことが原因です。
[Windows(RubyInstaller) + berkshelf 3.0 をインストール（dep-selector-libgecode問題） - Qiita](http://qiita.com/uzuki05/items/ec4c28f6bca08bce0bda)

これを読んだままにすればいいんですが、tarをインストールする先がvagrant用のruby環境だったりするのでもう少し詳しく手順を書きます。

## 確認version

* Windows 7 64bit SP1適応済み
* Vagrant 1.6.3
* vagrant-berkshelf 2.0.1


## 手順

1. [Vagrant](http://www.vagrantup.com/downloads.html)をインストール
2. [Tar for Windows](http://gnuwin32.sourceforge.net/packages/gtar.htm)から[バイナリ](http://gnuwin32.sourceforge.net/downlinks/tar-bin-zip.php)と[依存ライブラリ](http://gnuwin32.sourceforge.net/downlinks/tar-dep-zip.php)をダウンロード
3. ②のアーカイブをディレクトリ構造を維持したまま C:\HashiCorp\Vagrant\embedded\mingw へ展開
4. vagrant-berkshelfをインストール
```
vagrant plugin install vagrant-berkshelf --plugin-version ">= 2.0.1"
```
windowsではシングルクォートだと問題あるらしいのでプラグインバージョンの指定はダブルクォートで囲む

個人的にはvagrantが使ってるmingw環境のディレクトリがよくわからなくてグルグルした。

## 蛇足

[vagrantをwindowsで使う時のコマンドパス - Qiita](http://qiita.com/tsuyoshi_cho/items/0c397de032faeb3e0beb)
こちらで言及されてるんだけど、おそらく本来はbsdtar.exeを使うのが正しいのだと思う。ただどうやってもgemがbsdtarをtarコマンドとして認識してくれないので一旦忘れる。分かる人いたら教えてplz
Perl セットアップの冪等な自動化


Perl 環境の整備は [plenv](https://github.com/tokuhirom/plenv) で。想定は OS X 環境。予め Homebrew で `perl-build` をインストールしておく。

```bash
CWD=$(pwd)

if ! which plenv &> /dev/null
then
    PLENV="${HOME}/.plenv"

    if [ ! -d ${PLENV} ]
    then
        git clone git://github.com/tokuhirom/plenv.git ${PLENV}
    else
        cd ${PLENV}
        git pull
        cd ${CWD}
    fi

    export PATH="${PLENV}/bin:${PATH}"
    eval "$(plenv init -)"

    unset PLENV
fi

if ! plenv versions | grep 5.21.0 &> /dev/null
then
    plenv install 5.21.0
fi

plenv global 5.21.0
plenv rehash

unset CWD
```

インストール後 `${HOME}/.bash_profile` とかに下記行を追記の事:

```
export PATH="${HOME}/.plenv/bin:${PATH}"
eval "$(plenv init -)"
[ -f "${HOME}/.plenv/completions/plenv.bash" ] && source "${HOME}/.plenv/completions/plenv.bash"
```
Homebrew とパッケージセットアップの冪等な自動化


個人的に Homebrew はホームディレクトリ下にインストールするのが正解だと思う。なので Homebrew のインストール先は `${HOME}/.homebrew` とする。

```bash
HOMEBREW="${HOME}/.homebrew"

if ! which brew &> /dev/null
then
    export PATH="${HOMEBREW}/bin:${PATH}"
fi

if [ ! -d ${HOMEBREW} ]
then
    mkdir -p ${HOMEBREW}
    curl -L https://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 -C ${HOMEBREW}
fi

unset HOMEBREW

TAPS=(
    'homebrew/binary'
    'homebrew/completions'
    'homebrew/dupes'
    'homebrew/versions'
)

for TAP in "${TAPS[@]}"
do
    if ! brew tap | grep ${TAP} &> /dev/null
    then
        brew tap ${TAP}
    fi
done

unset TAP TAPS

brew update
brew upgrade

BREWS=(
    'apple-gcc42'
    'autoconf'
    'automake'
    'bison'
    'ccache'
    'cmake'
    'gem-completion'
    'gettext'
    'git'
    'git-extras'
    'grc'
    'libjpeg'
    'libpng'
    'mcrypt'
    'mercurial'
    'openssl'
    'packer'
    'perl-build'
    'pip-completion'
    'pkg-config'
    're2c'
    'readline'
    'rmtrash'
    'ruby-build'
    'scons'
    'vagrant-completion'
    'vim --with-lua --with-mzscheme --with-perl'
)

for BREW in "${BREWS[@]}"
do
    FORMULA=$(echo ${BREW} | cut -d ' ' -f 1)

    if ! brew list | grep ${FORMULA} &> /dev/null
    then
        brew install ${BREW}
    fi

    unset FORMULA
done

unset BREW BREWS

brew cleanup
```

インストール後 `${HOME}/.bash_profile` とかに下記行を追記の事:

```
export PATH="${HOME}/.homebrew/bin:${PATH}"
```
NSUserDefaultsに出来てNSDictionaryで出来ないのはおかしい

NSUserDefaultsだと
    [defaults intForKey:@"num"];
って出来るのにNSDictionaryだと
    [dict objectforKey:@"num"].intValue;
とかしなきゃいけないのかったるいですよね.
てことで,
https://github.com/2bbb/TBT/blob/master/Categories/NSDictionary%2BTBTNonObjectExtention.h
https://github.com/2bbb/TBT/blob/master/Categories/NSDictionary%2BTBTNonObjectExtention.m
こういうことですね.
setの方は@(8)とか出来る様になったのでそこまで要らなくなりましたけどね.

NSArrayにもそういうの入れたいですよね.
https://github.com/2bbb/TBT/blob/master/Categories/NSArray%2BTBTNonObjectExtention.h
https://github.com/2bbb/TBT/blob/master/Categories/NSArray%2BTBTNonObjectExtention.m
こういうことですね.

捗りますね.
読み込みモードで開いたファイルに書き込む方法


特に設定したつもりはないのだけれど、ファイルが読み込みモードで開かれることがよくあります。

解決方法ですが、

### 方法１
モードラインの%%をマウスでクリックすると切り替わります（toggle）


### 方法２

`C-x C-q`
または
`M-x toggle-read-only`
pecoを使ってフィルタリング＆ディレクトリ移動


[https://github.com/peco/peco](https://github.com/peco/peco)

標準入力をフィルタリングして標準出力に返すツールです。golangで書かれています。
pecoを使ってディレクトリ移動を便利にするエントリーをみかけたのでシェルスクリプトで再実装してみました。

[Windows のコマンドプロンプトを10倍便利にするコマンド「peco」](http://mattn.kaoriya.net/software/peco.htm)


気に入りリストからフィルタリングしてディレクトリ移動します。
シェルスクリプトファイルだとcdコマンドが実行中のプロセス内でしかきいてないので 
.[zs|bas]hrcあたりに書きました。


```.zshrc
function pcd() {
  local PCD_FILE=$HOME/.peco/.peco-cd
  local PCD_RETURN
  if [ $1 ] && [ $1 = "add" ]; then
    if [ $2 ]; then
      ADD_DIR=$2
      if [ $2 = "." ]; then
        ADD_DIR=$(pwd) 
      fi
      echo "add $ADD_DIR to $PCD_FILE"
      echo $ADD_DIR >> $PCD_FILE
    fi
  elif [ $1 ] && [ $1 = "edit" ]; then
    if [ $EDITOR ]; then
      $EDITOR $PCD_FILE
    fi
  elif [ $1 ] && [ $1 = "." ]; then
    PCD_RETURN=$(/bin/ls -F | grep /$ | sort | peco)
  else
    PCD_RETURN=$(cat $PCD_FILE | sort | peco)
  fi
  
  if [ $PCD_RETURN ]; then
    cd $PCD_RETURN
  fi
}

```

[[追記]]
autoloadで読み込むかたちにしました。
https://github.com/trapple/pcd

---

`pcd`で実行

![rX6q4X87R6.gif](https://qiita-image-store.s3.amazonaws.com/0/29871/3e58d298-f457-c800-868c-fb7d9b9330ce.gif "rX6q4X87R6.gif")


`pcd add .`で現在のディレクトリをお気に入りに追加
`pcd edit`でお気に入りファイルを編集

historyから絞り込むとか他にも方法はたくさん考えられると思います。
とにかくpeco素敵！
今から枯れて行くObj-Cの開発が捗るCategory

https://gist.github.com/2bbb/b9256592401f21e2747a

こういうのを入れておくと
    @"Hoge.plist".toDocumentDirectoryPath;
とか
    @"http://qiita.com".toURL;
とか出来て捗りますね.
JavaScriptの入門編を終えて

ドットインストールの[JavaScript入門](http://dotinstall.com/lessons/basic_javascript_v2)とCODEPREPの[はじめてのJavaScript](http://codeprep.jp/ja/books/book/3)を終えた。はっきり言って難しい！そして楽しい！初めてプログラムらしいプログラムを学び始めたけど、こんなに楽しいとは思わなかった。チュートリアルのとおりに書いただけだが、それが実際に動いてるのを体験するとワクワクしてくる。この2つのサービスもJavaScriptが利用されているのだろうか？今年中に第三者が利用できるような物を何か作ってみたい。
Gnu Global で作った HTML ファイルの日本語が文字化けする時の対処


Gnu Global で、htags -ansxf で生成する html ファイルには charaset の meta タグがないので、元のソースファイルに UTF-8 以外の文字コード系（例えば SJISなど）でコメントが記載されていると文字化けします。
そんな時は、htags が生成した HTML フォルダ配下の全 .html ファイルに（例えばタイトルタグの閉じタグの直後とかに）以下のように charset の meta タグを書いてしまえば正しく表示される HTML になります

```bash
# Mac の場合
find . -name "*.html" | xargs sed -i "" 's#</title>#</title><meta charset="shift_jis">#g'
```

```bash
# Mac 以外
find . -name "*.html" | xargs sed -i 's#</title>#</title><meta charset="shift_jis">#g'
```

Mac の sed は -i オプション（上書き変更オプション）の後に "" をつけてあげないと invalid command code というエラーになります
SVGを画像みたいに保存できるD3 Plugin作った


D3.jsなどのライブラリの普及によってWebでデータビジュアライゼーションをするということが流行りつつあります。 さて、D3.jsでは主にSVGとして画を描くことになるんですが、書き出されたSVGを簡単に保存して他のドキュメントに貼付けるといった手段がないので困ることがあります。 せっかくSVGで描かれた画をスクリーンショットで保存するのはイマイチですよね。 というわけで、img要素の画像のように右クリックをして保存ができるようなD3 Plugin、[d3-downloadable](https://github.com/likr/d3-downloadable)を作ってみました。

# インストール

bowerにパッケージを登録してあります。

```shell
bower install d3-downloadable
```

npmも対応しました。(2015/05/12)

# 使い方

script、cssを読み込んで、svg要素のselectionに対して、`downloadable()`をcallするだけ。 svg要素を右クリックするとメニューが表示され、SVG、PNG、JPEG形式でダウンロードすることができます。

```javascript
d3.select('svg#chart')
  .call(downloadable().filename('fig'));
```

HTML全体はこんな感じ。

```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" href="bower_components/d3-downloadable/d3-downloadable.css"/>
</head>
<body>
<svg id="fig" width="200" height="200">
  <rect width="200" height="200" x="0" y="0" fill="lightgray"></rect>
  <rect width="150" height="150" x="25" y="25" fill="red" fill-opacity="0.5"></rect>
</svg>
<script src="bower_components/d3/d3.min.js"></script>
<script src="bower_components/d3-downloadable/d3-downloadable.js"></script>
<script>
d3.select('svg#chart')
  .call(downloadable().filename('fig'));
</script>
</body>
</html>
```

動かすとこんな感じ。
http://jsfiddle.net/likr/rg8Wp/

# ダウンロード可能なSVGを書く

これでどんなSVGでも簡単にダウンロードできるようになるのかというと、実はそうでもありません。 D3.jsのサンプルでも、SVGのスタイルをCSSで外部ファイルもしくは、SVGの外のstyle要素に書いている例がよくありますが、d3-downloadableによってSVG部分だけを取り出してきた場合、それらのスタイルが適用されないのでブラウザで見た時と異なる見た目になる場合があります。

なので、SVGをダウンロードできるようにする場合には、可搬性を意識してSVGを書く必要があります。単純なのは、全てのstyleをそれぞれの要素に直接書いてしまうことですが、それが難しいようなら、svg要素の中にdefs要素を作って、その中にstyle要素を書くことができます。

# 参考

実装にあたってこの辺が参考になりました。

* http://www.jasondavies.com/wordcloud/
* http://qiita.com/okappy/items/bc20774aa08842adf4d7
mv（に限らず、シェル）コマンドで重複部分省略



```
mv path/to/old.csv path/to/new.csv
```

を

```
mv path/to/{old,new}.csv
```

と書ける。素敵。

---

追記

コメント欄でご指摘頂きました。
ありがとうございます！
>mv ではなくてシェル(bash)の機能です。
>[Man page of BASH](http://linuxjm.sourceforge.jp/html/GNU_bash/man1/bash.1.html) の ブレース展開
EclipseLinkのログをSlf4Jにブリッジする


EclipseLinkではjava.util.loggingを使っているため、そのままではSLF4Jとは別にロギングしていまいます。ロギングをSLF4Jに一本化するために、独自のSessionLogを実装します。
SessionLoggerの実装は[ここ](https://gist.github.com/msosvi/1325764)を参考にしました。EclipseLink側のログレベルの方が細かいので、お好みでマッピングしてください。
あとはSessionCustmizerで作成したSessionLoggerを設定し、persistence.xmlに追記したらOK!

```` persistence.xml
<properties>
  <property name="eclipselink.session.customizer" value="misc.jpa.JpaSessionCustomizer"/>
</properties>
````

``` JpaSessionCustomizer.java
package misc.jpa;

import org.eclipse.persistence.config.SessionCustomizer;
import org.eclipse.persistence.sessions.Session;

public class JpaSessionCustomizer implements SessionCustomizer {

    @Override
    public void customize(Session sn) throws Exception {
        sn.setSessionLog(new Slf4jSessionLogger());
    }

}
UITableViewの複数選択モード時のチェックボックスの色を変更する方法


TableViewの複数選択時に、セルの先頭につくチェックボックスの色をデフォルトのブルーから変更する方法です。

```
- (void)viewDidLoad
{
    [super viewDidLoad];

    //チェックボックスの色を変更
    [self.tableView setValue:[UIColor grayColor] forKey:@"multiselectCheckmarkColor"];
}
```

UITableViewの「multiselectCheckmarkColor」というプロパティを変更するだけです。

![before.png](https://qiita-image-store.s3.amazonaws.com/0/4593/67a90199-3e22-c4c7-b096-fed4e2e934e1.png "before.png")

これが

![after.png](https://qiita-image-store.s3.amazonaws.com/0/4593/02f7ab7f-bd73-01df-0dd3-7b191e9b1b4e.png "after.png")

こうなります。

それだけ。
あんまり需要なさそうですが、メモ程度に。
LetterOpener のWebインターフェースを Sinatra, Padrino で使う


以前書いた [Padrino で Letter Opener を使う](http://qiita.com/tyabe/items/3ab94b1c2ca21322f6b3) の続き

[letter_opener](https://github.com/ryanb/letter_opener) は便利なのですが、リモートサーバ上で開発しているときに使えなかったり、どんどん開いていくタブを閉じたりするのが面倒です

そんなとき [letter_opener_web](https://github.com/fgrehm/letter_opener_web) を使うと、WEB インターフェース上で送信したメールが一覧できるようになります
[デモサイト](http://letter-opener-web.herokuapp.com/)

ただし、lette_opener_web は Rails Engine で作られているため、Sinatra や Padrino では使うことができません

そこで、同じような機能を Sinatra で実装した [letter_opener-web
](https://github.com/tyabe/letter_opener-web) を作りました。(名前がちょっとアレですが...)

使い方は [README](https://github.com/tyabe/letter_opener-web/blob/master/README.md) を読んでいただければ分かるかと思いますが、メールをファイルとして出力する場所の指定と、WEBアプリのマウント設定を追加すれば使える様になります。
これで letter_opener の WEB インターフェースが Sinatra, Padrino でも使えるようになります
もちろん Rails でも使えます

![Untitled1.png](https://qiita-image-store.s3.amazonaws.com/0/1365/dd3b310d-26c7-13bf-ad71-6c1c07cd3963.png "Untitled1.png")

テストが足りなかったりするので[プルリクエストお待ちしています](https://github.com/tyabe/letter_opener-web)
whoisで会社のネットワーク担当者名、電話番号がわかって超怖い

[担当者情報の削除依頼 | JPドメイン名についてのお知らせ | 新着情報一覧 | JPRS](http://jprs.jp/whatsnew/notice/before2011/contact-del.html)にて登録情報の削除ができる事がわかりました。
そのため、ここから先は見られて問題ない情報のはずです。

# 1. http://www.aguse.jp/ にて気になるドメイン名を検索。

* whoisコマンドでもいいです。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/b92be0d1-8f26-6f40-29d3-c15c931ade36.png)

電話番号がわかるので、電凸が可能。

# 2. 会社名がわかったので、[JPNIC](http://whois.nic.ad.jp/cgi-bin/whois_gw)で検索

![2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e35b9f84-19ed-648b-6337-7713e386582c.png)

# 3. 担当者一覧を確認

![3.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c2e58702-fa90-c04a-fa12-3f5c93bf7272.png)

* これでその会社に属するネットワーク担当者一覧がわかる。(怖い)

# 4. 3で調べた`JPNICハンドル名`(アルファベットの)で更に検索

![4.png](https://qiita-image-store.s3.amazonaws.com/0/25728/87109964-9859-8a71-6c72-493bb8af4b7d.png)

# 5. Facebookで人名検索

特定!
sutekicut「theme・・・お前がいれば何もいらないぜベイビー」　Drupal7「sutekicutさんステキ・・・」

Drupalの強力な機能であるtheme関数についてメモる。

##Drupalのtheme関数とは？

Drupalでは「Theme」関数を使って、オリジナルのテンプレート(○○.tpl.php)に自分で定義した変数を持たせることができる。


##自作themeのレシピ
MYMODULE.moduleファイル内にtheme関数を書く。


```lang:mymodule.module
function MYMODULE_theme( $existing, $type, $theme, $path )
{
    $module_path = drupal_get_path('module', 'MYMODULE');
    return array(
        'contents_tabs' => array(
            'variables' => array( 'step_terms' => NULL ),
            'template' => 'guide_contents_tabs',
            'path' => $module_path . '/template',
        ),
    );
}
```
要素としては見たまま。
・contents_tabsはtheme名。この名前のthemeを使いますってときに使う。
・variablesはテンプレートファイル内で使用できる変数を定義する
・templateは使用するテンプレートファイル名
・pathは使用するテンプレートファイルのパス

最初の
$module_path = drupal_get_path('module', 'MYMODULE');
これは指定されたmoduleのパスを返す。
ほとんどの場合、moduleがデフォルトで配置されるのは、
sites/all/module/配下になるので
sites/all/module/MYMODULEという文字列を返すことになる。


これで
**■theme関数を使って「contents_tabs」をcallすると
sites/all/module/MYMODULE/template/guide_contents_tabs.tpl.phpというテンプレートをつかえて
かつ、guide_contents_tabs.tpl.php内では「$step_terms」が使えるってことを定義したことになる。**


これの使い方は幅広い！
たとえば自作ブロックを作るときに使える。こんな風に。

```lang:MYMODULE.module

function MYMODULE_block_view( $delta = '' )
{
    $block = array();
    switch ( $delta ){
        case 'guide_contents_tabs':
            $block['subject'] = t("content tab");
            $block['content'] = theme('contents_tabs', array('step_terms' => array('step1')));
            break;
    }

    return $block;
}

```

$block['content']でtheme関数をcallしている。
最初の引数でcontents_tabsと使用するtheme名を指定し、2つ目にはarrayでテンプレートファイル内で使う変数に値を詰めている。


んで、これがテンプレートファイル
ほんとはもう少し複雑だったけど、削除した。

```lang:guide_contents_tabs.tpl.php

<?php
?>
<div id="foot-navi">
    <?php foreach( $step_terms as $key => $step ): ?>
        <p><?php print $step;?></p>
    <?php endforeach; ?>
</div>

```
screenを使ったserial接続と終了の方法メモ

# screen を使って Android やルータに接続する方法
UbuntuからAndroidとか、ルータに接続に接続したはいいが、Screenの終了の方法が分からず、無駄に時間を使ってしまったので今後のためのメモ
  
screenの使い方[こちら](http://qiita.com/tks1985/items/ce1274579cfaae8cd5a6)の記事が参考になります。

## インストール

```shell-session
sudo apt-get install screen
```

## 接続
ボーレートが「38400」、接続先のデバイスが「/dev/ttyUSB0」の場合

```shell-session
sudo screen /dev/ttyUSB0 38400
```

## 終了
C-aはCtrlキー + a キーを表します。

```
C-a k (Ctrl+aを押した後に k)
```
画面下部にウィンドウを終了するかい？とメッセージが表示されたら y キーを押す。
```
Confirm 'kill-window'? (y/n) 
```
[JavaScript] 再帰呼出しで階乗(Factorial)を求めてみよう

再帰呼出しを学ぶときによく作るやつ.

[サンプル](http://jsdo.it/phi/4X8T)

階乗を求めるコードです.
数学でいう `n!` ってやつです.


```js
// 階乗
var factorial = function(num) {
    return (num <= 0) ? 1 : (num * factorial(num-1));
};

console.log( factorial(0) );    // 1
console.log( factorial(5) );    // 120
console.log( factorial(6) );    // 720
console.log( factorial(7) );    // 5040
```

再帰大好き!＼(^o^)／
三項演算子も大好き!!＼(^o^)／
CentOS5へAnsibleを実行するときの注意

Ansibleの実行には対象に python-simplejson が入っている必要がある。

```bash:run.sh
ansible all -i hosts -m raw \
  -a "(rpm -qa | grep python-simplejson) || yum -y install python-simplejson" -s
ansible-playbook -i hosts "ranger/book.yml"
ansible-playbook -i hosts "account/book.yml"
ansible-playbook -i hosts "packages/book.yml"
ansible-playbook -i hosts "customize/book.yml"
```

こんな感じで最初にインストールさせればよい。

* debian5も入っていなかったので`python-simplejson`を入れた
CakePHP導入手順

①CakePHPをダウンロード
②パーミッションの変更
③セキュリティの変更
④データベースの設定
⑤DebugKitの導入

-----------------------------------------------------------------------

①
CakePHPのホームページからダウンロードしてデスクトップに設置。この時に名前を任意の名前に変更しておく。
http://cakephp.jp/
デスクトップからサーバにアップ。

②
以下のパーミッションを変更。
/app/tmp/cache
/app/tmp/cache/persistent
/app/tmp/cache/models/
```sudo chmod -R 777 app/tmp
```


③
app/Config/core.phpの220行目あたり。

```
 Configure::write('Security.salt', 'DYhG93b0qyJfIskt2guVoUubqavniR2G0FgaC9mi');

 Configure::write('Security.cipherSeed', '76859304857453542496749234645');
```

この文字列と数字をランダムに変更する。

④
「app/Config/database.php.default」を「app/Config/database.php」に変更する。
ページの下らへん
```
class DATABASE_CONFIG {
            public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'name',
                'password' => 'pass',
                'database' => 'dbname',
                'prefix' => '',
                //'encoding' => 'utf-8',
        );
```
login,password,databaseを自分が設定したものに変える。

⑤
```git clone https://github.com/cakephp/debug_kit.git
```
フォルダの名前を「DebugKit」に変更し、app/Plugin/にフォルダを移動する。

app/Config/bootstrap.phpの最後に、
　　```CakePlugin::load('DebugKit');```
を追加。

app/Controller/AppController.phpに
```class AppController extends Controller {
        public $components = array(
                'DebugKit.Toolbar'
        );
}
```
を追加。

以上で導入は終了。
ここから、index,controller,modelを自分で作成していく。

## よく起こるエラー
①パーミッション
②タイムゾーン
③キャッシュ
④PDO NOT FOUND
http://kwski.net/cakephp-2-x/1009/
http://cakephpinst.seesaa.net/
上記の記事を参考に。
Rubyワンライナーのメモ

# Rubyワンライナーを実行する

```rb
ruby -e "puts 'Hello world.'"
```

# ライブラリを読み込む

http://www.yahoo.co.jp を読み込んでHTMLを出力する。

```rb
ruby -r "open-uri" -e "open('http://www.yahoo.co.jp') {|f| puts f.read}"
```

## メモ

### eオプションについて

> -e 'command'    one line of script. Several -e's allowed. Omit [programfile]

「one line of script」を直訳すると「スクリプトの1行」。
以降をスクリプトとして実行する、みたいな意味だと思う。

### rオプションについて

> -rlibrary       require the library before executing your script

スクリプトを実行する前に、ライブラリを読み込む。

### 参考

- Rubyワンライナー入門 - maeharinの日記  
http://d.hatena.ne.jp/maeharin/20130113/ruby_oneliner
Go 言語で標準出力に書き出す競技プログラミングのアレ

## まえがき

前回 [入力編][input] の続きです．


## はじめに

競技プログラミングでは，標準出力にスペースまたは改行で区切られた大量の数値や文字列を書き出すことがよくあります．（以下，[前回][input] と同じなので略）


## 答え: bufio.Writer を使う

大量の出力を高速に行なうためには，

* 出力をバッファする
* 細かい単位でフラッシュしない

ことが必要です．`os.Stdout` や `fmt.Println` はここまで面倒をみてくれないので，`bufio.Writer` を使います．出力が短かいので効果の出る例ではありませんが，サンプルです:

```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

var wtr = bufio.NewWriter(os.Stdout)

func main() {
	fmt.Fprintln(wtr, "Hello")
	fmt.Fprintln(wtr, "World")
	_ = wtr.Flush()
}
```

これを実行してみます．

```shell-session
$ go run main.go
Hello
World
```

標準出力に書き出されているのを確認できます．


## おわりに

今回は競技プログラミングにありがちな，標準出力への書き出しをより速く行う方法を考えてみました．今回使ったパッケージ，関数などを整理します．

* bufio
  - `NewWriter`
  - `Writer.Flush`
* fmt
  - `Fprintln`
* os
  - `Stdin`

入力と違って標準で備わっているものが十分使い易いので，ライブラリとして整備するほどでもないでしょうか．Java だと `java.io.PrintWriter` あたりに相当しそうです．



[input]: http://qiita.com/tnoda_/items/b503a72eac82862d30c6
vimでヴィジュアルモードの連続貼り付け


##悩み
ヴィジュアルモード(visual mode)で単語を選択→yでコピー(copy)→適当な場所へ移動→ビジュアルモードで選択→pで置換貼り付け
とやると、最初の一回は意図したとおりに貼り付けれるが、２回目以降は、直前に置換した元の単語が貼り付けられてしまう。

多分、ビジュアルモードで貼り付ける際に、d→i→pみたいに途中でレジスタに入りコピーされてしまうのではないかと思われる。不便だ。

##解決
```.vimrc
function! Put_text_without_override_register()
  let line_len = strlen(getline('.'))
  execute "normal! `>"
  let col_loc = col('.')
  execute 'normal! gv"_x'
  if line_len == col_loc
    execute 'normal! p'
  else 
    execute 'normal! P'
  endif
endfunction
xnoremap <silent> p :call Put_text_without_override_register()<CR>
```

<del>これを.vimrcに追記すれば解決</del>(←これだけではだめ)

<del>確かに解決はしたんだけど、こんな大仰なことしないでも、貼付け時のレジスタを変更すればいいだけだった。
というわけで以下でOKでした。</del>(←ダメだった)


```.vimrc
vnoremap <silent> p "0p
```



##ちなみに
vimのコピーをOSのクリップボードと一緒にする設定で

```.vimrc
set clipboard=unnamed,autoselect

```
というのをよく見かけるが、これをやると前述のヴィジュアルモードを使った置換貼付けができなくなる

```.vimrc
set clipboard=unnamed
```
とするとうまくいく。

組み合わせると、両立できる！！



##がっ、だめっ・・・！
2014/07/07追記
これじゃ、v時のdでカットしたものを貼り付けできない。他のアプリでクリップボードにコピーしたものも貼り付けできない。やはり、長ったらしいスクリプト書くしか無いんじゃないか。

##結論
結論は、最初に書いたスクリプトが一番良いということでした。↓

```.vimrc

" vモードの置換連続ペースト用
function! Put_text_without_override_register()
  let line_len = strlen(getline('.'))
  execute "normal! `>"
  let col_loc = col('.')
  execute 'normal! gv"_x'
  if line_len == col_loc
    execute 'normal! p'
  else 
    execute 'normal! P'
  endif
endfunction
xnoremap <silent> p :call Put_text_without_override_register()<CR>

set clipboard=unnamed "ヤンクした時に自動でクリップボードにコピー(autoselectを指定するとvモードの置換連続ペーストができない)
```


##参考
* Vimで、文字列を別のところに「持って行って置換する」効率的な方法は？ - Qiita http://qiita.com/hyuki/items/00c6aa71f299e9ce17e6
* vimの連続コピペできない問題 - Qiita http://qiita.com/fukajun/items/bd97a9b963dae40b63f5
* substitute text that selected on visual-mode without overriding register bug: multibyte charactor on line-end cannot be judged well https://gist.github.com/gimKondo/7989969
* 電脳柔術家はソースコードの夢を見るか vim http://gimkondo.blog98.fc2.com/blog-category-11.html
SwiftでStoryBoardを使わずにコーディングする方法

SwiftでStoryBoard無しで開発を進めるための手順を書きます。
サンプルをgithubに上げておきました。[SwiftNonStoryBoard](https://github.com/ktanaka117/SwiftNonStoryBoard)


#やることは3つの簡単な手順だけ
##1.Empty Applicationでプロジェクトを立ち上げる

File>New>ProjectでEmpty Applicationを選びます。

##2.ViewControllerのソースファイルを作成する
Command + Nを押して新しくSwift Fileを作成します。
中身はViewControllerにしたいのでベーシックに


```
class ViewController:UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.view.backgroundColor = UIColor.yellowColor()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
```

としておきます。
途中でわかりやすいようにself.view.backgroundColor = UIColor.yellowColor()でviewに色をつけておきました。

##3.AppDelegateに三行追加する

```
var window: UIWindow?
//navigationControllerを追加
var navigationController: UINavigationController?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        //以下2行追加
        navigationController = UINavigationController()
        var viewController: ViewController = ViewController()

        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

        //rootViewControllerにviewControllerを指定
        self.window!.rootViewController = viewController

        self.window!.backgroundColor = UIColor.whiteColor()
        self.window!.makeKeyAndVisible()
        return true
    }
```

というように、
・navigationControllerの追加
・viewControllerの追加
・rootViewControllerにviewControllerを指定
の三行を書いてやればStoryBoard無しで開発が進められます。



#もう既にSingle View Applicationなどでプロジェクトを立ち上げていた場合
既にStoryBoardを作成した状態のプロジェクトを立ち上げてしまっている場合はStoryBoardのファイルを削除して上記のAppDelegateの手順をやればStoryBoard無しで開発を進められます。
perlでAzureのBlob操作（フォルダアップ）

perl関連でAzureのBlobの操作の続き。

フォルダのアップについて。

Azureのtestコンテナの20140616フォルダ以下に、
ローカルの「/tmp/20140616」以下のフォルダやファイルをアップする。


```pl:upload.pl
#!/usr/bin/perl

use Net::Azure::StorageClient::Blob;

my $blobService = Net::Azure::StorageClient::Blob->new(
                                    account_name => 'アカウント',
                                    primary_access_key => 'シークレットキー', );

my $res = $blobService->upload('test/20140616/', '/tmp/20140616/');

if ( ( ref $res ) eq 'ARRAY' ) {
    for my $obj ( @$res ) {
        my $uri = $obj->base;
        my $path = $uri->path;
        my $meth = $obj->{ _request }->{ _method };
        print  $meth . ',' . $path . ',' . $obj->code . ',' . $obj->message . "\n";
    }
}
```

出力結果は以下

```dumy
PUT,/test/20140616/new/abc.txt,201,Created
PUT,/test/20140616/new/1/abcd.txt,201,Created
PUT,/test/20140616/new/2/abcde.txt.ts,201,Created
```

ファイル単位でチェックする場合などに。
Jenkinsで誤って削除したジョブを復旧する

誤って意図しないジョブを消してしまった、そんなときの復旧方法のメモ。

## 前提

* 設定変更履歴の閲覧、ジョブ作成ができること
* Jenkinsサバへsshログインでき、sudo使えること

## 復旧方法

以下の3ステップでできた。ジョブ連携している場合は後述の注意点を参照。

### 1. 削除直前のジョブの設定を取ってくる

* Jenkins > 設定の変更履歴 > Show all configs を選択
* すべての設定履歴のシステム設定/ジョブ設定 から [削除したジョブ名]_deleted_[日時] を選択
* Job Deletion HistoryのShow Fileから、削除した一つ前のXMLをRawで表示、保存しておく (最新のXMLは空なので、削除直前のものにする)

### 2. 削除したジョブを再作成する
* Jenkins > 新規ジョブ作成を選択
* ジョブ名に削除したジョブ名を入力
* フリースタイルのプロジェクトを選択
* OK でジョブ作成

### 3. ジョブの設定を反映する
* Jenkinsサバにsshログイン
* 作成したジョブのconfig.xmlを、先ほど保存したXMLの内容で置き換える

```bash
$ sudo vi /インストール先/jenkins/jobs/作成したジョブ/config.xml
```

 * リロードする (再起動するので実行中のジョブに注意)

```bash
$ sudo /etc/init.d/jenkins reload
Shutting down Jenkins [ OK ]
Starting Jenkins [ OK ]
```

 * Jenkinsが起動したら、作成したジョブのビューを開いて有効化

## 注意点

* Jenkinsはリロードといいつつ再起動する
* 他のジョブと連携している場合、
 * この手順で復旧すると下流ジョブの連携は復旧される
 * 上流ジョブとの連携はジョブ削除時に切れたままになる。上流ジョブも同じ方法で復旧できる
RailsでTwilioにaudioファイルを渡す場合の注意点

タイトルの内容に引っかかったので、ここで共有します。

###ファイルのタイプを指定します

ファイルを呼ぶときに、audioであることの指定（`type: 'audio/mp3'`）をしていないと、アプリケーションエラーになりました。
この例では`hollo_twilios_url`でファイルを呼び出しています。

````app/controllers/twilios_controller.rb
  def hello
    send_file "#{Rails.root}/public/audios/hello.mp3", filename: 'hello.mp3', disposition: :inline, type: 'audio/mp3'
  end
````
````config/routes.rb
resources twilio do
  get hello, on: :collection
end
````
````none:音声ファイルの場所
puclic
 |-audios
   |-hello.mp3
````

誰かの参考になれば幸いです。

###参考
https://www.twilio.com/docs/api/twiml/play
http://stackoverflow.com/questions/2830223/ruby-on-rails-audio-mp3-content-header-download
PostgreSQLとMySQLで、僕がよく使うシステムコマンドのメモ

DBの調査をする時に、PostgreSQLとMySQLのコマンドの違いによく戸惑うので、今覚えてるものだけでもメモ。

# 接続とDBの確認
## DBに接続する

```bash:PostgreSQL
$ psql -U ユーザ名 DB名
```
- パスワードの要否は自動的に判断されて、必要な時は入力が促される。

```bash:MySQL
$ mysql -u ユーザ名 -p ;
```
- パスワードの要否は自動的に判断されず、必要な時に`-p`がないと接続エラーとなる。

## DBの確認

```bash:PostgreSQL(bashから)
$ psql -U ユーザ名 -l
```

```dummy:PostgreSQL(ログイン後)
\l
```

```sql:MySQL
SHOW DATABASES;
```

## スキーマの確認 (PostgreSQLのみ)

```dummy:PostgreSQL(ログイン後)
\dn
```

# テーブル定義関係
## テーブル一覧を確認する

```dummy:PostgreSQL
\d
```

```sql:MySQL
SHOW TABLES;
```

## テーブル定義を確認する

```dummy:PostgreSQL
\d table_name
```

```sql:MySQL
DESC table_name;
```

## テーブル定義の完全な情報を確認する

```dummy:PostgreSQL
$ pg_dump database_name -Uuser_name -s -t table_name
```

```sql:MySQL
SHOW CREATE TABLE table_name;
```

# プロセス関係
## 動いているプロセス状況を確認する

```sql:PostgreSQL
SELECT * FROM pg_stat_activity;
```

```sql:MySQL
SHOW processlist;
SHOW full processlist;  --実行されたSQLも確認。
```

## 実行中のプロセスを殺す

```sql:PostgreSQL
SELECT pg_cancel_backend(process_id);
```

```sql:MySQL
kill process_id;
```

# その他

## 定義されたファンクション一覧を確認する

```dummy:PostgreSQL
\df
```

```sql:MySQL
SHOW FUNCTION STATUS;
```

## ファンクションの定義を確認する

```sql:PostgreSQL
SELECT prosrc FROM pg_proc WHERE proname = 'function_name';
```

```sql:MySQL
SHOW CREATE FUNCTION function_name;
```

## SQLの実行計画を確認する

```sql:PostgreSQL
EXPLAIN ANALYZE sql;
```

```sql:MySQL
EXPLAIN sql;
```
余談だけど、MySQLのEXPLAINの見方は[漢のコンピュータ道](http://nippondanji.blogspot.jp/2009/03/mysqlexplain.html)を読むのが一番理解しやすいと思う。
Laravel4 on Heroku

#はじめに

最新フレームワークのLaravel4をHeroku上にデプロイしたいと思います。


#必須環境

* PHP >= 5.4
* MCrypt PHP Extension
* バンドルされてない場合、php5-json(Ubuntu $apt-get install php5-json)


##プロジェクトの作成
composer create-project laravel/laravel --prefer-dist appname

##.gitignoreを編集
Laravelのデフォルトでは.gitignoreにcomposer.lockが含まれていますので、
composer.lockの行を削除して管理対象にします。
気にしないでトライしたら、下記メッセージで怒られました。
>　!ERROR:Your composer.json specifies dependencies, but no composer.lock was found, please check it into your repository along with composer.json!


```lang:.gitignore
/bootstrap/compiled.php
/vendor
composer.phar
composer.lock <= 削除
.env.*.php
.env.php
.DS_Store
Thumbs.db
```

参考文献：https://github.com/laravel/framework/issues/1412

##ドキュメントルート変更
ドキュメントルートの変更を行うためにプロジェクト直下にProcfileを作成します。

```lang:Procfile
web: vendor/bin/heroku-php-apache2 public/
```

参考文献：https://devcenter.heroku.com/articles/custom-php-settings#setting-the-document-root


##レポジトリ作成
1. git init
1. git add .
1. git commit -m "Init"



##Herokuアプリケーション作成
$cd appname
$heroku create appname
$git push heroku master


##You have arrived!
![arrived.png](https://qiita-image-store.s3.amazonaws.com/0/44059/9af696e1-753d-9d00-3152-78ebcf0c009a.png)
Ruby1.8系と1.9系以降での文字列型の扱いの違い

移植しようとしてビックリした仕様変更。

```ruby
text = '1000'
puts text[0]     # => 49    1.8.7
puts text[0]     # => "1"   1.9以降
```

1.9以降では文字そのものを返すが、1.8系では文字コード("1"の文字コードは49)を返す。

ちなみに回避策はこちら。

```ruby
text = '1000'
puts text[0,1]     # => "1"    1.8.7
puts text[0,1]     # => "1"    1.9以降
```

PHPのsubstrっぽい書式。
[JavaScript] isNaN() の謎な挙動とその対策

グローバルで定義されている `isNaN()` が
謎の挙動をするので再定義するコード書いた.

[サンプル](http://jsdo.it/phi/gPZr)

## `isNaN()` の謎な挙動

これ

```js
console.log(isNaN(NaN));            // true
console.log(isNaN(5));              // false
console.log(isNaN(true));           // false
console.log(isNaN('NaN'));          // true
console.log(isNaN({a:100}));        // true
```

いやいや下の２つw
そっちのほうが便利な場合もあるのは分かるんですが...


## `isNaN()` 謎挙動の理由

引数が暗黙的に数値に型変換してそれが `NaN` に変換されちゃって `true` が
帰ってきてるのだと思われる.



## `isNaN()` 謎挙動への対策

感覚的には `NaN` のときだけ `NaN` を返して欲しい!

って調べてたら ECMAScript6 では `Number.isNaN()` ってやつが定義されてて
これだとちゃんと `NaN` のときだけ `true` を返すようになってました.

ただ, Mobile Safari とかだとまだサポートされてなかったりするので
存在チェックして, 定義されていなければ自前で `Number.isNaN()` を
実装するコードを書いてみました.

```js
if (!Number.isNaN) {
    Object.defineProperty(Number, "isNaN", {
        value: function(n) {
            return n !== n;
        }
    });
}
```

`NaN === NaN` は `false` になるってやつを利用してます.


ちなみにこれ使って結果はこんな感じ.

```js
console.log(Number.isNaN(NaN));         // true
console.log(Number.isNaN(5));           // false
console.log(Number.isNaN(true));        // false
console.log(Number.isNaN('NaN'));       // false
console.log(Number.isNaN({a:100}));     // false
```

使う場面ってそんなにないんですけどね♪
VirtualBoxの仮想マシンから外部にメールを送信する方法

仮想マシンから外部(例えば自分のgmailアカウント)あてにメールを送信しようとすると失敗することがあります。

私の場合、自宅の仮想マシンからメールを送信するとこのようにGoogleのサーバから拒否されてしまいました。

```
$ tail /var/log/maillog
Jun 17 10:23:33 local postfix/smtp[11147]: connect to alt2.aspmx.l.google.com[74.125.137.26]:25: Connection timed out
Jun 17 10:23:58 local postfix/smtp[11119]: connect to aspmx3.googlemail.com[74.125.137.27]:25: Connection timed out
Jun 17 10:23:58 local postfix/smtp[11121]: connect to aspmx4.googlemail.com[173.194.76.27]:25: Connection timed out
Jun 17 10:24:03 local postfix/smtp[11147]: connect to aspmx2.googlemail.com[74.125.142.27]:25: Connection timed out
Jun 17 10:24:28 local postfix/smtp[11119]: connect to aspmx5.googlemail.com[74.125.131.26]:25: Connection timed out
Jun 17 10:24:28 local postfix/smtp[11119]: 5CA4B400CDF: to=<example@gmail.com>, relay=none, delay=866, delays=715/0.02/151/0, dsn=4.4.1, status=deferred (connect to a
spmx5.googlemail.com[74.125.131.26]:25: Connection timed out)
Jun 17 10:24:28 local postfix/smtp[11121]: connect to aspmx5.googlemail.com[74.125.131.27]:25: Connection timed out
```

これは、おそらく仮想マシン側で設定したHostnameが、DNSの逆引き結果と一致していないからだと思われます。

# 対処法

自宅が契約してるISPのsmtpサーバ経由で送信するとうまく行きました。
私の場合、仮想マシン上のPostfix設定ファイル(/etc/main.cf)をいじって、

```
relayhost = [castle.ocn.ne.jp]:25
```

とするだけで送信できました。

お使いのプロバイダによってはsmtp_authだとかもっといろいろな設定が必要かもしれません。
MacのEmacsでweb-mode.elを使う

# Emacsでhtml/css/jsが含まれているファイルを書きたい

## web-modeを導入する

* [web-mode.el](http://web-mode.org/)から.elを落としてくる
* ~/.emacsに設定を追記

```
;; web-mode
(require 'web-mode)
;; 拡張子の設定
(add-to-list 'auto-mode-alist '("\\.phtml$"     . web-mode))
(add-to-list 'auto-mode-alist '("\\.tpl\\.php$" . web-mode))
(add-to-list 'auto-mode-alist '("\\.jsp$"       . web-mode))
(add-to-list 'auto-mode-alist '("\\.as[cp]x$"   . web-mode))
(add-to-list 'auto-mode-alist '("\\.erb$"       . web-mode))
(add-to-list 'auto-mode-alist '("\\.html?$"     . web-mode))
;; インデント関係
(defun web-mode-hook ()
  "Hooks for Web mode."
  (setq web-mode-html-offset   4)
  (setq web-mode-css-offset    4)
  (setq web-mode-script-offset 4)
  (setq web-mode-php-offset    4)
  (setq web-mode-java-offset   4)
  (setq web-mode-asp-offset    4)
  (setq indent-tabs-mode t)
  (setq tab-width 4))
(add-hook 'web-mode-hook 'web-mode-hook)

```

## インデントを4にしたのに2で固定されちゃうので解決する
* 調査して後で書く

# 参考
* [Emacsでhtml書いてる人、必見 web-mode.el](http://fukuyama.co/web-mode)
GitlabへpushしたのをトリガにJenkinsをビルドさせるも動かない件

# GitlabへpushしたらJenkinsでビルドさせたい

@via http://qiita.com/garbagetown/items/fe055dcfd8e0c090e610

上記記事を参考にGitlabとJenkinsを連携させるも，どうもビルドが動作していない様子．

## ログを確認

とりあえず生ビールのノリでとりあえずログ．
なんかでてた

```
Jun 17, 2014 9:27:04 AM WARNING hudson.security.csrf.CrumbFilter doFilter
No valid crumb was included in request for /gitlab/build_now. Returning 403.
```

Gitlabから /gitlab/build_now へのアクセスで，403が返されているらしい
上の行のログからCSRF対策でフィルタを掛けられてる（doFilter）のもわかる．

## 解決法

Jenkinsの管理 > グローバルセキュリティの設定 > CSRF対策 のチェックを外して適用．
で一応解決．GitlabからTest Hookするとビルドが走るはず．

でも，CSRF対策外しちゃっていいのかな…
Homebrew で PHP Memcached 拡張の SASL を有効にする


`--with-sasl`を付けて、php55-memcached をインストールする。

```
$ brew install php55-memcached --with-sasl
```


[https://github.com/Homebrew/homebrew-php/blob/master/Formula/php55-memcached.rb#L10-L17](https://github.com/Homebrew/homebrew-php/blob/master/Formula/php55-memcached.rb#L10-L17)
SwiftでArrayに#eachを実装する

for文嫌いなので、視界から無くそうと思い#eachを実装した。
単にRubyのホームシックです。

```swift:Array+each.swift
extension Array {
    func each (blk: T -> ()) {
        for object in self {
            blk(object)
        }
    }
}
```

```swift:Middle.swift
["I", "Love", "Swift", "!"].each {(s) in
    println(s)
}
// => I / Love / Swift / !
```

心が洗われる文法ですね

ちなみに`() in`を省略することも出来る

```swift:Short.swift
["I", "Love", "Swift", "!"].each { println($0) }
// => I / Love / Swift / !
```

この場合はprintlnそのものを渡してもいいですが、func呼ぶだけのclosureを書くのが好みです。

また、Swiftちゃんは賢いので、closureで型を書かなくても良い。

```swift:型を書いてeach.swift
["I", "Love", "Swift", "!"].each {(s: String!) in
    println(s)
}
// => I / Love / Swift / !
```

拡張しまくって闇鍋みたいにしたい。

追記：ホントはもっと上位のプロトコルに実装するのがいいと思います。
Swift と CoreFoundation


何となく CoreFoundation にある CGPDF* まわりを swift でさわってみた。動くかどうかは知らないよ ;-p

PDFKit の PDFDocument クラスにあるコンストラクタの使い方がわからないから、CoreFoundationを使ってこうなったわけじゃないよ。


```swift
//
//  main.swift
//  swtest
//
//  Created by Atsushi Yasui on 2014/06/17.
//  Copyright (c) 2014年 N/A. All rights reserved.
//

import Foundation
import CoreFoundation

var path = "file:///Users/yasui/Documents/develop/swtest/swtest/PDFKitGuide.pdf"
var url  = NSURL.URLWithString(path) as CFURLRef
var pdfref = CGPDFDocumentCreateWithURL(url)

//
NSLog("Path: \(path)")

// PDF の情報書き出し
let page_count :UInt = CGPDFDocumentGetNumberOfPages(pdfref)
NSLog("ページ数: \(page_count)")

var maVersion: CInt = 0
var miVersion: CInt = 0
CGPDFDocumentGetVersion(pdfref, &maVersion, &miVersion)
NSLog("Version: \(maVersion).\(miVersion)")

let allowCoping: CBool = CGPDFDocumentAllowsCopying(pdfref)
NSLog("Can Copy ? => \(allowCoping)")

let allowPrint: CBool = CGPDFDocumentAllowsPrinting(pdfref)
NSLog("Can Print ? => \(allowPrint)")

let isEncrypted: CBool = CGPDFDocumentIsEncrypted(pdfref)
NSLog("Is Encrypted ? => \(isEncrypted)")

let isUnLocked: CBool = CGPDFDocumentIsUnlocked(pdfref)
NSLog("Is UnLocked ? => \(isUnLocked)")

// 1pずつ見ていく
for var i: UInt = 1; i <= page_count; i++ {
    var page:CGPDFPage = CGPDFDocumentGetPage(pdfref, i)

	// 用紙サイズとか
    let mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox)
    let cropBox  = CGPDFPageGetBoxRect(page, kCGPDFCropBox)
    let bleedBox = CGPDFPageGetBoxRect(page, kCGPDFBleedBox)
    let trimBox  = CGPDFPageGetBoxRect(page, kCGPDFTrimBox)
    let artBox   = CGPDFPageGetBoxRect(page, kCGPDFArtBox)
    
    NSLog("Load Page \(i)")
    NSLog("[Page:\(i)] mediaBox: \(mediaBox)")
    NSLog("[Page:\(i)] cropBox : \(cropBox)")
    NSLog("[Page:\(i)] bleedBox: \(bleedBox)")
    NSLog("[Page:\(i)] trimBox : \(trimBox)")
    NSLog("[Page:\(i)] artBox  : \(artBox)")
}

// CGPDFDictionary 周りは CGPDFDictionaryApplyFunction が使えないから、Keyがわからんオブジェクトは swift では無理っぽい？
// Catalog の抽出。Catalog てなんぞ？
//var Catalog : CGPDFDictionary = CGPDFDocumentGetCatalog(pdfref)
//
// Infoの抽出。PDFの製作者情報とかかしら
//var Info : CGPDFDictionary = CGPDFDocumentGetInfo(pdfref)



CGPDFDocumentRelease(pdfref)
```
whoisコマンドを使ってGlobal IPアドレス範囲を調べる

```bash:
$ whois docomo.ne.jp | nkf -w
...
p. [ネームサーバ]               ns001.docomo.ne.jp
p. [ネームサーバ]               ns002.docomo.ne.jp
...
```

```bash:
$ dig +short ns001.docomo.ne.jp
203.138.203.82
```

```bash:ipアドレスの範囲がわかる。
$ whois　203.138.203.82
...
inetnum:        203.138.203.0 - 203.138.203.255
...
```
[PHP] HTTP_Request2のSSLエラーの対処方法


HTTP_Request2でhttp通信はできたけど、
接続先をhttpsにしただけでエラーが出た場合の対処方法のメモ。

```
Unable to connect to ssl://example.com:443. Error: stream_socket_client(): unable to connect to ssl://example.com:443 (Unknown error)
stream_socket_client(): Failed to enable crypto
stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
```

## 方法1. ssl_capathを指定する
デフォルトのSocketアダプターを使う場合は、SSL証明書のディレクトリ・パスを指定する。

```php
$request = new HTTP_Request2('https://example.com');
$request->setConfig(array(
	'ssl_capath' => '/etc/ssl/certs', // ubuntuの場合
));

```

## 方法2. cURLアダプターを使う

cURLアダプターを使えば何もしなくていい。

```php
$request = new HTTP_Request2('https://example.com');
$request->setAdapter('curl');
```

PHPのcURLエクステンションが入ってない場合は以下のコマンドでインストール。

```
sudo apt-get install php5-curl
```

## 参考
* [Manual :: Configuration parameters for HTTP_Request2](http://pear.php.net/manual/ja/package.http.http-request2.config.php)  - 一番下の「SSL peer verification issues」
* [HTTP_Request2によるクライアント接続](http://d.hatena.ne.jp/onigashima/20130726/1374806985)
Cybozu ガルーン API を使ってみる


WSDLの取得
=========


https://developers.cybozu.com/ja/garoon-api/common-soapapi.html
に書いている

```
Garoon on cybozu.com： https://（サブドメイン名）.cybozu.com/g/index.csp?WSDL
パッケージ版 Windows 環境：http://（インストールしたサーバーの IP アドレスまたはホスト名）/scripts/（インストール識別子）/grn.exe?WSDL
パッケージ版 Linux 環境：http://（インストールしたサーバーの IP アドレスまたはホスト名）/cgi-bin/（インストール識別子）/grn.cgi?WSDL

```
等で取得できる


golangでsoap
===========


WSDLが取得できたので早速golangで叩いてみようとおもい
SOAPの実装を探してみたが、なかった。
みんな自分XML組み立ててやれって書いてるような気がする。


自分で叩いてみる
=============

ChromeのAdvanced Rest Clinetを使って生でたたいてみることにした。


URL

```
https://ホスト名/インストールパス/grn.cgi/cbpapi/schedule/api?
```

リクエストPayload

```xml:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:base_services="http://wsdl.cybozu.co.jp/base/2008">
  <SOAP-ENV:Header>
    <Action SOAP-ENV:mustUnderstand="1"
     xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing">
      ScheduleGetEvents
    </Action>
    <Security xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
     SOAP-ENV:mustUnderstand="1"
     xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <UsernameToken wsu:Id="id">
        <Username>xxxxxxxxxx</Username>
        <Password>xxxxxxxxxx</Password>
      </UsernameToken>
    </Security>
    <Timestamp SOAP-ENV:mustUnderstand="1" Id="id"
     xmlns="http://schemas.xmlsoap.org/ws/2002/07/utility">
      <Created>2037-08-12T14:45:00Z</Created>
      <Expires>2037-08-12T14:45:00Z</Expires>
    </Timestamp>
    <Locale>jp</Locale>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <ScheduleGetEvents>
<parameters start="2014-01-01T08:00:00" end="2014-01-30T20:00:00" > 
</parameters>
    </ScheduleGetEvents>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```

レスポンス

```xml:
<?xml version="1.0" encoding="utf-8" ?>
 <soap:Envelope>
 <soap:Header>
<vendor>Cybozu</vendor>
<product>Garoon</product>
<product_type>1</product_type>
<version>3.7.2</version>
<apiversion>1.3.0</apiversion>
 </soap:Header>
<soap:Body>
<schedule:ScheduleGetEventsResponse>
<returns>
<schedule_event id="3451422" event_type="repeat" public_type="public" plan="打合せ" ・・・・
・
・
・
・

```

でた。
今日はここまで・・
Swift で @autoreleasepool どうやるの？


``autoreleasepool {  }`` だそうです。

* [automatic ref counting - What is the equivalent of @autoreleasepool in Swift? - Stack Overflow](http://stackoverflow.com/questions/24152050/what-is-the-equivalent-of-autoreleasepool-in-swift)

こんな感じで使うようです。

```swift:
for i in 1...10000 {
  autoreleasepool {
    // do heavy work
  }
}
```

[iOS - ARC のメモリ解放タイミングを調べた](http://qiita.com/amay077/items/95a4139e6f553d8a56a1) は Swift でも有効なようで。

~~http://swift-lang.org/tryswift/ で試してみたら "unexpected token: autoreleasepool" で怒られた。。。Xcode6 を入れないと動かせないんですかね。~~
Jenkinsのシェルスクリプトで0以外の終了コードを判定する方法

Jenkinsのシェルスクリプトではデフォルトで0以外の終了コードが返った場合即終了する。
でも、diffコマンドとかgrepコマンドで終了コード判定したい、という方法を書いてみる。
（grepの終了コードは 0:一致有り、1:一致無し、2:エラー 
　diffの終了コードは 0:違いなし、1:違いあり、2:エラー）

## 全体的に終了コードを判定しない方法

方法は[Jenkinsのシェルの実行について - Qiita](http://qiita.com/mechamogera/items/f689b95670127d5bf046)参照
最終行以外のコマンドの終了コードが判定されなくなるため、エラーチェックをしようと各コマンド毎に判定を行う必要がある。

スクリプトの追加や終了でついつい終了コード判定してるつもりになって書いたりしてエラーになってもスルーする場合があるため以下の方法の方が良いかも。

## 一部の終了コードを判定する方法

以下の例のようにして終了コードを変数にしまう。

```bash
grep moge test.txt || RETURN_CODE=$?

case "$RETURN_CODE" in
  "" ) echo "found" ;;
  "1" ) echo "not found" ;;
  * ) 
    echo "Error"
    exit $RETURN_CODE ;;
esac
```

終了コードが0の場合はRETURN_CODE=$?が実行されずにRETURN_CODEが空文字になることに注意。
RETURN_CODEに0を入れたい場合はちょっと冗長だけどこんな感じでいける（case文で[0-1]みたいな判定するような場合に楽かも）。

```bash
grep moge test.txt && RETURN_CODE=0 || RETURN_CODE=$?

case "$RETURN_CODE" in
# [!0-1] ) exit $RETURN_CODE ;; とするとうまくいかないのは[!0-1]が0-1でない1文字の文字列を指すからなんですね。
  [0-1] ) echo "Done" ;;
  * ) exit $RETURN_CODE ;;
esac
```
メール関連の役立ちサイト

[メール | SugiBlog](http://www.k-sugi.sakura.ne.jp/tag/%E3%83%A1%E3%83%BC%E3%83%AB/)ここはprocmail詳しい。

[aguse.jp](http://www.aguse.jp/)ドメイン名で検索。一括で情報を取得できる。
ターミナルとEmacsのフォントを12ポイントにする。


## EmacsでASCIIと日本語のフォントの横幅を調整する。

ASCIIのフォントと日本語のフォントは同じ12ポイントでも横幅が違うということがよくあります。これを調整するには`face-font-rescale-alist`を使います。

```el:~/.emacs.d/user-start.d/20fontset.el
;;; -*- mode: emacs-lisp; coding: utf-8-emacs; -*-

(if (and (locate-library "fontset")
         (fboundp 'add-to-list)
         (fboundp 'display-graphic-p))
    (progn
      (cond
       ((and (string-match "linux-gnu" system-configuration)
             (display-graphic-p))
        (add-to-list 'default-frame-alist '(font . "TakaoGothic-12"))
        (add-to-list 'initial-frame-alist '(font . "TakaoGothic-12"))
        (add-hook 'after-init-hook
                  (lambda () (set-frame-font "TakaoGothic-12"))))
       ((and (string-match "mingw-nt" system-configuration)
             (display-graphic-p))
        (add-to-list 'default-frame-alist '(font . "MS Gothic-12"))
        (add-to-list 'initial-frame-alist '(font . "MS Gothic-12"))
        (add-hook 'after-init-hook
                  (lambda () (set-frame-font "MS Gothic-12"))))
       ((and (string-match "apple-darwin" system-configuration)
             (display-graphic-p))
        (create-fontset-from-ascii-font
         "Menlo-12:weight=normal:slant=normal"
         nil
         "menlokakugo")
        (set-fontset-font
         "fontset-menlokakugo"
         'unicode
         (font-spec :family "Hiragino Kaku Gothic ProN" :size 12)
         nil
         'append)
        (add-to-list 'default-frame-alist '(font . "fontset-menlokakugo"))
        (add-to-list 'initial-frame-alist '(font . "fontset-menlokakugo"))
        (add-to-list 'face-font-rescale-alist 
                     '(".*Hiragino Kaku Gothic ProN.*" . 1.2))
        (add-hook 'after-init-hook
                  (lambda () (set-frame-font "fontset-menlokakugo")))))))
```

Menloの12ポイントとHiragino Kaku Gothic ProNの12ポイントでfontset-menlokakugoをつくっているのですが、このままではHiragino Kaku Gothic ProNの横幅がMenloの12ポイント2文字分に比べてやや小さく、「等幅」にならなくなってしまいます。

Emacsでは、フォント名のパターンに対して倍率を指定することでフォントの大きさを微調整することが可能です。そのためのコードが`(add-to-list 'face-font-rescale-alist '(".*Hiragino Kaku Gothic ProN.*" . 1.2))`で、これによってEmacsでASCIIと日本語のフォントの横幅を調整することが可能というわけです。

## ターミナルでフォントを12ポイントにする。

こちらは単純にフォントとして「Menlo Regular 12 pt.」を指定するだけでよいようです。

なお、ターミナルの設定は書き出すことができるので、適当な名前で書き出しておくとよいかもしれません。