OmniAICreator/Qiita-1.07M huggingface dataset:
括弧の対応をチェックするｱﾚをtoken_get_allを使ってしれっと適当に書いてみる

[知恵袋を覗いていたら、書いてみたいコードがあったが、回答を書き込んでしまって質問を閉じられると、他の人のコードも見れないには嫌だなと思ったので、こちらにしれっと書いてみる。](http://qiita.com/ShibuyaKosuke/items/296a9007da4336d97848)

token_get_allを使ってみたくて、関数を書いてみました。
細かくテストしてないので、バグがあったら教えてください( ´ ▽ ` )ﾉ 

ちなみにstackoverflowでも似たような質問がありました。

[Matching braces puzzle](http://stackoverflow.com/questions/18527972/matching-braces-puzzle)

```:PHP
<?php
/**
 * check matching of braces
 * 
 * @param string $src     target string to check
 * @return bool
 */
function brace_check($src)
{
    $open_braces = str_split("({[");
    $close_braces = str_split(")}]");
    $braces = array_merge($open_braces, $close_braces);

    $tokens = token_get_all('<?php '.$src);
    // bracesを含むであろう文字列トークン以外は捨てる
    $tokens = array_filter($tokens,function($item){ return is_string($item); });
    
    $open_brace_stack = array();
    foreach($tokens as $key => $t){
        if (in_array($t,$open_braces)){
            // 開括弧なら開括弧スタックに乗せる
            array_push( $open_brace_stack, $t);
        }
        elseif (in_array($t,$close_braces)){
            if ( empty($open_brace_stack) ){
                // 開括弧スタックが空ならエラー
                return false;
            }
            // 括弧の対応を確認（開括弧スタックのトップと現在の文字）
            $open_top = array_pop($open_brace_stack);
            $idx_open = array_search($open_top, $open_braces);
            $idx_close = array_search($t, $close_braces);
            if ( $idx_open !== $idx_close ){
                return false;
            }
        }
    }
    return true;
}

//=========================
// test code

$html_case = <<<HTML
<?php
?>
<html>
...
<ul>
<li>1)...</li>
<li>2)...</li>
</ul>
...
<?php
...
?>
...
</html>
HTML;

$expressions = array(")(){}","[]({})","([])","{()[]}","([)]",$html_case);

var_dump(array_map('brace_check', $expressions));
```
初めてのpythonー復習編ー

python初級編の本を１冊終わらせました。
２週目をして、忘れていたところを改めて書き出します。

**コマンドライン引数**
シェルからプログラムを実効するときに、値をプログラムに渡すことができる。
この値のことをコマンドライン引数という。

```lang:コマンドライン引数
>>>python 実効ファイル名　コマンドライン引数１　コマンドライン引数２　・・・
```
argv[0] : 実効ファイル名
argv[1] : コマンドライン引数１
argv[2] : コマンドライン引数２

**エラー処理**
try, except : tryの部分にエラーがあった場合に、exceptの処理を行う。


**joinメソッド**
全ての要素間に文字列を挿入する。

```lang:join
>>>"-".join(["a","b","c"])
"a-b-c"
```

**map関数**
引数にとったリストの全要素に関数を適用した結果をリストで返す。

```lang:join
>>> map(str,[1,2,3])
["1","2","3"]
```

**エラーを発生させる方法**
raiseを使う。

```lang:raise
raise Exception("エラーです")
```

**super(data_kata,self)関数**
データ型の名前とselfの２つの引数をとり、自分の親クラスを返す関数。
classを作る時に継承を用いた場合、子クラスの中で親クラスにあるのと同じ名前のメソッドを書くと、親クラスのメソッドが上書きされてしまう。
特に初期化メソッドを追加するときは注意すること！
`super(oya,self)`を呼び出してから、コードを追加する。

**ここ大事！**
・関数の中で使う変数は、関数の内部で定義したものか、引数で受け取ったものだけにする。
vim-mode で visual-blockwise 操作

2015/06/01 追記
結局、いろいろ改善してパッケージにした。
[vim-mode-visual-block](https://atom.io/packages/vim-mode-visual-block)
----- 追記ここまで

今現在、Atom の vim-mode は visual-block mode をサポートしていない。
将来実装する予定で、visual-block を activate するキーマップだけが設定されている。
キーマップが設定されているので、動くと思って混乱している人もいるようだ(無理もない。。)。

Atom には multi-cursor 機能があり、これを使うことで、visual-block の use-case の基本的なものはカバーできる(俺にとっては)。

更に以下の [Code](#code) の設定をすると、visual-block mode っぽい操作感で使える。

## 操作

1. `ctrl-v` で visual-block モードに入り
2. jkhl で選択範囲を拡張する

## Limitation
* `j`, `k` は選択範囲を **拡大** しか出来ない.
* `Esc` で visual-mode 抜けた後に multi-cursor が残る.

## Code

vim-mode では `ctrl-v` で `vim-mode:activate-blockwise-visual-mode` が実行され、
`@submode` だけは設定される。
vim-mode は service として、VimState を expose しているので、この `@submode` はユーザースクリプト
からも参照可能。
なので、この値を見て、普通の `j`, `k` なのか、`addSelection` すべきかを判断している。

```coffeescript:init.coffee
class VimVisualBlock
  constructor: ->
    atom.commands.add 'atom-text-editor',
      'user:visual-blockwise-j': (event) => @blockOperation(event, 'j')
      'user:visual-blockwise-k': (event) => @blockOperation(event, 'k')

  getVimService: ->
    @vimService ?= atom.packages
      .getActivePackage('vim-mode')
      .mainModule.provideVimMode()

  isVisualBlockMode: (editor) ->
    {mode, submode} = @getVimService().getEditorState(editor)
    (mode is 'visual') and (submode is 'blockwise')

  blockOperation: (event, direction) ->
    editor = atom.workspace.getActiveTextEditor()
    if @isVisualBlockMode editor
      switch direction
        when 'j' then editor.addSelectionBelow()
        when 'k' then editor.addSelectionAbove()
    else
      event.abortKeyBinding()

new VimVisualBlock()
```

```coffeescript:keymap.cson
'atom-text-editor.vim-mode.visual-mode':
  'j': 'user:visual-blockwise-j'
  'k': 'user:visual-blockwise-k'
