OmniAICreator/Qiita-1.07M huggingface dataset:
Docker Client for Windows を早速試してみる

>記 2016/05/15
>本プロジェクトはDeprecatedステータスとなっています。
>https://github.com/boot2docker/windows-installer

Docker 1.6 がリリースされた。アップデートの中で Docker Client for Windows が Available となっている。ちょっとそれを試してみたくなったので軽くログる。ようは、Windows 端末から docker が使えるか？を見てみたいから。

# 環境

- Windows 7 SP1 Home Premium 64bit
- VirtualBox 4.3.24

# Docker Client for Windows とは
**Docker Client for Windows** はひらたくいえば、Windowsマシンが Docker Host となりその上でコンテナを動かせるようになるもの。（実はWindowsマシン上でLinux VMがVitrualBoxで稼働しそれがDocker Hostとなっている）

もう少しいうと、Linux VMは **boot2docker** という Tiny Core Linux ベースの Docker コンテナに特化したものが動く。この Linux は非常に軽い。


# Install

https://github.com/boot2docker/windows-installer/releases/tag/v1.6.0
から **docker-install.exec** をダウンロード

なんてことなく、.exe を叩いてステップを踏んでいくだけ

![1.png](https://qiita-image-store.s3.amazonaws.com/0/75458/3a9c0efa-39e7-a383-b6f8-036e62beec2b.png)

![2.png](https://qiita-image-store.s3.amazonaws.com/0/75458/8e99fdee-0a80-4959-fc59-a06bd129c43f.png)

![3.png](https://qiita-image-store.s3.amazonaws.com/0/75458/26c29f5b-5909-b45a-f7b9-82cb7a01c8a7.png)

![4.png](https://qiita-image-store.s3.amazonaws.com/0/75458/f7832af3-d1e2-61b9-3513-aa98ea82a0f1.png)
*VirtualBox はインストール済みなのでチェックが外れてる

![5.png](https://qiita-image-store.s3.amazonaws.com/0/75458/0191fa6a-173b-da71-1efe-e8e847628965.png)

![6.png](https://qiita-image-store.s3.amazonaws.com/0/75458/c8d28369-a976-2326-8f47-3a9672591d02.png)

![7.png](https://qiita-image-store.s3.amazonaws.com/0/75458/55277284-0284-b171-f8c4-b196ebd91d82.png)

インストール後デスクトップ以下のようなアイコンが出てるのでダブルクリック
![8.png](https://qiita-image-store.s3.amazonaws.com/0/75458/5f6bca55-2b49-5607-93c2-7c2fe624c1a4.png)

小窓が開いて・・・・

![9.png](https://qiita-image-store.s3.amazonaws.com/0/75458/eaea8d03-92d3-42c6-f113-cddf5c84fb12.png)

しばらくするとシェルに落ちる

![10.png](https://qiita-image-store.s3.amazonaws.com/0/75458/3dec0cb0-9b34-c5f3-4050-5bf38d760fbe.png)
幾つかホストの情報と環境変数がアウトプットされているのを確認しとく。

**hello-world** を **run** してみる

![11.png](https://qiita-image-store.s3.amazonaws.com/0/75458/67e8cfec-2cf8-ed74-3613-b5f7d06f3af3.png)

# CMD.exe から boot2docker を起動する場合

ssh のパスを指定してから boot2doker をスタート

![12.png](https://qiita-image-store.s3.amazonaws.com/0/75458/64d1aef4-9bad-7f51-ae35-5d9476480c9b.png)

Docker Host の IPアドレスが 192.168.59.103 となっているぽい。ここで出力されているように環境変数をセット

```code
c:\>set DOCKER_HOST=tcp://192.168.59.103:2376
c:\>set DOCKER_CERT_PATH=C:\Users\takeshik\.boot2docker\certs\boot2docker-vm
c:\>set DOCKER_TLS_VERIFY=1
```

Nginx 動かしてみる

```code
c:\docker run --rm -it -p 80:80 nginx
```

ブラウザからアクセス

![13.png](https://qiita-image-store.s3.amazonaws.com/0/75458/b83a9a73-fe80-308c-0e9b-8e711847c287.png)

ちなみに、同じようなことだが ubuntu を run して apache2 を動かしてもちゃんと動いた。

![14.png](https://qiita-image-store.s3.amazonaws.com/0/75458/44b9f940-f8ce-302d-0daa-ac5508e01d06.png)

いくつかイメージを動かしたけども、期待するようにうごいたがあまり大きなイメージだとだめかも・・・途中VMが一時停止になったりハングったりした。

続きはまた今度。

#参考

- http://azure.microsoft.com/blog/2015/04/16/docker-client-for-windows-is-now-available
- http://docs.master.dockerproject.com/installation/windows/
- http://boot2docker.io/
固定長キュー

# 概要

サイズ固定のキューを作りたい。
例えばキューのサイズが５として

before
  |1|2|3|4|5|
6 を追加すると
  |2|3|4|5|6|
になるようなもの。

# 作り方

std::deque クラスを使うと簡単に作れました。

```cpp:FixedQueue.h

#include <deque>

/**
 * 固定長キュークラス
 */
template <typename T>
class FixedQueue
{
public:

    typedef typename std::deque<T>::iterator iterator;
    typedef typename std::deque<T>::const_iterator const_iterator;

    //! サイズ指定コンストラクタ
	FixedQueue(size_t size)
	{
		que.resize(size);
	}

    //! 後ろに要素を追加
    void push_back(const T&& t)
	{
	    que.pop_front();
	    que.push_back(t);
	}

	void push_back(const T& t)
	{
	    que.pop_front();
	    que.push_back(t);
	}
	
	//! 前に要素を追加
	void push_front(const T&& t)
	{
	    que.pop_back();
	    que.push_front(t);
	}

	void push_front(const T& t)
	{
	    que.pop_back();
	    que.push_front(t);
	}
	
	iterator begin() { return que.begin(); }
	const_iterator begin() const { return que.begin(); }
	
	iterator end() { return que.end(); }
	const_iterator end() const { return que.end(); }

private:

    std::deque < T > que;       //!< データが格納されているコンテナ
};

```

# 使い方

使い方は std::deque と同じ。
イテレータを持ってる（deque のを流用）ので拡張 for 文も使えます。

```cpp:main.cpp
#include <iostream>
#include "FixedQueue.h"

using namespace std;

template <typename T>
void printQue(const FixedQueue<T>& que)
{
    cout << "print: ";
    for(const T& t : que)
    {
        cout << t << ", ";
    }
    cout << endl;
}

int main(void)
{    
    FixedQueue<int> que(5);
    
    for(int i = 1; i < 100; ++i)
    {
        que.push_back(i);
        printQue(que);
    }    
}
```

## 出力

```
print: 0, 0, 0, 0, 1, 
print: 0, 0, 0, 1, 2, 
print: 0, 0, 1, 2, 3, 
print: 0, 1, 2, 3, 4, 
print: 1, 2, 3, 4, 5, 
print: 2, 3, 4, 5, 6, 
print: 3, 4, 5, 6, 7, 
print: 4, 5, 6, 7, 8, 
print: 5, 6, 7, 8, 9, 
print: 6, 7, 8, 9, 10, 
print: 7, 8, 9, 10, 11, 
print: 8, 9, 10, 11, 12, 
print: 9, 10, 11, 12, 13, 
print: 10, 11, 12, 13, 14, 
print: 11, 12, 13, 14, 15, 
print: 12, 13, 14, 15, 16, 
print: 13, 14, 15, 16, 17, 
print: 14, 15, 16, 17, 18, 
print: 15, 16, 17, 18, 19, 
print: 16, 17, 18, 19, 20, 
print: 17, 18, 19, 20, 21, 
print: 18, 19, 20, 21, 22, 
print: 19, 20, 21, 22, 23, 
print: 20, 21, 22, 23, 24, 
print: 21, 22, 23, 24, 25, 
print: 22, 23, 24, 25, 26, 
print: 23, 24, 25, 26, 27, 
print: 24, 25, 26, 27, 28, 
print: 25, 26, 27, 28, 29, 
print: 26, 27, 28, 29, 30, 
print: 27, 28, 29, 30, 31, 
print: 28, 29, 30, 31, 32, 
print: 29, 30, 31, 32, 33, 
print: 30, 31, 32, 33, 34, 
print: 31, 32, 33, 34, 35, 
print: 32, 33, 34, 35, 36, 
print: 33, 34, 35, 36, 37, 
print: 34, 35, 36, 37, 38, 
print: 35, 36, 37, 38, 39, 
print: 36, 37, 38, 39, 40, 
print: 37, 38, 39, 40, 41, 
print: 38, 39, 40, 41, 42, 
print: 39, 40, 41, 42, 43, 
print: 40, 41, 42, 43, 44, 
print: 41, 42, 43, 44, 45, 
print: 42, 43, 44, 45, 46, 
print: 43, 44, 45, 46, 47, 
print: 44, 45, 46, 47, 48, 
print: 45, 46, 47, 48, 49, 
print: 46, 47, 48, 49, 50, 
```
動的フォームをつくるときの参考資料

jsで入力項目をふやしたりするときの参考資料.
http://symfony.com/doc/2.1/cookbook/form/form_collections.html
http://docs.symfony.gr.jp/symfony2/cookbook/form/form_collections.html
http://phpmentors.jp/post/22236445243/practical-symfony-13-collectiontype-1
http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html
http://docs.symfony.gr.jp/symfony2/reference/forms/types/collection.html
http://blog.ville.jp/2013/03/04/1528
有名な集合 - LaTeXコードを高い保守性の下で記述する例

# はじめに

この記事は，最近設立された[東大TeX愛好会](http://ut-tex.club/index.php)の「今週のマクロ」の第2週の記事として書いたものを転用しています。またQiitaへの初投稿ということもあり，テストを兼ねています。

# 動機

「そこそこ多くの標準のコマンドを覚え，LaTeXに慣れてきた人」にはまだ若干実感が湧かないかもしれませんが，長期にわたって書き足したり修正したりする文書を作成するにあたっては **“文書のメンテナンス性の高さ”**[^1] が求められることも多いのではないでしょうか。つまり，後で**全体を**容易に変更する余地を残した文書作成を意識する必要が出てくるのです。以下では，マークアップ性を重視した文書作成の考え方について，簡単なマクロ定義の例によって見ていきます。

# 実践

今回はそういった “修正を容易にする” 発想のごく初歩的な例として，有名な集合を書き表すシンプルなマクロを紹介しましょう。ここでいう有名な集合というのは，自然数[^2]，整数，有理数，実数，複素数といった，ラテン文字1字で書き表される集合です。“普通に” やるなら，例えば

```latex
$n \in \mathbf{N}^{+}$，$p \in \mathbf{Q}$，$x \in \mathbf{R}$ とする．$
```

というコードを処理することで

![for_first_qiita1.png](https://qiita-image-store.s3.amazonaws.com/0/75927/65789940-4826-bd0f-60ef-597bd6982660.png)

と出力することが可能です。しかし，これらの集合の記法には複数の流儀があります。もしかしたら後で「太字イタリックにすべきだ」という要請があって

![for_first_qiita2.png](https://qiita-image-store.s3.amazonaws.com/0/75927/9827bef8-0f65-4057-8ee0-3455dc5ef589.png)

と修正したり，或いは「黒板太字にしてほしい」[^3]という依頼があって

![for_first_qiita3.png](https://qiita-image-store.s3.amazonaws.com/0/75927/653f31c8-5b54-c0eb-2b88-08d8ed36a8c0.png)

に修正することになるかもしれません。こうなるとこれらの集合に使われたすべての`\mathbf`を`\bm`に置き換えなければならないのですが，集合以外でも`\mathbf`を使っていると単純な文字列置換では済まなくなったりして修正が大変です。

そこで，最初に掲げたような “単に出力するための書き方” をするのではなく，まず

```latex:my-style.sty
\def\usebbsetcapital{\def\setcapital##1{\mathbb{##1}}}
\def\usebfsetcapital{\def\setcapital##1{\mathbf{##1}}}
\def\usebmsetcapital{\def\setcapital##1{\bm{##1}}}
\usebfsetcapital
\def\setC{\setcapital{C}}
\def\setH{\setcapital{H}}
\def\setN{\setcapital{N}}
\def\setNpos{\setcapital{N}^{\mathord{+}}}
\def\setP{\setcapital{P}}
\def\setQ{\setcapital{Q}}
\def\setR{\setcapital{R}}
\def\setRpos{\setcapital{R}^{\mathord{+}}}
\def\setZ{\setcapital{Z}}
```

というスタイルファイルを保存しておきます。これを用いて，実際に記述する文書を

```latex:my-document.tex
\documentclass{jsarticle}
\usepackage{amssymb}
\usepackage{bm}
\usepackage{my-style}
\begin{document}
  \indent
    $n \in \setNpos$，$p \in \setQ$，$x \in \setR$ とする．
  \par
\end{document}
```

として処理すると，やはり

![for_first_qiita1.png](https://qiita-image-store.s3.amazonaws.com/0/75927/65789940-4826-bd0f-60ef-597bd6982660.png)

のように出力されますが，これが最初の “単に出力するための書き方” と違うのは，プリアンブル[^4] の`\usepackage{my-style}`以降に

```latex
\usebmsetcapital
```

を追加して処理するだけで

![for_first_qiita2.png](https://qiita-image-store.s3.amazonaws.com/0/75927/9827bef8-0f65-4057-8ee0-3455dc5ef589.png)

とすべて修正された出力となる点です。つまり，**最初から複数の記述方法をとりうるものは一斉に変更できる仕組みにしておこう**という考え方です。意味を明示した（セマンティックな）コマンド名にしておけば，**コードも見やすくなり**，一挙両得！

ただし，セマンティックなコードを目指すあまり複雑なマクロ化を施してしまうと，今度は打つのが大変になりますから，適度な範囲に留めておくことをおすすめします。

[^1]: 一般に**保守性**と呼ばれます。
[^2]: 0 は自然数。
[^3]: ただし「黒板太字は手書きに使われる字体であって印刷に用いる代物ではない」という主張があり，TeXの作者Donald. E. Knuthも活字として黒板太字を使用することには苦言を呈しているらしいです。
[^4]: `\documentclass{...}`と`\begin{document}`の間の部分を指します。
Phinxのcreate(), update(), save()

Phinxには、テーブルを作ったり編集したりするコードを書いたあとで、create()やupdate()というメソッドを呼ぶ必要があります。
でも、save()なんてメソッドもあります。
うーん、違いはなんだろう・・・。

# 違い

ソースから引用。

## create()

> Creates a table from the object instance.

_テーブルを作ります。_


## update()

> Updates a table from the object instance.

_テーブルを更新します。_


## save()

> Commits the table changes.
> If the table doesn't exist it is created otherwise it is updated.

_テーブルがなければ作るし、あれば更新します。_

# おまけ
へー、なるほど。
ただ、removeIndex()するときは、save()する必要がなく、すぐに適用されるようです（公式Docより）。

> There is no need to call the save() method when using removeIndex(). The index will be removed immediately.
Selenium (webDriver) と IE11の組み合わせについて

# はじめに

今までwebDriver+IEの組み合わせで作業をしたことがなかったので調査してみた。

## 環境

Windows 7 SP1
IE11 (更新バージョン11.0.18 KB3038314)
IEDriverServer.exe(64bit版。2.45.0)
Java 1.8.0_40
Eclipse 4.4.2

## お約束
IEを使って動作させる場合、インターネットオプションの設定が必須です
この設定を変えてた場合どのような現象が発生するかを調査

インターネットオプションのセキュリティータブ内の設定

| インターネット | ローカル | 信頼 | 制限 | 結果 |
|:--:|:--:|:--:|:--:|:--:|
|ｘ|ｘ|ｘ|ｘ|正常動作|
|Ｏ|ｘ|ｘ|ｘ|ブラウザ起動、エレメント　捕捉不可|
|Ｏ|Ｏ|ｘ|ｘ|正常動作|
|Ｏ|Ｏ|Ｏ|ｘ|正常動作|
|Ｏ|Ｏ|Ｏ|Ｏ|正常動作|
|ｘ|Ｏ|Ｏ|Ｏ|ブラウザ起動、エレメント　捕捉不可|
|ｘ|ｘ|Ｏ|Ｏ|正常動作|
|ｘ|ｘ|ｘ|Ｏ|正常動作|

・所感
あれ？なんか結構動いているけど？？？

この調査は、下記を設定している場合です。

```lang:java
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
```

これを指定しなかった場合

| インターネット | ローカル | 信頼 | 制限 | 結果 |
|:--:|:--:|:--:|:--:|:--:|
|ｘ|ｘ|ｘ|ｘ|正常動作|
|Ｏ|ｘ|ｘ|ｘ|ブラウザ起動せず|
|Ｏ|Ｏ|ｘ|ｘ|ブラウザ起動せず|
|Ｏ|Ｏ|Ｏ|ｘ|ブラウザ起動せず|
|Ｏ|Ｏ|Ｏ|Ｏ|正常動作|
|ｘ|Ｏ|Ｏ|Ｏ|ブラウザ起動せず|
|ｘ|ｘ|Ｏ|Ｏ|ブラウザ起動せず|
|ｘ|ｘ|ｘ|Ｏ|ブラウザ起動せず|


・所感
なるほど。で、そもそもあの指定は何？

seleniumのコントリビューターである JimさんのPOST
http://jimevansmusic.blogspot.jp/2012/08/youre-doing-it-wrong-protected-mode-and.html

<<超超訳>>
この設定はレジストリのチェックをしなくするものであって、危ないことをしてるよって意味だよ。
正攻法は、インターネットオプションの設定をしてね

・所感
ネットを検索すると、なぜか設定をOFFに合わせる記述になっているけど
この設定にするとアラートが上がる通り、危険にさらされる訳で
４つのロケーションを合わせてね、とあるが　ＯＦＦにしろ　とはなっていないし　全てON　の方が良いと思うのだが？？？
自分の環境では正常動作を確認していますが不具合があった事象を知っている方教えてください。

# 過去にあった事象

事象：JavaScript error
原因：2014.12に適用された　セキュリティーパッチ　KB3025390　が原因
解決方法：ＭSが出した　KB3021952を適用する

現象：キー入力が遅い
原因：ドライバーの64bitと32bit混在が原因との情報あり
http://stackoverflow.com/questions/8850211/why-is-selenium-internetexplorerdriver-webdriver-very-slow-in-debug-mode-visual
解決方法：32bit版を使う（少なくとも自分の環境では普通に使えました）
 （参考　http://devadjust.exblog.jp/19305561/　）

現象：NoSuchWindowException
原因：（追いきれませんでした・・・）
https://code.google.com/p/selenium/issues/detail?id=6511
解決方法：レジストリーを書き換える（詳しくは公式をご覧ください）
32bit版Windowsの場合、"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE"
64bit版Windowsの場合は、"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE"


# 所感
いろいろな情報が錯綜していて原因と解決策が一致していないかもしれないので間違っている点があればご指摘ください。

# 参考
公式
https://code.google.com/p/selenium/wiki/InternetExplorerDriver

@ITの保護モードの説明
Internet Explorerの保護モードとは？
http://www.atmarkit.co.jp/ait/articles/1405/16/news128.html
Monaca - onsen-uiでPopoverを出す時のハマリポイント

###クラウドで出来るHTML5ハイブリッド開発という本の219Pにons-popoverの使い方が載っていますが、SPA主体のangularベースで記載でしたのでonsen-uiだけでやる場合の方法を記載します。

##Toolbar

```html:index.html
<ons-toolbar>
  <div class="left">
    <ons-toolbar-button>
    <ons-icon icon="bars"></ons-icon>
  </ons-toolbar-button>
  </div>
  <div class="center">Home</div>
  <div class="right">
   <script type="text/javascript" src="js/popover.js"></script>
   <ons-toolbar-button><ons-icon icon="ion-ios-bell" onclick="popover.show(this)"></ons-icon></ons-toolbar-button>
  </div>
</ons-toolbar>
```
```html:popover.html
<ons-popover var="popover" cancelable style="width: 95%; max-width: 300px;" direction="down" animation="fade">
 <link rel="stylesheet" href="css/popover.css">
 <ons-row>
  <ons-col class="menu-item-col" onclick="navi.hide()">
   <ons-icon icon="ion-upload" class="menu-item-icon"></ons-icon>
    <div class="menu-item-label" color: #999;>新着通知</div>
  </ons-col>
  <ons-col class="menu-item-col" onclick="navi.hide()">
   <ons-icon icon="ion-folder" class="menu-item-icon"></ons-icon>
    <div class="menu-item-label" color: #999;>フォルダを作成</div>
  </ons-col>
  <ons-col class="menu-item-col" onclick="navi.hide()">
   <ons-icon icon="ion-edit" class="menu-item-icon"></ons-icon>
    <div class="menu-item-label" color: #999;>編集</div>
   </ons-col>
 </ons-row>
</ons-popover>
```
```JavaScript:popover.js
 ons.ready(function() {
   ons.createPopover('popover.html');
 });
```
```css:popover.css
.menu-item-col {
    text-align: center;
    padding: 12px 0 12px 0;
}

.menu-item-col:not(:first-child) {
    border-left: 1px solid #eee;
}

.menu-item-col:active {
    background-color: #eee; 
}

.menu-item-label {
    font-size: 11px;
    color:  #333;
    margin-top: 3px;
}

.menu-item-icon {
    color: #999;
    font-size: 20px;
}

.popover__content {
    min-height: 0;
}
```

####SPAでやるときも同じなのですが、angularを使わずonsen-uiだけで動かしたい場合は、ons-popoverにvarを設定してください。それを参照してJSもonclickも反応しますのでこの変数を間違えないようにしてください。また、サンプルではmenuという変数を与えてますが、slidemenu等を使っている場合はかぶると思うので、私はpopoverというものを使いましたがpopover自体も複数設定するかと思うので、適切な設計を行ってください。

####また、onclick="popover.show(this)のthisはeventなどでも大丈夫です。

####popover用のcssを読み込むタイミングですが、SPAでやらない場合は各ページごとにJSとCSSを読み込ませたほうが間違いなく動くので、ons-pageの下にまたはons-page自体に読み込ませる場合はその上に記述してください。これはpopoverに限らず原則的にそのように動いています。

####それから、クラウドIDE上のテストは非常にうまくいくのですが、iPhone等でデバッガーを使った場合は呼び出すまでに凄く時間がかかるので、気をつけてください。
Atomのメニュー日本語化で今更気づいたアクセスキーの件


#前置き 
ATOMのメニューの日本語化をいろいろ試行して、アクセスキーってのを今更理解し始めた日々です。20年くらいWindows使ってるんだけどな・・
#alt+f , alt+h　ってATOMの標準で予約されてるやん・・
githubのissueにも上がってたけど。
アクセスキーってどうやんのかなあとか思ってalt+fでファイルメニュー操作できるんだな！！
とか連打しても動かねー。

```:keymap.cson
'editor':
	'alt-f': 'unset!'
	'alt-h': 'unset!'
```
こうしないと何も始まらんという・・

主要なWindowsのソフトには大概設定されてるし、ほぼ同一な配置してるから確かに使い続けてる人には重要だし、キーボード操作だけで速度が全然違ってくるよなあ、などど今更思ったわけです。

ただ、メニューの日本語化はpackageで追加されまくっていくため埒あかないから、packageで設定を決め打ちに持つよりかは個人設定側に突っ込めるようにした方がメンテが楽な気がする日々。
Golang でスライス再確保？（slice = slice[a:b:c]）

こんにちは。
Golang でslice計算で ```slice = slice[a:b:c]``` とするとその際に内部で再確保が行われるのか分からなかった。（なお ```slice[a:b] は slice[a:b:cap(slice)]``` に等しいですね。）

* その後考えると、capacityを言語任せで良ければ、```slice = append(slice[:0], slice[a:b])```  と書けば、再確保は必要な場合に限って行われるはずですね（ソースを見て確認する必要がありますが）。

下記は、仕方ないので、その capacity (= c - a) を出力してお茶をにごしましています。

```
l := 4
h := l + 2
n := l + 4  // 結果 ==> 8
slice := make([]int, n)
if true {
  slice = slice[l:h]
  fmt.Println(cap(slice))  // 結果 ==> 4
} else if false {
  slice = slice[l:h:l+n]
  fmt.Println(cap(slice))  // 結果 ==> 8
} else if false {
  copy(slice, slice[l:h])
  slice = slice[:h-l]
  fmt.Println(cap(slice))  // 結果 ==> 8
}
```
ドットでつながれたプロパティ名で指定された値をサクっと取得する方法


`"foo.bar.baz"` みたいな文字列で `getFoo().getBar().getBaz()` によって得られる値を取得します。

Spring の使用が前提ですが、SpEL を利用することで簡単に取得できます。

```.java
SpelExpressionParser parser = new SpelExpressionParser();
Expression expr = parser.parseExpression("foo.bar.baz");
Object value = expr.getValue(bean);
```

これだけ。

`StandardEvaluationContext` を用意して、`MapAccessor` を設定しておけば `Map` オブジェクトに対しても同様にアクセスできます。

```.java
StandardEvaluationContext context = new StandardEvaluationContext();
context.addPropertyAccessor(new MapAccessor());

Object value = expr.getValue(context, map);
```
Dockerで none なイメージを一括で削除するワンライナー

`docker pull`を何回も叩いていると、ローカルのイメージが`<none>`になってしまうことがあります。

```
$ docker images
REPOSITORY             TAG                          IMAGE ID            CREATED             VIRTUAL SIZE
node                   latest                       6d123ea65021        2 weeks ago         706.5 MB
centos                 latest                       2b8d6139a545        2 weeks ago         212.1 MB
postgres               latest                       dcce0da1c311        2 weeks ago         213.9 MB
mysql                  latest                       97454fa6c9d3        2 weeks ago         282.8 MB
<none>                 <none>                       9552b2f0723b        2 weeks ago         255.7 MB
debian                 latest                       1265e16d0c28        2 weeks ago         84.98 MB
```

`<none>`になる条件は、新しいイメージが既存のタグを再利用したときにそうなるようです。
古い方のイメージがタグを剥奪されるみたいな感じ。


# `<none>`イメージを一括削除する

-f(フィルタ）オプションを使うと <none>イメージを抽出することができます。

```
docker images -f "dangling=true"
```

この出力を使ってイメージ一括削除すればOKです。

```
docker rmi $(docker images -f "dangling=true" -q)
```

# 追記

v1.2５以降は、下記のようにもっと簡単にできます。
https://docs.docker.com/engine/reference/commandline/image_prune/

```
docker image prune
```
LightningコンポーネントでAngularJSを動かす

ちょいネタです。

Lightningコンポーネントには双方向バインディングがない（と思う）ので、AngularJSを動かしてみました。（Knockout.jsの方が軽くてよさそうですけど。）
でも、普通に`ng-repeat`とかやるとレンダリングした時に属性を消しやがりまして動きません。

ポイント

- `ng-controller`などは削除されてしまうので、`data-ng-controller`にする。
- `ng-app`は最初の一つしか自動起動しないため、複数コンポーネントが配置された場合に動かなくなるので、`angular.bootstrap`で手動起動する。

# Component

```xml
<aura:component access="global" implements="flexipage:availableForAllPageTypes" description="">
  <ltng:require scripts="/resource/angular_min_js" afterScriptsLoaded="{!c.doInit}" />
  <div id="{!globalId + '_sampleApp'}" data-ng-controller="MainCtrl">
    <h1>Angular!</h1>
    <p>{{msg}}</p>
  </div>
</aura:component>
```

# Controller

```js
({
  doInit: function(component, event, helper) {
    var globalId = component.getGlobalId();
    var appName = globalId + '_sampleApp';
    var app = angular.module(appName, []);
    app.controller('MainCtrl', ['$scope', function($scope) {
      $scope.msg = "Hello!";
    }]);
    angular.bootstrap(document.getElementById(appName), [appName]);
  }
})
```

# 動く

![スクリーンショット 2015-04-17 22.06.05.png](https://qiita-image-store.s3.amazonaws.com/2454/27267/53a1e037-c419-ebcc-b765-c1667861e918.png)

おしまい

# 追記（2015/04/28 14:03）

AngularJSは`window.angular`にセットしてしまう。
クロージャで囲んでも中で`window.angular`にセットしてしまうので、他のバージョンのAngularJSを使ったコンポーネントと共存できなくなってしまう。
LightningコンポーネントでAngularJSを使うのは無理かも。。。
C# のパラレル処理ループ Parallel.For の MaxDegreeOfParallelism は何個ぐらいで十分？

https://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel_methods(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/system.threading.tasks.paralleloptions.maxdegreeofparallelism.aspx

と言うわけでパフォーマンスを比較してみました。
<b>注意：コンパイルはデバッグモードなので、リリースモードのコンパイルとパフォーマンスは異なります。</b>
<b>またCPUクロック数、コア数、その他様々な環境に起因して処理速度は大きく変化します。</b>

今回使用した CPU は Core i7 2600k 4.4Ghz動作（定格動作です）、物理コア数4、HTで 仮想8コアです。

データ生成数 1万件の人物情報生成（名前、住所、年齢、年収、性別など16のカラム数を持つ人物情報を1万件生成）
並行処理数:1個 / 処理時間：3.7694053秒
並行処理数:2個 / 処理時間：1.0317924秒
並行処理数:3個 / 処理時間：0.7661187秒
並行処理数:4個 / 処理時間：0.7430526秒

なので、並行処理数 3～4 で十分ではないでしょうか。
並行処理を全く使ってない環境の場合、2 に設定するだけでも半分以下の処理時間になるので、
劇的なパフォーマンス改善が望めると思います。
areaに設定した擬似要素（:before, :after）がブラウザによって表示されない

```css:css
area:after{
    content: 'hoge';
}
```

- ○ chrome 41
- ○ opera 26
- × firefox 37
- × safari 8

areaごとのaltをテキストとして重ねて表示させるというのをやりたかったんですが表示されませんでした。
あまり使うようなことも無いんですが、意外だったのでメモ。
最低限のGit運用フロー

Webサイト制作のためのGit運用フローを作ってみました。
実際に運用しながら適宜更新していきたいと思います。
また意見を伺いたいです。

#目的
1. 複数人で効率的に共同作業ができるように最低限の操作を覚えてほしい ＋ 最低限のルールを決めたい
2. 納品ファイルの履歴を管理したい

#最低限の操作を覚える
↓をひと通り演習。
[Git をはじめからていねいに](https://github.com/takanabe/introduction-to-git)
基本的な操作が身につきます。より高度なことは都度身につけていけば良いです。
GUIクライアントソフトを使う前に上記でコマンド操作を演習しておくべきかと思います。

#最低限の運用フロー
![git運用フロー図.png](https://qiita-image-store.s3.amazonaws.com/0/26777/8ffc0b77-9af7-0ed3-3c9a-06384997557a.png)


| ブランチ名  | 説明     | 
|:-----------|:---------|
| `master`                | メイン |
| `release`               | プレビュー・納品用 |
| `feature/[機能・作業名]`  | 作業用 |

* `master`と`release`ブランチを常駐
*  何か作業する時は`master`ブランチから`feature/[機能・作業名]`という名前でブランチを切りそちらで作業する。作業完了後masterへマージ。
* 一人作業かつ作業規模が小さい場合のみ`master`ブランチで作業してもよい
* masterへマージした後featureブランチは削除する。再作業時に都度同名ブランチを作るように
*  `master`→`feature`ブランチへのマージは適宜おこなう
*  作業がある程度終わりプレビュー、納品を行う段階に入ったら`master`→`release`へマージする
*  納品したリビジョンは`release`ブランチよりTagを付ける。`release/[YYYYMMDD（公開年月日）]/v[バージョン番号]`
*  一度納品データが完成しTagを付けた後、再修正・再納品が発生した場合、バージョン番号を上げてタグを付け直し古いバージョン番号のタグを削除する

##READMEを書く
* リポジトリルートに必ずREADMEファイル（`README.md` OR `README.txt`）を置く
* READMEに書く内容は、

ビルドが不要な場合（HTML、CSS、JavaScriptなどのコーディングデータ）
  * リポジトリ内の納品フォルダの場所（パス）

ビルドが必要な場合（Jade、SCSS、AltJSなどから書き出す場合）
  * 納品データのビルド手順
  * リポジトリ内の納品フォルダの場所（パス）


#GUIクライアントソフト
* [Gity!（Mac〜10.9まで）](http://gityapp.com/)
* [SourceTree](https://www.atlassian.com/ja/software/sourcetree/overview)

#参考
[Git入門：Git初学習者のための効率的な学習方法を考えてみた](http://blog.takanabe.tokyo/2014/12/13/git%E5%85%A5%E9%96%80%EF%BC%9Agit%E5%88%9D%E5%AD%A6%E7%BF%92%E8%80%85%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E5%8A%B9%E7%8E%87%E7%9A%84%E3%81%AA%E5%AD%A6%E7%BF%92%E6%96%B9%E6%B3%95%E3%82%92%E8%80%83/)
[俺のオレオレgit-flow](http://www.songmu.jp/riji/entry/2014-02-10-git-ore-flow.html)
進数の罠


変数に代入する時点で、当たり前の事が当たり前に行なわれただけなのに、混乱してしまった古いメモ。

```shell-session:文字列
$ perl -MDevel::Peek -le '$_ = "0x100" ; Dump $_ ;  printf "%d\n", eval $_ ; print oct $_'
SV = PV(0x7feaa4005270) at 0x7feaa403d760
  REFCNT = 1
  FLAGS = (POK,pPOK)
  PV = 0x7feaa3c06e60 "0x100"\0
  CUR = 5
  LEN = 16
256
256
```


* `eval $_` しないと、文字列なので `printf` がエラーを吐く。
* 進数を明示したい場合に `'0b' . $var` などとするが、出来たものは、勿論文字列

```shell-session:数値
$ perl -MDevel::Peek -le '$_ = 0x100 ; Dump $_ ;  printf "%d\n", $_ ; print oct $_'
SV = IV(0x7f949b03d750) at 0x7f949b03d760
  REFCNT = 1
  FLAGS = (IOK,pIOK)
  IV = 256
256
174
```

* 地の文での進数が何であろうと、変数に代入した時点で 10 進数へ変換
* 変数に数値を代入したのか、文字列を代入したのかで、上述の `'0b' . $var` でハマる[^1]。ので、注意しながらコードを書く。


[^1]: '0101' なら　'0b0101' だけど、 0101 なら '0b65' なんつー意味不明な状態となる。この例だとエラーが出てくれるからまだ良いが、、、
Atom Editorでインストールしているおすすめパッケージ一覧

## はじめに
[なんちゃってVimmerにおくるAtomおすすめPackages](http://qiita.com/cw-shibuya/items/dfc477c146694c85399e) の続編です。

すでに既出感のあるおすすめパッケージまとめですが、気にしないでおこうと思います。

## パッケージ一覧

### [sublime-style-column-selection](https://atom.io/packages/Sublime-Style-Column-Selection)

Atomでも矩形選択できるようになります。
最近は [multi-cursor](https://atom.io/packages/multi-cursor) の方がお気に入りです。
詳しくは [【Atom Editor】マウス操作不要！キーボードだけで矩形選択をする方法 - Qiita](http://qiita.com/cw-shibuya/items/ea043acab16925497cb4)

### [atom-alignment](https://atom.io/packages/atom-alignment)

`=` の位置を揃えてくれます。

```
'a' => 'a',
'bbb' => 'b',
'ccccc' => 'c',
```
↓

```
'a'     => 'a',
'bbb'   => 'b',
'ccccc' => 'c',
```

###[autocomplete-plus](https://atom.io/packages/autocomplete-plus)

入力補助です。
デフォルトのキーバインドが個人的には使いにくかったので変更しています。（設定画面から変更出来ます）

### [custom-title](https://atom.io/packages/custom-title)

Atomエディタ上部に表示するタイトルをカスタマイズできます。
ちょっと前まで`1プロジェクト` `1ルートディレクトリ` だったので複数のリポジトリを行き来する時に今どっち開いてるのかわかる っていうメリットがあったんですが、最近複数ルートディレクトリ対応したのであまり活躍してないです。

### [docblockr](https://atom.io/packages/docblockr)

メソッドコメント書いたりするのに便利

### [duplicate-lines-upward](https://atom.io/packages/duplicate-lines-upward)

Atomには行複製機能があるんですが、複製方向が↓方向にしかないので、これいれて↑方向に複製できるようにしてます。

### [ex-mode](https://atom.io/packages/ex-mode)

`vim-mode`で足りない機能を拡張してくれます。
`:w` で保存出来るようになったり、自分で好きなマッピングを追加できたりするようです。

### [file-icons](https://atom.io/packages/file-icons)
アイコンがおしゃれになります。ただそれだけ。だがそれがいい。（たぶん）

### [find-selection](https://atom.io/packages/find-selection)

find/replaceダイアログを使わなくても検索ができるようになります。
![vDQ66AHYSx.gif](https://qiita-image-store.s3.amazonaws.com/0/43862/e914c71a-9e3f-407f-1e2b-d4ca03dd6ac5.gif)
さくっと検索するのに便利

### [highlight-selected](https://atom.io/packages/highlight-selected)
ダブルクリックして選択した単語がハイライトされます。便利ー

### [last-cursor-position](https://atom.io/packages/last-cursor-position)
一つ前のカーソルがあった位置へジャンプしてくれます。
複数のファイルを開いていてさっき修正していた箇所に戻りたい って時とかに役立つかと

### [multi-cursor](https://atom.io/packages/multi-cursor)
キーボードだけで矩形選択出来るようになります。
[【Atom Editor】マウス操作不要！キーボードだけで矩形選択をする方法 - Qiita](http://qiita.com/cw-shibuya/items/ea043acab16925497cb4)

### [project-manager](https://atom.io/packages/project-manager)
プロジェクトを名前を付けて保存・切り替えできます。
これ、標準機能じゃなかったんだ っていま気づきました

### [script](https://atom.io/packages/script)
さくっとScriptの動作確認したいときに便利。

### [synced-sidebar](https://atom.io/packages/synced-sidebar)
ファイルを開くと、サイドバーの対象ファイル位置へスクロールしてくれます。
階層が深いファイルを開いてもキチンとディレクトリ開いて表示してくれます

### [vim-mode](https://atom.io/packages/vim-mode)
vim-modeです。

## 終わりに

個人的にだいたいおすすめのパッケージを紹介出来たかなと。
たまにPackage一覧の新しいもの順でみると面白いです。

https://atom.io/packages/list?sort=created_at&direction=desc
laravelでページネーションを作る

フレームワークによってページネーションを作る方法は異なりますが、laravelでページネーションを作るのはわりと簡単でした。

# laravelでページネーションを作る
作り方としては大きく2つの方法があります。

## DBの結果をページネーション
基本的にはDBの結果を以下のようにページネーションすればいい。
```$article = DB::table('article')->paginate(50);```

Eloquentでやる場合は
```$allArticles = Article::paginate(50);```
のようにする。

もちろん、whereなども使用することができる。
```$allArticles = Article::where('article_type', 1)->paginate(50);```

## 手動でページネーションを作成する
```$paginator = Paginator::make($articles, $count_articles, $per_page);```

ただし、$articlesがarrayの場合単純に上記のようにページネーションを作成すると
1ページ内にアイテムが全ベージ文出てしまうので以下のようにする。

```
$chunk_articles = array_chunk($articles, 50);
$current_page = Input::get('page', 1);
$data['result'] = Paginator::make($chunk_articles [$current_page - 1], count($chunk_articles), $per_page);
```

こうすることで1ページに設定したアイテム数のページネーションを作成することが出来る。

# view側の実装
## 下準備

```
View::make($view, $data);
```

で\$viewに対象のview, \$dataにページネーションを含んだデータを入れて呼び出す。
例えば

```
$data['result'] = Paginator::make($chunk_articles [$current_page - 1], count($chunk_articles), $per_page);
```
のようにする。

## view

bladeを使うとする。
配列であればforeachで回してあげて配列でとれるし

```
<tbody>
    @foreach($result as $res)
         <tr>
             <th>{{{$res['title']}}}</th>
        </tr>
   @endforeach
</tbody>
```

objならば

```
<tbody>
    @foreach($result as $res)
         <tr>
             <th>{{{$res->title]}}}</th>
        </tr>
   @endforeach
</tbody>
```
で使用することが出来る。
ダンプファイルのExport時にファイル名に日付時刻をつける

#ダンプファイルのExport時にファイル名に自動で日付時刻をつけたいとき

今回はYYYYMMDD_TEST_hhmmss.DMPという名称のDMPを取得する想定です。

##まず日付

環境変数dateから数字を取得する。

コマンドプロンプト上でdate変数の値を取得してみる。

```
C:\>echo %date%
2015/04/16
```

上記の通りdate変数はスラッシュを含め10文字であるので、取得方法は下記のように取得できる。

```
YYYY：date変数の最後尾から10文字より4文字分
MM：date変数の最後尾から5文字より2文字分
DD：date変数の最後尾から2文字より2文字分
```

また、変数Aの最後尾よりm文字目からn文字分値を取得するには

```
%V:~-m,n%
```

と書く。

つまり、日付をYYYYMMDDの形式で取り出す場合、

```
%date:~-10,4%%date:~-5,2%%date:~-2,2%
```

と書けば良い。

##次に時刻

今度はtime変数から数字を取得する。

コマンドプロンプト上でtime変数から値を取得してみる。

```
C:\>echo %time%
16:21:14.10
```

time変数はdate変数と違い、注意が必要である。
####1時～9時までの場合、先頭文字に半角スペースが入ってしまう。


そこで、一旦time変数の先頭文字を0埋めして一時変数に置き換えてから値を取得することにする。

```
C:\>set time2=%time: =0%
```

time2変数からの取り出し方は下記の通り。

```
hh：time2変数の先頭文字より2文字分
mm：time2変数の先頭から3文字目より2文字分
ss：time2変数の先頭から6文字より2文字分
```

また、変数Aの先頭よりm文字目からn文字分値を取得するには

```
%V:~m,n%
```

と書く。

つまり、時刻をhhmmssの形式で取り出す場合、

```
%time2:~0,2%%time2:~3,2%%time2:~6,2%

※前から位置を指定しているので、位置は0はじまり。
```

と書けば良い。

##やっとダンプファイルのExport

下準備が整ったので、DMPのExportを行う。
YYYYMMDD_TEST_hhmmss.dmpというファイル名のDMPのExport文は下記の通り。

```
C:\> exp hoge/fuga@hogefugadb file=%date:~-10,4%%date:~-5,2%%date:~-2,2%_TEST_%time2:~0,2%%time2:~3,2%%time2:~6,2%.dmp

※Exportされたダンプファイル名は20150417_TEST_201050.dmpのような名称になる。
```


(´-`).oO(DatapumpのExport方法はおいおい…)
JUnit4 - AnnotationでDBデータ初期登録

# 今までの問題点
* 各メソッドに初期化メソッド呼び出しを埋め込む
 * とにかく面倒
 * 面倒なのはイヤ
* @Before, @Afterを書いたclassを継承
 * 継承そのものがイヤ
 * DBを初期化するbase class, 何か他の物を初期化するbase class, 両方を行うbase class...
 * 悪夢
* base classを1つにして、どのinterfaceをimplementsしているかで初期化対象を分岐...
 * 巨大classのできあがり
 * どっちにしろ悪夢

# 解決するために
* @Ruleで継承を避ける
* パラメータはAnnotationでメソッド毎に持たせる

# 必要クラス

```java:DBInitializer.java
public class DBInitilizer extends TestWatcher {
	@Override
	protected void starting(final Description description) {
		EntityManager em = ...;
		MasterFile file = description.getAnnotation(MasterFile.class);
		if (file != null) {
			TestFunction.insertMasterData(em, file.value());
		}
		em.clear();
	}

	@Override
	protected void finished(final Description description) {
		EntityManager em = ...;
		em.clear();
		MasterFile file = description.getAnnotation(MasterFile.class);
		if (file != null) {
			TestFunction.deleteMasterData(em, file.value());
		}
	}
}
```

```java:MasterFile.java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MasterFile {
	String value();
}
```

# 使用時には
* Ruleを付けたfieldを用意する

```java:TestCase.java
public class TestCase {
    @Rule
    public DBInitilizer di = new DBInitilizer();

    @Test
    @MasterFile("masterdata1.xls")
    public void databaseTest1() {
        ....
    }

    @Test
    @MasterFile("masterdata2.xls")
    public void databaseTest2() {
        ....
    }
}


```
ndenvで作った環境下でnpm install -gでインストールしたコマンドが見つからずに死にかける

# 起こったこと
jshintを使いたかったが、

```shell-session
npm install -g jshint
```
してもjshintコマンドが実行できない...

ndenv/shimsをlsしてもnodeとnpmだけ、
versions配下のbinにはjshintも含まれているのにshimsにはいない。
試しにndenv localでローカルとglobalのバージョンを合わせてみても、バージョンを切り替えてみても解決しない。
＼（＾q＾）／

# 解決方法
ndenv rehash

以上。
俺の1時間はなんやったんや…

# 参考URL
http://pydiary.bitbucket.org/blog/html/2014/01/01/nodejs.html
Androidエミュレータが起動しない(CPU acceleration status: HAX kernel module is not installed!)

Android Studioで開発してます。
いつもは実機をつないで動かしていたので何も気づかなかったのですが、実機が使えない状況に陥って仕方なくエミュレータを使うことに。。。

エミュレータを作成するところまでは超順調！
で、起動し。。。ない。
なんかログはかれてます。

```
emulator: ERROR: x86 emulation currently requires hardware acceleration!
Please ensure Intel HAXM is properly installed and usable.
CPU acceleration status: HAX kernel module is not installed!
```

何々、HAX kernel moduleとかいうのが無いだって。
SDK Managerを起動してみてみましょう。
一番下にいるじゃん！Installedになってるじゃん！！
![SDKMnager.PNG](https://qiita-image-store.s3.amazonaws.com/0/72763/b11de222-dab4-349f-f9a6-ee17912b7be4.png)

なんとなく名前が途中で切れているのが気になって広げていくと
「HAXM Installer」
え？インストーラー？？

そう、SDK Managerはモジュールをインストールしてくれたんではなくて、インストーラーをインストールしてくれたみたいです。
じゃあそのインストーラーはどこにあるの？？？
Extrasカテゴリにあるので、SDKのextrasディレクトリですよね。
C:\Users\[アカウント名]\AppData\Local\Android\sdk\extras\intel\Hardware_Accelerated_Execution_Manager
こんなところにいました。

ちなみに、HAXMは「Hardware Accelerated Execution Manager」の略称らしいです。
ExcutionなんだからEだろうが(笑)
lumen ガイド 1 Applicationクラスの中身


laravel謹製のマイクロフレームワーク `lumen`が出たので使ってみた。
ざっくり触りながらのまとめになりますが、ツッコミポイントとかアレば是非コメントお願いしまっす。

## インストール

laravelとは別のインストーラなので新規にComposer経由でグローバルインストール。

````
$ composer global require "laravel/lumen-installer=~1.0"
$ lumen new service
$ cd service
$ php artisan serve
````

`http://localhost:8000`でキレイに繋がります。

## 設定とか

`Dotenv`形式の設定がベースになっているっぽいけど、
`bootstrap/app.php` を見ると、`Dotenv::load`はデフォルトでコメントアウトされている。
基本の設定をコピーしてからアンコメントすると、キレイに読み込まれる。

ベースはproductionモードでエラー詳細とか見れないので、困ったときはこれで。

別ファイルからの設定とかも読み込めるみたいだけど後で。

## 概要

基本は`bootstrap/app.php`が兎に角がんばるみたいな形式っぽい。
`.env`の設定ファイルと`bootstrap/app.php`だけでアプリケーションを組み立てて行く。

`index.php`はというと、`bootstrap/app.php`からオブジェクトを受け取って`run()`するだけ。すっごくシンプル。

## bootstrap/app.php

1 Composer/Dotenvの読み込み
 
````php
require_once __DIR__.'/../vendor/autoload.php';

//Dotenv::load(__DIR__.'/../');
````

アプリケーションごとComposerに突っ込む時はComposerの読み込みは不要。Dotenvはデフォルトでコメントアウトされてるので必要がアレば外す。

2 Applicationオブジェクトの作成 

````php
$app = new Laravel\Lumen\Application;

// $app->withFacades();

// $app->withEloquent();
````

ファザードとかEloquentとか使いたい人はコメント外せばイイ。

3 implement実装の登録

例外ハンドラとタスクカーネルは必須っぽい。
スケルトンにあるAppとかを使ってとりあえず実装を登録しておく。

````php
$app->singleton(
	'Illuminate\Contracts\Debug\ExceptionHandler',
	'App\Exceptions\Handler'
);

$app->singleton(
	'Illuminate\Contracts\Console\Kernel',
	'App\Console\Kernel'
);
````

4 ミドルウェアの登録

デフォルトでは全部コメントアウトされてる。`middleware`メソドや`routeMiddleware`メソドが使える。

````php
// $app->middleware([
//     // 'Illuminate\Cookie\Middleware\EncryptCookies',
//     // 'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
//     // 'Illuminate\Session\Middleware\StartSession',
//     // 'Illuminate\View\Middleware\ShareErrorsFromSession',
//     // 'Laravel\Lumen\Http\Middleware\VerifyCsrfToken',
// ]);

// $app->routeMiddleware([
// ]);
````

5 サービス・プロバイダの登録

こちらもコメントアウトされてる。デフォルト登録のコンテナはここになくて、後述の`availableBindings`に処理が記述されてる。lumenならではのコンテナ取り出しバインディングを使いたい場合は後述の`availableBindings`を使えばイイ。

````php
// $app->register('App\Providers\AppServiceProvider');
````

6 ルートの読み込み

ルートファイルの読み込み。ファイルベースが嫌ならコメントアウトして、サービス・プロバイダとかに突っ込めばいいと思うよ。

````php
require __DIR__.'/../app/Http/routes.php';
````

7 お返し

ファイルベースで処理するのが嫌なら1-6までまとめて`$app`オブジェクトをreturnするクラスを作ればいいです(そのほうが可搬性も良さそう)。

````php
return $app;
````


## 設定周り

Application クラスのプロパティで色々制御できる。

### protected $basePath

ベースパス。色々なパスの計算の起点になる。

`base_path()`関数で値が取れます。

### protected $storagePath

storage ディレクトリの置き場所
ログとかがここに入る。

`storage_path()`関数で値が取れます。

### protected $configPath

config ディレクトリの置き場所

### protected $resourcePath

resource ディレクトリの置き場所

この扱いはホントに微妙で、早い話が`lang`でしかここの設定は使われてない。というのも`base_path()`とか`storage_path()`とかその辺の関数は用意されてんのに、`resource_path()`は用意されれなくてグローバルに参照出来ない。

`lang`は`translator`サービスの登録フックで使われているのでApplicationクラスからの内部参照で使われてるけど`views`の方はConfigファイルでのパス指定になるのでやむなく`base_path("resource/views")`とかしてる。

`translator`使わなければ別にここの値は無視してもいいし、ここの値をどうこうしても`view`サービスのパスは変更できない。

### public $availableBindings

デフォルトサービスの登録処理一覧。詳細は[こっち](http://qiita.com/mikakane/items/8cabb297f5d5bb3ca74f)


ルーティングは
http://qiita.com/mikakane/items/6cd03f81f718ce0a80c3
に移しました。
Meteorをインストールしようとした時に"Only 64-bit Intel processors are supported at this time."と言われたら。

[Meteor](https://www.meteor.com/)をインストールするときにハマったのでそのメモ。

原因として環境パスが考えられる。

# 1. まず、現在の環境パスを確認する。

```bash
$ echo $path
```

# 2. `/usr/sbin`を追加する。

`.zshrc`や`.bashrc`でexportするか、`/etc/paths`を編集する。

以上。
Macの環境でCucumber (capybara-webkit) でXvfbが無いよと言われたときの対処法

## 前提

OS X 10.9.5
capybara-webkit (1.0.0)
qt4


```
$ bundle exec cucumber
Xvfb not found on your system (Headless::Exception)
...vendor/bundle/ruby/2.0.0/gems/headless-1.0.1/lib/headless/cli_util.rb:9:in `ensure_application_exists!'
...vendor/bundle/ruby/2.0.0/gems/headless-1.0.1/lib/headless.rb:68:in `initialize'
```

qt入ってんだけどなぁ。。。。

メッセージでググると
`/opt/X11/bin/Xvfb`
が無いと行けないっぽい。

確認したら無い。

Apple公式情報からXQuartzをインストール
https://support.apple.com/ja-jp/HT201341

```
ls -al /opt/X11/bin/Xvfb
-rwxr-xr-x  1 root  wheel  3037632  8 12  2014 /opt/X11/bin/Xvfb
```
でてきた

```
$ bundle exec cucumber

#language: ja
フィーチャ: ....
```
うごいたっ！
cocos2d-js でスプライトを奥に向かってくるくる回す

RotateBy や RotateTo で回すんじゃなくて、奥に向かってくるくる回したいなと思って cc.orbitCamera を使って試してみた。

```js
this.sprite = new cc.Sprite("/path/to/card.png");
this.sprite.attr({
    x: size.width / 2,
    y: size.height / 2
});
this.addChild(this.sprite, 0);

orbit = cc.orbitCamera(1.5, 1, 0, 0, 360, 0, 0);
this.sprite.runAction(orbit.repeatForever());
```

これで想像した通りの回転してる。
Specinfra経由でSSHする

```ruby
require 'specinfra'

Specinfra.configuration.backend = :ssh
Specinfra.configuration.host = 'sample.udzura.jp'
Specinfra.configuration.ssh_options = {user: 'udzura', keys: '/Users/udzura/.ssh/udzura.pem'}
Specinfra.configuration.request_pty = true

Specinfra.backend
#=> #<Specinfra::Backend::Ssh:0x007fd10b9c4418 @config={}>

cmd = Specinfra::Runner.run_command('whoami')
#=> #<Specinfra::CommandResult:0x007fd10bb352e8 @stdout="root\n", @stderr="", @exit_status=0, @exit_signal=nil>
puts cmd.stdout
# root
```
【iOS】select要素内の文字列が長く、選択肢が省略されてしまう(…表示)場合の対策

下のコードのようにテキストが長い場合、iOSでは余剰分が省略されて(…)として表示されてしまいます。

```html
<select>
    <option>テキストテキストテキスト</option>
    <option>テキストテキストテキスト</option>
    <option>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</option>
</select>
```
![no-optgroup.png](https://qiita-image-store.s3.amazonaws.com/0/52375/e8b6f250-9f69-4b14-b8a7-daf55c8f41a8.png)
省略されても問題ないテキストの場合にはいいのですが、そうでない場合は以下のように`optgroup`を使用して対策します。

```html
<select>
    <optgroup label="">
        <option>テキストテキストテキスト</option>
        <option>テキストテキストテキスト</option>
        <option>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</option>
    </optgroup>
</select>
```
そうすると次の画像のように文字サイズも小さくなり、文章も折り返されるようになります。
![optgroup.png](https://qiita-image-store.s3.amazonaws.com/0/52375/4998db07-1e98-b103-4d6c-b6162c029f66.png)

`optgroup`要素は`select`要素の中身をグループ化するためのもので、本来`label`属性に何らかの値(文字)をいれますが、特に階層化しない場合には今回のように空にしておけば大丈夫です。

また、次のコードのように一番後の`option`要素の後に置く方法でも同じ結果が得られます。

```html
<select>
    <option>テキストテキストテキスト</option>
    <option>テキストテキストテキスト</option>
    <option>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</option>
    <optgroup label=""></optgroup>
</select>
```
Haskell でテンポラリファイルを扱う方法


テンポラリファイルを扱う方法を検証しました。

テンポラリディレクトリを扱う方法の検証は以下を参照してください。

[Haskell でテンポラリディレクトリを扱う方法 - Qiita](http://qiita.com/satosystems/items/ea965b63e1fc269fc74d)

## 検証コード

```SystemIoTempTest2.hs
import qualified GHC.IO.Handle as GIH
import qualified System.Directory as SD
import qualified System.IO.Temp as SIT

main :: IO ()
main = do
  (path, handle) <- SIT.openTempFile "/tmp" "hoge.txt"
  putStrLn $ "path: '" ++ path ++ "'"
  putStrLn $ "handle: '" ++ show handle ++ "'"
  GIH.hShow handle >>= \x -> putStrLn $ "hShow: '" ++ x ++ "'"
  GIH.hIsOpen handle >>= \x -> putStrLn $ "hIsOpen: '" ++ show x ++ "'"
  GIH.hIsClosed handle >>= \x -> putStrLn $ "hIsClosed: '" ++ show x ++ "'"
  GIH.hIsReadable handle >>= \x -> putStrLn $ "hIsReadable: '" ++ show x ++ "'"
  GIH.hIsWritable handle >>= \x -> putStrLn $ "hIsWritable: '" ++ show x ++ "'"
  GIH.hIsSeekable handle >>= \x -> putStrLn $ "hIsSeekable: '" ++ show x ++ "'"
  GIH.hPutStr handle "hogehoge"
  GIH.hFlush handle
  GIH.hSeek handle GIH.AbsoluteSeek 0
  contents1 <- GIH.hGetContents handle
  putStrLn $ "contents1: '" ++ contents1 ++ "'"
  GIH.hIsClosed handle >>= \x -> putStrLn $ "hIsClosed: '" ++ show x ++ "'"
  GIH.hClose handle
  contents2 <- readFile path
  putStrLn $ "contents2: '" ++ contents2 ++ "'"
  writeFile path "fugafuga"
  contents3 <- readFile path
  putStrLn $ "contents3: '" ++ contents3 ++ "'"
  SD.removeFile path
```

実行結果は以下のようになります。

```bash
$ runhaskell SystemIoTempTest2.hs 
path: '/tmp/hoge24220.txt'
handle: '{handle: /tmp/hoge24220.txt}'
hShow: '{loc=/tmp/hoge24220.txt,type=read-writable,buffering=block (2048)}'
hIsOpen: 'True'
hIsClosed: 'False'
hIsReadable: 'True'
hIsWritable: 'True'
hIsSeekable: 'True'
contents1: 'hogehoge'
hIsClosed: 'True'
contents2: 'hogehoge'
contents3: 'fugafuga'
```

テンポラリファイルは作成した後、自分で削除する必要があります。逆に言えば、削除のタイミングを自分で決定できるので、また削除せずに残しておくこともできるので、自由度はかなり高いです。

コードでは `"hoge.txt"` を渡していますが、拡張子の前に自動的にユニークになるように数値が入ります。ファイルを作成するディレクトリとして `"/tmp"` を指定していますが、場合によってはカレントディレクトリでも良いかもしれません。

気をつける点は、以下だと思います。

- `hGetContents` を呼び出す前に、`hSeek` でファイル読み書きの位置を読み出す場所に移動しておく
- `hGetContents` は遅延評価なので、読みだしたコンテンツを使用する前に `hClose` でハンドルを閉じると、内容が空白文字になる

テンポラリファイルの内容をハンドルで低レベル関数を使用して操作するのではなく、さっさと `hClose` で閉じてから、`writeFile` と `readFile` で操作するのが簡単で良いのではないかと思います。
Haskell でテンポラリディレクトリを扱う方法


テンポラリファイルを扱う方法として、System.IO.Temp を使う方法と System.Unix.Directory を使う方法があります。

サンプルを作ってみたところ、大体同じ使い方であることがわかりました。

テンポラリファイルを扱う方法の検証は以下を参照してください。

[Haskell でテンポラリファイルを扱う方法 - Qiita](http://qiita.com/satosystems/items/c5504ef759f18e1e4232)

## System.IO.Temp

```SystemIoTempTest1.hs
import qualified System.Directory as SD
import qualified System.IO.Temp as SIT 

tempFile :: String -> String
tempFile path = path ++ "/" ++ "hoge.txt"

withSystemTempDir :: FilePath -> IO String
withSystemTempDir path = do
  putStrLn $ "path: '" ++ path ++ "'" 
  isDirExist <- SD.doesDirectoryExist path
  putStrLn $ "isDirExist: " ++ show isDirExist
  writeFile (tempFile path) "hogehoge"
  isFileExist <- SD.doesFileExist $ tempFile path
  putStrLn $ "doesFileExist1: " ++ show isFileExist
  return path

main :: IO ()
main = do
  path <- SIT.withSystemTempDirectory "hoge" withSystemTempDir
  isFileExist <- SD.doesFileExist $ tempFile path
  putStrLn $ "doesFileExist2: " ++ show isFileExist
```

`withSystemTempDirectory` に `(FilePath -> IO a)` を渡し、その中でテンポラリファイルの操作を完結させる必要があります。関数を抜けると、作成されたテンポラリディレクトリごと削除されます。

以下、実行結果です。

```bash
$ runhaskell SystemIOTempTest.hs 
path: '/var/folders/lc/46fljbjd7m39wszcjqsjwf500000gn/T/hoge23608'
isDirExist: True
doesFileExist1: True
doesFileExist2: False
```

## System.Unix.Directory

```SystemUnixDirectoryTest.hs
import qualified System.Directory as SD
import qualified System.Unix.Directory as SUD

tempFile :: String -> String
tempFile path = path ++ "/" ++ "hoge.txt"

withTempDir :: FilePath -> IO String
withTempDir path = do
  putStrLn $ "path: '" ++ path ++ "'"
  isDirExist <- SD.doesDirectoryExist path
  putStrLn $ "doesDirectoryExist: " ++ show isDirExist
  writeFile (tempFile path) "hogehoge"
  isFileExist <- SD.doesFileExist $ tempFile path
  putStrLn $ "doesFileExist1: " ++ show isFileExist
  return path

main :: IO ()
main = do
  path <- SUD.withTemporaryDirectory "hoge" withTempDir
  isFileExist <- SD.doesFileExist $ tempFile path
  putStrLn $ "doesFileExist2: " ++ show isFileExist
```

System.IO.Temp と同様、`withTemporaryDirectory` に `(FilePath -> IO a)` を渡し、その中でテンポラリファイルの操作を完結させる必要があります。また同様に、関数を抜けると、作成されたテンポラリディレクトリごと削除されます。

以下、実行結果です。

```bash
$ runhaskell SystemUnixDirectoryTest.hs 
path: '/var/folders/lc/46fljbjd7m39wszcjqsjwf500000gn/T/hoge8rQDhY'
doesDirectoryExist: True
doesFileExist1: True
doesFileExist2: False
```

# まとめ

オーソドックスな使い方は大体同じでしょうか。

System.IO.Temp は依存関係が簡潔、System.Unix.Directory は unixutils というユーティリティの機能の一部で依存関係が複雑であり、Unix と名前が付いていることからプラットフォームを選ぶ可能性があるため、前者が良いかもしれません。
Rails の自動読み込みについて

# 背景
Rails ではファイルを `require` しなくても自然と動作するので、不思議にも感じなかったのですが、同じ名前のファイルが有る時の挙動がよくわからなかったので Rails の自動読み込みについて調べました。まとまった情報は http://railsguides.jp/constant_autoloading_and_reloading.html にあるのですが、非常に読みにくく感じたので自分なりにまとめました。

# Rails の自動読み込み
　Rails は require を使わなくても、ファイルを読み込みます。たとえば Rails がプログラム実行中に未定義の定数 `X` と遭遇した時、どのように振る舞うのかを下に書きます。

1. Rails は定数と同じ名前のファイルを探す。定数 `X` なら `x.rb` を探す。
2. 全ての `config.autoload_paths` パスを順に調べる。
3. たとえば `.../assets/x.rb` を調べる。なければ `.../controller/x.rb` を調べる。同様に全てのパスを調べる。
4. 探索の結果、ファイルが見つかれば、そのファイルを読み込み、プログラムを再開する。
5. 見つからなければ通常の `const_missing` と同じエラーを返す。

# 自動読み込みの優先度
　定数 `X` を読んだときに x.rb の探索が行われるのですが `models/x.rb` と `models/concerns/x.rb` 両方が存在する場合、どちらが読み込まれるのでしょうか。特に設定がなければ `models/x.rb` が読まれます。なぜなら、`autoload_paths` で `models/` が先に登場するからです。（`ActiveSupport::Dependencies.autoload_paths` を実行すると確認出来ますが、ドキュメントに記載がないので、これは意図したものではないかもしれません）

　明示的に `models/concern/x.rb` を読み込みたいならば、定数 `X` が登場するより前に `require_dependency "concerns/x.rb"` を実行しなくてはいけません。単なる `require` は Rails の自動読み込みと違って、development モードでのホットリロードや、production モードでのプリロードを行わないので、使うべきではありません。

# Ruby の定数解決
　Rails は参照された定数が未定義であれば上記のような自動読み込みを行います。しかし、Ruby の特殊な名前解決によって、未定義に見える定数が、定義済みとみなされる事があります。

　たとえば、`String::Array` を参照してみてください。すると `warning: toplevel constant String referenced by Array::String` と表示されます。未定義の定数 `String::Array` を参照したつもりが定義済みのトップレベル定数 `Array` を参照してしまうということです。

　Rails では、同じ名前のファイルを定義した場合、これが問題になりやすいです。読まれる順序によっては、正しく動作することもあるので、見つけにくいバグになります。確実に読み込ませるために `require_dependency` を使う手もありますが、別々のクラス名にするのが簡単でわかりやすいので、こちらのほうが良いと思います。
CakePHP 3.x系初期設定手順メモ


- Ubuntu 14.04, Apache2, MySQL, (とDebugKitの為にsqlite) の構成です
- 作業メモなので必要最低限の事しか書いてません

### ミドルウェア導入

```bash
$ sudo apt-get install apache2 libapache2-mod-php5 mysql-server php5-mysql php5-intl sqlite3 php5-sqlite
```
2系と比べて`php5-intl`が増えてます。
`sqlite3`と`php5-sqlite` はDebugKitをデフォルトのまま使いたいので追加しています。

#### Composer導入

```bash
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

```

### Apache設定変更

#### AllowOverride を None から All に変更

```apache:/etc/apache2/apache2.conf
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
```

#### mod_rewriteを有効

```bash
sudo a2enmod rewrite
sudo service apache2 restart
```

## CakePHPの設置

```bash
composer create-project --prefer-dist cakephp/app [name]
```

ディレクトリ権限、salt、DebugKitの設定は勝手にやってくれてます。


### DBとユーザ作成

```mysql
mysql> CREATE DATABASE cake CHARACTER SET utf8;
mysql> GRANT ALL ON *.* to hoge@localhost identified by 'piyo'; FLUSH PRIVILEGES;
```

### DB設定

下らへんを編集。

```file:config/app.php
    'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost',
            /**
             * CakePHP will use the default DB port based on the driver selected
             * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
             * the following line and set the port accordingly
             */
            //'port' => 'nonstandard_port_number',
            'username' => 'hoge',
            'password' => 'piyo',
            'database' => 'cake',
            'encoding' => 'utf8',
            'timezone' => 'UTC',
            'cacheMetadata' => true,
```

以上、http://localhost/[name] にアクセスし、メッセージがオールグリーンなのを確認して終了。
[Qiita:CakePHP 2.x系初期設定手順メモ](http://qiita.com/kazamai/items/89c084ab2608ba166bcf)に比べるとかなり手間が省けてますね。

お疲れさまでした。
Qiitaのデータを解析してスキル別の個人ランキングを作ってみた


## ランキングの概要
__TalentBaseというタレント解析プラットフォームサービスを開発している関係で、Qiitaの投稿データと投稿に対するストックデータを解析して、プログラミング言語別に技術力ランキングを作成してみました。__

![Screen Shot 2015-04-17 at 午後6.15.47.png](https://qiita-image-store.s3.amazonaws.com/0/1418/340dfc8b-8724-cd9f-4a0e-766525512b0d.png "Screen Shot 2015-04-17 at 午後6.15.47.png")


## ランキングを見る
ランキングを見る場合は、↓のようにurlの最後に言語名を入力していただければ、ランキングが見れるようになっています。

■Golangの技術力ランキング
[https://talentbase.io/ranking/skill/go](https://talentbase.io/ranking/skill/go?cn=qiita "Go言語の技術力ランキング")

■Swiftの技術力ランキング
[https://talentbase.io/ranking/skill/swift](https://talentbase.io/ranking/skill/swift?cn=qiita "Swiftの技術力ランキング")

■rubyの技術力ランキング
[https://talentbase.io/ranking/skill/ruby](https://talentbase.io/ranking/skill/ruby?cn=qiita "Rubyの技術力ランキング")

■React.jsの技術力ランキング
[https://talentbase.io/ranking/skill/reactjs](https://talentbase.io/ranking/skill/reactjs?cn=qiita "React.jsの技術力ランキング")

などなど。

__※TalentBaseにログインしていただかないと閲覧できないのでご注意ください！__


## ランキングに使われているスコアの算出方法
スコアを算出するアルゴリズムの詳細はお伝えできませんが、自分が投稿した内容がどんな技術であるかと、その投稿をストックしたQiitaユーザーがどれくらいの技術力を持っているかなどを加味したスコアなので、それなりにちゃんとしたスコアリングをしています。

## ランキングを見たい言語があれば作ります！
ご希望があれば、今あるスキル以外のスキルでもランキングを作ることができるので、興味のある技術があればコメントか何かで教えて下さい！

※ちなみに、このランキングはアプリケーション部分をRuby、計算部分をPythonで構築しています。
List をJsonに変換

```scala
scala> import play.api.libs.json._
import play.api.libs.json._

scala> case class User(name: String, age: Int)
defined class User

scala> implicit val userFormat = Json.format[User]
userFormat: play.api.libs.json.OFormat[User] = play.api.libs.json.OFormat$$anon$1@38d2c662

scala> val userList = List(User("Example 1", 20), User("Example 2", 42))
userList: List[User] = List(User(Example 1,20), User(Example 2,42))

scala> val users = Json.obj("users" -> userList)
users: play.api.libs.json.JsObject = {"users":[{"name":"Example 1","age":20},{"name":"Example 2","age":42}]}
```
【海外】IoTソリューション(介護)

## Amulyte

![スクリーンショット 2015-04-17 18.14.14.png](https://qiita-image-store.s3.amazonaws.com/0/74972/d285ac90-222f-a382-b9a0-624f31280355.png)

http://www.amulyte.com/

- セルラー無線、Wi-fi、GPS、加速度計、マイコンが搭載されている。在宅中及び外出時にも介護者や家族は、被介護者の活動レベルや位置情報などをいつでも知ることができる。ペンダントの真ん中にはHELPボタンがあり、ボタンを押すと登録されている連絡者全員に緊急情報が届く。