OmniAICreator/Qiita-1.07M huggingface dataset:
Electron で半透明のウィンドウ

Electronで半透明のウィンドウの作り方がわかったので、ここにメモしておきます。

```js:index.js
'use strict';
var app = require('app');
var BrowserWindow = require('browser-window');
require('crash-reporter').start();
var mainWindow = null;

app.on('window-all-closed', function() {
    if (process.platform != 'darwin') {
        app.quit();
    }
});

app.on('ready', function() {
    mainWindow = new BrowserWindow({
        width: 400,
        height: 600,
        transparent: true,
        frame: false,
    });

    mainWindow.loadUrl('file://' + __dirname + '/index.html');
    mainWindow.on('closed', function() {
        mainWindow = null;
    });
});
```

```html:index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset='UTF-8'>
    <title>半透明テスト</title>
    <style>
      html { height: 100%; width: 100% }
      body {
        -webkit-app-region: drag;
        -webkit-user-select: none;
        margin: 0;
        height: 100%;
        width: 100%;
        opacity:0.5;
      }
      #main {
        height: 100%;
        width: 100%;
        background-color: black;
        color: white;
      }
    </style>
  </head>
  <body>
    <div id='main'>半透明のウィンドウ</div>
  </body>
</html>
```

![opacity.png](https://qiita-image-store.s3.amazonaws.com/0/77523/07f60d59-d4c6-4738-2955-567b983b5aef.png)

CSSで強引にやってる感じが否定できませんが、とりあえず目的は果たせているのかなｗ
C#のDictionary【Unity, C#】

# C#でDictionaryを使用したので、メモ。

## 名前空間
```csharp
using System.Collections.Generic;
```
## 宣言

```csharp
Dictionary<GameObject, Vector3> temp;
```

## コンストラクタ

```csharp
Dictionary<string, string> dic = new Dictionary<string, string> ();
```
初期値を設定する場合

```csharp
Dictionary<string, string> dic = new Dictionary<string, string> () {
		{"key0", "value0"},
		{"key1", "value1"}
	};
```

## 要素の追加

```csharp
dic.Add ("key2", "value2");
dic.Add ("key3", "value3");
```

## 要素の取り出し

```csharp
Debug.Log (dic ["key0"]);
```

## キーの列挙

```csharp
foreach (string key in dic.Keys) {
	Debug.Log (key);
}
```

## 要素の列挙

```csharp
foreach (string value in dic.Values) {
	Debug.Log (value);
}
```

## キーと要素の列挙

```csharp
foreach (KeyValuePair<string, string> pair in dic) {
	Debug.Log (pair.Key + " : " + pair.Value);
}
```

## 要素数

```csharp
Debug.Log (dic.Count);
```

## 要素列挙の順番
Addの順番通りに出力されます。
※このサンプルがたまたまAddと同じ順番で出力されているだけなのかもしれません。

```csharp
Dictionary<string, string> temp = new Dictionary<string, string> ();
for (int i = 0; i < 10; i++) {
	temp.Add ("key" + i.ToString(), "value" + i.ToString());
}

foreach (KeyValuePair<string, string> pair in temp) {
	Debug.Log(pair.Key + " : " + pair.Value);
}
```

結果
<img src="https://qiita-image-store.s3.amazonaws.com/0/29966/cc193ce8-d448-18f8-fab4-0c089f4835bd.png" alt="スクリーンショット 2015-08-04 14.25.37.png" width="200" />

## 要素の削除

```csharp
dic.Remove ("key0");
```
Linuxプロセスのメモリ共有率を計算する

LinuxプロセスのCopy on Writeによるメモリ共有率を計算するプログラム。

こちらのエントリーと

* [Linux のプロセスが Copy on Write で共有しているメモリのサイズを調べる](http://d.hatena.ne.jp/naoya/20080212/1202830671)

上記エントリー内で参照されている

* [Perl：forkしたプロセス間でのメモリ領域の共有](http://www.typemiss.net/blog/kounoike/20060202-61)

を参考にして、紹介されている [Linux::Smaps](http://search.cpan.org/~opi/Linux-Smaps-0.11/lib/Linux/Smaps.pm) モジュールを利用したPerlのプログラムをPythonで書いてみました。外部モジュールのインストールなしで動作するので使いやすいかと思います。Python 2.6系以上で動作することを確認しています。

```py
#!/usr/bin/env python
  
import sys

def read_smaps(pidlist):
    try:
        print("PID\tRSS\tSHARED\t\tNONE_SHARED")
        mem = lambda t, f: int(f[1]) if f[0] == '%s:' % t else 0.0
        for pid in pidlist:
            filename = "/proc/%s/smaps" % pid
            with open(filename) as f:
                rss = 0.0
                shared = 0.0
                for line in f:
                    fields = line.split()
                    rss += mem('Rss', fields)
                    shared += mem('Shared_Clean', fields)
                    shared += mem('Shared_Dirty', fields)
                print("%s\t%d\t%d (%.2f%%)\t%d" %
                      (pid, rss, shared, shared/rss*100, rss - shared))
                      
    except IOError as e:
        print(e)
  
if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("usage: %s [pids]" % __file__)
        sys.exit(-1)
          
    read_smaps(sys.argv[1:])

```
* 使用例

```bash
$ sudo ./read_smaps.py
usage: ./read_smap.py [pids]

## PIDのリストをpgrepコマンドで指定して、プログラムのメモリ使用量(共有率)を計算する
$ sudo ./read_smaps.py `pgrep train_model.py`
PID     RSS     SHARED          NONE_SHARED
23241   330396  202516 (61.29%) 127880
23246   414720  202476 (48.82%) 212244
23247   414836  202480 (48.81%) 212356
23248   414196  202440 (48.88%) 211756
```

RSSがプロセスのメモリ使用量、SHAREDが共有されているメモリ使用量(共有率)、NONE_SHAREDが共有されていないメモリ使用量を表しています。上記の例はPython(using scikit-learn)で書いたマルチプロセスで回帰の学習と交差検証を行うプログラムのメモリ共有率を調べたものですが、だいたい50%前後のメモリを共有していることが読み取れます。

/proc/{PID}/smaps ファイルの中身を読むだけの簡単なプログラムなので、AWKで書いている方もWeb上にたくさんいらっしゃるようです。仕事柄、データサイエンスや要素技術系はPythonで書くことが多いので、ここでも多少使い慣れているPythonで書きました。最近はこっそりGo言語の勉強して、書き捨てのコードは業務でもGoで書いたりしてますけども。
AWSメモ

個人用メモ

# ロードバランサでアクセス制限をかける(開発環境とか)

VPC
->セキュリティグループ
->[対応のELB]を選択して
->インバウンドルール
->編集
->全てのトラッキング・送信元に、IP/32 を追加して保存。

# S3にアクセス制限をかける(開発環境とか)

```json:
{
	"Version": "2012-10-17",
	"Id": "[ユニークID]",
	"Statement": [
		{
			"Sid": "[ユニークID]",
			"Effect": "Deny",
			"Principal": {
				"AWS": "*"
			},
			"Action": "s3:*",
			"Resource": "arn:aws:s3:::[バケット名]/*",
			"Condition": {
				"NotIpAddress": {
					"aws:SourceIP": "[許可するIP]/32"
				}
			}
		}
	]
}
```
世界一わかりやすい Photoshop 操作とデザインの教科書


アプリケーション開発の過程では、アイコンやアプリで使う画面デザイン、あるいはサポートサイトなどで画像をいくつも用意することになります。画像をいろいろいじったり画像形式を変換したりするのに最も安心して使えるのはやはりAdobe のツールでありその中の定番がPhotoshopです。
Photoshop はプロ用のツールでもあり高機能ですが、それだけに使い方のマスターはなかなか大変です。このため参考書も数多く出版されています。私もこれまでに2,3 冊購入しましたが、なかなかスパッと使えるようになりません。
本書はチュートリアル式に実際には役に立たない画像を作らせたり、機能を満遍なくなめた解説ではなく、実際的な操作をきちんと解説してあり、私のなかでは決定版とも言える参考書だと思います。
最初に、選択、カラー、レイヤーという順番に解説されており、実はPhotoshop を使う上で最も重要で基本的な機能が最初に解説されているので、とても実際的です。実際ちょっと画像をいじりたいというのは元の写真から必要な部分を切り出して、色味を変えたり、枠をつけたり背景を変えるというようなことが多いと思います。
本書はあくまでPhotoshopのプロのための参考書ではないので、機能などが完全に網羅されているわけではないですが、使いながら習得していくのに適したまさに教科書と言えるような参考書だと思います。

![IMG_0289.jpg](https://qiita-image-store.s3.amazonaws.com/0/60473/1b015ea8-5817-4889-b222-76d003a766bc.jpeg "IMG_0289.jpg")
CircleCI で DynamoDB Local を動かす


[CircleCI](https://circleci.com/) は MySQL や Redis は標準でサポートしているのですが、さすがに DynamoDB は非対応なので、テスト時に DynamoDB Local を動かすよう設定してみました。

```circle.yml
dependencies:
  cache_directories:
    - "~/DynamoDBLocal"
  post:
    - "[ -d ~/DynamoDBLocal ] || (mkdir ~/DynamoDBLocal; cd ~/DynamoDBLocal; curl -s -L http://dynamodb-local.s3-website-us-west-2.amazonaws.com/dynamodb_local_latest.tar.gz | tar xz)"
test:
  pre:
    - "java -Xms1024m -Xmx1024m -Djava.library.path=~/DynamoDBLocal/DynamoDBLocal_lib -jar ~/DynamoDBLocal/DynamoDBLocal.jar":
        background: true
```

dependencies の post で、HOME にディレクトリ DynamoDBLocal がなければ Amazon から取得して展開するようにしています。
dependencies の cache_directories を指定することで、展開済の DynamoDB Local をキャッシュできるので、次回以降の build 時のセットアップを短縮できます。

後は、test の pre で DynamoDB Local を稼働させればOKです。
ポイントは `background: true` で、これを指定することで、いわゆる `nohup + &` の形で実行してくれます。

設定次第でいろいろ細かいカスタマイズができ、サポートのレスポンスも丁寧で早いので、CircleCI は今のところかなりオススメですね。
service コマンド風の launchctl ラッパースクリプト「osx-service-cmd」をつくってみた


OS X の launchctl を使いやすくする service コマンド風のラッパースクリプトをつくってみました。

https://github.com/nobutakaoshiro/osx-service-cmd

Homebrew 等でインストールしたサービスの起動・停止・再起動などに使えます。
   
# 動作環境

* launchctl コマンドが搭載されている Mac OS X
	* Mac OS X 10.4 (Tiger) 以上 
* OS X 10.10.4 (Yosemite) で動作確認済み


# インストール方法

```bash
git clone https://github.com/nobutakaoshiro/osx-service-cmd.git
cd osx-service-cmd

./install.sh
```

/usr/local/bin に service コマンドがコピーされます。
パスが通ってない方は、以下のページを参考にしてパスの設定を行ってください。

- [Homebrew コマンドが優先的に実行されるようにデフォルトパスに/usr/local/binを追加する - Qiita](http://qiita.com/n-oshiro/items/3c571a4fcdb023b1fe77)

# 使い方

## サービス一覧表示

```bash
service list 
```
LaunchAgents/LaunchDaemons の plist 一覧を表示します

## サービス起動

もし ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist という plist が存在している場合

```bash
service mongodb start
# => launchctl load /Users/nobutaka/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

# 以下でも可(部分一致)
service homebrew.mxcl.mongodb start
service homebrew.mxcl.mongodb.plist start
```

## サービス停止

```bash
service mongodb stop
# => launchctl unload /Users/nobutaka/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
```

## サービス再起動

```bash
service mongodb restart
# => launchctl unload /Users/nobutaka/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
# => launchctl load /Users/nobutaka/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
```

## サービス自動起動ON

```bash
service mongodb enable
# => launchctl load -w /Users/nobutaka/Library/LaunchAgents/homebrew.mxcl.mongodb.plis
```

## サービス自動起動OFF

```bash
service mongodb disable
# => launchctl unload -w /Users/nobutaka/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
```

# 解説

内部的には ~/Library/LaunchAgents, /Library/LaunchAgents, /Library/LaunchDaemons にある plist の中から、第1引数に指定した文字列に部分一致する plist を探して、その plist に対して launchctl load/unload を行っています。
rootの権限が必要なところは sudo をつけて service コマンドを実行してください。

# アンインストール方法

```bash
rm /usr/local/bin/service
```

アンインストールはスクリプトを削除するだけです。お手軽簡単です。

# 注意事項

OS X 環境専用です。OS X 以外の環境では動きません。
括弧について


プログラムでよく使われる下記の3種類の括弧について調べた。

* ()
* []
* {}

# 日本での扱い

そもそも、個人的な経験では ()=小括弧、{}=中括弧、[]=大括弧 と聞いていたし、そう信じていた。 

## Wikipedia

Wikipediaの [注釈](https://ja.wikipedia.org/wiki/%E6%8B%AC%E5%BC%A7#cite_note-jun-1) を引用するとこういうことになってるらしい。

> 日本などの一部の国では、数式における括弧の入れ子は [{()}] の順で用いられてきた。しかし、世界的には {[()]} の順で用いられる方式が多数派である。

> JIS Z 8201-1981 においても「小括弧」・「中括弧」・「大括弧」という名称は廃止され、現在は「丸括弧」・「角括弧」・「波括弧」と表記されている。
> なお、この日本工業規格 (JIS) の解説文において、丸括弧・角括弧・波括弧を入れ子にする際の順序については「特に規定しない」としたうえで、{[()]} が大多数（世界中の学術誌のうち約90%）であることが付記されている。

## JIS Z 8201-1981

[JIS Z 8201-1981](http://kikakurui.com/z8/Z8201-1981-01.html) では確かに小中大括弧という記述はなかった。
番号 1.36, 1.37, 1.38 に ()=丸括弧、[]=角括弧、{}=波括弧 の順に記載されている。

## 工業標準化法

そもそもJISは工業標準化法によると鉱工業のためのものなので数学者がこれに従う必要はない、というご意見をいただいた。
そうですか、としかいいようがないがプログラマとしてはどうでもいいかな・・・

# 海外の反応

国際標準といえばISO。
ISO 31-11:1992 というものがあった。ISO 80000-2:2009 が最新らしい。

差分についてはこちらのQAが参考になった。
[What are the main changes between ISO 31-11 and ISO 80000-2? (math notation standards)](http://math.stackexchange.com/questions/658965/what-are-the-main-changes-between-iso-31-11-and-iso-80000-2-math-notation-stan)

40ページの資料に160ドル払った回答者フランクに対するコメントも念のため転載しておく。
> "What a complete waste of money, Frank!" - Pedro Tamaroff
> "I am upvoting this just because you paid that much money for the document" - naslundx

## ISO 80000-2:2009

ISO 80000-2:2009 についてはPDFが公開されていた。
[INTERNATIONAL ISO STANDARD 80000-2](http://www.ise.ncsu.edu/jwilson/files/mathsigns.pdf)

15ページの Item No. 2-7.19 (1-5.14) に括弧の記述があった。
記載順序は (),[],{} になっているが、そもそも入れ子やめろ()使え的な事が書いてある。
読み方としては下記のようになるらしい。

* () : parentheses
* [] : square brackets
* {} : braces

## Science Editors’ Handbook (EASE)

ここで読者の方から貴重なカッコ情報が届いた。
"The European Association of Science Editors (EASE)"という団体が出版する"Science Editors’ Handbook"にカッコの順序が定義されているという。
http://www.ease.org.uk/wp-content/uploads/1-4.pdf

> If  more  than  one  set  of  parentheses  is  needed  in  a  mathematical  expression,  use  (),  []  and  {}  consecutively  from  inward  to  outward:  {[()]}.

たしかに {[()]} の順って書いてある。

> If  more  than  three  levels  of  enclosures  are  necessary,  use  the  same  sets  in  the  same  order again, but in a bold type.

しかもさらにネストさせたい場合は **{[(**{[()]}**)]}** って書いてある。太字である。

## Wikipedia

一般的な話としてWikipediaも調べてみた。
> * () — parentheses, brackets (UK, Canada, New Zealand, and Australia), parens, round brackets, soft brackets, or circle brackets
> * [] — square brackets, closed brackets, hard brackets, or brackets (US)
> * {} — braces are "two connecting marks used in printing"; and in music "to connect staves to be performed at the same time" [2](UK and US), flower brackets (India), French brackets, curly brackets, definite brackets, swirly brackets, curly braces, birdie brackets, Scottish brackets, squirrelly brackets, gullwings, seagulls, squiggly brackets, twirly brackets, Tuborg brackets (DK), accolades (NL), pointy brackets, or fancy brackets
> 
> [Bracket](https://en.wikipedia.org/wiki/Bracket)

記載順序は (),[],{} だが、読み方は国によってバラバラらしい。
インドにいたっては{}=花括弧(flower brackets)とも言うそうで。
言われてみれば蓮の花っぽい。
Atomをevernoteのmarkdownエディタとして使う（EVND）



ザックリメモ奴。

atomとパッケージのEVNDを使います。
sublimeのEvernoteプラグインは全部コマンドでやる感じだったので、使用感が良くなかったためこっちを試してみる。
あと、ローカル保存 -> Evernoteのアップロードとなるため、若干安心な点がうれしい。

https://atom.io/packages/ever-notedown

## 保存用のディレクトリ作成
    $ ln -s path/to/your/folder ~/.atom/evnd
    $ cd ~/.atom/evnd
    $ echo "{}" > index.json
    $ git init
    $ git add .
    $ git commit -m "Initial commit"

## atom package install
    $ apm install ever-notedown

## 新規ノート作成
Atomのメニューから

    Packages > Ever NoteDown
    New Note > Create New Note

とりあえず、

    Packages > Ever NoteDown > Toggle EVND Pannel

から大体できそう。
[Swift] 非同期処理の関数を同期的に実行したい

が、やり方がわからない。
自力でやってみるとこんな感じでできることはできたのだが・・・。

```lang:swift
//非同期処理が完了したらtrueになる変数を用意
var isDone:Bool = false
//BoltsをインストールしてcontinueWithSuccessBlockを使用
HidoukiFunc().continueWithSuccessBlock {(task) in
    //HidoukiFuncの実行が完了した際
    isDone = true
    return nil
}
//isDoneがtrueになるのを待つ
while isDone == false {
    usleep(10)
}
```

こんなの絶対おかしい。
もっと賢い方法があるはず。
わかったら追記します。

追記：
わかりました。

```lang:swift
//セマフォを用意する
let semaphore:dispatch_semaphore_t = dispatch_semaphore_create(0)

//BoltsをインストールしてcontinueWithSuccessBlockを使用
HidoukiFunc().continueWithSuccessBlock {(task) in
    //HidoukiFuncの実行が完了した際
    //セマフォを+1する（-1から0へ）
    dispatch_semaphore_signal(semaphore)
    return nil
}
//セマフォを-1する（セマフォが0になるまで処理が進まないのでここでウェイトということになる）
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)
```

参考：
[GCDリファレンス](https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/#//apple_ref/c/func/dispatch_semaphore_create)
[一週間分の歩数を取得する](http://qiita.com/arthur87/items/1e4e326c81a40d515ebd)

変更（2015/08/10）：
説明に自信がない箇所を削除
bashでjqを使ってJSONの配列をループさせる


```json:list.json
[
  {
    "key": "k1",
    "val": "v1"
  },
  {
    "key": "k2",
    "val": "v2"
  }
]
```

```sh
#!/bin/bash

json=$(cat list.json)
len=$(echo $json | jq length)
for i in $( seq 0 $(($len - 1)) ); do
  row=$(echo $json | jq .[$i])
done
```

# 参考

[bashでjqを使ってJSONのオブジェクトをループさせる](http://qiita.com/ryo0301/items/de8ce43fe61ede66f80a)
MTタグのみでサッカーのスコアをつくる！@四則演算

**サッカーの試合のスコア表**を**MTタグのみ**で作ってみることにします。

仕様としては、各チームの前後半のスコアを数値入力制にして、**合計点数をMT側で計算して出力**。
できるかぎり、入力項目を減らすことでヒューマンエラーを減らしたいですね。

#カスタムフィールドを用意

用意する**カスタムフィールド**は以下の4つ。
ホーム/アウェイの前後半の得点になります。

* mt:ScoreHome1 （ホームチームの前半の得点）
* mt:ScoreHome2 （ホームチームの後半の得点）
* mt:ScoreAway1 （アウェーチームの前半の得点）
* mt:ScoreAway2 （アウェーチームの後半の得点）

#変数にセット

次に、各カスタムフィールドの値を変数にセットします。

```lang:
<$mt:ScoreHome1" setvar="sHome1"$>
<$mt:ScoreHome2" setvar="sHome2"$>
<$mt:ScoreAway1" setvar="sAway1"$>
<$mt:ScoreAway2" setvar="sAway2"$>
```

#「op」モディファイアで四則演算

ホームとアウェイでそれぞれ、前半と後半の得点を**[「op」モディファイア](http://www.movabletype.jp/documentation/designer/enhanced_templatetags.html#op_modifier)**で加算して合計点を出します。

```lang:
HOME：<$mt:var name="sHome1" value="$sHome2" op="+"$>
AWAY：<$mt:var name="sAway1" value="$sAway2" op="+"$>
```

やり方としては、前半の得点の変数をベースとして、「value」に後半の得点をセットします。
「value」に変数を使用するには頭に**「$」**をつけます。

このようにMTMLでも、ちょっとめんどくさいですが計算することができます（笑）

#変数を比較する

総得点の変数（totalHome/Away）同士を比較すると勝敗結果も自動で出せます。

```lang:
HOME：<$mt:var name="sHome1" value="$sHome2" op="+" setvar="totalHome"$>
AWAY：<$mt:var name="sAway1" value="$sAway2" op="+" setvar="totalAway"$>

<mt:if name="totalHome" eq="$totalAway">
引き分け
<mt:elseif gt="$totalAway">
HOMEの勝利
<mt:else>
AWAYの勝利
</mt:else>
</mt:elseif></mt:if>
```

もっと項目を増やせば、野球のスコアを表現することも可能ですね。

それでは、ステキなMTライフを。


# note
valueに変数を使う場合、変数名に(_)アンダーバーや(-)ハイフンを使うとうまく値をセットできない

# 関連

* [opモディファイア](http://www.movabletype.jp/documentation/designer/enhanced_templatetags.html#op_modifier)(タグリファレンス)
* [mt:IFタグ](http://www.movabletype.jp/documentation/appendices/tags/if.html)(タグリファレンス)
* [mt:SetVarタグ](http://www.movabletype.jp/documentation/appendices/tags/setvar.html)(タグリファレンス)
ARMでの組み込みのためのアプローチの資料

ARMでの組み込みのためのアプローチの資料[1]を見つけたので、
参考のためメモする。

その資料「OpenCV for Embedded: Lessons Learned」
は15ページの資料で簡潔にまとまっています。
6ページ目には、それらの手順が簡潔に書いてあります。

・Prototyping(x86)
・Porting
   regression tests
・Profiling
   performance tests
・Bottleneck optimization
・Fine Tuning
・Productization

それに対して、私の場合だとどのようであるのかをPythonの場合を参考まで記します。

・Prototyping(x86)
　OpenCV+Python+Numpy+matplotlib+scikit-learnなどを使う。
　画像認識の場合だと、解像度を変更する、面積縮小ではなくてリサンプリングに置き換えられるか、領域を削減できないかといった、アルゴリズムを知っているからこそできるアプローチをとる。
　Pythonの場合だと、試行錯誤をすることが簡単なので、初めて使うアルゴリズムでもデータ構造が理解しやすいのがうれしい点です。(すべてのオブジェクトをprintできること、全てのデータメンバーを参照できること、数値データをmatplotlibでMATLABと同様な豊富なグラフ描画関数を使ってチェックができます。)

　また、このプロトタイピング段階で、ソフトウェアの設計を見直して、メンテナンスしやすい構造に分離しておく。
 Documentation commentを書いて、それぞれの関数、クラス、メソッドが何を実現するものかを、第三者がわかるようにしておく。

　もちろんこの段階からバージョン管理をしておきます。SVNを使って、localなHD上にレポジトリをおいて、自分自身のためにバージョン管理しておく。他のOSに移植することを想定して文字コードはunicodeにしておく。


・Porting
　Linux(ARM)に移行しても、
　OpenCV+Python+Numpy+matplotlib+scikit-learnなどを使う。
　これらのライブラリはapt-get install ライブラリ名
　として、移植することができる。
###　RegressionTest
　テストはunitTestを使う。数値データの一致の度合いを比較するには、numpyに用意されているnumpy.testing.assert_almost_equal(actual, desired[, ...])などを使うのがよい。
　unitTestはCppUnitと同様の考え方でできているので、将来C++でのCppUnitへの移植も対応がつきやすい。

・Profiling
###　PerformanceTest
　標準のライブラリの中にProfiling機能がある。
　これらのunitTestやperformanceをOSやCPUの種類によらず、共通のソースで行うことができます。

　　
　
・Bottleneck optimization
　　対象とするCPUがシングルコアか、複数コアかによって異なってくる。組み込みのCPUでも複数コアがあるので、[2]の資料を参考にRaspberryPi2などでの高速化をはかることができそうだ。ZynqなどのARM dual core+FPGAの構成でも、複数コアであることを利用した書き換えができるだろう。
 　何が律速になっているかで、アプローチが異なってくる。

・Fine Tuning
  Pythonの場合にはC++で記述されたpydファイルのモジュールの性能が効いてくる。
　pydファイルを作るときのbuildの条件が、対象のCPUに対して最適になっているかで
　性能が格段に違うことを理解している。
　私のレベルでは、まずはプロトタイピングの時点で、データの処理量を減らすことでの改良であって、C++で書かれたコード部分の最適化には達していない。
　ARMの組み込みの場合だと、NEON命令を上手に使いこなせているかが、ポイントとなるらしい。NEON命令の使い方は、OpenCVのモジュールのソースコードを読み取っていくのがよいらしい。

\#if CV_NEON
\#endif
で囲まれた部分のコードを
c:\\opencv\sources\modules\imgproc\src\*.cpp
などから見つけ出して、まねていくことにしよう。

PythonでCPU律速の場合だと、Cythonを使うことで速度の改善がはかれる。
画像処理・認識の場合だとnumpyをいかに効率的に利用できているかで
実行速度が格段に違ってくる。
numpyをbuildする際に、MKLなどの線形代数を高速化するライブラリを使って
buildしなおせば、pythonでの記述が同じでも高速化されるそうです。

・Productization


＜付記＞
OpenCV のPython　bindingの場合だと、まだgpuを利用することができないのが残念である。
もちろんOpenCVとは無関係のGPUのpythonライブラリがあるのは知っているのですが、
GPUの性能を活かせるARMの組み込みボード（Jetson TK1）を使っていないために、Pythonからどれだけ使い物になるのかを知っている方がいらっしゃれば教えていただきたいと思っています。

ARMのリソースは、PCとは格段に違いますから、実装する必要のある全てが、そのARMボードで実現できるかどうかの見極めには用心してください。実装すべき必要のある全てが、十分に明確になっていない場合には、十分に余力のあるARMボードを選ぶようにしておきましょう。コア数は２つで十分なのか（64bitコアで４コアならば, Raspberry Pi3）、GPUを必要とするのか(Jetson 
TX1)、FPGAを必要とするのかどうか。
選択肢は増えてきています。

URL
[1]:OpenCV for Embedded: Lessons Learned
http://www.slideshare.net/YuryGorbachev1/opencv-for-embedded-lessons-learned

[2]:
Parallel Pythonを使ってRaspberry Pi 2 の4コアCPUを使いきってみる
http://qiita.com/akidn8/items/ea3dcae810ff36fd5401
h2oをリバースプロキシとして導入してみた


流行りの[h2o/h2o](https://github.com/h2o/h2o)をインストールして動かしてみた
Apacheがすでに動いていてその上でPHPとかuwsgiとか動いていたので、今回はリバースプロキシとして導入することにした

## 環境

さくらVPS

```
$ cat /etc/redhat-release
CentOS release 6.6 (Final)
$ uname -r
2.6.32-504.3.3.el6.x86_64
```

# インストール

[Install - H2O](https://h2o.examp1e.net/install.html)に書いてある

`yum`で提供されているっぽいこと書いてあったのでやろうとしたがだめだった

```sh
$ sudo yum install h2o
読み込んだプラグイン:downloadonly, fastestmirror, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
パッケージ h2o は利用できません。
エラー: 何もしません
```

というわけで、ソース落としてきて手元でビルドした
手元の環境には`cmake`が入っていなかったので

```sh
sudo yum -y install cmake
```

していれた

```sh:ダウンロードからインストール
wget https://github.com/h2o/h2o/archive/v1.4.2.tar.gz
cmake -DWITH_BUNDLED_SSL=on .
make
sudo make install
```

これで`/usr/local/bin/h2o`に実行ファイルが格納される

# 設定ファイル

[Quick Start](https://h2o.examp1e.net/configure/quick_start.html)と[Proxy Directives](https://h2o.examp1e.net/configure/proxy_directives.html)を参考にした

```yaml:/etc/h2o/reverse_proxy.conf
user: nobody
hosts:
  "My own host":
    listen:
      port: 80
    paths:
      "/":
        proxy.reverse.url: http://127.0.0.1:8080/
      "/assets":
        file.dir: /path/to/assets/
access-log: /path/to/log/access_log
error-log: /path/to/log/error_log
```

`pid-file`はとりあえず消した
リバースプロキシのために`proxy.reverse.url`を設定する
もちろん、もともと動いていたApacheのポートを8080に変更し、iptablesで8080を開ける作業が必要となる
これだけでいいのめっちゃ楽

# 動かす

[CentOS/サービスの登録 - wiki.aokix.com](http://wiki.aokix.com/CentOS/%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E7%99%BB%E9%8C%B2)をかなり参考にして起動スクリプトを書く
`chkconfig`のランレベルはapacheのものを拝借している
今回は雑に`start`で`h2o`を実行して、`stop`で`pkill h2o`する、みたいなものとした
`status`とか`reload`もとりあえずいらないので削除

```sh:/etc/rc.d/init.d/h2o
#!/bin/bash
#chkconfig: 2345 85 15
#descpriction: h2o Web Server

# source function library
. /etc/rc.d/init.d/functions

RETVAL=0
SERVICE_NAME=`basename $0`

start() {
        echo -n $"Starting : $SERVICE_NAME"
        /usr/local/bin/h2o -c /etc/h2o/reverse_proxy.conf &
        RETVAL=$?
        if [ $RETVAL == 0 ]; then
          success
        else
          failure
        fi
        echo
}

stop() {
        echo -n $"Stopping $SERVICE_NAME: "
        pkill h2o
        RETVAL=$?
        if [ $RETVAL == 0 ]; then
          success
        else
          failure
        fi
        echo
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  *)
        echo $"Usage: $0 {start|stop}"
        exit 1
esac

exit $RETVAL
```

これで`sudo chkconfig --add h2o`すれば、以下のようにして`service`を使って起動・停止出来るようになる

```sh:h2oの起動/停止
sudo service h2o start
sudo service h2o stop
```

最後に疎通確認で`curl --head <your host>`して
>Server: h2o/1.4.2

となっていれば終了
証明書とってなかったりでhttp2にはならなかったが、ひとまず動かすという目的は果たせた
GitHub で Merge 前の Pull Request をベースに次の Pull Request を作成してみたメモ

# 動機

* コードレビューを待っているマージ前の Pull Request (ブランチ)をベースに次の機能開発をしたい
* (親)Pull Request から分岐した (子)Pull Request をマージした場合、どこにマージされるのか分らなかった

# 結果

* まだマージされてない (親)Pull Request から作った (子)Pull Request をマージしても、(デフォルトで)ちゃんと master にマージされる
* 親Pull Request がマージされる前に、子Pull Request をマージすると、親Pull Request も勝手にMerge/Closeされてしまう

# 実験

## 準備

```bash
git checkout master

git checkout -b parent-branch
echo "edit some files..."
git status
git add .
git commit -m "...Parent branch..."
git push -u origin parent-branch
```

parent-branch から Pull Request を作成。

```bash
git checkout -b child-branch
echo "edit some files..."
git status
git add .
git commit -m "...Child branch..."
git push -u origin child-branch
```

child-branch から Pull Request を作成。

## パターン1: 親Pull Request をマージしてから、子Pull Request をマージ

* GitHub のサイトから親 Pull Request をマージ
* GitHub のサイトから子 Pull Request をマージ

何の問題もなく、両方ともマージ/クローズされていました。

## パターン2: 子Pull Request をマージしてから、親Pull Request をマージ

* GitHub のサイトから子 Pull Request をマージ
* GitHub のサイトから親... すでにマージ/クローズされていました

# 補足

* Pull Request を作る時に、どのブランチにマージする Pull Request なのかを設定できる様子
* 子Pull Request をマージすると、親Pull Request が勝手にマージされるので注意
JavaScriptから呼び出したJavaアプレットを確認するのにJava Consoleが使えました

JavaScriptからJavaアプレットを呼び出すコードの動作確認で、呼び出し先のJavaアプレットがどこまで処理されているのか確認するため、Java Consoleが使えました。

Java Consoleを使うまでは、Javaアプレット中のオブジェクトがundefinedになってしまう原因がまったくわからず困っていたのですが、Java ConsoleにはJavaアプレットのSystem.out.println()の出力結果が表示されたり、JVMでどういうエラーが発生しているのか表示されたりするので助かりました。

ちなみに私のコーディングミスは、archive属性の指定方法にありました。ブラウザだけではarchive属性に指定したJARファイルが無かったとしても、エラー表示されないようです。エラー内容はJava Consoleを見てはじめて判りました。

##Java Consoleを有効にする

WindowsであればコントロールパネルのJavaから設定すると思いますが、例えばCentOSでは以下のようにしました。

```text:ControlPanelを起動する
$ cd $JAVA_HOME/jre/bin
$ ./ControlPanel
```

詳細タブ の Javaコンソール でコンソールを表示する、を選択しておく。これでJavaアプレットを実行するとそのタイミングでJava Consoleウィンドウが自動で表示されます。

トレースレベルを 5 （詳細）にしておくとJVMが何をしているのか詳細が表示されます。

以下、最終的に動作確認できたコードを挙げておきます。

##サンプルコード

###環境

* CentOS 6（サーバ／クライアント）
* Apache 2.2.15
* ブラウザ Chromium 31.0/Firefox 35.0.1（Javaアプレットを有効にしています）
* Java SE 1.8.0_25

###ファイル構造

```text
public_html
├── applet
│   ├── VMInfo.jar
│   ├── VMInfo.java
│   ├── VMInfo.mf
│   └── make_jar.sh
├── js
│   └── main.js
└── main.html
```

###main.html
```html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <APPLET name="VMInfoApplet" CODE="VMInfo" ARCHIVE="applet/VMInfo.jar" HEIGHT="120" WIDTH="400" mayscript="true">
        <param name="port" value="10000">
        このブラウザではアプレットがサポートされていません。
    </applet>
    <script src="js/main.js"></script>
</body>
</html>
```

###main.js

```js
var VMInfo = {
    notify : function(info){
        console.log(info);
        var version = info.version || "";
        var vendor = info.vendor || "";
        window.alert([version, vendor]);
    }
};
```

###VMInfo.java（Javaアプレット）

```java
import java.applet.Applet;
import java.awt.TextField;
import netscape.javascript.JSObject;

public class VMInfo extends java.applet.Applet {
    public String jreVersion = "";
    public String jreVendor = "";

    private TextField versionField;
    private TextField vendorField;

    public String getJreVersion() {
    return this.jreVersion;
    }

    public void init() {
        System.out.println("port is " + this.getParameter("port"));

        this.jreVersion = System.getProperty("java.version");
        this.jreVendor = System.getProperty("java.vendor");

        this.versionField = new TextField(jreVersion, jreVersion.length());
        this.vendorField = new TextField(jreVendor, jreVendor.length());
        
        add(versionField);
        add(vendorField);

        // callback
        JSObject win = JSObject.getWindow(this);
        String jsContext = "VMInfo.notify({\"version\":\"" + jreVersion + "\", \"vendor\":\"" + jreVendor + "\"})";
        win.eval(jsContext);
    }
}
```

###make_jar.sh

```bash
#!/bin/sh
javac -d . VMInfo.java
jar -cvfm VMInfo.jar VMInfo.mf VMInfo.class
```

##参考

* http://www.melange.co.jp/blog/?p=5826
* http://stackoverflow.com/questions/4407300/is-it-possible-to-register-a-javascript-event-that-triggers-when-java-applet-is/7150084#7150084
* http://wpollock.com/AJava/SignedCodeDemo/
* http://matometa.link/blog/2015/06/22/java-applet-with-javascript/
Classオブジェクト/インスタンス


```

 インスタンスまとめ
 インスタンスとは「複数のデータと複数のメソッドをまとめたもの」
 複数のデータ=インスタンス変数 複数のメソッド=インスタンスメソッド
```

```

オブジェクト指向では「クラス」というオブジェクトの設計図を作成し、設計図(クラス)を元に実体 (オブジェクト)を生成します。


クラス(設計図)にはオブジェクト(実体)がもつ{データ, メソッド}を定義します。

クラスの書き方
class Car
end

```

```

- インスタンスの生成　

Car.new

クラス(設計図)を元に生成された実体を「インスタンス」と言います。
インスタンスは「new」メソッドを用いて「クラス名.new」で生成出来ます。
インスタンス=オブジェクトです。

- インスタンスメソッド

クラスの中でメソッドを定義することで、そのクラスのインスタンス固有のメソッドを作ることが出来ます。そのメソッドをインスタンスメソッドと言います。
インスタンス.インスタンメソッドでそのインスタンスメソッドを呼びだすことが出来ます。

class Car
　def speak
    　　puts "トト丸です"
  　　end
　end

　my_car = Car.new
　my_car.spaek        
```

```

- initializeメソッド
initializeメソッドを定義する事で、newメソッドでインスタンスを生成すると同時にこのメソッドが呼ばれます。

class Car
 　def initialize(name)
 　#インスタンスの生成時に行いたい処理
 　puts "名前「#{name}」の車を生成しました。"
 　end
end

car1 = Car.new("プリウス")
結果 名前「プリウス」の車を生成しました。

```

```

- インスタンス変数(1)
@で始まる変数はインスタンス変数と呼ばれ、そのインスタンスがもつ「データ」を表します。
Carインスタンスが名前「@name」、色「@color」というデータ(インスタンス変数)を持っています。

class Car
  　def initialize(name, color)
    　　@name = name
    　　@color = color
  　end
end

car1 = Car.new("プリウス", "白")   

newメソッドに与えられたデータ(名前や色)がinitializeメソッドでインスタンス変数に代入されて、それぞれのインスタンス固有のデータとなります。

```

```

- インスタンス変数(2)
インスタンス変数(@name)などはクラス内であればどこでも呼びだすことが出来ます。

class Car 
  　def initialize(name, color)
    　　@name = name
    　　@color = color
  　end
  
  　def info
    　　puts "私の名前は#{@name}です"
  　end
end

my_car = Car.new("プリウス", "白")
my_car.info #私の名前はプリウスです。     
```
Railsのルーティング

Railstutrialで登場するBootstrap関連のメモ
随時更新

# URLマッピング
## rootへのルーティング
　`root  'foo_controllers#hoge'`
－名前付きルート
　`root_path`
## root以外へのルーティング
　`match '/hoge', to: 'foo_controllers#hoge', via: 'get'`
－名前付きルート
　`hoge_path`
Elixirのデータ構造的なやつまとめ



個人的にまとめてみました。


# 全体像


・ **リスト** `[1, true, 2]`
・ **タプル** `{false, 1, "abc"}`

・ **キーワードリスト**(上記の組み合わせ) `[{:a, 1}, {:b, 2}]` = `[a: 1, b: 2]`
・ **マップ** ` %{:a => 1, "abc" => :dog}`, `%{a: 1, b: 2}`

・ **構造体**(フィールドの存在を保証したマップ)



すべてにおいて、どんな型も入れられる。




# リスト [ ]
> [1, 2, true, "abc"]

要素の一つ一つが次の要素のアドレスを指してる

* **特定の要素アクセスやサイズ取得は遅い**(順番にアクセスする必要があるため)
* **先頭に追加するのは速い**  `[0] ++ list`




# タプル { }
> {1, 2, true, "abc"}

連続したメモリに保存

* **特定の要素アクセスやサイズ取得が速い**
* **要素の追加や変更は遅い**(その度に新しいタプルをつくる)

変更
`put_elem(たぷる, インデックス, 内容)`





# キーワードリスト [hoge: foo, ...]
"最初の要素がアトムになっているタプル"のリスト。

> list = [{:a, 1}, {:b, 2}]

> list = [a: 1, b: 2] #こうもかける

> list[:a]  #アクセス


## 特徴
* **キーの順序を開発者が指定したとおりに保持する**
* **キーを複数回与えることができる**

※同じキーがある場合は前のが取得される

list = [a: 0, a: 1, b: 2]
> list[:a] #0

## パターンマッチング
``` 
iex> [a: a] = [a: 1]
[a: 1]
iex> a
1
iex> [a: a] = [a: 1, b: 2]
** (MatchError) no match of right hand side value: [a: 1, b: 2]
iex> [b: b, a: a] = [a: 1, b: 2]
** (MatchError) no match of right hand side value: [a: 1, b: 2]
```
---
※キーワードリストを操作するKeywordモジュールがあります。


# マップ %{:hoge => foo, ...}
> map = %{:a => 1, 2 => :b}

* **マップはキーをどんな値にもできる**
* **１つのキーが１つの値をもつ**
* **マップのキーは順番通りにならない**

#### 同じキーを渡すと最後が勝つ
> %{1 => 1, 1 => 2}

%{1 => 2}

## キーが全部atomならもっとシンプルに書ける
> map = %{a: 1, b: 2}
> map.a
> %{map | :a => 2} #変更(追加じゃない)

## マップはパターンマッチングに使いやすい
キーワードリストとは対照的に使いやすい。
左辺にキーが全て一致してないくても大丈夫。

``` elixir
iex> %{} = %{:a => 1, 2 => :b}
%{:a => 1, 2 => :b}
iex> %{:a => a} = %{:a => 1, 2 => :b}
%{:a => 1, 2 => :b}
iex> a
1
iex> %{:c => c} = %{:a => 1, 2 => :b}
** (MatchError) no match of right hand side value: %{2 => :b, :a => 1}
```

---
※マップを操作するMapモジュールがあります。


# キーワードリストとマップの使い分け
キーワードリストは単にリストなので、長いリストはキーを見つけるのがより長くなり、要素を数えるのも長くなる。
だからキーワードリストは主にオプションに使われる。

もし沢山の要素を保持しなければならなかったり、１つのキーが多くとも１つの値しか持たないことを保証したい場合はマップを使った方がいい。


# キーワードリストもマップも「Dicts」
ディクショナリ。
ディクショナリはインターフェイスのようなもの。
キーワードリストもマップも、ディクショナリのインターフェイスを実装している。
※ Elixirではインターフェイスをbehaviours(ビヘイビア)と呼ぶ。

``` elixir
iex> keyword = []
[]
iex> map = %{}
%{}
iex> Dict.put(keyword, :a, 1)
[a: 1]
iex> Dict.put(map, :a, 1)
%{a: 1}
```



# リストもマップもEnnumerble
リストとマップはEnnumerbleプロトコルを実装しているのでEnumモジュールやStreamモジュールで操作することができる。

### Enumの例
``` 
iex> Enum.reduce([1, 2, 3], 0, fn(x, acc) -> x + acc end)
6
iex> Enum.map([1, 2, 3], fn(x) -> x * 2 end)
[2, 4, 6]
```

### Enumのパイプライン
``` 
1..100_000 |> Enum.map(&(&1 * 3)) |> Enum.filter(odd?) |> Enum.sum
```



# 構造体

構造体は、マップのフィールドの存在をコンパイル時に保証する。
※ 構造体はの実体はただのマップ。

構造体の定義

``` 
defmodule User do
  defstruct name: "john", age: 27
end
```

```
> john = %User{} #インスタンス生成
%User{age: 27, name: "john"}

> john.name #アクセス
"john"

> meg = %{john | name: "meg"} #値の変更
%User{age: 27, name: "meg"}

> %{meg | oops: :field} #マップと同じく存在しないキーには変更できない
** (ArgumentError) argument error
```



## パターンマッチング

``` elixir
iex> %User{name: name} = john
%User{age: 27, name: "john"}
iex> name
"john"
iex> %User{} = %{}
** (MatchError) no match of right hand side value: %{}
```


※構造体はディクショナリではない


## ネストしたデータ構造を操作するput_inとupdate_inが便利
http://qiita.com/yoavlt/items/b973210605d6f771b9d1
MediaWiki + Short URL + IIS で日本語の URL が文字化けしてしまう

環境
------

* MediaWiki 1.25.1
* IIS 8.0(Microsoft Azure WebApps[旧WebSites])
* PHP5.4.42
* URL Rewrite

現象
-----

<https://www.mediawiki.org/wiki/Manual:Short_URL/IIS7> を参考に、 Short URLの設定をしたところ、一部の日本語URLが文字化けしてしまう事象が発生

例)
http://example.com/wiki/あ
↓ 特定の文字が以下のように文字化けしてしまう
http://example.com/wiki/Ã ‚

原因
-----

MediaWiki の `WebRequest::getPathInfo()` で、 `$_SERVER['REQUEST_URI']` からタイトルを抽出しようとした際、 `parse_url()` 関数に URLエンコードされていないマルチバイト文字列が渡ってしまい、 `parse_url()` 関数の結果が文字化けしてしまう。

対応方法
---------

`parse_url()` 関数に、 URLエンコードされた文字列を渡すようにする。
根本的には、 IIS + URLRewrite が生成する `$_SERVER['REQUEST_URI']` に、 URLエンコードされていない文字列が出力されてしまうのが問題だが、これを回避するために、 `$_SERVER['UNENCODED_URL']` が取得できる場合は、こちらを利用する。

### 修正パッチ

```diff
--- a/includes/WebRequest.php
+++ b/includes/WebRequest.php
@@ -94,7 +94,12 @@ class WebRequest {
 		$matches = array();
 		if ( !empty( $_SERVER['REQUEST_URI'] ) ) {
 			// Slurp out the path portion to examine...
-			$url = $_SERVER['REQUEST_URI'];
+			if (!empty($_SERVER["UNENCODED_URL"])) {
+				$url = $_SERVER["UNENCODED_URL"]; // for Microsoft Azure
+			} else {
+				$url = $_SERVER['REQUEST_URI'];	
+			}
+
 			if ( !preg_match( '!^https?://!', $url ) ) {
 				$url = 'http://unused' . $url;
```


TODO
--------

* MediaWiki にバグレポートを出そうと思うが、 [Gerret](https://www.mediawiki.org/wiki/Gerrit/ja) の使い方を勉強しなくてはならない...
Windows10からWindowsを使うことにした元Macユーザのために

**入れておくとマックでできていたことが出来るようになるアプリ（随時更新）**

Vistaで愛想つかして、それからずっとMacを使っていたけど、Windows10がでたので、またWindowsを使ってみようとWindowsマシンを購入した人です。

Windows10がまだアップデートできないので、Windows8.1を使っていますが、使いにくいですねーあいかわらず。

そうはいってもWindows10になってもMacに比べたらやっぱり使いにくいとおもわれます。
そこで、アプリを使って少しでもMacのときに使っていた感覚にちかずけるアプリを探してみました。


* TouchZoomDesktop
　マウスやキーボードで、画面のズームを行うようにする。プレゼンなどで重宝します。ズーム時に若干かくかくしますが、他の類似アプリにくらべると全然よく動いてくれます。
http://www.lovesummertrue.com/touchzoomdesktop/ja-jp/


* Cmder
　Windowsで快適にコマンドラインウィンドウを使う
いろいろ試したけっか、このターミナルもどきが一番ましです。設定でPowerShellからGitBashにすると良し(注GitBashはインストールする必要あり。mysysgitをいれると入る）
http://gooseberrycreative.com/cmder/

* サクラエディタ
   テキストエディタ
フリーで使えるテキストエディタではこれが一番使いやすかった。しかしこれは個人の好み
http://sakura-editor.sourceforge.net/

* MacType
  フォント
解像度の高いディスプレイだと特に文字がみにくい。これをいれると相性もあるかもしれないけどくっきり。
https://code.google.com/p/mactype/

* Lightscreen
 画面キャプチャ
Ctrl+Shift+３とか４に設定してMacのときみたいな感覚で写真とれるので便利。他のもためしたけどこれが一番しっくりきた。
http://lightscreen.com.ar/

* CubeICE
 圧縮解凍
他にもたくさんあるけど、一番楽だった。
http://www.cube-soft.jp/cubeice/
【FileMaker】印刷するときの総ページ数計算の注意点

いや、わかってる人はわかってると思うんですけどね。
以外とスクリプトを書くときにうっかり忘れちゃうんですよね。

総ページ数を求めるときの「プレビューモードに切り替え」コマンド。
先日もうっかり忘れて、

「あれ！？ページ数がおかしい！」

とびびりました。

1.プレビューモードに切り替え
2.ページの最後に移動
3.最後のページのページ番号を取得


```
エラー処理 [ オン ]
#
#-------------------------
#先に印刷設定で縦向き、横向きを設定しておく
#-------------------------
#
印刷設定 [ ]
#
#-------------------------
#総ページ数を計算
#-------------------------
#プレビューモードでないと、印刷ページのカウントができないケースがある
プレビューモードに切り替え
レコード/検索条件/ページへ移動 [ 最後の ]
変数を設定 [ $総ページ数; 値:Get ( ページ番号 ) ]
#
レコード/検索条件/ページへ移動 [ 最初の ]
印刷 [ ]
ブラウズモードに切り替え
```

レイアウトに取得した総ページ数（$総ページ数）を配置すれば、OKです。
印刷の手前でページの最初に戻るのもお忘れなく！

![スクリーンショット 2015-07-28 16.11.23.png](https://qiita-image-store.s3.amazonaws.com/0/60538/ad311e90-8f5f-f615-89ca-67f347690248.png)
メソッド


メソッドを定義していない場合

```
radius = 4

area1 = radius*radius*3.14  

radius = 6

area2 = radius2*radius2*3.14

area1とarea2が同じ処理をしている。
```

```
メソッド定義をしてみた場合

メソッドは下記のような記述を行います。またメソッドを呼びだす際にメソッドに値を渡して処理することが出来ます。この値を引数と呼びます。メソッドは最後に評価された値を戻り値として返します。(仮引数)の()は省略出来ます。

def メソッド名(仮引数1、仮引数2)
  処理内容
　戻り値　
end


def circle_area(radius)
  radius * radius * 3.14
end

メソッド呼び出し
area1 = circle_area(4)
area2 = circle_area(6)


メソッド呼び出しで行われる処理
area1 = cricle_area(4) = 4 * 4 * 3.14  

```

```
メソッドのreturnの使い

def max(num1, num2)
  if num1 > num2
    return num1 #num1の方が大きいとき戻り値となりここで処理が止まる
  end
  num2　#num1の方が小さいとき戻り値となる。(最後の評価された値、返り値として扱う)
end    

puts max(5,1)
【Sketch.app】ダミーの写真や文章入りUIをサクッと用意する方法

# Sketchで効率よくデザインするために
ダミーの写真や文章の流し込みが面倒くさくて地味に時間が取られる。

Pluginで解決しよう。

[「Content-generator-sketch-plugin」](https://github.com/riszw/Content-generator-sketch-plugin)っていうSketch.appのPluginは、
いろんなダミー素材を、半自動でランダムにオブジェクトに組み込むことができてすごく便利。

# 本番に近い状態でUIを評価したい
雰囲気大事、このPluginのいいとろこはカスタマイズできて日本語もいけちゃうってとこ。日本語ってのが大事。

住所、氏名、説明文、もろもろ

# 使えるデータ
###### 文章
* 人名
* 長文
* 住所
* 日付
* 電話番号
etc...

###### 写真
* 人物男女
* 自然
* アーティスト
etc...

※よく使うものが数種類用意されています。
※Plugin 以下のカスタマイズで追加も可能

# 導入方法（2015/7/29）

SketchのPlugin Manager、[sketchToolbox](http://sketchtoolbox.com/)で、検索してダウンロード＆インストールした場合は日本語対応版入らないので。手動で入れましょう。

## 1.日本語対応版をダウンロード

↓で日本語対応版が公開されているのでありがたく使わせてもらう。
https://github.com/riszw/Content-generator-sketch-plugin

#### Github よりDownload ZIP

スクショ右下　「Download ZIP」 をクリック
![スクリーンショット 2015-07-29 午後1.18.34.png](https://qiita-image-store.s3.amazonaws.com/0/85887/71f2268b-3314-a244-bb0b-3a3edd30e165.png)



## 2.Pluginをぶっこむ

ダウンロードして解凍した「Content-generator-sketch-plugin-master」は指定のディレクトリに設置する必要がある。

名前が「Content-generator-sketch-plugin-master」だとPluginとして表示されるnameも同上になるので、好みでファイル名を変更しておこう。

###### 階層
```
Library / Containers / com.bohemiancoding.sketch3 / Data / Library / Application Support / com.bohemiancoding.sketch3 / Plugins
```

大分階層が深いので、Sketchアプリ立ち上げ後のメニュー[Plugin]から開いたほうが効率がいい。設置後は要再起動。

![スクリーンショット 2015-07-29 午後0.38.38.png](https://qiita-image-store.s3.amazonaws.com/0/85887/c8157ef8-82ed-6c2d-20ec-6639bf960722.png)

## 3.使ってみる

#### ダミーの写真を配置する場合

Plugins > Content-generator-sketch-plugin > Photo [任意項目]

![スクリーンショット 2015-07-29 午後1.03.27.png](https://qiita-image-store.s3.amazonaws.com/0/85887/fd12c63b-8d0f-a99d-35ef-c7e15b4a9787.png)

ランダムで配置したい場合はシンボル化を解除する（同じ写真になってしまう）
![スクリーンショット 2015-07-29 午後1.03.47.png](https://qiita-image-store.s3.amazonaws.com/0/85887/4da1eda1-9817-4e2a-8aec-3eb3afe09584.png)


#### ダミーテキストを配置する場合

Plugins > Content-generator-sketch-plugin > [任意項目]

xxxx_jaとなっているのが日本語対応。

いろいろ試してみると面白い。

長文テキストデータは青空文庫より

* kumonoito_ja.js 芥川龍之介 蜘蛛の糸
* yodakanohoshi_ja.js 宮沢賢治 よだかの星
* gongitsune_ja.js 新美南吉 ごん狐

住所は都道府県庁所在地 json データが利用されている。

![スクリーンショット 2015-07-29 午後1.09.30.png](https://qiita-image-store.s3.amazonaws.com/0/85887/5ca239f6-995d-9a9c-2371-703e7bfec8e9.png)

注意としてはテキストを編集する前に、必ずテキストが入る領域を決めること。
元の文字数より多いと、最初のテキスト領域の横幅に合わせて改行されてしまうため、編集した後で横幅を変更すると、xとyの位置がズレてしまい、余計に手間がかかる。

# まとめ
デザイナーが後回しにしがちな、環境setupの部類にはいる作業。面倒臭いが確実に時短につながると思われる。

ダミーデータ侮る無かれ。

最近は個人的にカンボジアのサイト作成とかが多いので、クメール語対応版とかつくってPULLリクしてみようかと企んでみる。

早々、実現したいところ。
fatal: unable to connect to github.com: の時に試すこと

bowerでjsライブラリ管理してたらいつからか↓こんなが出るようになった

```lang:ターミナル
fatal: unable to connect to github.com:
github.com .................errno=Operation timed out
```

いつからだろう。

# git://からhttps://に変更

githubに接続するときは基本"git://..........git"(gitプロトコル)で接続します。
まぁね、だってgitだもん。

でもgitプロトコルで社内から社外に接続しようとするとダメだよって言われる。
なのでhttpsで接続してしまおうってわけでgit configを書き換えます。

```
git config --global url."https://".insteadOf git://
```

--globalが付いているので、git://で接続しようとするのはすべてhttps://に変わります。
気をつけてくださいね

この設定、一番最初にしたんだけど、gitをupdateしたタイミングで書き換わってたりするのかもしれない。

### 参考
http://stackoverflow.com/questions/21544803/git-bower-errors-exit-code-128-failed-connect
シミュレータ開発のプラクティス

数年ほど携わってきたシミュレータ開発から離れることになりました。
具体的にはC++/boostによるネットワークシミュレータの開発がメインでしたが、なるべく言語や分野に依らない形で、個人的に培ったシミュレータ開発のメモを残しておこうと思います。

# 入力

* 諸々の自動化を見越して、GUIでしか入力できないパラメータなどは避けること。
* 入力フォーマットはCSV・YAML・JSON・XMLなど、なるべく一般的なものを採用して、ファイルのパースといった処理はできるだけ専用ライブラリに任せること。
* 入力パラメータは大量になりがちなので、なるべく各パラメータごとにデフォルト値を用意したり、同じ設定値を使いまわせるような記法を用意して、シナリオを作りやすくしたい。
* 設定値の型変換や条件判定などを一括で行う関数を用意しておくと楽。たとえば下記のように。

```cpp
const size_t param = convert<size_t>( // 設定値の型
  input, // 設定された文字列
  42, // デフォルト値
  [](size_t a){ return a >= 10; }, // 条件判定
  "This parameter must be 10 and more."); // エラーメッセージ
```

# ログ

* シミュレーションの詳細を追うためには、膨大なログを出力する必要がある。[The Twelve-Factor App（日本語訳）](http://12factor.net/ja/)にあるとおり[ログをイベントストリームとして扱う](http://12factor.net/ja/logs)ようにして、適宜フィルタかけながら注目する情報を追えるようにするのが望ましい。
* ログレベルは、とくにこだわりが無ければ[BOOST_LOG_TRIVIAL](http://www.boost.org/doc/libs/1_58_0/libs/log/doc/html/log/tutorial.html)あたりの fatal / error / warning / info / debug / trace に倣う。
* ロガーはシミュレーションの情報だけでなく、コードのファイル名・行番号・関数名やプロセスID・スレッドIDなども出力するようにしておくと、デバッグなど便利。

# 乱数

* 乱数生成器は、とくに理由が無ければメルセンヌ・ツイスタを使う。規則性のでやすい線形合同法などは避けたい。
* ノードごとに乱数生成器を持つなど、ノードを追加しても既存ノードには影響ないような乱数生成が望ましい。

# 物理計算

* 様々な物理計算を扱っていると単位間違いのバグが発生しやすい。[Boost.Units](http://www.boost.org/doc/libs/1_58_0/doc/html/boost_units.html)のように単位を表現できる型を使うのが望ましい。
* たとえば重力や電波伝搬などノード間で発生する物理計算は、$O(n^2)$の計算オーダーになってしまうため、距離などの閾値による計算省略を行う。

# 状態遷移

* 状態を持つ変数やクラスはなるべく減らしたい。ただしシミュレーションモデルそのものに含まれる状態遷移は避けようがない。
* シミュレーションモデルの状態遷移自体がバグっていることもあるので、不安なところにはassertを仕込んでおく。

# 計算順序

* 同時刻内の計算順序に起因するシミュレーションの不整合問題は、のちのち厄介なことになりやすい。まずは「毎時刻行う物理計算」「離散的に行うイベント計算」のようにカテゴリ分けしておいて、それらの順序が混ざらないようにすると良い。
* ノード間やレイヤー間の情報伝達は、なるべく非同期メッセージパッシングで、次時刻以降に届くようにする。でないと、あとで並列化をしようとした時に、面倒なことになりやすい。

# 結合テスト

* たとえば「アルゴリズムをAからBに変えると、指標αが良くなるはず」ことを実証するためにシミュレータ開発をしたとして、一回シミュレーションしただけでは、本当にそうだったのか偶然うまくいったのか判別がつかない。そのため乱数シードや各設定値を変えながら、何百回何千回とシミュレーションして、それらの平均値や中央値などを確認対象とすることが多い。これを人力で行うのはつらいので、シミュレータ自体にそういう機能を仕込んでおくか、別途シナリオ生成したり統計処理したりするスクリプトを用意する。
* バタフライ効果よろしく、ちょっとした誤差がシミュレーションを大きく変えることはよくある。そのため、なるべくカバレッジの広いテストシナリオを作って、その重要なログと一緒にレポジトリに登録しておき、予期せぬシミュレーション結果の変化を引き起こしてしまった場合は、どの時刻にどの機能で変化が始まったかCIツールで検知できるようにするのが望ましい。
* いかんせんシミュレーションはやってみて初めて分かることも多く、思い通りにいかなかった時の調査も時間が掛かりやすいので、工数はできるだけ大目に見積もっておく。

# パフォーマンスチューニング

* シナリオのスケールが求められる場合は、実行時間やメモリ使用量のプロファイルが取れるようにしておく。ボトルネックになるような機能を追加した場合には、CIツールで検知できるようにするのが望ましい。
* パフォーマンスチューニングを詰めていくと、時間と空間のトレードオフに突き当たる。どちらを優先するか判断するためには、ターゲットとなる実行環境とシナリオ規模を明確にする必要がある。
git wip

ブランチまたいで作業しているときにstash溜まっていくのつらいので、よく使うgitコマンドの組み合わせをシェルスクリプトっぽい感じでgitエイリアスにした

**~/.gitconfig**

```sh 

# other git configs

[alias]
  wip = "!f(){ git add . && git commit -m \"WIP\"; };f"
```
Kibana上のアクセスログをIPレンジで見る為、ElasticsearchにIP Typeフィールドを追加してみるといい感じ


アクセスログをKibanaで見る時に、特定レンジのIPでフィルタかけれたら色々便利なのではという同僚からの意見を受け、試してみたのでシェア!

##Elasticsearchのフィールドのスキーマ変更(template)
まずは、Elasticsearch側のテンプレートで、クライアントIPを定義しているフィールドに対し[IP Type](https://www.elastic.co/guide/en/elasticsearch/reference/1.6/mapping-ip-type.html)を追加

下記例でいくと、c-ip.iptypeでIP Typeのレンジクエリ等を発行出来る。

```既存のテンプレートJSONに下記を追加
        "c-ip" : { "type":"multi_field",
          "fields":{
            "c-ip":{ "type":"string","index":"not_analyzed"},
            "iptype":{ "type":"ip"}
          }
        }
```

templateを更新(反映は、次回インデックス作成時 ※アクセスログなので日単位で)

手順は、下記を読み替える

```
$ curl -XPUT localhost:9200/_template/[テンプレート名] -d "`cat [json設置場所]`"
#反映を確認
$ curl -XGET "localhost:9200/_template/[テンプレート名]?pretty" 
```

インデックスを日単位で更新してなかったり、即時反映したい場合は下記参照に直接mapping更新のAPIを突けば出来ます。
↓
http://kobitosan.hatenablog.com/entry/2014/12/23/103746

##実際にレンジクエリでKibana上で可視化してみる

IP Typeのレンジクエリは、Kibanaだと下記形式で使えた(dateと同じ)

```
c-ip.iptype:[開始IP TO 終了IP]
```

適当な試験環境で、レンジクエリと実際のクライアントIP毎のアクセス量のtermの集計値が合っているかを確認した↓

![Kibana_3_-_New_Dashboard.png](https://qiita-image-store.s3.amazonaws.com/0/40850/4fc2bab3-0d99-d223-7ff8-dc11eb188af5.png "Kibana_3_-_New_Dashboard.png")

特定ISPから不正アクセス来た時にどのページ見てるとか、ある程度IPで絞れるところから何かされてるのを検知したい時に、クライアントIPにレンジクエリ使えれば便利そう！
CoreOS に Docker Compose をインストールする

# CoreOS に Docker Compose をインストール

sudo mkdir -p /opt/bin
curl -L https://github.com/docker/compose/releases/download/1.3.3/docker-compose-`uname -s`-`uname -m` > /opt/bin/docker-compose
sudo chown root:root /opt/bin/docker-compose
sudo chmod +x /opt/bin/docker-compose

- (参考）https://docs.docker.com/compose/install/
[D言語] writef の書式指定子について

# __D言語の`writef`と`printf`とは少し違う__

D言語の`writef`は、C言語の`printf`と同じもので
書式指定子は全く同じと思っていたのですが、
違うところがあるようなので、簡単に調べてみました。

書式指定子についての説明は、`writef`が内部的に
呼び出している`formattedWrite`の[ドキュメント](http://dlang.org/phobos/std_format.html#formattedWrite)
に書いてあります。内容をざっくりと要約すると

* 基本は`printf`の書式指定子を踏襲
* `%s`は文字列ではなく型のプレースホルダ
* `%(`と`%)`で囲むと、配列の要素を順に表示できる

# __`%s`は文字列ではなく型のプレースホルダ__

__迷ったら、とりあえず`%s`にしておけばOK！__
型に合わせて、適切に処理してくれます。
ユーザー定義型の場合、`toString()`メソッドが呼ばれます。

```d:D
struct Hoge { string toString() { return "hoge"; } }

void main()
{
    import std.stdio, std.math;

    int    n = 123;
    real   r = PI;
    string s = "hello";
    Hoge   h;
    writef("%s, %s(%.11s), %s, %s", n, r, r, s, h);
}
```
```:Output
123, 3.14159(3.1415926536), hello, hoge
```

# __`%(`と`%)`で囲むと、配列の要素を順に表示できる__

`%(`と`%)`の間に配列を指定すると、全ての要素を順に表示してくれます。

```d:D
void main()
{
    import std.stdio;

    int[] arr = [0, 1, 2, 3, 4];
    writef("%s",      arr);
    writef("%(%s %)", arr);
}
```
```:Output
[0, 1, 2, 3, 4]
0 1 2 3 4
```

要素`%s`と`%)`との間の内容は、暗黙的に__区切り文字__として扱われます。
上の例では、半角スペースが区切り文字です。
区切り文字は、__要素間にのみ挿入__され、末尾要素の後ろには挿入されません。

```d:D
    writef("%(%s, %)", arr);
```
```:Output
0, 1, 2, 3, 4
```

区切り文字は`, `(カンマと半角スペース)で、
「4」の後ろには挿入されていません。

文字や文字列の配列を表示する場合、`'`や`"`が表示されますが、__`%-(`でエスケープ__できます。

```d:D
    char[]   cs = ['a', 'b', 'c', 'd'];
    string[] ss = ["hoge", "fuga", "piyo"];
    writefln("%s / %s",             cs, ss);
    writefln("%(%s,%) / %(%s,%)",   cs, ss);
    writefln("%-(%s,%) / %-(%s,%)", cs, ss);
```
```:Output
abcd / ["hoge", "fuga", "piyo"]
'a','b','c','d' / "hoge","fuga","piyo"
a,b,c,d / hoge,fuga,piyo
```

---

更に、__多次元配列(ネストした配列)を表示することも可能__です。

```d:D
    int[][] mat = [[0, 1], [2, 3], [4, 5]];
    writef("%(%(%s %)\n%)", mat);    
}
```
```:Output
0 1
2 3
4 5
```

内側の配列(`int[]`　)の区切り文字が半角スペースで、
外側の配列(`int[][]`)の区切り文字が`\n`(改行)です。
__非常に便利です！__

ですが、区切り文字をカスタマイズしたい時があります。
例えば、括弧、スペース、改行で、いい感じにインデントを揃えたい時に

```d:D
    writef("(%([%(%s %)]\n %))", mat);
```
```:Output
([0 1]
 [2 3]
 [4 5)
```

いい感じなのですが、末尾の`]`が抜けました。
これは、`]`が暗黙的な区切り文字に含まれていたために、
末尾要素の後ろに挿入されなかったためです。

こんな場合に、__明示的に区切り文字を指定__できる`%|`(※Lではなく縦線)があります。
__`%|【区切り文字】`__のように使用します。

```d:D
    writef("(%([%(%s %)]%|\n %))", mat);
```
```:Output
([0 1]
 [2 3]
 [4 5])
```

上の例では、区切り文字を明示的に`\n `(改行と半角スペース)としたことで、
`]`を区切り文字から除外でき、意図した通り表示されました。

# __その他__

その他にもbool型などは、`%s`だとtrue/falseで表示され、`%b`だと1/0で表示されるなど、
細かくは色々あると思うのですが、詳しくは元のドキュメントに当たってください。
Unityをインストール

## ダウンロード

* [Unity - Get Unity - Update](http://unity3d.com/jp/get-unity/update)

![スクリーンショット 2015-07-29 12.29.46.png](https://qiita-image-store.s3.amazonaws.com/0/25728/7dfdd68c-cb7e-72e7-6c43-679aa33f0526.png)

## インストール

![スクリーンショット 2015-07-29 12.31.03.png](https://qiita-image-store.s3.amazonaws.com/0/25728/875034f8-6de1-374a-94a7-c515ad539324.png)
![スクリーンショット 2015-07-29 12.31.06.png](https://qiita-image-store.s3.amazonaws.com/0/25728/96cbc64e-c096-27ae-9e3b-934afccc6139.png)
![スクリーンショット 2015-07-29 12.31.13.png](https://qiita-image-store.s3.amazonaws.com/0/25728/dcc51093-51e0-7003-44de-bf9f0fd14354.png)
![スクリーンショット 2015-07-29 12.31.22.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c478be64-6165-11e9-fa5e-44b379ea5798.png)

* ダウンロードが始まる。20分くらいかかる。

![スクリーンショット 2015-07-29 12.50.34.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c1d98eab-a23b-47f7-cfb2-8dfb3addcba6.png)
![スクリーンショット 2015-07-29 12.50.14.png](https://qiita-image-store.s3.amazonaws.com/0/25728/f3575872-6278-036f-7b34-53afaa686c8b.png)

## 起動


![スクリーンショット 2015-07-29 12.53.07.png](https://qiita-image-store.s3.amazonaws.com/0/25728/e394a9b6-5cf8-6d7d-7489-35fa9c5dad5d.png)
![スクリーンショット 2015-07-29 12.52.53.png](https://qiita-image-store.s3.amazonaws.com/0/25728/8aecb3bb-7665-7114-02fc-7eb41093ac19.png)
FreeBSDにnode.jsをtarballからインストール

執筆時点(2015/07/29)での最新バージョン0.12.7をインストール
Python2.7はインストール済み

https://nodejs.org/

```zsh
% tar xfvz node-v0.12.7.tar.gz
% cd node-v0.12.7
% ./configure
% gmake
```

一部ソースを修正しないと途中でコンパイルエラーが発生する。
https://github.com/joyent/node/issues/9175

```diff:deps/v8/src/base/platform/platform-freebsd.cc
--- deps/v8/src/base/platform/platform-freebsd.cc.bak   2015-07-10 07:41:19.000000000 +0900
+++ deps/v8/src/base/platform/platform-freebsd.cc       2015-07-29 12:10:41.000000000 +0900
@@ -122,10 +122,10 @@


 std::vector<OS::SharedLibraryAddress> OS::GetSharedLibraryAddresses() {
-  std::vector<SharedLibraryAddress> result;
+  std::vector<SharedLibraryAddress> address_result;
   static const int MAP_LENGTH = 1024;
   int fd = open("/proc/self/maps", O_RDONLY);
-  if (fd < 0) return result;
+  if (fd < 0) return address_result;
   while (true) {
     char addr_buffer[11];
     addr_buffer[0] = '0';
@@ -156,10 +156,10 @@
     // There may be no filename in this line.  Skip to next.
     if (start_of_path == NULL) continue;
     buffer[bytes_read] = 0;
-    result.push_back(SharedLibraryAddress(start_of_path, start, end));
+    address_result.push_back(SharedLibraryAddress(start_of_path, start, end));
   }
   close(fd);
-  return result;
+  return address_result;
 }
```

```diff:deps/v8/src/base/platform/platform-posix.cc
--- deps/v8/src/base/platform/platform-posix.cc.bak     2015-07-10 07:41:19.000000000 +0900
+++ deps/v8/src/base/platform/platform-posix.cc 2015-07-29 12:12:22.000000000 +0900
@@ -327,7 +327,7 @@
 #elif V8_OS_ANDROID
   return static_cast<int>(gettid());
 #else
-  return static_cast<int>(pthread_self());
+  return static_cast<int> ((int64_t) (void *) pthread_self());
 #endif
 }
```

ソースを修正後、インストールして完了

```zsh
% gmake
% sudo gmake install
% node
> console.log('hoge');
hoge
undefined
> .exit
```
subversion 一時的に昔のリビジョンに戻すコマンド


#リビジョンXXXに戻す
```svn up -r XXX
```
～～～出力省略～～～

「リビジョン xxx に更新しました。」
と出力されれば成功。

#リビジョン確認
以下のコマンドでリビジョンの確認ができる。
```svn info
パス: .
URL: svn://X.X.X.X/SVN_TEST
リポジトリのルート: svn://X.X.X.X/SVN_TEST
リポジトリ UUID: xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
リビジョン: XXX
ノード種別: ディレクトリ
準備中の処理: 特になし
最終変更リビジョン: XXX
最終変更日時: 2015-07-29 12:23:45 +0900 (月, 29 7月 2015)
```

#最新バージョンに戻す
```svn up
```
eachメソッド


配列・ハッシュに対して先頭のデータから順に繰り返し全ての処理を行うためのメソッド
   
配列.each do |変数|  
  繰り返した処理　　　　　
end　　　　　　　　　　

ハッシュ.each do |キー変数, 値変数|
  繰り返した処理
end　　　　　　　　　　



```
   data = ["東京", "大阪", "京都"]
   
   data.each do |value|
     puts value
   end  

```


```　
   colors = {"apple" => "赤色", "banana" => "黄色"}

   colors.each do |key, value|
    puts "#{key}:#{value}"
    puts "#{value}は#{key}が美味しい証拠です。"
   end  
```