```
Swiftを始めるきっかけ作りと折れずに継続していけるためのオススメサイト

まだまだひよっこiOSエンジニアな僕(yotsu7)ですが、SwiftでのiOSアプリ開発に興味がある、やってみたい、始めて間も無くもう心が折れそうという方の助けになるようなサイトを実際に参考にさせていただいていたサイトから抜粋して紹介させてもらおうと思います。


# サイトの紹介



* [Swift Docs](https://sites.google.com/a/gclue.jp/swift-docs/)

Swiftの逆引きができるサイトです。例えば、Buttonを作りたい等開発者の要望に応えてくれるサイトであり、Swiftでアプリを作るきっかけには非常に便利なサイトかと思います。また、Storyboardを使用せず、コードでの例が多く載っているので、手を動かして学ぶにはもってこいなサイトです。

* [iPhoneアプリ開発の虎の巻](http://tea-leaves.jp/swift/content/swift)

言語自体はSwiftではなくObjective-Cの解説がされているサイトなのですが、Swiftにも通づるものがあり各クラスの解説や、メソッド、引数等細かに解説されているので、Swiftでもっと細かく知りたいクラスがあれば調べてみるのに良いかもしれません。


* [articles of samekard: Swiftのコンパイルエラー寄せ集め](http://tea-leaves.jp/swift/content/swift)

開発時にエラーが生じ、何のエラーなのか最初はなかなか理解できない場合が多々あると思います。
そんな時に非常に便利なのがこのサイトで、様々なswiftのコンパイルエラーを掲載しているためこのサイトを利用することでエラー解決の理解度を深めることができると思います。

* [[iOS8] SwiftData（Swift製SQLiteラッパー）を使ったMVCサンプル](http://tech.eversense.co.jp/87)

アプリ内にデータを保存しておきたいそんなときはSwift製のSQLiteを用いてみましょう。
このサイトにはSwiftDataの導入の仕方からSwiftDataを用いた簡単なサンプルが解説込みで記載されています。

* [[iOS8] Swiftでアプリがバックグラウンド・フォアグラウンドになった時の処理（NSNotificationCenter）](http://tech.eversense.co.jp/120)

アプリが起動しているとき、起動していないときの処理を書きたい場合にはこのサイトを参考にするのが良いと思います。

* [SwiftでJsonを簡単に扱えるライブラリ「swift-json」が超便利！
](http://shirokai.hatenablog.com/entry/swift-json)

サーバー側からデータをクライアント側へと渡す際のデータ形式がJSON形式の場合にクライアント側でどう処理するかが記載されています。JSONの取得からパース、各要素の取り出し等基本的なことが書かれているので、WebAPIからデータを得る処理がしたい場合には参考になると思います。

* [iOSライブラリ管理の神ツール「CocoaPods」のインストールと使い方 ](http://www.atmarkit.co.jp/ait/articles/1403/08/news008.html)

サイトのタイトル通りiOSのライブラリ神ツールのCocoaPodsのインストールから使い方が掲載されています。

* [siro:chro](http://www.sirochro.com/)

Swiftで実装したい機能、このように処理が行いたい等様々な技法が記載されています。
また、サンプルコード付きなので動作イメージがつかみやすくなんとなく実装するのではなくなんでこの実装ができるのかまで理解できるようになっています。
# 最後に

今後Swiftでのアプリ開発の際便利だと思ったサイトはこちらの方に随時更新していきたいと考えていますので参考にしていただけると嬉しいです。
また、このサイト便利だよって紹介していただける方コメントしてもらえると僕の勉強にもなりますので宜しくお願いします！
隠れマルコフモデルの勉強：『続わかりやすいパターン認識』第8章 - 1 -

[『続・わかりやすいパターン認識―教師なし学習入門―』 （石井健一郎・上田 修功オーム社，2014）](http://www.amazon.co.jp/%E7%B6%9A%E3%83%BB%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E8%AA%8D%E8%AD%98%E2%80%95%E6%95%99%E5%B8%AB%E3%81%AA%E3%81%97%E5%AD%A6%E7%BF%92%E5%85%A5%E9%96%80%E2%80%95-%E7%9F%B3%E4%BA%95-%E5%81%A5%E4%B8%80%E9%83%8E/dp/427421530X)から、第8章の隠れマルコフモデルの部分を勉強します。最近、[同書の読書会](http://zokupata.connpass.com/)に参加させていだだいています。
記述法が分かりにくいと思った箇所については、ところどころ変更します。

4つの記事に分けます。
1. [モデル](http://qiita.com/kota9/items/30e7da5524eb326f16ce)
2. [P(x) の計算](http://qiita.com/kota9/items/95384e06dc662774a1ec)
3. [状態変数の推計](http://qiita.com/kota9/items/c6b1b59135b7178bf738)
4. パラメータの推計


# モデル
状態 $s_t$ と 出力 $x_t$ からなる時系列データがあります。$s_t, x_t$ は、それぞれ$c$個, $m$個の離散的な値を取ることとします：

```math
s_t \in \{\omega_1, ..., \omega_c\}\\
x_t \in \{v_1, ..., v_m\} 
```

記述の便宜上、1～$t$期までの列を上添字で書くことにします：

```math
s^t \equiv (s_1, s_2, ..., s_t)\\
x^t \equiv (x_1, x_2, ..., x_t)
```

$x_t$ の確率分布は $s_t$ により決まり、他の過去の情報には直接の影響を受けません。正確には、次の式を仮定しています。

```math
\mathbb{P} (x_{t} | s^{t}, x^{t-1}) = \mathbb{P} (x_{t} | s_{t}) = b(s_t, x_t)  
```

$s_t$ はマルコフ連鎖に従っているとします。下の式の1つ目の等式は、(1)過去のすべての情報がわかっているとしても、前期の状態 $s_t$ 以外の情報は余分であるということで、$s_{t+1}$ は $s_{t}$ が与えられているという条件下において、過去の他の情報と独立であるとも言い換えられます。

```math
\mathbb{P} (s_{t+1} | s^{t}, x^t) = \mathbb{P} (s_{t+1} = | s_{t}) = a(s_t, s_{t+1})  
```
$a, b$ は確率を示すパラメータですが、具体的な値を明示するときには、次のような書き方も使用します。

```math
a(s_t = \omega_i | s_{t+1} = \omega_j) = a_{ij}\\
b(x_t = v_k | s_t = \omega_i) = b_{ik} 
```

第１期の状態確率は パラメータ$\rho$ で与られ、$a, b$ と同様に場合によって２つの記法を使い分けます。

```math
\mathbb{P} (s_1) = \rho(s_1)\\
\mathbb{P} (s_1 = \omega_i) = \rho_i
```


変数の依存関係を図にすると以下のようになります。$x$から他の$x$や$s$への矢印がない（直接に影響しない）ことと、$s$ は次期の$s$にのみ影響している点がポイントです。
![hmm.png](https://qiita-image-store.s3.amazonaws.com/0/80588/f1ac0bc0-34b1-77f9-db92-54e4ebad4a74.png)


## 注意点
次の式は一般には成立**しません**。

```math
\mathbb{P}(x_{t} | x_{t-1}) = \mathbb{P}(x_{t}) \\
\mathbb{P}(x_{t} | x_{t-1}, x_{t-2}) = \mathbb{P}(x_{t} | x_{t-1}) \\
\mathbb{P}(s_{t} | s_{t-1}, s_{t+1}) = \mathbb{P}(s_{t} | s_{t-1}) 
```
いずれも、「影響しない」ということと「独立である」ということの関係に関する誤りです。
１つ目の式についてですが、$x$ 自体はマルコフ過程に従っていないのですが、その時系列は状態変数$s$を通じて関係しているため、過去の情報は今期の値の予測に影響します。例えば、状態変数が景気の良し悪しを表し、出力変数が株価の高低だとして、好景気のとき株価が高くなりやすく、不景気のときは株価が低くなりやすいとします。さらに、景気は硬直的（好景気・不景気が連続しやすい）なものとします。前期の株価が高かかった時、今期の株価の予測はどう変わるでしょうか。・・・予測は上方修正されるはずです。というのも、「前期の株価が高かった→前期は好景気だった可能性が高い→今期も好景気になりやすい→今期も株価が高くなりやすい」というように考えられるからです。したがって、１つ目の式は誤りです。

２つ目の式は、$x$もマルコフ過程であることを意味していますが、これも誤りです。理由は、$x_{t-1}$ の情報が、$s_{t}$ に関する不完全な情報でしかないためで、$x_{t-2}$ などの過去の情報は予測の精度を高めるのに役立つからです。上の例では、前期の株価が高いということだけでなく、過去１０年間ずっと株価が高いことが分かっていたほうが、今が好景気であるという確信が得やすいということです。逆に、前期の株価が高かったが前々期は振るわなかったことがわかれば、前期の株価はたまたまにすぎないのではと予測を改めることになります。

３つ目の式は、マルコフ過程における未来の情報の価値についてです。未来の情報は、今期の状態へと逆算する形で、予測に影響します。上の例では、第１期の景気が良かったことがわかっているとします。すると第２期が好景気になる確率が高くなります。ここへさらに追加の情報で、第３期は不景気だったと分かったとしたらどうでしょうか。「第３期が不景気になった→これが起こりやすいのは第２期が不景気だった場合→第２期も不景気だったのでは」という予測が成り立ち、景気予測が下がります。したがって、３つ目の式も誤りです。
ConoHaのCentOS7インスタンスにGNOMEを入れてラブライブ！壁紙+透過シェルを構築する

![CBIMG65464003.png](https://qiita-image-store.s3.amazonaws.com/0/36931/dda4ba0c-1be6-8dfb-ecd0-755f05225c0f.png)

ConoHaはVPSorクラウドサービスです。（https://www.conoha.jp/conoha）


クラウドやVPSやLinuxというとteratermなどからSSHしてハッカーのように黒い画面に赤い文字でガチャガチャやるイメージですが
ゆとり世代の僕にも快適に操作できるようにブラウザ上からGnomeから入って操作することもできます。
GNOME純正のシステムモニターやJVMのモニタリングなど以外とLinuxのGUIから操作したいアプリケーションはあるのです。


操作しているOSがWindowsの場合

[Windows Chrome] -> ConoHa->CentOS7->Gnome

これができる。

GNOMEを入れて透過シェル（普通のシェルじゃないのが重要）をインストールしラブライブ！の壁紙を透過するまでを解説します。
ちなみにConoHa-CentOS7にKDEも入れてみましたがグラフィックドライバの問題か透過ができないためGNOMEをお薦めします。



# ConoHaのコントロールパネルにアクセスしGNOMEを入れたいインスタンスを選択する。

事前にCentOS7が入ったインスタンスを用意する。

![Consoless002.png](https://qiita-image-store.s3.amazonaws.com/0/36931/1c35e8fb-0104-7313-d989-6049d5a27fa4.png)


コンソールのボタンを選択


# ブラウザからターミナルに接続する

![Consoless003.png](https://qiita-image-store.s3.amazonaws.com/0/36931/1f62d1f3-6454-33e6-6061-a1d3e2802a4b.png)

ログインする

# GNOMEをインストールしデスクトップを起動

```
yum -y groups install "GNOME Desktop"
startx
```

# デスクトップの解像度をいい感じに広くする。

![CBIMG4141003.png](https://qiita-image-store.s3.amazonaws.com/0/36931/0ec259ca-9d59-d8aa-9ef8-3e3b65464784.png)

左上のメニュー -> System Tools -> Setting から　ディスプレイを選択


![CBIMG4141005.png](https://qiita-image-store.s3.amazonaws.com/0/36931/f2913c7e-fbd9-3400-9145-9737adc93eec.png)


デフォルトの解像度が800x600なのでいい感じの広さに設定する。
ある程度広くしておかないとguake(ターミナルソフト）の設定がやりづらいので縦８００～９００ぐらいにはしておいたほうがいいだろう。


# guake（透過ターミナル）をダウンロード

公式サイト：http://guake-project.org/
ダウンロード：http://rpmfind.net/linux/rpm2html/search.php?query=guake
github: https://github.com/Guake


左上のアプリケーションからUtility->システムツールからターミナルを起動し以下のコマンドを実行

```
curl -O ftp://rpmfind.net/linux/fedora/linux/development/rawhide/x86_64/os/Packages/g/guake-0.7.2-1.fc23.x86_64.rpm
```

# guakeインストールに必要なコンポーネントをインストール

```
yum install gnome-python2-gconf
yum install notify-python
yum install pyxdg
yum intall vte
```


# guakeをインストールして起動


```
rpm -ivh guake-0.7.2-1.fc23.x86_64.rpm 
guake
```

# F12ボタンでguakeを表示

![CBIMG65464003.png](https://qiita-image-store.s3.amazonaws.com/0/36931/dda4ba0c-1be6-8dfb-ecd0-755f05225c0f.png)


guakeは普通のターミナルソフトと違いF12で表示/非表示が切り替えられる。
慣れると驚くほど快適である。

# Preferences->Appearance->Effectsで透過設定

guakeターミナルを右クリックしPreferencesを選択

![CBIMG4141002.png](https://qiita-image-store.s3.amazonaws.com/0/36931/ccfeb5b7-01af-bf8b-39a2-1efbc6c2f81b.png)

![CBIMG4141001.png](https://qiita-image-store.s3.amazonaws.com/0/36931/1590965a-715e-7431-0d66-759805bc3ca3.png)

ここで透過が設定できる。

# 痛壁紙をダウンロードする

http://www.onamae.com/campaign/lovelive/present/


# 壁紙を設定する

左上のApplications -> System Tools -> Settings -> Backgroudで壁紙を設定。


![CBIMG4141004.png](https://qiita-image-store.s3.amazonaws.com/0/36931/8ae992ad-f91a-2272-eaf7-46a2f0c96952.png)


これで意識高いLinux+透過シェル環境ができました。
Docker Composeを使ってNginxコンテナとGoFCGIコンテナ立ち上げてみた。

# 事前に必要な物

### docker
Macの場合はboot2docker  
Dockerが実行可能なcoreosなどでもOK（https://github.com/coreos/coreos-vagrant）

### docker-compose

https://docs.docker.com/compose/

```
複数のコンテナからなるアプリケーションを
YAMLファイル一つで定義して、簡単なコマンドでアプリケーションの起動や管理ができるツールです。
```

# サンプルを触ってみる

## リポジトリをclone

```
$ git clone https://github.com/shinofara/golang-web-application.git
$ golang-web-application
```

## Containerを立ち上げる

```build an image for your code, and start everything up```

ビルドして、そして全部立ち上げます。

```
$ docker-compose up -d
Recreating demo_go_1...
Recreating demo_nginx_1...
```

## 確認してみましょう

```
$ curl -l http://<docker host serverのIP>:18888
Hello World !
```

作成したコード一式 
https://github.com/shinofara/golang-web-application
Nodeで感情解析APIを使ってみた

# 概要

Metadata社が提供する『Mextractr 感情解析API』を使ってみた。
http://www.metadata.co.jp/emotion-ma9.html

## APIの概要
> Mextractr　感情解析APIは、日本語のテキストを受け取るとその文章の感情を「好ましいー嫌い」「嬉しいー悲しい」「怒りー怖れ」の3つの軸でその度合いを判断しその値を返すAPIです。

## 制限
ただ、呼び出し回数の制限がMetadata社が提供する他のAPIと合わせて1日100回とのこと。利用形態によってはメールで希望を伝えれば上限回数の拡張はできるらしいです。

# 使い方
## 登録
登録フォームから登録する。
http://ap.mextractr.net/ma9/ma9signup


## 呼び出し方

``` 入力パラメータ

