OmniAICreator/Qiita-1.07M huggingface dataset:
Scrumを理解するためのメモ

#目的
Scrumを理解するためのメモ
参考図書「Scrum boot Camp」

##Scrumとは
開発の進め方の１つ

##ざっくりいうと
仕様の変更を許容し、開発者と、プロダクト責任者の関係を明確にした
新しい開発の進め方。

##登場人物

###A.プロダクトオーナー
プロダクトオーナーは、プロダクトに対する最終的な責任者。
「プロダクトバックログ」という「プロダクト」の要求仕様を優先度で
並べたリストをつくる。

###B.開発チーム
「プロダクトバックログ」をもとに、リリース可能な製品を開発する

###C.スクラムマスター

##開発の進め方
***スプリント***と呼ばれる短い期間を繰り返して開発を進める。



##スプリントのサイクル
###1.スプリント会議
参加者： プロダクトオーナー
        開発チーム

###<第1部>
そのスプリントで、「プロダクトバックログ」の上位から、このスプリントで開発対象とする内容を
決める。

###<第2部>
「プロダクトバックログ」を達成するために必要な、タスクを全て洗い出す

###2.デイリースクラム
「前回」やったタスク、「今日」やるタスク、「困ってること」を共有

###3.スプリントレビュー
開発チームが、スプリントでつくった者を確認する会議。
実際動かしながら確認する。
「プロダクトバックログ」を作業完了 or リジェクトする
HTML+CSSでの段組みレイアウト作成について

## はじめに

HTML+CSSで段組み作る際にはdivタグとfloatスタイルを使うことが一般的と思わる。(よく知らないが)

それに取って代わりそうな、便利なスタイル指定を見つけたのでメモしておくこととする。

※IE8から対応しているのでそれなりに使えると思っている。

## CSS Table display

display: table と display: table-cell の組み合わせで

お手軽に段組みレイアウト作成することができる。

display: table が 行に相当し、display: table-cell が セルに相当するイメージ。

記述する際は、display: table スタイルと同時に table-layout: fixed も記述すること。

これがないとセル幅が自動計算されてしまう。

以下は簡単なテーブルの例。

```css
div{
	box-sizing: border-box;
}

.row{
	display: table;
	width: 100%;
	table-layout: fixed;
	background: gray;
    color: white;
}

.cell-1{
	display: table-cell;
	width: 25%;
	background: blue;
    color: white;
}

.cell-2{
	display: table-cell;
	width: 50%;
	background: tomato;
    color: white;
}
```

```html
<div class="row">
	<div class="cell-1">行1列1</div>
	<div class="cell-2">行1列2</div>
	<div class="cell-1">行1列3</div>
</div>
<div class="row">
	<div class="cell-1">行2列1</div>
	<div class="cell-2">行2列2</div>
	<div class="cell-1">行2列3</div>
</div>
<div class="row">
	<div class="cell-1">行3列1</div>
	<div class="cell-2">行3列2</div>
	<div class="cell-1">行3列3</div>
</div>
<div class="row">
	<div class="cell-1">行4列1</div>
	<div class="cell-2">行4列2</div>
	<div class="cell-1">行4列3</div>
</div>
```

実行結果の確認はこちら http://jsfiddle.net/5denknxw/


## 複雑な段組みについて

作成途中で且つそこまで複雑では無いですが、http://jsfiddle.net/bjywym4a/ に配置しました。

IE8～, Chrome, Firefox でレイアウト崩れが無いことを確認しています。


## 複雑な段組みについて2

ブログっぽい段組みを http://jsfiddle.net/ufmhnsdj/ に配置しました。

IE8～, Chrome, Firefox でレイアウト崩れが無いことを確認しています。

2例だけですが、floatプロパティよりはかなり簡単に利用できるんじゃないかなと思います。
cygwinでssh接続

割と沢山ある記事かもしれないけど，自分用にまとめ．
github等の各種サービスにsshで接続する際のまとめ．

まず，SSH キーを生成

```bash
:~/.ssh$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/art/.ssh/id_rsa): id_rsa_file_name
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
...
```

各種サービスにおいて，生成したSSHキー(public)を登録し，秘密鍵のパスフレーズ入力を省略するため，ssh-agentを登録.この時の注意点として，cygwinの場合

```bash
ssh-agent -s
ssh-add -l
```

ではなく，

```bash
eval `ssh-agent -s`
ssh-add -l
```

とすること．cygwinの設定し直し等で度々引っかかるので，備忘録として書きました．ここではメモ程度のため，理由等の詳細は，http://stackoverflow.com/questions/17846529/could-not-open-a-connection-to-your-authentication-agent を参照
メモ: CentOS 7 にDocker + Figな環境を作る

CentOS 7にDocker + Figを入れようとしたら、ちょっとハマったので備忘録がてらメモ。
ちなみに、悪いのはすべてyumで入るDockerが妙に古いのが原因なので時間が解決すると思われる

Dockerのインストール
==================

CentOS 7でDockerをインストールする記事を探すと概ね下記のコマンドが紹介されます。

```bash
yum install docker
```

CentOS 7からExtraパッケージに入ったので、EPELとか入れなくても問題なくDockerが入ります。便利ですね。
.
.
.
で、終わってくれない罠が2014/10/13現在だと存在します。yumで入るバージョンが妙に古いのです。

```bash
$ sudo yum install docker
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.fairway.ne.jp
 * extras: mirror.fairway.ne.jp
 * updates: ftp.tsukuba.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ docker.x86_64 0:0.11.1-22.el7.centos を インストール
--> 依存性解決を終了しました。

依存性を解決しました

=======================================================================================

 Package         アーキテクチャー
                                 バージョン                      リポジトリー     容量
=======================================================================================

インストール中:
 docker          x86_64          0.11.1-22.el7.centos            extras          4.4 M
```

1.0系より前だとfigがエラーを出して実行できないので、下記の用にバイナリで最新のdockerを入れます。

```bash
# install docker
sudo sh -c "curl -L https://raw.githubusercontent.com/docker/docker/master/contrib/init/systemd/docker.service > /etc/systemd/system/docker.service"
sudo sh -c "curl -L https://raw.githubusercontent.com/docker/docker/master/contrib/init/systemd/docker.socket > /etc/systemd/system/docker.socket"
sudo sh -c "curl -L https://get.docker.io/builds/Linux/x86_64/docker-latest > /usr/bin/docker"

sudo chmod +x /usr/bin/docker

# サービスに登録
sudo systemctl enable docker
sudo systemctl start docker
```

これで最新のDocker 1.2を入れることができます。

```bash
$ docker -v
Docker version 1.2.0, build fa7b24f
```

Figのインストール
===============

Dockerの1.0以上が入ってればFigも特に悩むことはありません。
公式ページのマニュアルどおり、こんな感じでインストール。

```bash
sudo sh -c "curl -L https://github.com/docker/fig/releases/download/0.5.2/linux > /usr/bin/fig"
sudo chmod +x /usr/bin/fig
```

これでインストールは完了です。

```bash
$ fig --version
fig 0.5.2
```

ちなみにfig実行時に下記エラーが出たら、dockerが最新ではない可能性があるので確認して下さい。

```bash
KeyError: u'Id' 
```

オマケ
===============

別に必須ではありませんが、sudoを毎回打つのが面倒なので、.bashrcや.zshrcに下記を追加しておくと便利です

```bash
alias docker='sudo docker'
alias fig='sudo fig'
```

それにしても、DockerもFigもgoで作ってあるせいか単独バイナリなので、インストールが楽ちんなのはいいですね。
それでは、Happy Hacking!

参考
===================