http://ap.mextractr.net/ma9/emotion_analyzer?out=<出力データの形式>&apikey=xxxxx&text=<URLエンコードした文字列>

```

パラメータ |  形式   |   意味
---+---+---
text        | UTF8でURLエンコードした文字列  |    メタデータ抽出元の文字列
out         | 出力データの形式：atom || json デフォルトはatom |
callback    | out=jsonの場合に有効。JSONP形式のを指定 | 
apikey      | 文字列     | APIキー（必須）


## 結果を受け取る
JSONで受け取った。

```
{
"joysad":1,
"likedislike":1,
"angerfear":0,
"analyzed_text":UTF8でURLエンコーディングされたテキスト(単語ごとの解析結果も含まれる)
}
```

返される感情の値は3軸のベクトルになるみたいです。例えばanalyzed_textに解析結果が

```
単語A[3.0,3.0,0.0]
単語B[0.0,0.0,0.0]
(単語N[joysad, likedislike, angerfear])
```

だったら、各単語の感情値の和は

```
joysad:2.0,
likedislike:2.0,
angerfear:0.0
```

になる。

# Nodeでの例
テキストは「テキストから感情解析してみるんだが、これできたらマジで面白いね！でも意味わかんない…」です。意味わかんないですね。

```
var http = require('http');

var base_url = "http://ap.mextractr.net/ma9/emotion_analyzer";
var apikey = APIキー; //ここは変えてください
var out = "json";
var text = "%e3%83%86%e3%82%ad%e3%82%b9%e3%83%88%e3%81%8b%e3%82%89%e6%84%9f%e6%83%85%e8%a7%a3%e6%9e%90%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b%e3%82%93%e3%81%a0%e3%81%8c%e3%80%81%e3%81%93%e3%82%8c%e3%81%a7%e3%81%8d%e3%81%9f%e3%82%89%e3%83%9e%e3%82%b8%e3%81%a7%e9%9d%a2%e7%99%bd%e3%81%84%e3%81%ad%ef%bc%81%e3%81%a7%e3%82%82%e6%84%8f%e5%91%b3%e3%82%8f%e3%81%8b%e3%82%93%e3%81%aa%e3%81%84%e2%80%a6";

url = base_url + "?apikey=" + apikey + "&out=" + out + "&text=" + text;

console.log("感情データを取得します......");

http.get(url, function(res){
    var body = '';
    res.setEncoding('utf8');
    
    // データ取得
    res.on('data', function(chunk){
        body += chunk;
    });
    
    res.on('end', function(res){
        ret = JSON.parse(body);
        console.log(ret);
    })
});
```

結果

```
感情データを取得します......
{ likedislike: 2,
  joysad: 2,
  analyzed_text: '%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%8B%E3%82%89%E6%84%9F%E6%83%85%E8%A7%A3%E6%9E%90%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%E3%82%93%E3%81%A0%E3%81%8C%E3%80%81%E3%81%93%E3%82%8C%E3%81%A7%E3%81%8D%E3%81%9F%E3%82%89%E3%83%9E%E3%82%B8%E3%81%A7%E3%80%90%E3%80%90%E9%9D%A2%E7%99%BD%E3%81%84%E3%80%91%20[3.00,3.00,0.00]%20%20%E3%80%91%E3%81%AD%EF%BC%81%0A%E3%81%A7%E3%82%82%E6%84%8F%E5%91%B3%E3%82%8F%E3%81%8B%E3%82%93%E3%80%90%E3%80%90%E3%81%AA%E3%81%84%E3%80%91%20[0.00,0.00,0.00]%20%20%E3%80%91%E2%80%A6',
  angerfear: 0 }
Program exited.
```

デコードすると
「テキストから感情解析してみるんだが、これできたらマジで【【面白い】 [3.00,3.00,0.00]  】ね！
でも意味わかん【【ない】 [0.00,0.00,0.00]  】…」

# まとめ
これ使ってTwitterのつぶやきのいろづけとかしたら面白いかなーと思ってる。まぁ確実に呼び出し回数制限かかっちゃうけどね。
Docker Registry 2.0 を試す＋ 運用を考える

http://qiita.com/spesnova/items/658a47e40eaea5b5a5f4
ほぼこちらの手順をv2.0に置き換えた版＋運用について＋パフォーマンス改善について書いてみました。

# 動機

- Dockerプライベートレジストリが欲しくなった
- ウェブをみると、自前はつらいという話が多かったのでどのくらいつらいのか知りたかった

## Docker Registry運用方法について

### Docker Registry用のサーバは **持たない方針** で進める

持ってしまうと…

- 管理サーバが増える
- SPOFになる（冗長化考えるのめんどい）
- 認証考える必要ある
- つらい

### 個々のサーバにDokcer Registryコンテナを立てる方式を採用

かつバックエンドにs3を使う方式にすると、
インタフェースだけローカルのDocker Registryを通して
S3上のDockerイメージを共有することが出来る。

- 自前管理するバージョンと比べて、デメリットを考慮しなくて良くなる
- どの環境であっても同じコンフィグを指定しておくだけでDocker Registryを起動すれば動く
- ただし、全てのサーバでDocker Registryを起動するリソースは増えてしまうのでそこだけ注意

<br>

## [Docker Registry v2](http://docs.docker.com/registry/) を試してみる

### 必須環境

Docker Registry2.0では ``Dockerバージョン 1.6以上`` が必要です。
これ未満だとDocker Registryにpushする時エラーが発生します。 

### 前準備

イメージを保持するS3バケットを作っておきます。
空でOK。

### 起動コマンド

```sh
docker run -d \
    --name registry \
    -p 5000:5000 \
    -e REGISTRY_STORAGE_S3_ACCESSKEY=xxxxx \
    -e REGISTRY_STORAGE_S3_SECRETKEY=xxxxx \
    -e REGISTRY_STORAGE_S3_BUCKET=xxxxx \
    -e REGISTRY_STORAGE_S3_REGION=ap-northeast-1 \
    -e REGISTRY_STORAGE_S3_ROOTDIRECTORY=/v2 \
    -e REGISTRY_STORAGE=s3 \
    registry:2.0
```

実運用時はパラメータをコンフィグファイル化しておいたほうが良いですね。

### push／pullしてみる

```sh
# 適当なDockerコンテナをビルド
docker build -t localhost:5000/v2test .
```

```sh
# プライベートリポジトリにpush(指定したs3に保存される)
docker push localhost:5000/v2test
# プライベートリポジトリからpull
docker pull localhost:5000/v2test
```

これだけで行けた。意外と簡単。
ただ、実運用した時に問題が出るかまでは未確認なので
しばらく試してみたい。

<br>

## パフォーマンス改善について（未検証）

まだ気になっていないが、
おそらくその内パフォーマンスも考える必要がありそう。
いくつか考えられる手段を上げてみる。

### CloudFront経由にする

結構速くなるのでは（予想）。
[この辺りの設定](http://docs.docker.com/registry/configuration/#cloudfront)を指定すれば行けそう。

### Redisキャッシュ使う

イミュータブルなblob情報などキャッシュしてくれるらしい。
[この辺りの設定](http://docs.docker.com/registry/configuration/#redis)を指定すれば行けそう。
こちらを利用する時はRedisもコンテナ化すると良いかも？
（[docker-compose](https://docs.docker.com/compose/) 使ってDocker RegistryとRedis起動してゴニョゴニョすれば一発ですね）

この辺りは設定しておくと安定性も増しそうな感じするので
将来試してみたい。
今までできていたcomposer installが急にできなくなった


laravel5でwebアプリケーション開発を初めて１週間で今までで一番ハマった。

##ライブラリのインストール
Mandrill HTTP APIを使用するためにGuzzle 5 HTTP libraryをインストール

###composer require 
$ composer require guzzlehttp/guzzle:~5.0

###Error:
Fatal error: Class 'Illuminate\Foundation\Application' not found in /path/to/project/bootstrap/app.php on line 14


##やってみたこと
同じような現象が起きている人がたくさんいて、大抵の場合composer.lockとvendorフォルダを削除すると上手くいくという記述があるので、やってみたが意味がなかった。
いろいろやっていく中でわかったことはリモートからcomposer.lockをチェックアウトした後にcomposer installを実行するとerrorを吐かなったということ。

##問題の原因
composer.jsonの記述が間違っていた。
requireの記述が２つある。
 
```json:composer.json
"require": {
  "laravel/framework": "5.0.*",
  "guzzlehttp/guzzle": "~5.0"
},
"require": {
  "laravelcollective/html": "~5.0"
},
```

プロジェクトの一番最初でcomposerが何かもわからない状態で、composer.jsonファイルを編集してしまった。

##振り返り
今までcomposer installを実行していてerrorが起きなかったのは、composer.lockの方をみていたからということを初めてしった。
###composer.install
* 基本的にはcomposer.lockを見る
* composer.lock ファイルが存在しない時にcompopser.jsonを見る

##決めたこと
* ~~できることならcomposer.jsonファイルを直接編集しない~~
* composer require パッケージ名（例:monolog/monolog）バージョン（例:1.0.*）でinstallする
* composer.lockファイルは消さない
[小ネタ] リストと配列のあいだ

元ネタが古すぎるのはまず置いておいて、重箱の隅つついたら、不思議な差異があったので、まとめてみた

##値型のプロパティを変更する
例えば以下のような値型を作ったとして

```csharp
	struct SampleValueType
	{
		public SampleValueType(int value) : this()
		{
			Value = value;
		}

		public int Value { get; set; }
	}

```

こいつをLength=1の配列にした場合、以下のようになる

```csharp
		private static void Main(string[] args)
		{
			SampleValueType[] array =  {new SampleValueType(0)};


			//当然０が表示される。
			Console.WriteLine(array[0].Value);
		}
```

さてこのとき、以下のように書き換えたらコンパイラは通るだろうか？（答え：通る）

```csharp

		private static void Main(string[] args)
		{
			SampleValueType[] array =  {new SampleValueType(0)};


			//当然０が表示される。
			Console.WriteLine(array[0].Value);

			array[0].Value = 42;

			//書き換わった42が表示される。
			Console.WriteLine(array[0].Value);
		}

```

普通に考えると、コンパイラエラーのCS1612が発生してもおかしくない状況だけど、普通に通せるし、意図通りの挙動にもなる。
ちなみに、以下のようにList＜SampleValueType＞にすると、想定通りCS1612が発生する。

```csharp

		private static void Main(string[] args)
		{
			List<SampleValueType> list =new List<SampleValueType>{new SampleValueType(0)};
		

			//当然０が表示される。
			Console.WriteLine(list[0].Value);


			//CS1612が発生する。
			list[0].Value = 42;

		}

```

なぜ、配列に対しては問題なくて、Listには問題が発生するかというと、[]演算子がListはインデクサのオーバーロードになる。その結果プロパティ呼び出しになるので、以下のようなコードと意味的に同じようになり、コンパイラがエラーを出してくれる。

```csharp
		private static void Anatomy()
		{
			List<SampleValueType> list = new List<SampleValueType> {new SampleValueType(0)};

			//一時変数に代入
			SampleValueType anonymous = list[0];
		
			//一時変数の値を変えるだけ。
			anonymous.Value = 42;

			//当然元は変化しない。
			Console.WriteLine(list[0].Value);
		}
```

んでは、なぜ配列に対する同様の操作が許容されるかというと、配列型の変数に対して、[]演算子をそのまま適用しているので、**添え字指定された配列の要素そのもの**に対する操作となるため、操作が許容されるからじゃないかなと。

ちなみに、以下のようにIListへ代入した場合は、当然インデクサ経由と解釈されるので、CS1612が発生するので、ご注意の程・・・

```csharp

		private static void Main(string[] args)
		{

			SampleValueType[] array =  {new SampleValueType(0)};
			IList<SampleValueType> list = array;

			//当然０が表示される。
			Console.WriteLine(array[0].Value);


			//CS1612が発生する。
			//list[0].Value = 42;

		}

```

##foreachの中で配列の要素を変更する

こんなことをすれば、**鼻から悪魔は出るし、魔法は尻から出る**ことになるからやっちゃいけない。
けど、やっちゃった場合、挙動に差が出る。

```csharp

		private static void Main(string[] args)
		{
			SampleValueType[] array = {new SampleValueType(0), new SampleValueType(1)};
			List<SampleValueType> list = new List<SampleValueType>(array);


			//InvalidOperationExceptionは発生しない。
			foreach (var elem in array)
			{
				array[1] = new SampleValueType(42);

				//0
				//42
				//と表示される。
				Console.WriteLine(elem.Value);
			}

			//InvalidOperationExceptionは発生しない。
			IList<SampleValueType> hoge = array;
			foreach (var elem in hoge)
			{
				array[1] = new SampleValueType(42);

				//0
				//42
				//と表示される。
				Console.WriteLine(elem.Value);
			}


			//InvalidOperationExceptionが発生する。
			foreach (var elem in list)
			{
				list[0] = new SampleValueType(42);

				Console.WriteLine(elem.Value);
			}
		}