- [Installing Docker - CentOS-7](http://beta-docs.docker.io/installation/centos/#installing-docker-centos-7)
- [Installing Fig](http://www.fig.sh/install.html)
- [fig throw KeyError: u'Id' when i run fig up in latest version #453](https://github.com/docker/fig/issues/453)
Emacs24をビルドしてインストールする手順

# はじめに
開発環境構築のため、VirtualBoxでMacOSX上にDebian GNU/Linux(Wheezy)をインストールしました。
エディタはEmacs24を使いたいからソースコードからビルドしてインストールしてみました。

基本的にホストOSからsshで接続してコーディングするつもりなので、GUI関係のオプションいれません。

# コマンド

## コンパイルに必要なパッケージをインストール

emacsのコンパイルに必要なパッケージをインストールします。
↓の感じでインストールしました。

```bash
$ sudo aptitude install libgtk2.0-dev  libXpm-dev libjpeg8-dev libgif-dev libtiff4-dev libncurses5-dev libgtk-3-dev libgnutls-dev libselinux1-dev libmagick++-dev
```

## ソースコードを入手

GNU本家からEmacs24のソースコードを入手し、展開します。
現時点(2014-10-14)では24.3が最新版です。

```bash
$ curl -O http://core.ring.gr.jp/pub/GNU/emacs/emacs-24.3.tar.gz
$ tar -zxf emacs-24.3.tar.gz
```

## ビルド、インストール

バイナリは `${HOME}/local` 以下にインストールします。
デフォルトでは `/usr/local` いかにインストールされてしまうので、 `--prefix=$HOME/local` でホームディレクトリにインストールされるように指定しています。

```bash
$ cd emacs-24.3
$ ./configure --prefix=$HOME/local --without-x
$ make
$ make install
```

問題なく終了すれば、emacsコマンドは `${HOME}/local/bin/emacs` にインストールされているはずです。
以上！


なお、ビルドのために展開したemacs-24.3ディレクトリはそのまま残しておいた方がいいかも。
emacsを削除する場合に `make uninstall` を使えるかも知れません。
pLaTeXからupLaTeXへの乗り換え方

pLaTeXからupLaTeXにどのように乗り換えれば良いかをまとめたいと思います。
#upLaTeXとは
pLaTeXをUnicodeに対応させた、いわばpLaTeXの上位互換です。
#pLaTeXからupLaTeXへの乗り換え方

* ``uplatex``コマンドでコンパイルする。
* documentclassを変える。<br>
※前者は余白が大きいため、後者をおすすめします。
    * ``jarticle``->``ujarticle``
    * ``jsarticle``->``jsarticle``(オプションとして``uplatex``を指定)

これでupLaTeXを使ってコンパイルできるようになります。
\maketitle を再定義する．

LaTeX では \maketitle といふ命令で文書の標題と著者名を表示できる．しかし標準のままだとあまりにも大仰な表示がされるので，これを再定義してみる．

次のやうに stylefile を作つてみた：

```moderntitle.sty

\renewcommand\maketitle[0]{
	\hspace{-1em}
	\fontsize{24.88}{72}{\textgt{\@title}} \normalsize \\
	\vspace{-2em}
	\begin{flushright}
		\@date \quad \@author
	\end{flushright}
}
```

TeX 文書はこんなふうに作つてみる：

```document.tex
\documentclass[12pt]{jsarticle}

\usepackage[bold]{otf}
\usepackage{moderntitle}


\begin{document}
\title{第3囘運營會議資料}
\author{運營委員長 山田太郎}
\maketitle
\section*{今日の議題}
あれやこれや．
\end{document}
```

結果として，次のやうに出力される：

![output](http://s15.postimg.org/53scdyuo9/ss2.jpg)
ipythonで起動時のスクリプト実行

pythonの対話型の実行環境として普段ipythonを使っているが，毎回起動時に

```py
from re import *
from imp import *
```

等実行するので，これらは起動時したときに自動で実行するようにしたいなと思い，そのやり方を調べてみた．

起動時に実行したいスクリプト **.ipython/profile_default/startup**以下のディレクトリに配置すればOK．
恐らく.pyのファイルなら全て実行されそう．
ちなみに自分のwindowsの環境ではデフォルトの設定なので，**C:\Users\\{user_name}\\.ipython/profile_default\startup\init.py**みたいにしておいた．細かいことだけど，案外便利そう
[vim] Tern for Vim で関数定義を下に表示する方法

[Tern for Vim] (https://github.com/marijnh/tern_for_vim)はvimのJavascript補完を賢くするプラグインだが、標準の動作では関数定義の説明が上に表示されコード全体が下にずれて邪魔に感じた。

![rapture_20141102225858.png](https://qiita-image-store.s3.amazonaws.com/0/10713/706659d9-61d8-17b2-6898-eb2008930a88.png)

.vimrcに次の設定を追加したら下に表示されるようになった。

```vim
set splitbelow
````

![rapture_20141102230117.png](https://qiita-image-store.s3.amazonaws.com/0/10713/064fe020-2de7-335c-cc1d-eedad0e06f55.png)

しかし、この設定はすべての新しいウィンドウを下に追加するという設定なので他の場所に影響があるかもしれない
HaskellのバブルソートをJavaScriptに直訳してみた

Haskellで実装したバブルソートをJavaScriptに直訳してみました。効率は度外視して直訳を優先しています。

# Haskell

* [Haskellでバブルソート#まとめ](http://qiita.com/7shi/items/1e2a66bf8e8c7f0bd70f#%E3%81%BE%E3%81%A8%E3%82%81)

```hs
bswap [x] = [x]
bswap (x:xs)
    | x > y     = y:x:ys
    | otherwise = x:y:ys
    where
        (y:ys) = bswap xs

bsort [] = []
bsort xs = y : bsort ys
    where
        (y:ys) = bswap xs

main = do
    print $ bswap [4, 3, 1, 5, 2]
    print $ bsort [4, 3, 1, 5, 2]
    print $ bsort [5, 4, 3, 2, 1]
    print $ bsort [4, 6, 9, 8, 3, 5, 1, 7, 2]
```
```text:実行結果
[1,4,3,2,5]
[1,2,3,4,5]
[1,2,3,4,5]
[1,2,3,4,5,6,7,8,9]
```

# JavaScript

```js
"use strict";

function bswap(xs) {
    if (xs.length == 1) return xs;
    var x = xs.shift();
    var ys = bswap(xs);
    var y = ys.shift();
    if (x > y) return [y, x].concat(ys);
    return [x, y].concat(ys);
}

function bsort(xs) {
    if (xs.length == 0) return [];
    var ys = bswap(xs);
    var y = ys.shift();
    return [y].concat(bsort(ys));
}

console.log(bswap([4, 3, 1, 5, 2]));
console.log(bsort([4, 3, 1, 5, 2]));
console.log(bsort([5, 4, 3, 2, 1]));
console.log(bsort([4, 6, 9, 8, 3, 5, 1, 7, 2]));
```
```text:実行結果
[ 1, 4, 3, 2, 5 ]
[ 1, 2, 3, 4, 5 ]
[ 1, 2, 3, 4, 5 ]
[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
```

`var`を付け忘れてバグに悩まされたので、敢えて`"use strict"`を残しています。
【PHP】PHP勉強の初期メモ（関数、外部ファイル読み込みとか）

***

##関数
関数とは・・・処理のまとまり

```caluculate.php
function aPlusB($a, $b){
         $result = $a + $b ;
          return  $result; }
```




```display.php
       include 'caluculate.php';
         $result = aPlusB(3,5) ;
         echo  $result; 
```

##外部ファイルを読み込む時に
* require_once（◎最もよく使う）　メモリーにあれば１回実行で終わる
* require　　　安心に毎回読みたい時
* include
* include_once

※includeはあまり使わない

##サーバーのはなし
MACと仮想サーバーでは、Vagrantファイルは共通している
→基本的には、サーバーでapacheは「var/www/html」以下の階層をみる設定になっている！

もし、自動読み込みがしたければ、設定されているディレクトリを変更する。
mysql

# mysql command
## show database list

```
show databases;
```

## show user list
execute as aministrator

```
select host, user, password from mysql.user;
```

## show table list

```
show tables;
```

## connect mysql server
```
mysql -h <hostname> -P <port> -u <username> -p <database name>
```

## show mysql version information
```
mysql> status
--------------
mysql  Ver XX.XX Distrib 5.X.XX, for Linux (x86_64) using readline X.X
```
Elixir Named Functions Pattern Matching

# Elixir Named Functions Pattern Matching

## 概要
Elixir の Named Functions の Pattern Matching について。

Elixir では、同一名称・同一引数の関数が合った場合、
上から順に Pattern Matching を行い、一致するまで続けます。

## サンプル

~~~
defmodule Fibonacci do
  def fib(0), do: 0
  def fib(1), do: 1
  def fib(x), do: fib(x - 1) + fib(x - 2)
end

Enum.each(0..10, &(IO.puts Integer.to_string(&1) <> ":" <> Integer.to_string(Fibonacci.fib(&1))))
~~~

* 出力

~~~
0:0
1:1
2:1
3:2
4:3
5:5
6:8
7:13
8:21
9:34
10:55
~~~
Javaしか書けない雑魚がRubyで素数判定コード書いてみた


入力した数値までの素数を表示するプログラムを自分なりに書いてみたよ


``` ruby:prime.rb
#Encoding: utf-8
class Prime
	def initialize(setNum)
		@setNum = setNum.to_i
		@count = 0
		@n_Number = Array.new(@setNum + 1){0}       #0なら素数。初期値は全て素数としておく
		@getSqrt = Math.sqrt(@setNum);
	end
	
	#@setNumの平方根までの素数の倍数を排除する
	def exclusion
		@n_Number[0] = 1
		@n_Number[1] = 1
		(2..@getSqrt).each{ |i|
			if @n_Number[i] == 0
			((i + 1)..@setNum).each{ |j|
				@n_Number[j] = 1 if j % i == 0
			}
			end
		}
	end

	#排除の対象にならなかったものが素数である
	def getPrime
		exclusion
		(0..@setNum).each {|i|
			if @n_Number[i] == 0
				printf("%6d", i)
				@count = @count + 1
				printf("\n") if @count % 10 == 0        #10個表示したら改行する。
			end
		}
		puts ""
	end
end
print "数値:"
Prime.new(gets).getPrime
```

結果1

```
$ ruby prime.rb
数値:120
     2     3     5     7    11    13    17    19    23    29
    31    37    41    43    47    53    59    61    67    71
    73    79    83    89    97   101   103   107   109   113
```

結果2

```
$ ruby prime.rb
数値:200
     2     3     5     7    11    13    17    19    23    29
    31    37    41    43    47    53    59    61    67    71
    73    79    83    89    97   101   103   107   109   113
   127   131   137   139   149   151   157   163   167   173
   179   181   191   193   197   199
```

もっと短く書けそうなんだけどなー
Rubyを勉強して覚えたことメモ


<h1>メソッドの定義方法</h1>

メソッドを実装するときは「def」から始まって「end」で終わる書き方をします。
括弧()は省略して書く事も可能です。作ったメソッドを呼び出す際は指定したメソッド
名を書くだけ。

Rubyのメソッドも複数定義が可能なので識別するためのメソッド名を指定します。
メソッド名を指定する場合は次の規則に従うこと。

括弧のある場合

```
def メソッド名(引数1, 引数2, ...)
 
end
メソッド名(値1, 値2, ...)
```

括弧のない場合

```
def メソッド名
 
end
メソッド名
```

<h1>簡単なサンプル</h1>
簡単なプログラムで確認して見ます。
せっかくなのでコマンドからpry上で動かしてみる

```引数なしの場合
$ pry
[1] pry(main)> def hoge
[1] pry(main)*   puts "Hello Ruby"
[1] pry(main)* end
=> nil
[2] pry(main)> hoge
Hello Ruby
=> nil
```

```引数ありの場合
$ pry
[1] pry(main)> def hoge(s_var)
[1] pry(main)*   puts s_var
[1] pry(main)* end
=> nil
[2] pry(main)> hoge("Hello Ruby")
Hello Ruby
=> nil
```

<h1>クラスの定義方法</h1>

```
class クラス名

end
```

クラスは「class」から始まって「end」で終わる書き方をします
そしてクラスにはクラス名を指定します。

```Ruby:prac.rb
class SampleClass

end
```

<h1>オブジェクトの作成</h1>


```
class クラス名

end
変数名 = クラス名.new()
```


<h1>特別なメソッド</h1>
Javaで言うコンストラクタみたいなもの。newするとinitializeメソッドが自動的に呼び出されます。


```
class クラス名
    def initialize()
    	処理
    end
end
```
virt-installと対話したい


古い情報では、何もオプションをつけなければ対話になるとあったが、対話にはなりません。

```shell-session
% virt-install
```

そこで、manを読んでみると

```shell-session
% man virt-install
(中略)
       --prompt
         Specifically enable prompting for required information. Default prompting is off (as of
         virtinst 0.400.0)

% virt-install --version
0.600.4
```

どうやら0.400.0以降は対話で実行するには ``--prompt`` オプションをつけて実行すればいいみたいです。

```shell-session
% virt-install --prompt 
What is the name of your virtual machine? 
omochikaeri
How much RAM should be allocated (in megabytes)? 
2048
What would you like to use as the disk (file path)?
```

いい感じ。
HaskellのreplicateみたいなやつをJavaScriptで実装してみる

Haskellの、

```sh
replicate 5 5
[5,5,5,5,5]
```

みたいなのをJavaScriptで書いてみました。
さすがにreplicate 5 5なのは実装出来なかったので、
第二引数は配列にしました。

```js
function replicate(n, x) {
  if (n <= 1) {
    return x;
  } else {
    x.push(x[0]);
    return replicate(n - 1, x);
  }
};
console.log(replicate(5,[5]));
```

こんな感じ。

## 追記

頂いたコメントからの改修版です。コメントそのまんまです。

```js
function replicate(n, x) {
    if (n == 0) return [];
    return [x].concat(replicate(n - 1, x));
}

console.log(replicate(5, 5));
```
Meteorのチュートリアルを二日かけてやってみた結果



[Meteorが1.0になったので入門してみた1/2](http://qiita.com/abe00makoto/items/90d05c22353d9c271fbf)
[Meteorが1.0になったので入門してみた2/2](http://qiita.com/abe00makoto/items/d67fc9b732f0d3737470)

という感じで2日かけてチュートリアルをやってみました。
その感想を纏めてみたくなりました。

# 感動ポイント

## リアクティブ・フレームワークの凄さを思い知りました。

チュートリアルで確認した範囲では、SessionとDBに値監視機能がついています。
「SessionやDB内容が変化させた瞬間にログ出力する。」が簡単にできました。

ルーティングですら、ちょっと今までの感触と違います。

例えば、ログイン状態によって現在のルーティングでの表示内容が変わることがあるかと思います。
(ログアウトしたから管理画面が非表示になるなど。）

ログアウト処理の後にコールバックで遷移処理追加しなきゃーとか考えたりしますよね。

Meteorの場合レンダリング対象のTemplateが変わると判断すると
勝手に再レンダリングされます。つまり状態がなんらかのアクションで変化することによって伝搬されて、勝手に事が進む感じです。

あー。これがリアクティブなんだー。とビックリでした。


## サーバのDBとクライアントのDBがいい感じで同期してくれる。

初期状態だとブラウザのコンソールからDB中をいじったりできます。
しかもサーバサイドに自動でミラーされます。

Vue.jsとかMVVMフレームワークを触ってクライアントサイドのJsonオブジェクトとDOMが同期するだけでも感動していたので、
さらに便利になったと実感しました。

## ただのDB同期だけじゃなく、サーバサイドの遅さを隠蔽する機能がある。

まずDB操作をするための関数が作れるんですが(Meteor Metohd)
これはクライアントから使うことができます。というかJSのコードでクライアントとサーバの両方で実行されます。

クライアントサイドはシミュレーション用で見た目速攻でDB処理を終わらせたと見せかけるのに使用されます。

サーバサイドはサーバなのでそれなりにレスポンス時間がかかって終わります。
レスポンスが返ってきた後にこっそり書き換えるという動作になります。

つまりリアルタイムWEBにするための技な訳です。こんな機能自分で入れようとしたら、泣くしかないです。
でも、ちゃんと挙動を調整しないとこの動きをしてくれないので、
要勉強ポイントではありそうです。

## サーバサイドを含めて一つのアプリを作っている感覚
というのが感じたことです。


# 気になる点
##  え、この処理って共用なの？ってなる。
コードの置き場所によってクライアント専用か、サーバ専用か、
共用かというのがあります。
チュートリアルやってると、なんでこの処理は共用なの？ってなります。
特にルーティングのコードが共用に置かれるのがよくわかっていないです。


## iOSとかとのネイティブアプリとの連携が面倒そう。

firebaseみたくSDKが欲しい
cronの走らせかた

## cronでphpとかrubyとかのスクリプトを動かしたいとき

### 例えば5分毎に動かしたい

`*/5 * * * * /usr/bin/php /home/hogehoge/works/hogehoge.php`
と書く。phpスクリプトが一つのファイルで構成されている場合ならば、これでも動く。複数のphpファイルが、相対パスで`include`や`require__once`とかされている場合、エラーで動かない。
実行時のカレントディレクトリが変わってしまうため、ファイルを参照出来ないから。

### 解決案

- includeやrequireするときに絶対パスを書く
 - まあめんどうだよねってことと、OSが違った場合、パスを書き換えないといけないので、現実的では無い。
- (php限定)ini_setでinclude_pathを設定する
 - レンサバとかで有効そう
- シェルスクリプトを書いて、そいつを実行する
 - 今回これやった

#### 超簡単なやつ
cron実行時のカレントディレクトリを変えてしまえば良い。
まず、phpのパスを確かめておく。(`which php`とか`which ruby`など)

```:sh
cd /home/hoge/works/
user/bin/php /home/hoge/works/hogehoge.php
```

で、このshファイルを実行してあげれば良い
`*/5 * * * * /bin/sh /home/hogehoge/works/cron.sh`

でもよく考えたら、cronで実行するときにカレントディレクトリを変えてあげればいいんじゃね？
`*/5 * * * * cd /home/hogehoge/works/ && /usr/bin/php /home/hogehoge/works/hogehoge.php`
みたいな感じで(未検証)

#### だれかもっと良い方法ご存じでしたら教えてください

## 参考にしました。ありがとうございます

- [PHPプログラムにブラウザでアクセスすると実行されるが、cronで実行できない](http://codaholic.org/?p=101)
- [Crontab が実行されない時には…？](http://sukohi.blogspot.jp/2013/09/crontab.html)
複数のcsvファイルを一つのcsvファイルにマージ

## 明日の11時までにこのcsvファイルをひとまとめにしておいてね

#### わお徹夜だ☆

ではなく。。。

簡単なスクリプトを組んで一瞬で終わらせてしまいましょう

```:1.csv
user_id, user_name, mail_address, comment
0001, ホゲほげ男, hogeo@example.com, hogehoge
0002, ホゲほげ子, hogeko@example.com, hogehogehoge
```

```:2.csv
user_id, user_name_alphabet, comment2
0001, hoge hogeo, aaaaaa
0002, hoge hogeko, bbbbb
```

というようなcsvファイルがあったとします。ここでエクセルを使う必要はありません。
以下のようなスクリプトを書けば良いのです

```rb:merge.rb
require 'pp'
require 'csv'

class CSVMerger

  def save_csv
    CSV.open("./merged.csv", "wb") do |csv|
      merge_array_from_csv.each do |element|
        csv << element
      end
    end
  end

  def merge_array_from_csv
    list1 = load_csv("1.csv")
    list2 = load_csv("2.csv")

    generated_array = []
    generated_array_element = []

    for i in 0..(list1.count.to_i - 1)
      for j in 0..(list2.count.to_i - 1)
        if (list1[i][0] == list2[j][0])
          generated_array_element.concat(list1[i]).concat(list2[j])
          generated_array << generated_array_element.pop(8).uniq!
        end
      end
    end
    return generated_array
  end

  def load_csv(target_file_name)
    return CSV.parse(open("./" << target_file_name).read)
  end
end

csv_merger = CSVMerger.new()
csv_merger.save_csv
```

なにをやっているかというと、それぞれのcsvを読み込んで配列とし、
共通要素であるuser_idをもとに、for文で1.csvを上から舐めていき、さらにその中で2.csvを上から舐めて、一致する行の要素をconcatでマージし、uniq!で要素の重複を取り除いています。
冗長な感じになりますが、csvファイルが2個以上の場合でもfor文とif文を修正&追加することで対応できます

#### エクセル使うのだりいなって思って書いた即興スクリプトなので、イケてない書き方してるかもです
boot2docker-vmの起動に失敗したら


VirtualBoxのGUIから直接boot2docker-vmを走らせると直るかも.
修正が入ってるみたいなので1.3.1では直る?


### 問題が起きた環境

```bash
bash-3.2$ docker version
Client version: 1.3.0
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): c78088f
OS/Arch (client): darwin/amd64
Server version: 1.3.0
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): c78088f
```

### 参考URL

https://github.com/boot2docker/boot2docker-cli/issues/292
https://github.com/boot2docker/boot2docker-cli/pull/293
【xampp1.7.4】date関数で時刻を表示させると日本標準時(JST)より8時間遅れる原因


```php
print date("Y/m/d G:i:s");
```
##環境
XP 32bit (自作機)
xampp1.7.4

##説明
date関数で時刻を表示させると、日本標準時(JST)より8時間遅れて表示された。タイムゾーン的な設定がxamppにあるなら、8時間遅いってことは8×15度=120で日本の東経135から120を引くと東経15度を標準時にしている国がタイムゾーンにあるだろうと思って調べると、

C:\xampp\phpにある、php.iniに

```
date.timezone = Europe/Berlin
```

という記述があった。
これはドイツの標準時の記述であった。　

これを、
```
date.timezone = Asia/Tokyo
```
に書き直すと日本標準時(JST)をdate("Y/m/d G:i:s");で取得できるようになった。

###付録
date_default_timezone_set()関数でphp.iniを触らなくてもタイムゾーンを設定できる。

```php

//イギリスに設定

date_default_timezone_set('Europe/London');

print date("Y/m/d G:i:s");

echo "<br>";

//東京に設定

date_default_timezone_set('Asia/Tokyo');

print date("Y/m/d G:i:s");

echo "<br>";

//ドイツに設定

date_default_timezone_set('Europe/Berlin');

print date("Y/m/d G:i:s");

echo "<br>";

//アメリカのニューヨークに設定

date_default_timezone_set('America/New_York');

print date("Y/m/d G:i:s");

echo "<br>";

//アメリカのロサンゼルスに設定

date_default_timezone_set('America/Los_Angeles');

print date("Y/m/d G:i:s");

echo "<br>";


```

##

##参考
[date_default_timezone_set][1]
[1]:http://php.net/manual/ja/function.date-default-timezone-set.php
忘れがちなCSSアニメーションのメモ (逐一追加予定)

##ベンダープレフィックスは要らない
最近はあまり古いブラウザまで対応することがないので、ベンダープレフィックスをつける事が無い。

```
-webkit-; (safari / chrome)
-moz-;    (fifefox)

```
付ける場合でも、上記の二つをつけとけばだいたい大丈夫。(IEとかOperaは無視)

## Transition

```test.jade

#hoge
  a(href="#") BUTTON

```



```test.styl
a 
 display block
 color #404040
 border 1px solid #404040
 border-radius 4px
 width 200px
 height 50px
 text-align center
 line-height 50px
 text-decoration none
 transition 0.5s  // 0.5秒掛けて変化させる

a:hover
 background #181818
 color #fff
```

### sample
http://gyazo.com/c2cc703fc46410888eece95a73df6313
gitのリポジトリ（管理領域）を別の場所に作る

いつから`.git`がディレクトリだと錯覚していた？

```bash

$ ls -la foo
total 8
drwxr-xr-x   3 pasela  wheel  102 11  2 18:31 ./
drwxrwxrwt  29 root    wheel  986 11  2 18:31 ../
-rw-r--r--   1 pasela  wheel   29 11  2 18:31 .git

$ cat foo/.git
gitdir: /tmp/foo.git
```

というわけで、実はgitは`.git`の中身を別の場所で管理することができます。

この作業は手動でいじってもできなくはないですが、`git init`や`git clone`に`--separate-git-dir=<git dir>`を指定することで自動的にやってくれます。

```bash
cd /tmp
$ git init --separate-git-dir=/tmp/foo.git foo
Initialized empty Git repository in /tmp/foo.git/
```

こうすると、`.git`にはリポジトリのパスが書かれたファイルが作成され、

```bash
$ cat foo/.git
gitdir: /tmp/foo.git
```

`/tmp/foo.git`に管理ファイルが生成されます。

```bash
$ ls -la /tmp/foo.git
total 24
drwxr-xr-x   9 pasela  wheel  306 11  2 18:45 ./
drwxrwxrwt  29 root    wheel  986 11  2 18:45 ../
-rw-r--r--   1 pasela  wheel   23 11  2 18:45 HEAD
-rwxr--r--   1 pasela  wheel  140 11  2 18:45 config*
-rw-r--r--   1 pasela  wheel   73 11  2 18:45 description
drwxr-xr-x  11 pasela  wheel  374 11  2 18:45 hooks/
drwxr-xr-x   3 pasela  wheel  102 11  2 18:45 info/
drwxr-xr-x   4 pasela  wheel  136 11  2 18:45 objects/
drwxr-xr-x   4 pasela  wheel  136 11  2 18:45 refs/
```

そして`/tmp/foo.git/config`にはワークツリーの位置を示す`core.worktree`が設定されます。

```bash
$ cat /tmp/foo.git/config
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	worktree = /tmp/foo
	ignorecase = true
```

これらの値はコマンド実行時にグローバルオプションの`--git-dir=<path>`, `--work-tree=<path>`や、環境変数の`GIT_DIR`, `GIT_WORK_TREE`でも指定できます。

gitリポジトリに関連したツールを作る際は、`.git`がファイルであることも考慮したほうがよいでしょう。

git worktree (2016-01-08追記)
------------

Git 2.5から追加されたgit worktreeはこの仕組みが利用されているようです。

```bash
$ git worktree add ../bar master

$ ls -lA ../bar
合計 8
-rw-rw-r-- 1 pasela pasela 36  1月  8 14:35 2016 .git
-rw-rw-r-- 1 pasela pasela  4  1月  8 14:35 2016 foo.txt

$ cat ../bar/.git
gitdir: /tmp/foo/.git/worktrees/bar

$ ls -lA .git/worktrees/bar
合計 24
-rw-rw-r-- 1 pasela pasela   20  1月  8 14:35 2016 HEAD
-rw-rw-r-- 1 pasela pasela    6  1月  8 14:35 2016 commondir
-rw-rw-r-- 1 pasela pasela   14  1月  8 14:35 2016 gitdir
-rw-rw-r-- 1 pasela pasela   12  1月  8 14:35 2016 gitfile
-rw-rw-r-- 1 pasela pasela  137  1月  8 14:35 2016 index
drwxrwxr-x 2 pasela pasela 4096  1月  8 14:35 2016 logs/
```

gitdirの指す先が`/tmp/foo/.git`ではなくworktree用のディレクトリを指していて、何やら特殊な構造を持っている模様。
MacでEmacsに入門する#1 インストール編


コンソール環境でのエディタには今までなんとなくVimを使ってきたが、Emacsも使ってみようと思ったので入門してみる。


## インストール
Macには最初からEmacsが入っているが、バージョンが古い(Yosemite で22.1.1)のでHomebrewから最新バージョンをインストールする。

ビルドオプションは以下を指定するのが一般的っぽい。

```
brew install emacs --cocoa --with-gnutls
```

`--cocoa`はEmacs Cocoaバージョンをビルドする。Emacs.appが生成され単体アプリとしても起動可能になる。`brew linkapps`で/Applicationsにシンボリックリンクされる。

`--with-gnutls`はGnuTLSサポートを付けてビルドする。

> GnuTLS サポート
> GnuTLS は SSL/TLSプロトコルの実装の一つです。
> GnuTLS がインストールされた環境でコンパイルすると Emacs ネイティブで SSL/TLS な通信が可能になります。

[Emacs24 のインストールと新機能 : 紹介マニア](http://sakito.jp/emacs/emacs24.html#gnutls)

## 日本語入力問題
VimもそうだけどEmacsもやっぱり日本語入力と相性が悪い。[IMEオン時にコマンドを打つとIMEにとられて変換中文字になってしまう問題](http://www.sevencredit.com/2014/07/02/580/#sec-6-3)がある(以前は日本語入力自体ができなかったようだが、現在は可能)。

これは[inline-patch](http://sourceforge.jp/projects/macemacsjp/releases/p2617)を当てると改善できる。Emacs上にIMEのステータスを表示したり、Emacsから日本語入力のON/OFFができる機能もついているので、日本語環境ではこのパッチを当てるのが一般的。inline-patch配布サイトから[パッチ適用済みバイナリのダウンロード](http://sourceforge.jp/projects/macemacsjp/releases/p13490)もできる。

Homebrewでも[最近inline-patchオプションが取り込まれた](https://github.com/Homebrew/homebrew/commit/907670ec80f0f27577bd98db48433c801315567d)が、[24.4で動作しなかったらしく削除されてしまった](https://github.com/Homebrew/homebrew/commit/d8d843097e4126e8a654cd0479bf9b3a08476067)。24.3では`--japanese`オプションをつければinline-patchを適用できた。再度取り込まれてほしい。

```
brew install emacs --cocoa --with-gnutls --japanese
```

ただし改善されるのはアプリ単体起動のとき。(なにか設定すればターミナルから起動した場合でもいける?)
自分は普段使いはAtomなのでEmacsはターミナルでの使用がメインになるため、inline-patchはあればいいけどこだわらない方針にした。


## 結局何を使うか
1. 再度inline-patchオプションが取り込まれる、もしくはパッチ不要ならHomebrewが楽。
2. inline-patchが必要なら[inline-patch適用済みバイナリ](http://sourceforge.jp/projects/macemacsjp/releases/p13490)をダウンロードするのが一番手っ取り早い。

自分はHomebrewでインストールすることにした。
ほかにも色々なforkがあるようだが、これ以外はゆとりEmacs使いとしては考えないほうが懸命と感じた。


## 次回

基本操作を覚えて設定をする。
Google Cloud Monitoring がお手軽で便利すぎてやばい.


漢ならクラウドで分散レイトレーシングですね!

でも各ノードがどれくらい負荷かかっているのか調べてプロットするのがいつもめんどくさいですね… 

面倒でどうしたものか涙で枕を濡らす日々が続いていましたが, GCE だといつの間にやら Cloud Monitoring という機能が付いてました.
(powered by stackdriver とあり, つまりは stackdriver を買収してのサービス提供のようです)

## さっそく使ってみる

Developer console から, Monitoring -> Dashboards & alerts を選びます. 再度 oauth 認証が要求されるので承認しておきます.

するとこんな感じの画面がでます.

![Screen Shot 2014-11-02 at 6.14.31 PM.png](https://qiita-image-store.s3.amazonaws.com/0/36275/820ea66f-632d-b8d9-053b-46a1c0575637.png "Screen Shot 2014-11-02 at 6.14.31 PM.png")

Groups で測定対象となるインスタンスを選びます. インスタンス名にフィルタをかけて抽出できます.

![Screen Shot 2014-11-02 at 6.34.35 PM.png](https://qiita-image-store.s3.amazonaws.com/0/36275/f8646ef7-3fea-badc-21c4-8e9c70799dde.png "Screen Shot 2014-11-02 at 6.34.35 PM.png")

CPU usage 出ました.

![Screen Shot 2014-11-02 at 6.33.57 PM.png](https://qiita-image-store.s3.amazonaws.com/0/36275/bcbff058-8810-bff6-95a8-95be260d9bc1.png "Screen Shot 2014-11-02 at 6.33.57 PM.png")

平均, peak, 分散も出ました. Cool!

## まとめ

ボタンぽちぽちでさらっとプロットしてくれました. お手軽すぎて素敵ですね.

ダッシュボードには, CPU ロードアベレージ以外にもいろいろなメトリックをプロットする機能があります. いろいろ試してみたいですね.


## TODO

* autoscaling で生成したインスタンスはどう扱われるのか?
* 1,000 ~ 10,000 インスタンスになってもきちんとプロットしてくれるかな?
Rubyの破壊的メソッドと参照の値渡し


以下のようなコードを書いていて想定と違う動きだったので調べた。この辺全然理解してなかった。

```rb:val_ref_sample.rb
#!/usr/bin/env ruby

def normalized_name(origin_str)
  str = origin_str
  str.sub! '-', ''
  str.capitalize!
end

snack = 'caramel-corn'
p '元のString snackの値：' + snack
p 'normalized_nameの実行結果：' + normalized_name(snack)
p '元のString snackの値：' + snack
```

```実行結果
"元のString snackの値：caramel-corn"
"normalized_nameの実行結果：Caramelcorn"
"元のString snackの値：Caramelcorn"
```

メソッドの中でどんな好き勝手引数の値を変更しても、メソッドに渡す前のトップレベルで定義されているsnackの値は変わらないと思い込んでたけど、そうではない。

# Rubyは値渡しだが、初級者がひっかかりやすいのは参照の値渡し（共有渡し）
http://magazine.rubyist.net/?0032-CallByValueAndCallByReference

引数に渡す前の変数がかわってしまうという挙動を見て、参照渡しなのか？と思ってRubyistMagazineで調べたら、

> Ruby (や多くのプログラミング言語) は値渡しである。

と明確に書かれているが、

> 初級者が特にひっかりやすい「参照の値渡し」

とも書かれていて見事にひっかかってました。

■object_idで確認
rubyのオブジェクトに実装されているobject_idメソッドを使うと、オブジェクト固有のidを取得できる。これによって同じオブジェクトを参照しているのか、別のオブジェクトを参照しているのか確認できる。

■参照の値渡しサンプル

```irb
# 'test'というStringオブジェクトを作成しstrに代入
irb(main):001:0> str = 'test'
irb(main):002:0> str.object_id
=> 69917655324020

# strの参照先をstr2にコピー（参照の値渡し）
irb(main):003:0> str2 = str
irb(main):004:0> str2.object_id
=> 69917655324020 # さっきと同じobject_id

# どこからも参照されてない'test'という新しいStringオブジェクトを作成
irb(main):005:0> 'test'.object_id
=> 69917655229860 # 新しいobject_id

# さらに'test'という新しいStringオブジェクトを作成し、str2の向き先を変更
irb(main):006:0> str2 = 'test'
irb(main):007:0> str2.object_id
=> 69917655167360 # 新しいobject_id

```

![スクリーンショット 2014-11-02 17.45.08.png](https://qiita-image-store.s3.amazonaws.com/0/36978/fd9c6cac-e3f8-da12-3f46-825a6b2129b1.png "スクリーンショット 2014-11-02 17.45.08.png")


次のように解釈したら矛盾がなさそうなので、そう理解した。
Rubyは値渡しではあるけども、Rubyにおける値はすべてがオブジェクトなので、実際には変数が持つのはオブジェクトへの参照である（RubyistMagazineの説明におけるメモリアドレス）。変数が値自体を持つことはない。
なので、実質Rubyは参照の値渡しである。
（と解釈しましたがもし誤解や例外などあれば教えてください！！）

# 代入とreplace

代入は、変数の向き先（参照先）を変更する。=演算子で実行。
replaceは、参照先のオブジェクトが保持する値自体を変更する。rubyの破壊的メソッドはreplaceを使っているらしい。
※ちなみに、FixnumなどのImmutableオブジェクトは破壊的な変更はできない。（replaceメソッドも用意されてない）2014や1986などのFixnum型を何回作成しても同じオブジェクトを参照する。

■replaceのサンプル

```
# 'test'というStringオブジェクトを作成し、strに代入し、その参照先をstr2にもコピー（上の例と同じ）
irb(main):001:0> str = 'test'
irb(main):002:0> str.object_id
=> 69907653151280
irb(main):003:0> str2 = str
irb(main):004:0> str2.object_id
=> 69907653151280

# str2が参照するオブジェクト自体の値をreplaceによって変更する
irb(main):005:0> str2.replace 'experiment'
=> "experiment"

# str2変数の中身だけでなく、strの中身もかわる
irb(main):006:0> str2
=> "experiment"
irb(main):007:0> str
=> "experiment"
```

![スクリーンショット 2014-11-02 17.47.20.png](https://qiita-image-store.s3.amazonaws.com/0/36978/d1032000-e74b-bd3d-c550-4b21f83d89ad.png "スクリーンショット 2014-11-02 17.47.20.png")

■一番はじめの例のおさらい

![スクリーンショット 2014-11-02 18.02.14.png](https://qiita-image-store.s3.amazonaws.com/0/36978/d8ea3fc3-f743-86d1-e319-f05bdad9317a.png "スクリーンショット 2014-11-02 18.02.14.png")


# 実行環境

```
% ruby -v
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]
```
【解決済み】配列の最大値を再帰で求めようとしたけどダメだった

```js
function maximum(x) {
  console.log('-----------------------');
  console.log(x);
  var x1 = x[0];
  x.splice(0,1);
  console.log(x1, x);
  console.log('-----------------------');
  if (x.length == 0) {
    return x;
  } else {
    return Math.max(x1, maximum(x));
  }
};
// console.log(Math.max(1,2));
console.log(maximum([1,2,3]));

```

結果は3が期待されるのに、2が返ってくる…これはどうしたものでしょう。

```js
function maximum(x) {
  console.log('-----------------------');
  console.log(x);
  var x1 = x[0];
  x.splice(0,1);
  console.log(x1, x);
  console.log('-----------------------');
  if (x.length == 0) {
    return x1;
  } else {
    return Math.max(x1, maximum(x));
  }
};
// console.log(Math.max(1,2));
console.log(maximum([1,2,3]));
```

これで動きました。
Angular 2.0 メモ


ng-europe での発表を見て湧いてきた疑問を、GitHub で公開されている Angular 2.0 用のレポジトリを見ながらこんな感じかな、と書いてみました。いろいろ間違ってると思いますし、そもそも公開までにどんどん変わるでしょうからまったく信頼性のない情報です。

これを書いてて Design Docs の新しいのも公開されていることに気がついたので、読んだら更新するかもしれません。

## 情報ソース

### ng-europe のビデオ

https://www.youtube.com/channel/UCEGUP3TJJfMsEM_1y8iviSQ

### GitHub で参考になるプロジェクト

どれも数ヶ月前から更新されていないことを考えると、最新の開発状況は公開されていないようです。ng-europe で発表された属性のバインディング記法なんかは出てこないので、他の部分も最新のものとはいろいろ変わっているでしょう。

- angular/projects: Angular 2.0 アプリの参照実装です。
- angular/di.js
- angular/templating
- angular/router

### angular/angular

Angular 2.0 の開発は angular/angular で行なわれている模様。1.x は angular/angular.js です。紛らわしい・・・。

見た所こちらは、まだ実装途中という感じです。router とかもないし。本当にスクラッチから実装してる・・・。

### Design Docs

https://drive.google.com/drive/#folders/0BxgtL8yFJbacQmpCc1NMV3d5dnM/0BxgtL8yFJbacUnUxc3l5aTZrbVk/0B7Ovm8bUYiUDR29iSkEyMk5pVUk

まだ全然読んでません・・・。 **最終更新日でソートして上の方を読むのが、一番よくわかりそうです。**

## New: AtScript

- ES6 に型アノテーション、@ アノテーションなどを追加したもの。
- Traceur Compiler のオプションをいくつか有効にすれば使える。
- Angular 2.0 ではそれぞれ DI や directive 定義などに利用する。
- AtScript なしでも書けることは書ける？アノテーションを既存文法で書く。

## RIP contollers

- ComponentDirective という、directive の一種で代替。
- ComponentDirective とテンプレートが一対一という WebComponents 的な世界観？
- Router によって template とセットで設定される模様。HTML 要素名としては出てこない？（angular/projects）

## RIP DDO

- Directive 定義はただの class に。
- アノテーションでメタ情報を付与。
 - @ComponentDirective: 前述
 - @TemplateDirective: つけられた DOM 要素自体をテンプレートにしてしまう。ng-repeat など。
 - @DecoratorDirective: DOM 要素に機能を付加。ng-show, ng-style など

## RIP $scope

- $scope の prototype 継承的なものはなくなる？
- ComponentDirective に対応するテンプレートで使えるのは、その ComponentDirective のプロパティ・メソッドだけ。
- 子テンプレートでは親 ComponentDirective プロパティ・メソッドは使えない模様。子 ComponentDirective では親 ComponentDirective を DI できるので、間接的に親を参照できるので問題ないか。
- イベント: 親、子供を DI すれば直接通信可能なので不要？
- $watch: Object.observe() を使う？アノテーションで属性監視用関数を用意できる？

## RIP angular.module

- ES6 Module を使う。独自のモジュールシステムは不要とのこと。
- controller, service, dicrective の登録は不要に。型または @Inject で型を指定し DI される。
- 型で DI されるということは、class ベース。インスタンス化しない（状態を持たない）ものは、ES6 Module でただ import してそのまま使えば良い？
- 1.x の Provider によって config フェーズで設定する、みたいなのはなくなる模様。

## RIP jqLite

- ブラウザの API を使おう。今は昔よりだいぶいい。

## New: General binding syntax

- ng-style, ng-click などの代わりに、DOM 要素のプロパティやイベントハンドラに直接プロパティやメソッドをバインドする。angular/projects では確認できず。
 - (click)=“”, [checked]=“”
- 属性ではなくプロパティ（JS で触る方のやつ）。

## New: Directive query mechanism

- directive で親や子の directive インスタンスを DI するための仕組み？
- 親は一つ、子は配列で取れる。子の増減などの変更を監視できる。
（DI で入ってくるとはいえ、インターフェイスが密結合になりそうでちょっと心配。）
リストのインデックスを複数指定する（Python）


Pythonでリストから複数の値を取り出したい場合、連続していればスライスで取り出せますが、連続していない場合はどう取り出すのか分からなかったので調べました。

#検証環境
- Python 2.7

#方法
##itemgetterを使う方法
python2.5以降から`itemgetter`が使えるようなのでそれを使ってみます。
リストでインデックスを渡せばそのインデックスの値が返ってきます。

```python
from operator import itemgetter

a = ("a", "b", "c", "d", "e")

print itemgetter(1,3)(a) # ('b', 'd')
```

なぜこういうことをしたくなったかというと、機械学習させてラベルが返ってくるのはいいのですが、そこから元データを取り出す場合、簡単に書く方法が思いつかなかったからです。
例えば小文字化大文字化を判別させる分類器で、ラベルが返ってきてそこから大文字のものだけを取り出す場合は以下のように書きました。

```python
from operator import itemgetter
import numpy

label_prediction = numpy.array([0,0,1,1,0,1])
data = ["a","b","C","D","e","F"]

label_match = numpy.where(label_prediction==1)[0]
print itemgetter(*label_match)(data)
```

他にもいい方法があったらどしどし教えて下さい。

##numpyを使う方法
s-wakabaさんから教えて頂きました！ありがとうございます。
文字列だとnumpy使えないーなどと勝手に悲観しておりましたが、普通に使えました。
itemgetter使うよりはるかに美しいです。

```
import numpy

label_prediction = numpy.array([0,0,1,1,0,1])
data = ["a","b","C","D","e","F"]

print numpy.array(data)[label_prediction==1]
```

調べたこと書いておくとより良い方法とか教えてもらえて助かりますね。
どんどんメモして無知をさらけ出していきたいと思います。
boot2docker with BTRFS/DeviceMapper instead of AUFS

### AUFS の 40(42?) レイヤ問題
ノーマルの boot2docker で動作する Docker デーモンはストレージに AUFS を使用しているので、AUFS の制限によって Dockerfile でビルドするステップ(レイヤ)が多いと失敗する。

自分の Dockerfile だったら、ステップを減らしたりして調節出来るけど、既に作られた Docker Hub にあるやつだったりすると困ったことに。。。

当の boot2docker.iso のビルドも、以前までは boot2docker 上で出来ていたのに、最近ではステップが多すぎてビルドに失敗するようになってしまいました。

**[訂正]
AUFS の 42 レイヤ問題は、ある条件下で発生し、それを回避する方法があることがわかりました。
また、boot2docker 自体には問題が無く、boot2docker.box (boot2docker の Vagrant 用 box) のビルドに問題があることもわかりました。
下記の対策でも問題はありませんが、boot2docker の本家にならい、`yungsang/boot2docker` を更新しました。**
https://github.com/boot2docker/boot2docker/issues/531
https://github.com/mitchellh/boot2docker-vagrant-box/pull/72
https://github.com/YungSang/boot2docker-vagrant-box/commit/b85b91a3622ab713e94114ad254115d375552070

### 対策
これは以前から知られている問題で、こんな時は boot2docker ではなくて、CoreOS を使う(BTRFS なので制限が無い)ってのが自分の定番。

ところが先日 GitHub の Isuue でこの問題が上げられたので、

exec: "/bin/sh": stat /bin/sh: no such file or directory · Issue #11
https://github.com/YungSang/boot2docker-vagrant-box/issues/11

どうにか boot2docker でも別のストレージが使えないかと調べてみたら、
いけそうなので、BTRFS 版、Device Mapper 版をそれぞれ作ってみました。

```ruby:Vagrantfile
VAGRANTFILE_API_VERSION = "2"

STORAGE = "btrfs" # btrfs or devicemapper

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.define "boot2docker-#{STORAGE}"

  config.vm.box = "boot2docker-#{STORAGE}"

  config.vm.box_url = "https://github.com/YungSang/boot2docker-vagrant-box/releases/download/#{STORAGE}-v1.3.1/boot2docker-virtualbox.box"

  config.vm.synced_folder ".", "/vagrant"
end
```

以下のようにレイヤが多い Dockerfile を作って試してみて下さい。

```bash:make-dockerfile.sh
#!/bin/bash
echo "FROM busybox" >Dockerfile
for i in $(seq 1 42); do
  echo "RUN echo layer=$i" >>Dockerfile
done
```

```
$ vagrant up
$ chmod +x make-dockerfile.sh && ./make-dockerfile.sh
$ docker build .
```

それぞれのストレージでの動作の違いも分かって勉強にもなりました。

しかも、CoreOS を使うより軽量だし、VirtualBox Guest Additions もあるし、
なかなかいいかも。

### 参考
- [BTRFS (ie, mkfs inside a privileged container)](https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md#btrfs-ie-mkfs-inside-a-privileged-container)
- [Solution 2 : switch Docker's storage backend](https://github.com/mitchellh/boot2docker-vagrant-box/issues/63#issuecomment-54928617)
- [42 layer image test](https://gist.github.com/harto/10610004)
Atomでしんたっくすはいらいと (  Syntax Highlighting ) を変更したい時

![6d8056555fae958de572b86ee1ed63a8.gif](https://qiita-image-store.s3.amazonaws.com/0/25772/c1bf578b-ef00-40d0-7ca0-ca511c3b0b38.gif)

「grammer」 って言うんだね

「Edit -> Select Grammer」からもいける
CDH5.2.0にアップグレードしたらSqoop importがタイムアウトするようになった


## 現象

CDH4.3.0からCDH5.2.0へアップグレードしたところ、今までは問題なく動いていたSqoop importがタイムアウトする現象に遭遇。(タイムアウトは10分)
import元のRDBはMySQLで、データが小さければ問題ないが、ある程度大きくなるとこの現象に遭遇する。
私の環境では、500MB程度ならば大丈夫だったが、1GBを超えるデータだとタイムアウトになってしまった。

タイムアウトしたsqoopのジョブをjstatで監視してみたところ、Full GCが頻発していた。
下の最後の行を見ると、ジョブ経過時間が163.8秒の時点で、そのうちの123.773秒はGCに費やしている！

```
# usage: jstat <option> <pid> <interval>

% sudo jstat -gcutil -t 29004 10000
Timestamp         S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
          113.8  42.97   0.00  27.94 100.00  53.00     16   11.893     6   66.642   78.535
          123.8  42.97   0.00 100.00 100.00  53.00     16   11.893     7   66.642   78.535
          133.8  42.97   0.00 100.00 100.00  53.00     16   11.893     7   66.642   78.535
          143.8  42.97   0.00 100.00 100.00  53.00     16   11.893     7   66.642   78.535
          153.8  42.01   0.00 100.00 100.00  55.91     16   11.893     8   94.694  106.587
          163.8  42.01   0.00 100.00 100.00  59.16     16   11.893     9  111.880  123.773
:
```

## 原因

調べてみたところ、どうやらsqoop-1.4.5のバグで、対象テーブルの全行をメモリに格納しようとするためFull GCが頻発するらしい。

http://community.cloudera.com/t5/Data-Ingestion-Integration/Sqoop-GC-overhead-limit-exceeded-after-CDH5-2-update/td-p/20604

## 対処法

上記URLにあるが、MySQL/ConnecterJを5.1.33にアップグレードし、sqoopの引数に"--fetch-size -2147483648"を追加することで回避できる。
Scala + Play + SecureSocial でハマったエラー


## はじめに

SecureSocialを使ってSNSにログインしようとしていてハマったエラーを記録しておく。

## Facebook

### avator_urlが長い！

ログイン情報をMySQLにセーブしていたのだが、Facebookへのログインがうまくいかない。
エラーログを見ると、

```text:/var/log/eb-docker/containers/eb-current-app/XXXXXXXXXXXX-stdouterr.log
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'avator_url' at row 1
```

という行を見つけた。

MySQLでは、avator_urlを保存するためのcolumnは以下のように宣言していた。

```sql:
	CREATE TABLE user 
	(
        id INT(12) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,

        // 省略

        avator_url VARCHAR(200),

        // 省略

        PRIMARY KEY (id)
	) DEFAULT CHARSET=utf8 COMMENT = 'User Accounts';

```

２００文字あれば十分じゃないのか、と思ったのだが、いちおうFacebookから返ってきているavatorのURLの文字数を数えてみたら２３０文字強あった…。長過ぎる…

### 解決策

MySQLで、avator_url を２５５文字に変更したらエラーはでなくなった。

```sql:
        avator_url VARCHAR(255),
```


## Google

### Google Developer Console の設定がよくわからない

Googleアカウントでなかなかログインできなかった。
エラーログは以下。

```text:/var/log/eb-docker/containers/eb-current-app/XXXXXXXXXXXX-stdouterr.log
application - [securesocial] error retrieving profile information from Google. Error code = 403, message = Access Not Configured. Please use Google Developers Console to activate the API for your project.
```

### 解決策

```Please use Google Developers Console to activate the API for your project.```でぐぐると以下の記事を見つけた。

[Google OAuth 2.0 loginが2014年9月に使えなくなる(Googleアカウントからのユーザ登録機能がある場合は注意)](http://qiita.com/aikyo02/items/459d03af304e1188f110)

記事のとおり、Google Development ConsoleでGoogle+ APIを有効にしたらエラーはでなくなった。
jekyll コマンド一覧


##サーバ起動
```
jekyll --server
```

##markdownとかで書いた記事(拡張子が.md)を_siteフォルダに反映させる

```
jekyll build
```

##jekyll buildを打たなくても即座に反映されてサーバーで確認できる

```
jekyll serve --watch
```
go-tcptestを使って、echoサーバをテストする


go-tcptest
https://github.com/lestrrat/go-tcptest

go-tcptestは、PerlのTest::TCPをGo言語に移植したモジュール。

Perl版と同じく、以下のような面倒を見てくれている。

- 空いているポートを探す
- TCPサーバが立ち上がり、ポートがListen状態になるまで待つ

これを使って自作のechoサーバをテストする場合について考えた。
以下のようなechoサーバを書いたとする。

```echoserver.go
package echoserver

import (
        "bufio"
        "fmt"
        "net"
        "strconv"
)

type Server struct {
        Host string
        Port int
}

func (s *Server) Run() error {
        server, err := net.Listen("tcp", s.Host+":"+strconv.Itoa(s.Port))
        if err != nil {
                return err
        }
        conns := s.ClientConns(server)
        for {
                go s.HandleConn(<-conns)
        }
        return nil
}

func (s *Server) ClientConns(listener net.Listener) chan net.Conn {
        ch := make(chan net.Conn)
        i := 0
        go func() {
                for {
                        client, err := listener.Accept()
                        if err != nil {
                                fmt.Printf("couldn't accept: " + err.Error())
                                continue
                        }
                        i++
                        fmt.Printf("%d: %v <-> %v\n", i, client.LocalAddr(), client.RemoteAddr())
                        ch <- client
                }
        }()
        return ch
}

func (s *Server) HandleConn(client net.Conn) {
        b := bufio.NewReader(client)
        for {
                line, err := b.ReadBytes('\n')
                if err != nil { // EOF, or worse
                        break
                }
                client.Write(line)
        }
}
```

テストコードは以下のようにした。

```go:echoserver_test.go
package echoserver

import (
        "bufio"
        "fmt"
        "github.com/lestrrat/go-tcptest"
        "log"
        "net"
        "strconv"
        "testing"
        "time"
)

func TestRun(t *testing.T) {
        echo := func(port int) {
                server := &Server{Host: "localhost", Port: port}
                err := server.Run()
                if err != nil {
                        t.Error("Error")
                }
        }

        server, err := tcptest.Start(echo, 30*time.Second)
        if err != nil {
                t.Error("Failed to start echoserver: %s", err)
        }

        log.Printf("echoserver started on port %d", server.Port())

        conn, err := net.Dial("tcp", "localhost:"+strconv.Itoa(server.Port()))
        if err != nil {
                t.Error("Failed to connect to echoserver")
        }
        fmt.Fprintf(conn, "test hogehoge\n")
        res, err := bufio.NewReader(conn).ReadString('\n')
        if res != "test hogehoge\n" {
                t.Error("Wrong Response")
        }
}
```


Go版では、
forkではなくgoroutineでサーバを立ち上げているので、
少し勝手が違った。

goroutineにシグナル送ったり、
外から終了させたりすることができないので、
終了処理は行っていない。

サーバ起動コマンドを作れば`exec.Command`で実行して、
`exec.Process.Signal`でシグナルを送ることができるのだけれど、
他に方法はないものだろうか。。。


# 参考

A simple echo server testing a few interesting Go language features, goroutines and channels
https://gist.github.com/paulsmith/775764
FactoryGirlのcreateはafter commit callbackを実行しない

FactoryGirlで `create` した場合、 `after_commit` だけ実行されない。

```rb
class Book < ActiveRecord::Base
  before_create do
    puts 'before_create'
  end

  after_create do
    puts 'after_create'
  end

  after_commit :run_something, on: :create

  private

  def run_something
    puts 'after_commit'
  end
end

FactoryGirl.define do
  factory :book
end

FactoryGirl.create(:book)
# => before_create
# => after_create
```

実行したい場合はcallbackを自分で実行しないといけない。例えば以下のようにすればいい。

```rb
FactoryGirl.define do
  factory :book do
    after(:create) do |book|
      book.__send__(:run_something)
    end
  end
end

FactoryGirl.create(:book)
# => before_create
# => after_create
# => after_commit
```
godTrans vagrant

```git clone https://bitbucket.org/godtrans/godtrans-vagrant```

startup
```vagrant up```

provision
```vagrant provision```

restart
```vagrant reload```

ssh to VM
```vagrant ssh```

codes
local: ```%path-to-repos%/app```
VM: ```/var/app```

cloud9
local: ```%path-to-repos%/cloud9```
VM: ```/var/cloud9```

to start cloud

```
vagrant ssh
cd /var/cloud9
npm install
./start.sh
```
go to http://192.168.33.154:3131
cloud9 will crush at this moment,
vm:```./start.sh```
see browser
wait a moment
電話番号を元に連絡帳にあるかないかをチェックする


正直Javaにはあまり詳しくないのですが、自分の忘備録のために記録しておこうと思います。

シンプルに、電話番号を引数にして、連絡帳に存在するかをチェックするだけのコードです。

サンプルを切り貼りしたコードなので果たしてこれがベストなのかもわかりません。最初はContactsAPIをつかってサーチしようと思ったのですが、PhoneLookupしたほうが良いというので書き直しました。

	private boolean hasPhoneNumber( String phoneNumber){
		
		boolean result = false;
		String name = null;
		ContentResolver contentResolver = getContentResolver();
		
		String[] projection = new String[] {
		        ContactsContract.PhoneLookup.DISPLAY_NAME,
		        ContactsContract.PhoneLookup._ID};
		
		Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
		Cursor cursor = contentResolver.query(uri, projection, null, null, null);
		if (cursor.moveToFirst()) {
		    name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));

		    result = true;
		    
		} else {
			
			result = false;
		}
		
		return result;
	}
AngularJSでアクティブページのナビのCSSを有効にする方法

## 下記ののCSSを当てたいとする

```css:test.css
.nav-active {
   background-color: #fff;
}
```
##jQueryでやろうとする
アクティブページのナビのCSSを有効にしたかった(よくあるやつ)けど、
以下のコードじゃ無理だった。
というかui-srefの仕様的にあまりよろしくない実装方法。

```javascript:base.coffee
$ ->
  url = window.location.pathname
  $('.side-nav li a[ui-sref="'+url+'"]').addClass('nav-active')
```

##解決
ui-sref-activeを利用する

```jade:header.jade
  li
    a(ui-sref="index" ui-sref-active="nav-active")
```
これでよしなにやってくれる。すごい(小並感)
ui-srefはステートとパラメータを渡しておくと、後々のURL構造の変更とかhtml5Modeへの対応などを
自動で処理してくれる。いやー便利だ。
【メモ】SimpleTextEncodingVectorizer

インプットのディレクトリが空なら動くという状態には出来た。

#使用するやつら

SimpleTextEncodingVectorizer
>Runs a Map/Reduce job that encodes FeatureVectorEncoder the input and writes it to the output as a sequence file.
>Only works on basic text, where the value in the SequenceFile is a blob of text.

```java
org.apache.mahout.vectorizer.SimpleTextEncodingVectorizer
```

```java
createVectors(org.apache.hadoop.fs.Path input, org.apache.hadoop.fs.Path output, VectorizerConfig config)
```

```java
VectorizerConfig(org.apache.hadoop.conf.Configuration conf, String analyzerClassName, String encoderClass, String encoderName, boolean sequentialAccess, boolean namedVectors, int cardinality) 
```

# φ(..)メモメモ

- analyzerClassName
ググったら standard.StandardAnalyzer が引っかかったので

- encoderClass
同上

- encoderName
同上

# ソースコード
```clj
(ns mahout-clj.core
  (:import [org.apache.mahout.math RandomAccessSparseVector]
           [org.apache.mahout.math VectorWritable]
           [org.apache.hadoop.io SequenceFile$Writer]
           [org.apache.hadoop.fs FileSystem]
           [org.apache.hadoop.conf Configuration]
           [org.apache.hadoop.fs Path]
           [org.apache.hadoop.io Text]
           [org.apache.mahout.vectorizer SimpleTextEncodingVectorizer]
           [org.apache.mahout.vectorizer VectorizerConfig]
           [org.apache.mahout.vectorizer.encoders LuceneTextValueEncoder]
           ))

(def analyzerClassName "standard.StandardAnalyzer")
(def encoder-class (.getName LuceneTextValueEncoder))
(def encoder-name "text")
(def vec-conf (VectorizerConfig. conf analyzerClassName encoder-class encoder-name false false 10000))
(def simple-text-encoding-vectorizer (SimpleTextEncodingVectorizer.))
(def in (Path. "indir"))
(def out (Path. "out"))

(.createVectors simple-text-encoding-vectorizer in out vec-conf)
```

# 参考
http://www.programcreek.com/java-api-examples/index.php?api=org.apache.mahout.vectorizer.encoders.FeatureVectorEncoder
動かなくなった Intel Edison をリカバリする

あるとき Edison が Linux の起動途中でマウント失敗によるエラーを出すようになりました。
Linux が起動しきらないので、reboot を使ったファーム更新ができません。なにもできない状態です。
![2014-11-02_015925.png](https://qiita-image-store.s3.amazonaws.com/0/50737/e2ef172f-6213-d9db-3200-16e6974cd08b.png)


このような場合はファームウェアファイルの中にある  flashall.[bat|sh] を使って PC からファームウェアを書き込んでやる必要があります。
通常のファームウェア更新をこの手段で行っても構いません。

# 用意するもの
## ファームウェア
https://communities.intel.com/docs/DOC-23242
上記ページからファームウェアをダウンロードする。
たぶん 'Edison Yocto complete image' とか書いてあるはず

## DFU-UTIL
書き込みに必要なツール
https://community.spark.io/t/latest-2014-dfu-util-for-windows-compiled/5264
こちらを参照して dfu-util を入手してください。

# 書き込み手順
以下 Windows での手順

1. ファームウェアを解凍し、そこに dfu-util.exe を置きます
2. コマンドラインウィンドウ(powershellでも可)を開き、ファームウェアを置いたディレクトリに移動
3. .\flashall.bat を実行

```
	> .\flashall.bat
	Using U-boot target: edison-blank
	Now waiting for dfu device 8087:0a99
	Please plug and reboot the board
```

4. 上記のように表示されて停止するので、PC と J16 側で接続
5. 上手くいくと Dfu device found と表示されてファームウェアのアップデートが始まります

# 書き込み中の画面

```
> .\flashall.bat
Using U-boot target: edison-blank
Now waiting for dfu device 8087:0a99
Please plug and reboot the board
Dfu device found
Flashing IFWI
Download        [=========================] 100%      4194304 bytes
Download done.
Download        [=========================] 100%      4194304 bytes
Download done.
Flashing U-Boot
Download        [=========================] 100%       245760 bytes
Download done.
Flashing U-Boot Environment
Download        [=========================] 100%        65536 bytes
Download done.
Flashing U-Boot Environment Backup
Download        [=========================] 100%        65536 bytes
Download done.
Flashing boot partition (kernel)
Download        [=========================] 100%      5799936 bytes
Download done.
Flashing rootfs, (it can take up to 5 minutes... Please be patient)
Download        [=========================] 100%    536870912 bytes
Download done.
Rebooting
U-boot & Kernel System Flash Success...
Your board needs to reboot twice to complete the flashing procedure, please do not unplug it for 2 minutes.
```
書き込んだ後、完了するまで時間がかかるのでしばらくそっとしておきましょう。