```


このような場合、Listの場合は、IndexerのSetterが呼ばれたかどうかで、内容変更の可否を判定できるけど、配列の場合はそのようなタイミングが存在しないために、このような結果になるんじゃ無いかなと思います。
PostgreSQL 9.4 Windows - plv8 プラグイン - psql 文字化け回避

Windows 版の PostgreSQL 9.4 を入れた時に、なんかちょっとした事でハマったので、メモを残しておく。

やりたかった事は、普通に plv8 プラグインを入れたかっただけなのだが、psql コマンドで文字化けして困った。

![postgresql_logo-229px-150x150.png](https://qiita-image-store.s3.amazonaws.com/0/16128/6d5f8656-ceea-5f0a-3037-7b242e37f518.png)


# ダウンロード PostgreSQL 9.4 Windows

[Download PostgreSQL - Windows]
(http://www.enterprisedb.com/products-services-training/pgdownload#windows)

9.4.* (32bit/64bit) は以下のリンクでダウンロードできるよ。
http://www.enterprisedb.com/products-services-training/pgdownload#windows

インストール時の言語として日本語 (Japanese Japan) を選んだ。

# psql コマンドの文字化けを回避 - intl.dll 置き換え

bin の intl.dll を置き換えるといいみたい。以下のZIPに入っている。
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime_0.18.1.1-2_win32.zip
http://ftp.gnome.org/pub/gnome/binaries/win64/dependencies/gettext-runtime_0.18.1.1-2_win64.zip 

参考: [PostgreSQL 9.4 Windows 版 psql の文字化けを直す]
(http://kenpg2.seesaa.net/article/414871857.html)

参考: [Windows版psqlで文字化けする]
(http://anastasia.dip.jp/index.php?url=tech_psql&contents=win_charerr)


# plv8 プラグインを入れる

以下のZIPをインスト先に展開させて、`CREATE EXTENSION plv8;` を実行すると良い。

http://www.postgresonline.com/downloads/pg94plv8jsbin_w32.zip
http://www.postgresonline.com/downloads/pg94plv8jsbin_w64.zip

参考: [PLV8 BINARIES FOR POSTGRESQL 9.4 WINDOWS BOTH 32-BIT AND 64-BIT]
(http://www.postgresonline.com/journal/archives/341-PLV8-binaries-for-PostgreSQL-9.4-windows-both-32-bit-and-64-bit.html)

以上です。
HerokuでExpressを動かす


## アカウント作成
まずは、Herokuの公式サイトでアカウント作成
https://www.heroku.com/

## ログイン

```
// herokuをインストール
$ gem install heroku
$ heroku login
Enter your Heroku credentials.
Email: *******
Password (typing will be hidden):
Authentication successful.
```

## Expressプロジェクト作成
```
// Expressの雛形ジェネレータをインストール
$ npm install express-generator -g
// Expressプロジェクト作成
$ express プロジェクト名
```

## Herokuにアプリを作成

```
$ cd プロジェクト
$ git init
$ heroku create
```

`heroku create`でHeroku上にアプリが作成され、カレントディレクトリのremoteリポジトリに作成されたアプリが登録される。

## Procfileを作成してデプロイ

以下の内容でプロジェクトルート直下に`Procfile`を作成。

```Procfile
web: node ./bin/www
```

デプロイ

```
$ git add .
$ git commit -m "initial commit"
$ git push heroku master
```

ブラウザで確認

```
$ heroku open
```

こんな感じでExpressのWelcomeページが表示されれば完了。
![スクリーンショット 2015-05-31 0.10.41.png](https://qiita-image-store.s3.amazonaws.com/0/18185/6cfe97e9-752c-3c7f-96dc-75ecf29f6536.png "スクリーンショット 2015-05-31 0.10.41.png")

ログを確認

```
$ heroku logs --tail
```

## ローカルでもExpressを起動する

```
$ gem install foreman
$ foreman start web
```

これで、`localhost:5000`でアクセス可能になる。

## 参照
[Getting Started with Node.js on Heroku](https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction 'Getting Started with Node.js on Heroku')
[Node.js(Express) 事始め ＆ Heroku へデプロイまでのメモ](http://qiita.com/hkusu/items/e46de8c446840c50aefe 'Qiita')
Java8 ラムダとStreamAPIを理解する

# 目的
Java8で導入されたラムダとStreamAPIについていろいろ調べたのでメモする（すべてJavaの話です）

# ラムダ式
- ラムダ式は、関数型インターフェースを使ってラムダ計算を実装する構文
    - 関数型インターフェースは、一つのAbstractメソッドしか持たないインターフェースのこと
        - Comparator/Runnable/Function/Predicateなど
    - ラムダ計算は、識別子/無名関数/関数適用の３つの要素だけで式が表現される計算モデル
        - JavaではJVMで直接関数を扱うのではなく、クラスのインスタンスを使って表現している
- 型推論で変数の型定義が省略できる。
    - 省略しなくてもいい。
        - 省略されすぎると、見慣れないため意味がわからない。
            - そのうち慣れる。
- クロージャーではない。
    - ローカル変数は実質的にfinalな変数にしかアクセスできない。（変更できない）
    - 独自のスコープは持たない。（ローカル変数と同じ変数名は利用できない）
- 無名内部クラス（匿名クラス）はラムダ式に置き換え可能（ほぼ問題なく(thisの扱いが違う)）
    - 似ているが実行時の呼び出しが異なる。
        - ラムダは実行時にクラスが生成される
            - 匿名クラスのようにコンパイル時にクラスを生成するとクラスロードが遅くなるため
                - ２回目以降の呼び出しは速い
        - ラムダのインスタンスは、VMが最適な生成方法を選択するらしい。
            - JVMの実装によっては今後も改善される可能性あり。

# StreamAPI
- ラムダ式と組み合わせて使うパイプライン型のデータ処理を実現するAPI
    - メソッドチェーン形式で記述
- ソース、中間操作、終端操作の３つの構成要素からなる。
    - ソース：`list.stream()`(１つだけ)
    - 中間操作：`.map(User::name)`(複数指定可能)
    - 終端操作：`.collect(Collectors.toList());`(１つだけ)
- 並列化が容易
    - StreamAPIを利用しないで並列処理を書く場合にくらべコード量が減る
    - 遅延評価で処理速度アップ

# メリット
- コード量が減る
- より直感的にコードを理解できる
- 並列処理を気軽に実装できる
    - 現在の基盤の資源を最大限に活かすためには並列処理が必要

# デメリット
- forの構文とラムダ式が混ざるとコードの可読性は下がる。
- すべてラムダで表現しようとするとコードの可読性は下がる（と思っている）
- 並列化して速度が必ずしも上がるわけではない。（デメリットではないが）
- 標準の関数型インターフェースを利用する場合は、例外を投げれないのでラムダの中で処理しなければならない。

# 参考文献
実はこれが大事

## まずはざっと理解する
[社内Java8勉強会 ラムダ式とストリームAPI](http://www.slideshare.net/zoetrope/java8-lambdaandstream)
- この資料のStreamAPIまでの章を理解しておけば、うんちくが語れます。
[ひしだま's 技術メモページ Javaラムダ式](http://www.ne.jp/asahi/hishidama/home/tech/java/lambda.html)
- レイアウトがWeb1.0で読みにくいが実はわかりやすい
[きしだのはてな Java8 Lambdaの文法拡張まとめ](http://d.hatena.ne.jp/nowokay/20130824)
- なんとなく頭に入りやすい。
## より深く知る（概念系）
[Java Day Tokyo Lambda: A Peek Under The Hood](http://www.oracle.co.jp/jdt2015/pdf/6-3.pdf)
- ラムダと内部クラスの違いをInvokedynamicからのバイトコード呼び出しとそのパフォーマンスを混じえて説明
[IBM DeveloperWorks Java 8 言語での変更内容](http://www.ibm.com/developerworks/jp/java/library/j-java8lambdas/index.html)
- 文章が多い。さらなるうんちくをえるためには参考になった。
[Java Day Tokyo Javaの関数型言語への挑戦／ベターオブジェクト指向言語からの脱皮](http://www.oracle.co.jp/jdt2015/pdf/3-1.pdf)
- Javaのラムダと関数型言語との違いをわかりやすく説明
[関数型言語のウソとホント](http://qiita.com/hiruberuto/items/26a813ab2b188ca39019)
- Javaには関係なく関数型プログラミング言語に関する記事。
    - これを読むとJavaのラムダが中途半端で申し訳なくも感じる。
## 実用編
とにかく書き方を知りたい
[ラムダ式と関数型インタフェース](http://qiita.com/yuusuke_s/items/ba1319c85cbae6149749)
[Java8 StreamAPI](http://qiita.com/megmogmog1965/items/0b57223f223417aad637)
[今更人に聞けないJava5からの新機能(Java SE 8)](http://qiita.com/Usek/items/8f689d9ad59c0c441626)
[(o1, o2) -> o1 - o2 なんて呪文はもうやめて！ - Java8でのComparatorの使い方](http://qiita.com/tag1216/items/50ecf6a7bc10218ee889)
- ソートについてはこれはわかりやすい
## その他、ラムダですべてハッピーになれるわけはない
[Java 8のStream APIの性能まとめ](http://qiita.com/sipadan2003/items/788229aa2dfbf0f06bce)
[forループからStream API移行に関する適当な感想](http://qiita.com/yohhoy/items/99c5004dbb2f990566b3)
知恵袋を覗いていたら、書いてみたいコードがあったが、回答を書き込んでしまって質問を閉じられると、他の人のコードも見れないのは嫌だなと思ったので、こちらにしれっと書いてみる。


http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11146154581

>	phpのプログラムで
> ( ) { } [ ] のような括弧があって
> これの順番が正しいかどうか判定する関数か何か
> を作りたいのですがうまくききません。。
> 
> ( { [ { ] } } ) 例えばこのような時エラーがでるような
> 感じです
> よろしくお願いします。

で、ざっくり書いてみたのがこれ。


```php
<?php

/**
 * braceCheck
 */
class braceCheck
{

	private $_code = null;
	private $_startBrace = array('(', '{', '[');
	private $_endBrace = array(')', '}', ']');
	private $_braceArr = array();

	/**
	 * ソースコードを設定する
	 * @param type $string
	 * @return \common\braceCheck
	 */
	public function setCode($string)
	{
		$this->_code = $string;
		return $this;
	}

	/**
	 * コメントを取り除く
	 * @todo
	 */
	public function removeComment()
	{
		$this->_code = $this->_code;
		return $this;
	}

	/**
	 * 文字列中の括弧を取り除く
	 * @todo
	 * @return \common\braceCheck
	 */
	public function removeString()
	{
		$this->_code = $this->_code;
		return $this;
	}

	/**
	 * 括弧を探査する
	 */
	public function searchBrace()
	{
		$brace = array_merge($this->_startBrace, $this->_endBrace);
		$pattern = sprintf("/[%s]/", preg_quote(implode($brace)));
		preg_match_all($pattern, $this->_code, $matches, PREG_OFFSET_CAPTURE);
		$this->_braceArr = $matches;
		return $this;
	}

	/**
	 * シンタックスをチェックする
	 */
	public function check()
	{
		try {
			$tmpArr = array();
			foreach ($this->_braceArr[0] as $i => $brace) {
				$index = array_search($brace[0], $this->_endBrace);
				if (is_integer($index) && 0 <= $index) {
					if ($this->_startBrace[$index] === end($tmpArr)) {
						array_pop($tmpArr);
					} else {
						$msg = "Unexpected {$brace[0]}: {$i}";
						throw new \Exception($msg);
					}
				} else {
					$tmpArr[] = $brace[0];
				}
			}
			if (0 === count($tmpArr)) {
				echo "success\n";
			}
		} catch (\Exception $e) {
			var_dump($e->getMessage());
		}
	}

}

```

自作でこんなコードを作るくらいなら、

```shell-session
find ./ -name "*.php" -exec php -l {} \;
```

をメモしておこう…
Excel で仕様書を書く際に注意すること

#Excel で文章を書く際に注意すること
Excel で仕様書をあちこちの会社で書いてきましたがどこの会社でもあまりメンテ性に考慮した使い方をしているところが少ないのが現状です。
Excel で文章および仕様書を書く際になるべく、あとあとメンテ性が失われないようにしたいものです。

##文章を長くかかない

Excel方眼紙反対派がよく言うことの１つに「改行がめんどう」というのがあります。
そもそも長い文章を書いていることに問題がある可能性があります。
簡潔に書くために、箇条書きなどを用いるのをお勧めです。AND条件やOR条件などで文章が長くなる場合には表を用いて表現しましょう。

##セルの連結はなるべく使わない

ヘッダ等では仕方がない部分はありますが、文章を記述する部分でセルの連結をすると著しくメンテ性が失われます。セルの連結はするべきではありません。

##値の代入などは表を多用する

代入の記述などは文章を書くより、表を使ったほうがわかりやすいです。

ダメな例

* 名前に"田中一郎"を設定する
* 生年月日に18を設定する

良い例

| No. | 設定先 | 値 |備考 |
|----:|:------------|:------------|:------------|
|    1| 名前         |"田中一郎"||
|    2| 生年月日     | 18|文字列に変換後設定|

この場合でもセルを連結しないようにしましょう。

##章番号を使う際にはポイントシステムを使うこと
通常の文章を作成する場合に章立てをキチンと作成できる場合、(1)とか(a)とか(i)とか使うのはいいかと思うのですが、設計書やプログラム仕様書を記述する場合にネストが深くなりやすく、番号が足りなくなる場合があります。
この場合、最初からポイントシステムで、

1. ああああああ

    1.1. いいいいいいいい

        1.1.1. うううううううう

            1.1.1.1. ええええええええ

という風に番号を続けていくほうが便利で楽です。

##文章を書く列を固定すること

次章の「インデントをセルでおこなわないこと」にもかかってきますが、文章を記述する列を固定するべきです。
Ａ列、Ｂ列などに固定することにより、エディタなどからのコピーやエディタへのコピーが楽になります。

##インデントをセルで行わないこと
方眼紙は否定しませんが、インデントのために安易に方眼紙＋セルによるインデントを使用するとネストが簡単に変えられなくなり、メンテ性が著しく低下します。セルの配置のインデントを使用しましょう。

文章を書く列を固定してインデントを使う利点は以下の通り

* 複数の行のネストを一気に変えることが可能
* セルのどこに文章が書かれているかすぐわかる
* 文章の流用が簡単

#RelaxTools Addin の機能を使う

RelaxTools Addin では以下の文書作成機能がありドキュメントの標準化に役立ちます。

* 段落番号を振ったり番号の更新とインデントを同時に行うことができます。
→添付の「section_no.key」を取り込むと F3(発番), F4(削除), F5(更新), TAB(インデント), SHIFT+TAB(逆インデント) にそれぞれ割り当てられます。
* セルを連結しない前提で使用する「方眼紙用かんたん表」で簡単に表が作れます。
→事前に列の文字(No,設定先等)を記述して、表の範囲を指定して実行という手順になります。
* ドキュメントを書く際に重宝する、縦中線、横中線を引く、消去がボタン１つでできます。
* 行の挿入、行の複写、行の削除がボタン１つでできます。任意のショートカットキーに割り当てることも可能です。
→添付の「section_no.key」を取り込むと F6(挿入), F7(複写), F8(削除) にそれぞれ割り当てられます。

仕様書の作成例
リンク先はエクセルファイルです。
https://github.com/RelaxTools/RelaxTools-Addin/blob/master/Section_No_Manual.xlsx?raw=true

Excelを便利にする250以上の機能を体系化したアドインはこちらです。
「RelaxTools Addin」窓の杜大賞受賞ソフト
http://software.opensquare.net/relaxtools/
Node.jsでlodashのflowRightを使って関数合成をする

Clojureで関数合成が楽しくなると、Node.jsでも関数型言語っぽく使いたくなります。npmのライブラリには[Underscore.js](http://underscorejs.org/)、[lodash](https://lodash.com/)、[Ramda](http://ramdajs.com/)などあります。ググってみると[lodash](https://lodash.com/)が良さそうなので関数のcomposeをしてみます。

## Clojureのcomp

Clojureでは[comp](https://clojuredocs.org/clojure.core/comp)を使って簡単に関数合成ができます。

```clj
((comp str +) 8 8 8)
;;=> "24"
```

## lodashのflowRight

[lodash](https://lodash.com/)Underscore.js互換のライブラリでより多機能になっています。[flowRight](https://lodash.com/docs#flowRight)を使って関数合成ができます。`_.backflow`と`_.compose`のエイリアスがついているので個人的に好きな`_.compose`を使います。

ちょうど[twit](https://github.com/ttezel/twit)と[Commander.js](https://github.com/tj/commander.js)を使ってTwitter検索ツールを開発しているところなので、取得したTweetのデータを標準出力するところで使ってみます。lodashのバージョンは3.9.3です。以下はCommander.jsのコマンド処理のコードの抜粋です。

```js:~/node_apps/node-tweet/commands/search.js

function prettyJson(data){
    return JSON.stringify(data,null,2);
}

function extractData(s) {
    return {
        id: s.id_str,
        url: createUrl(s.user.screen_name,s.id_str),
        created_at: formatDate(s.created_at),
        name: s.user.name,
        screen_name: s.user.screen_name,
        user_url: s.user.url || '',
        text: s.text,
        source: s.source,
        expanded_url: _.get(s,'entities.urls[0].expanded_url','')
    }
}

function prettyPrint(csv) {
    return _.compose(console.log,
                     csv ? json2csv.convert : prettyJson,
                     _.map);
}

function commandQuery (query,count,options) {
    connect()
        .get('search/tweets',
             { q: util.format('%s lang:ja',query),
               count: count ? parseInt(count) : 10 },
             function(err, data, response) {
                 if (err) return console.log(err);
                 prettyPrint(options.csv)(data.statuses, extractData);
             });
}
```

関数合成に関係ないコードもありますが、`_.compose`はprettyPrint関数で使っています。

```js
function prettyPrint(csv) {
    return _.compose(console.log,
                     csv ? json2csv.convert : prettyJson,
                     _.map);
}
```

flowRightはClojureのcompと同様に右側から順番に関数を評価する新しい関数を生成します。この例では_.mapでextractData関数をあててJSONを整形してから、CSVオプションが引数にある場合は[nice-json2csv](https://github.com/matteofigus/nice-json2csv)を使ってCSV文字列に変換します。そうでなければ2タブでstringifyします。最後にconsole.logを実行して標準出力しています。CSVフラグのように関数合成の途中で三項演算子も式として使えます。
Jade　変数のいろいろな使い方

[JADEの記法について](http://qiita.com/sasaplus1/items/189560f80cf337d40fdf)
基本的な変数の使い方は書いてあるけど、使っているうちにこんな時どうするの？って場面が結構あったので、メモしておきます。


#基本

````router.js
res.render("test",{title:'Hello'});
````
```test.jade
p #{title}
p=title
````
````html
結果
<p>Hello</p>
<p>Hello</p>
````

##他の文字とつなげる
```test.jade
p #{title}World
p=title+World
````
````html
結果
<p>Helloworld</p>
<p>Helloworld</p>
````

これはだめ。エラーになる

```test.jade
p=title world
````

##エスケープしない
!= または !{}　を使う

````router.js
res.render("test",{title:"<span>Hello</span>"});
````
```test.jade
p #{title}
p=title
p !{title}
p!=title
````
````html
結果
<p>&lt;span&gt;Hello&lt;/span&gt;</p>
<p>&lt;span&gt;Hello&lt;/span&gt;</p>
<p><span>hello</span></p>
<p><span>hello</span></p>

````


##配列に添え字でアクセス

````router.js
var helloworld = ['Hello','World'];
res.render("test",{a:helloworld});
````
````test.jade
p #{a[0]} #{a[1]}
````
````html
結果
<p>Hello World</p>
````

##連想配列にキー名でアクセス

````router.js
var helloworld = {message1:'Hello',message2:'World'];
res.render("test",{a:helloworld});
````
````test.jade
p #{a.message1} #{a.message2}
````
````html
結果
<p>Hello World</p>
````

#クラス名やIDを変数で指定する
````router.js
res.render("test",{a:'myclass',b:'myid'});
````
````test.jade
p(class=a)hoge
p(id=b)foo
````
````html
結果
<p class="myclass">hoge</p>
<p class="myid">foo</p>
````
特定ファイルを除いてgitの管理対象にする

# やりたいこと
emacsのinit.elだけ、gitの管理対象としたい。
ただし同じディレクトリにある他のファイルは管理対象外とする。

# やりかた
.gitignoreを以下のように記述する。

```lang:.gitignore
*
!init.el
```

*で全てを管理対象外にした上で、
init.elは管理対象とするために「!init.el」で否定をしている。

# 参考にしたページ
http://www.omakase.org/misc/gitignore.html
GithubのContributionsにドット絵を描く方法

いきなり実例
==========

<img alt="favicon-0.png" src="http://bit.ly/1GLRYBt" width="16" height="16"> [vim-scripts/](https://github.com/vim-scripts)

![love_vim_a_lot.png](https://qiita-image-store.s3.amazonaws.com/0/73424/942622ef-f55b-1754-5e88-4cab542e8644.png)

> :heart: __VIM a lot!__

どうやるか
========

<img alt="favicon-0.png" src="http://bit.ly/1GLRYBt" width="16" height="16"> [IonicaBizau/github-contributions](https://github.com/IonicaBizau/github-contributions)

> GitHub Contributions
> A tool that generates a repository which being pushed into your GitHub account creates a nice contributions calendar.
Sassの利用環境を整える　〜キャッシュ（.sass-cache）フォルダについて〜


Sassファイルをコンパイルすると
カレントディレクトリに.sass-cacheというフォルダが生成される
※デフォルトの設定だとできる。

##これいるの？

watchオプションでたびたびコンパイルする処理を早くするため、
必要。


#キャッシュフォルダを違う場所に変更する。

キャッシュフォルダの場所を指定するには
「--cache-location」オプションをつける。

オプションの後に半角スペースで指定

```
sass --watch --cache-location test

や

sass --watch --cache-location test/cache/.sass-cache

など
```
Sassのエラー対処ログ


でくわしたエラーをただ列挙していきます。

---

#watchオプションでのエラー

Listen機能ってのが働かないとこんなエラーが出る。

```
$ sass --watch --style expanded scss:css
>>> Sass is watching for changes. Press Ctrl-C to stop.
directory css
write css/test.css
[Listen warning]:
Listen will be polling for changes. Learn more at https://github.com/guard/listen#polling-fallback.

```

http://www.gworks.jp/2014/05/sass/


Listenってファイルをインストールすればなおるので

```
sudo gem install listen
```

と打ってインストールすれば直る。
※sudoはmacだけだよ

---

# Ruby Sass Compass インスコ時のSSLエラーまとめ


インストーラーに含まれているSSL証明書が古いから起こるエラーだそうです。

```
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (http://api.rubygems.org/specs.4.8.gz)
```

## 回避してインスコする方法
* ①rubyインストーラーに同梱されている証明書を新しい証明書に書き換えてインスコ
* ②SSL通信をやめて普通にインスコ


### ①rubyインストーラーに同梱されている証明書を新しい証明書に書き換える

* windows
 * http://rank.hamazo.tv/e4905426.html
 * http://qiita.com/akaneko3/items/a162def655ce791e356f

* その他参考
 * http://qiita.com/J_Sugar__/items/af0429ee61e21e0febfc
  
  ※尚、Rubyは2.4.5が最新ですが、バグが発見されているそうですので
Rubyインスコ時はバージョンを指定してインスコするのがよさそうです。



### ②SSL通信をやめて普通にインスコする。
http://book.scss.jp/code/c2/07.html#p83ssl
※インストール後、https接続へ戻すには gem source -r ～ で戻る

で、インストールできる

---
Sassの利用環境を整える　〜シェルスクリプトを生成してwatchさせ、自動でコンパイルさせる〜


# シェルスクリプトとは？
コマンドをパッケージ化して、ダブルクリックで実行させるようにする。これなら面倒なコマンドを打ってコンパイルする必要がなくなる。

---

# 早速作ってみよう！

### ★まずはファイルを生成！

ファイルの拡張子は ``` command ``` 。
シェルスクリプトを置きたいディレクトリに移動し、
ターミナルからファイルを生成。コマンドはこれ！

```
touch sass.command
```
※ファイル名は何でもよい


### ★処理を記述

sass.commandファイルに処理を記述しましょう。
処理は以下。

```
#!/bin/sh

cd $(dirname $0)
sass --watch sass:css
```

``` #!bin/sh ```
シェバンといって、シェルスクリプトであることを明示する記述。
まぁお約束みたいなもの。

``` cd $(dirname $0) ``` 
ここでシェルスクリプトのある場所へ移動するコマンドを実行。

``` sass --watch sass:css ```
これでwatch開始。
ここからはsassのコンパイル設定を記述するだけ。



### ★コメントアウト
シェルスクリプト内では先頭に#をつけると1行コメントになる。

■例

```
#!/bin/sh

cd $(dirname $0)
sass --watch sass:css
#sass --watch -t nested sass:css
#sass --watch -t expented sass:css
#sass --watch -t compact sass:css
#sass --watch -t compressed sass:css

```


# 実行権限

もうこれで動くのだけど、
このままだと実行権限が無いと言われて
起動できない。なのでターミナルで実行権限を与えるコマンドを
打つ必要が有る。

シェルスクリプトの有る場所へ移動し、次のコマンドを実行。

```
chmod +x sass.command
```
これで実行権限が付与され、シェルスクリプトが実行できる。



# 運用

このsass.commandというシェルスクリプトファイルを
サイトのルート階層に置いて使用すればOK！

sassフォルダとcssフォルダを探してやってくれまっせ！

---

# その他シェルスクリプトを作るときに手こずったこと。

### 改行コードはLF
変なエラーが出て、watchが始まらないので注意
miなどのテキストエディタを使って、改行コードを確認しよう。


### シェバンの入力ミス

頭のパスに「/」をつけ忘れてたww

```
#!/bin/shのところを#!bin/shとやってた。凡ミス

 bin/sh: bad interpreter: No such file or directory
```
angular.jsで無限スクロール

「ngInfiniteScroll」を使います。
[http://binarymuse.github.io/ngInfiniteScroll/](http://binarymuse.github.io/ngInfiniteScroll/)のDownloadから落としてきますが、「ng-infinite-scroll.min.js」を使うとなぜかエラーになったので、Developmentの圧縮ファイルの方を落としてきます。

解凍して「ng-infinite-scroll.js」を使います。

```hoge.html
<html lang="ja" ng-app="hogeApp">
〜
<body>
  <div clas="container" ng-controller="hogeController as app">
    <div infinite-scroll="loadMore()" infinite-scroll-distance="0">
      <div ng-repeat="item in items">
	   {{item.title}}
	  </div><!--item-->
    </div><!--col-->
  </div><!--conteainer-->

  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
  <script src="app.js"></script>
  <script src="lib/ng-infinite-scroll.js"></script>
</body>
</html>
```
無限スクロールの対象に「infinite-scroll」アトリビュートを指定して、パラメータに追加要素を読み込むメソッドを指定します。
「ng」は付けないので注意。
ここではitemsという変数に配列を格納しているので、このitemsに要素を追加するメソッドが「loadMore」だよ、と指定しています。

```app.js
var app = angular.module("hogeApp", ['infinite-scroll']);

app.factory('loadArticle', function($http) {
  return {
  	loadArticle : function(limit) {
  	  return $http.get('http://something.api.com/get_data?limit=' 
  	    + limit).success(function(data, status, headers, config) {
  	  	return data;
  	  });
  	}
  }
});

app.controller('hogeController', ['$scope', 'loadArticle', function($scope, loadArticle) {

  $scope.loadMore = function() {
  	loadArticle.loadArticle(12, $scope.next).then(function(res) {
  	  for(var i=0; i<res.data.length; i++) {
  	  	$scope.items.push(res.data[i]);
  	  	$scope.next++;
  	  }
  	});
  };

  loadArticle.loadArticle(12, 0).then(function(res) {
  	$scope.items = res.data;
  	$scope.next  = $scope.items.length;
  })
}]);
```

ここでは例としてAPIでJSONとってきてリストに追加する、という形にしています。
ページをスクロールしていくとloadMoreが呼ばれてitemsに要素が追加されて、無限スクロールが実現できます。
Macのターミナル上で起動しているVimでノーマルモードに移行する時にIMEをOFFにする方法


やりたいことは、シンプルで、Vimのノーマルモード移行時にIMEをオフにするというものです。これには、ノーマルモード移行キーとIMEをオフにするキーを組み合わせます。

私の場合は、`C-j`でノーマルモードに移行しますので、好みの問題ですが、これは適時読み替えてください。ちなみに、今回採用する方法は、Vimの設定は基本不要になります。

```vimscript
imap <C-j> <ESC>
```

##BetterTouchToolを使った方法

[BetterTouchTool](http://www.bettertouchtool.net/)というアプリを使うのですが、これはショートカットキー、タッチパッドなどを設定するアプリです。個人的にはこのアプリに頼りたくないのですが、既存の方法が全滅でしたので、とりあえずこのアプリで設定しました。誰か、シンプルな方法を知っていたら、ぜひ教えて下さい。

図にするとこんなかんじでキーを設定します。`Select Application`はGlobalでも良いし、Terminalを指定してもよいです。ここで、`Ctrl+J`には、`Attach Additional Action`を設定することも忘れずに。


```bash:
Ctrl+J ---> Ctrl+Shift+;
       |
       ---> Ctrl+[ 
```


![](https://raw.githubusercontent.com/mba-hack/images/master/google-ime-mac-01.png)

解説ですが、私の場合は、`Google IME`を使用していて、英数に切り替えるショートカットキーが`Ctrl+Shift+;`なのです。

ちなみに、これは独自に設定できます。例えば、以下の設定などが便利ですね。



![](https://raw.githubusercontent.com/mba-hack/images/master/google-ime-mac-02.png)



これをしておくと、ターミナルを除くほとんどのアプリで`C-J`を押すと、IMEをオフに出来ます。しかし、何故かターミナルでは有効になりませんでした...。

##Karabiner

2015年05月、前まで使っていた方法が何故か使えなくなってしまいました。

今までは、[Karabiner](https://pqrs.org/osx/karabiner/index.html.ja)というアプリを使って、特定のキーをEscape, JIS_EISUU(英数)に割り当てていました。


```html:private.xml
<?xml version="1.0"?>
<root>
  <list>
    <item>
      <name>LeaveInsMode with EISUU(Terminal)</name>
      <identifier>private.app_terminal_esc_with_eisuu</identifier>
      <only>TERMINAL</only>
      <autogen>--KeyToKey-- KeyCode::ESCAPE, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
      <autogen>--KeyToKey-- KeyCode::J, VK_CONTROL, KeyCode::J, VK_CONTROL, KeyCode::JIS_EISUU</autogen>
    </item>
  </list>
</root>
```


割り当て方法としては、アプリの仕様変更などがあったかもしれないと、様々な方法を使ってみたのだけど、何故か有効にならない。アクセシビリティでも権限与えてるはずなんだけどな...。

とりあえず、それは置いておいて、これは、`Custom Setting`と呼ばれるもので、所定の形式で書かれたXMLファイルを読み込むと、`name`で指定された項目が表示され、その設定を有効にできるというものです。設定をチェック後は、`Reload XML`で独自の設定が読み込まれ、有効になります。

デフォルトでは`private.xml`なので私はそれを使っていますが、ファイルは指定することもできます。

内容を見ていくと、例えば、以下のようになります。

```html:private.xml
 <autogen>
 
 --KeyToKey-- 
 KeyCode::ESCAPE, 
 KeyCode::ESCAPE, 
 KeyCode::JIS_EISUU
 
 </autogen>
```

これは、ESCが押された場合、ESC,JIS_EISUUの順にキーを押すというか、キーを変換します。

つまり、`ESC -> ESC, 英数`となるわけですね。また、`only`では、キーを有効にするアプリを指定できます。ここでは、`TERMINAL`(ターミナルのこと)を指定していますが、他には、`VI, MACVIM`なども指定できます。

ちなみに、指定できるキーコードは以下のページが参考になります。`US`ではなく`JIS`キーボードの場合は、前に`JIS_`をつける点に注意です。

https://github.com/tekezo/Karabiner/blob/version_10.5.0/src/bridge/generator/keycode/data/KeyCode.data
細かいgemを作りました：get_frozen

メインで作っているgemの作業中に、また細かいことが気になって別なgemをリリースしてしまいました。

# どんな時に使うものなの？
ライブラリを作っていると、外から来た値の、フリーズしたコピーを取りたくなる場面がありますが、もともとフリーズしていればコピーする意味はありませんし、さらに言えば数値や`true`などは、Rubyのバージョンによってフリーズしているかも違えば、コピーも不可能です。

そのような状況で、「変わらない値として取得する」という操作を一元的に行えるのが`get_frozen`です。

# 使い方
[RubyGems](https://rubygems.org/gems/get_frozen)にありますので、

```rb
gem 'get_frozen'
```
で呼び出せます。[リポジトリはGitHubです](https://github.com/jkr2255/get_frozen)。

## Object#get_frozen
このgemが生やすメソッドは`get_frozen`だけで、これは、

* もともとfrozenなオブジェクト、あるいは組み込みのイミュータブルなオブジェクトなら、そのまま返す。
* そうでなければ、複製してフリーズしたものを返す。

というシンプルな機能を提供しています。

# 注意
基本的に、数値・文字列・コレクションといった「値」のあるオブジェクトを前提としたものなので、スレッド・ファイル・DBといった状態を持つオブジェクトに適用して動作するかは、ほぼ考えていません。
【Javascript】マウスクリックでトランプ画像の裏と表を入れ替える

```html:001.html

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>マウスクリックでトランプ画像の裏と表を入れ替える</title>
<style type="text/css">
</style>
</head>
<body>

<h2>マウスクリックでトランプ画像の裏と表を入れ替える</h2>

<Img id="b1" src="images/z02.png"><!--トランプの裏-->
<Img id="b2" src="images/z02.png"><!--トランプの裏-->
<Img id="b3" src="images/z02.png"><!--トランプの裏-->

<br>

<Img id="b4" src="images/z02.png"><!--トランプの裏-->
<Img id="b5" src="images/z02.png"><!--トランプの裏-->
<Img id="b6" src="images/z02.png"><!--トランプの裏-->

<script type="text/javascript">

function getElementID(nm){
  return document.getElementById(nm);
}

var reverse = (function(){

    var that={},my={};

    my.obj={b1:"images/c01.png",//トランプの表
            b2:"images/c02.png",//トランプの表
            b3:"images/c03.png",//トランプの表
            b4:"images/c04.png",//トランプの表
            b5:"images/c05.png",//トランプの表
            b6:"images/c06.png"};//トランプの表

    my.turn=function(s){

     var id=s.id,
         img=s.img,
         flag=false,
         obj=getElementID(id);

         obj.onclick=function(){
             if(flag){
                 obj.src="images/z02.png";//トランプの裏
             }else{
                 obj.src=img;
             }
           flag=!flag;
         }

    }

    that.init=function(){
      for(var index in my.obj){
        my.turn({id:index,img:my.obj[index]});
      }
    }

    return that;

})();

window.onload=function(){
  reverse.init();
}

</script>
</body>
</html>

```

##解説
マウスクリックでトランプ画像の裏と表を入れ替える。
トランプの裏と表を変数flagのfalseとtrueを使って入れ替えている。トランプの数だけ変数flagが必要と思うかもしれないが、クロージャを使用すると、トランプの数がどれだけ多くても、上記コードのように変数flagが1つだけでOKである。
トランプの画像は[無料素材倶楽部][1]にあったトランプの画像を使用した。

##参考文献
[無料素材倶楽部][1]
[1]:http://sozai.7gates.net/docs/trump/
maximaのplot時に使える色とか点の種類

maximaのプロット時に使える点の種類の一覧とか色の一覧とか。割と見つけづらかったのでメモ。

## 点の種類(point_type)一覧

- bullet
- circle
- plus
- times
- asterisk
- box
- square
- triangle
- delta
- wedge
- nabla
- diamond
- lozenge

### 指定方法  
plot_typeを用いて指定する。  

    plot2d(....,[plot_type,box,circle,diamond],...);


## 色一覧(color)

- red
- green
- blue
- magenta
- cyan
- yellow
- orange
- violet
- brown
- gray
- black
- white

また、色はこれ以外にも"#"で始まる６桁の１６進数を使うこともできる。

### 指定方法  
colorを用いて指定する。  

    plot2d(....,[color,red,blue,yellow,gray],...);


## 参考資料  

http://maxima.sourceforge.net/docs/manual/maxima_12.html