OmniAICreator/Qiita-1.07M huggingface dataset:
amazon linuxにgit-flowをインストールする


CentOSと一緒です。
http://qiita.com/drapon/items/a510613ecb5b8dfaea45

root権限になる

```bash
$ sudo su -
```

インストールディレクトリまで移動

```bash
$ cd /usr/local/src
```

インストール

```bash
$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
```

実行されればOKです。

```text
### gitflow no-make installer ###
Installing git-flow to /usr/local/bin
Cloning repo from GitHub to gitflow
Cloning into 'gitflow'...
remote: Counting objects: 1407, done.
remote: Total 1407 (delta 0), reused 0 (delta 0), pack-reused 1407
Receiving objects: 100% (1407/1407), 623.29 KiB | 327.00 KiB/s, done.
Resolving deltas: 100% (689/689), done.
Checking connectivity... done.
Updating submodules
Submodule 'shFlags' (git://github.com/nvie/shFlags.git) registered for path 'shFlags'
Cloning into 'shFlags'...
remote: Counting objects: 454, done.
remote: Total 454 (delta 0), reused 0 (delta 0), pack-reused 454
Receiving objects: 100% (454/454), 130.91 KiB | 151.00 KiB/s, done.
Resolving deltas: 100% (337/337), done.
Checking connectivity... done.
Submodule path 'shFlags': checked out '2fb06af13de884e9680f14a00c82e52a67c867f1'
‘gitflow/git-flow’ -> ‘/usr/local/bin/git-flow’
‘gitflow/git-flow-init’ -> ‘/usr/local/bin/git-flow-init’
‘gitflow/git-flow-feature’ -> ‘/usr/local/bin/git-flow-feature’
‘gitflow/git-flow-hotfix’ -> ‘/usr/local/bin/git-flow-hotfix’
‘gitflow/git-flow-release’ -> ‘/usr/local/bin/git-flow-release’
‘gitflow/git-flow-support’ -> ‘/usr/local/bin/git-flow-support’
‘gitflow/git-flow-version’ -> ‘/usr/local/bin/git-flow-version’
‘gitflow/gitflow-common’ -> ‘/usr/local/bin/gitflow-common’
‘gitflow/gitflow-shFlags’ -> ‘/usr/local/bin/gitflow-shFlags’
```

実行して確認

```bash
$ git flow
```

```text
usage: git flow <subcommand>

Available subcommands are:
   init      Initialize a new git repo with support for the branching model.
   feature   Manage your feature branches.
   release   Manage your release branches.
   hotfix    Manage your hotfix branches.
   support   Manage your support branches.
   version   Shows version information.

Try 'git flow <subcommand> help' for details.
```


**既存リポジトリにgit-flowを導入する**

1.事前にdevelopブランチを作成


```bash
$ git checkout master
$ git branch develop
```

2.導入

```git flow init```を実行して導入します。
いろいろ聞かれますが、通常はそのままEnterを押していけばOKです。


```bash
$ git flow init
Initialized empty Git repository in /Users/inouetakuya/Dropbox/Projects/git-flow/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master]
Branch name for "next release" development: [develop]

How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
```
std::vectorから指定インデックスの要素を削除

`std::vector`で添え字から要素を削除しようとしてビビったのでメモ.

```cpp:main.cpp
#include <iostream>
#include <vector>

// vectorからindex番目の要素を削除する
template<typename T>
void remove(std::vector<T>& vector, unsigned int index)
{
	vector.erase(vector.begin() + index);
}

int main()
{
	std::vector<int> v;

	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	std::cout << v[0] << v[1] << v[2] << std::endl;
	// "123"が出力される

	remove(v, 1);
	std::cout << v[0] << v[1] << std::endl;
	// "13"が出力される

	return 0;
}
```

iteratorに足し算できるところは, 美しいとは思うのですが, 本当にこれしか方法ないのかな...？
ฅ(・ω・ฅ){ EA (Emoji Art) でサザンイマジネーション 第7回 お題「 配管工の彼らと良く連行される姫 」 } #emoji

## <i class="fa fa-image" style="font-size:1em;"></i> 概要
Ascii Art ならぬ EA (Emoji Art) で 3 x 3 の絵を作る。

## <i class="fa fa-history" style="font-size:1em;"></i> 経緯
CodeIQ で <i class="fa fa-external-link" style="font-size:1em;"></i> [Emoji-サザンイマジネーション](https://codeiq.jp/ace/tbpgr_badge/q1323)
という問題の出題を始めました。

Emoji で 3 x 3 の絵を作るプログラムを作成する問題です。

この問題のフィードバック時に、解答者の 3 x 3 の Emoji に対して、
3 x 3 の Emoji でフィードバックする、という試みをしています。
これが結構楽しかったので、 Qiita 上でも出題期間中 ( ～ 2015年3月6日) は
1日1お題くらいやってみたいな、と思いました。

最近の チャットツール とか GitHub とか、多くのツールが Emoji をサポートしてるので
面白いものを作っておくと、開発メンバー間のコミュニケーションツールとして使えそうですよね。

Emoji のリストと対応サービスはこちらで確認。
<i class="fa fa-external-link" style="font-size:1em;"></i> [EMOJI CHEAT SHEET](http://www.emoji-cheat-sheet.com/)

## :flower_playing_cards: 作品 「 配管工の彼らと良く連行される姫 」

:fire::man::heart:
:mushroom::man::green_heart:
:turtle::princess::turtle:

## :books: 関連情報
* <i class="fa fa-external-link-square" style="font-size:1em;"></i> [emoji 関連記事](http://qiita.com/tbpgr/items/b32c83e2f3f348a4ce0a)
Ansibleを使ってサーバごとに設定をしたい場合



Ansible、いいですよね、楽しいですね。

ただし、今の環境にそぐわないデザインであり、環境を変えることが不可能なので
Ansibleの冪等性を守るっていうのを破る？感じで使っています。

今の環境では、Ansibleを使ってシェルスクリプトを各サーバにぶん投げる使い方をしています。
例えば、シェルスクリプトがサーバごとに用意されてるでとかの場合は
バカみたいな書き方ですが、下記方法で出来ました。

本当は、varsにちゃんとした変数を用意してあげる必要があると想いますが
用意するのが面倒だったので、ちゃちゃっと代用するという邪な考え。

P.S. 手元にコードがないので記憶で書いています・・・


前提：
シェルスクリプトは、ホスト名で用意されている。


```lang:hosts.yml
[sample]
sample01.sampledomain.com ansible_ssh_host=192.168.1.1
sample02.sampledomain.com ansible_ssh_host=192.168.1.2
```


```lang:Sample.yml

- hosts: sample
  sudo: yes
  gather_facts: false

  tasks:
   - name: Transfer file for each server
     file: src=/tmp/{{ inventory_hostname }} dest=/tmp/{{ inventory_hostname }}
     when: inventory_hostname == inventory_hostname

```


シェルスクリプト投げるだけなら違うツールでもいいじゃないか！というお怒りはごもっとも。

なお、こんな使い方をしてます。
シェルスクリプトには引数で対象ホスト名を渡し
それによって処理を変えさせています。

```lang:Sample.yml

- hosts: sample
  sudo: yes
  gather_facts: false

  tasks:
   - name: Transfer file for each server
     file: src=/tmp/ShellScript.sh dest=/tmp/ShellScript.sh
     when: inventory_hostname == inventory_hostname

   - name: Run The ShellScript
     shell: sudo chmod +x /tmp/ShellScript.sh; bash /tmp/ShellScript.sh {{ inventory_hostname }}

```
Excelのショートカットキー


幅広いジャンルを投稿したく、今回はExcelですがもう早くもネタ切れ感が…。
そろそろ自分の得意分野を投稿していこうかな…。

# :feet:よく使うショートカットキー一覧:feet: 
### 現在の日付, 時刻を入力
→日付 : Ctrl + ;
→時刻 : Ctrl + :

本当良く使います。エビデンスやログとして保存したいときに、
毎回毎回打つのも面倒…。でも時間はコピペ出来ない…。そんな時に必須です。

### 日付の表示形式を変更する
→Ctrl + Shift + #
上記の日付を入力するショートカットキーとよく併用します。

### セル内の入力・編集を行う
→F2

実は結構最近まで毎回ダブルクリックしていました。

### セル内で改行する
→Alt + Enter

よくShift + Enterと間違えて「いらっ」とするのは内緒です。
私が慣れていないだけです。
ちなみにShift + Enterだと入力を確定して一つ上のセルに移動します。

### 選択範囲の拡張
→Ctrl + Shift + 十字キー

選択したセルと同じ行/列にある、データが入力されているセルまで選択します。
データが大量になった時等に役立ちます。
選択したままひたすら下にマウスを移動していた時期が誰にでもあるはず。
しかしデータが飛び飛びになっていると十字キーを何回も押さないといけない。

### 1回前の処理を再度行う
→F4

よく使うのは、あるセルの書式を変更して、その下のセルにも同じことしたくなった時。
でも使用頻度は低めですね。
円周上の座標を計算して 要素を配置する


		Math.cos( θdadian ) 		ある角度 θのときの x座標 を示す
		Math.sin( θdadian ) 		ある角度 θのときの Y座標 を示す

	円周上の座標は上の関数を使うことで計算できる

	角度が20度の時の x座標 => leftの値 , Y座標 => topの値
	のようにcssで指定することで 円周上に要素を配置できる

	このとき引数には角度をradianという単位で指定するので
	radianが理解できないとよくわからない



ラジアンを理解する

		90deg === 0.5radian
		180deg === 1radian
		270deg === 1.5radian
		360deg === 2radian

	半径r = 1 を基準にした時の円の 円周 の長さと角度を関連づけている
	別の言い方をすると 円周の長さを 2つのr で切り取った長さを rの長さとの比率で表すもの

	円周は 直径2r * π なので,ラジアンの基準になる円の円周は 2πとなる

		360degの時の円周　=== 2π   ===   360degの時のradian 2π/r === 2π radian
	
	半径rは1なので 円周2πと同じ
	
	円周とradiangが関連づいているのがわかる

	なので 360/2 deg === 2π/2 となり

	180 degの時に　1 radian　となる

	比率の話なので、実際の円が大きくても小さくても

	この関係は同じ




deg を radian に変換する

		n radian === Math.PI / 180 * 角度n

	radianを考える上で πは 半円の円周を示す

	これを180分割する( 1度にたいする円周の長さに変換する )

	この円周の長さと半径rの比率が radian で

	それを満たす角度θを示すことになる



要素を取得して、それぞれを円周上に配置する


		var l = $('elements').length;
		var theta = 360/l;
		var i = 0;


			$('elements').each(function(){

				$(this).css({

					position:"absolute",
					left:Math.cos( Math.PI / 180 * (theta * i) ),
					top:Math.sin( Math.PI / 180 * (theta * i) )

				});//css

				i++;

			});//each


		

	要素の数を取得して、theta を自動で計算する
	要素それぞれに対して 角度に thetaづつ足していったものを 設定する




	例えば要素が10個あったとすると 360/10 で　36度づつ円を分割して
	その円周上の座標を取得すればいい

	つまり theta を 0からスタートして 36degづつ足していけばいい

	ただし radian　に変換するので Math.PI / 180 * 36 が 36degとなる

	あとは36づつ増えていくので,　考え方としては

		for (i=0; i>10; i++){
	
			//36 * 0 === 0 からスタートして均等に角度を計算する
	
				Math.PI / 180 * (36 * i)

		}

	となる


参考サイト

東大生が教えるヴィジュアル数学
		~~http://www24.atpages.jp/venvenkazuya/math1/trigonometric_ratio1.php~~
https://web.archive.org/web/20170228032130/http://www24.atpages.jp/venvenkazuya/
ASP.NET MVC5（C#） ログイン機構 ASP.NET Identity

# 導入方法

試しても見てなかったけど実は初期状態でできるっぽい。

下記にいくつか周辺のお話は書いてある。

1. http://codezine.jp/article/detail/7709?p=3
1. http://codezine.jp/article/detail/7921

# 関連テーブル

なお、初期に設定したデータベースには下記テーブルが作成されている。

1. AspNetRoles
2. AspNetUserClaims
3. AspNetUserLogins
4. AspNetUserRoles
5. AspNetUsers

うち、Webページより新規登録を行った際に登録が行われるテーブルは

AspNetUsers

のみ。

| 項目 | 値 |説明|
|:----|---------------------:|:----------------------------------|
| Id | ランダム値? |ユーザー情報の識別情報（GUIDを使用）|
| Email | 登録したメールアドレス |ユーザーのメールアドレス|
| EmailComfirmed | 0 |メールによるアカウント確認が行われたかどうかを表す値|
| PasswordHash | 登録したパスワードのハッシュ値 |パスワードから生成されたハッシュ値|
| SecurityStamp | ランダム値? |ログオン状態を管理するためのタイムスタンプ|
| PhoneNumber | Null |ユーザーの電話番号|
| PhoneNumberConfirmed | 0 |電話によるアカウント確認が行われたかどうかを表す値|
| TwoFactorEnabled | 0 |二段階認証が有効かどうかを表す値|
| LockoutEndDateUtc | Null |アカウントロックアウトが終了する日時（UTC）|
| LockoutEnabled | 1 |アカウントロックアウトが有効かどうかを表す値|
| AccessFailedCount | 0 |ログインに失敗した回数|
| UserName | 登録したメールアドレス |ログインに使用するユーザー名|

# Facebook等との連携方法 

下記に記されている模様。

http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on
無料版UnityでLeapMotionを利用する準備について

#無料版UnityでLeapMotionを利用する準備について

無料版のUnityでLeapMotionを使うときの準備に、毎回右往左往するのもあれなのでメモ。
[https://developer.leapmotion.com/getting-started/unity/free](https://developer.leapmotion.com/getting-started/unity/free)に書いてあることを参考にした。

以下手順。

##1. Leap Motion V2 Skeletal Assetsのインポート

1. Unityを起動する
2. メニューから「Window」->「Asset Store」
3. Asset Storeウィンドウで「leapmotion」で検索
4. 検索結果で出てくる「Leap Motion V2 Skeletal Assets」を開いて「インポート」ボタン
5. Importing packageウィンドウが開くので全部選択されていることを確認して「Import」ボタン
6. ここで、Unityのメインウィンドウに戻るが、無料版の場合ウィンドウ下部に「License error. This plugin is only supported in Unity Pro!」と表示されて実行ボタンを押しても動かないことを確認する。

##2. 無料版Unityに対応させる

1. コマンドプロンプトを開く
2. プロジェクトのルートフォルダに移動する

プロジェクトのルートフォルダの例)![WS000420.JPG](https://qiita-image-store.s3.amazonaws.com/0/3690/db1ad172-436f-ac41-4592-5b3a319afaba.jpeg)
3. 以下のコマンドを実行する

> move Assets\Plugins\Leap.dll .
> move Assets\Plugins\LeapCSharp.dll .
> move Assets\Plugins\LeapCSharp.NET3.5.dll Assets
> del Assets\Plugins

実行後、先ほどのプロジェクトのルートフォルダは、DLLが2つ増えてこうなる

![WS000421.JPG](https://qiita-image-store.s3.amazonaws.com/0/3690/3c059840-ed11-2c2b-6ade-ec3a64710562.jpeg)

これで無料版UnityでLeapMotionを使う準備完了。

##3. サンプル

プロジェクトビューから、

> LeapMotion -> Prefabs -> HandControllerSandBox

をヒエラルキービューへD&DしてDirectional lightを追加すれば、

![WS000417.JPG](https://qiita-image-store.s3.amazonaws.com/0/3690/e2d2efd4-4748-7abf-713f-bf0310873fef.jpeg)


こんな感じに。

![WS000418.JPG](https://qiita-image-store.s3.amazonaws.com/0/3690/93542f86-3d1a-1fa6-3f18-0f96a7656e9c.jpeg)


いじょ。
RubyでTSVファイルを出力してスプレッドシートにコピペ


## はじめに
何かしらのデータをRubyで取得して整形し、ファイルに出力したとき、それを他の人に見せたいことがあります。

見せるのはGoogleのスプレッドシートが便利です。が、**CSV形式だとスプレッドシートにデータをコピペすることができません。**

そこで、TSV形式で出力します。**TSVならコピペ可能です。**

## スクリプト
```ruby
require 'csv'

CSV.open("hoge.tsv", "w", :col_sep => "\t") do |io|
  io.puts(data_headings) # 見出し
  data.each { |row| io.puts(row) } # 実際のデータ
end
```

`"\t"` が `'\t'` のようにシングルクォーテーションになってるとタブとして認識されてないので注意。

参考：[[Ruby]シングル/ダブルクォーテーションの差異](http://nasa.rejec.net/wp/blog/2012/12/22/ruby%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%83%80%E3%83%96%E3%83%AB%E3%82%AF%E3%82%A9%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%B7%AE%E7%95%B0/)
HTTPステータスコード表をJSONにしてみた

そのうち使うことがありそうな気がしたので作っておきました。
早見表としても使えると思います。
内容は[wikipedia](http://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89)の通りです。

```json
{
  "100": "Continue",
  "101": "Switching Protocols",
  "102": "Processing",
  "200": "OK",
  "201": "Created",
  "202": "Accepted",
  "203": "Non-Authoritative Information",
  "204": "No Content",
  "205": "Reset Content",
  "206": "Partial Content",
  "207": "Multi-Status",
  "226": "IM Used",
  "300": "Multiple Choices",
  "301": "Moved Permanently",
  "302": "Found",
  "303": "See Other",
  "304": "Not Modified",
  "305": "Use Proxy",
  "306": "(Unused)",
  "307": "Temporary Redirect",
  "308": "Permanent Redirect",
  "400": "Bad Request",
  "401": "Unauthorized",
  "402": "Payment Required",
  "403": "Forbidden",
  "404": "Not Found",
  "405": "Method Not Allowed",
  "406": "Not Acceptable",
  "407": "Proxy Authentication Required",
  "408": "Request Timeout",
  "409": "Conflict",
  "410": "Gone",
  "411": "Length Required",
  "412": "Precondition Failed",
  "413": "Request Entity Too Large",
  "414": "Request-URI Too Long",
  "415": "Unsupported Media Type",
  "416": "Requested Range Not Satisfiable",
  "417": "Expectation Failed",
  "418": "I'm a teapot",
  "422": "Unprocessable Entity",
  "423": "Locked",
  "424": "Failed Dependency",
  "426": "Upgrade Required",
  "500": "Internal Server Error",
  "501": "Not Implemented",
  "502": "Bad Gateway",
  "503": "Service Unavailable",
  "504": "Gateway Timeout",
  "505": "HTTP Version Not Supported",
  "506": "Variant Also Negotiates",
  "507": "Insufficient Storage",
  "509": "Bandwidth Limit Exceeded",
  "510": "Not Extended"
}
```
【備忘録】NLog よく使う出力レイアウト

# はじめに
よく忘れちゃうので、明日の自分のためにメモっとく。

## 環境
* Windows7 Professional SP1
* Microsoft Visual Studio Version 12.0.31101.00 Update 4
* Microsoft .NET Framework Version 4.5.51209
* Microsoft Visual C# 2013
* NLog 3.1.0.0

## 出力定義のポイント
* スレッドIDは、8桁右寄せ
* レベルは、5桁左寄せ
* エンコーディングは、UTF-8
* アーカイブは、日単位
* アーカイブファイル名は、ローリング形式・固定名でナンバリングする
* アーカイブは7日間

# Example
```csharp:Program.cs
    /// <summary>
    /// 【備忘録】NLog よく使う出力レイアウト
    /// </summary>
    class NLog02
    {
        private static NLog.Logger logger = NLog.LogManager.GetLogger("fooLogger");

        static void Main(string[] args)
        {
            try
            {
                logger.Trace("トレースログ");
                logger.Debug("デバッグログ");
                logger.Info("情報ログ");

                throw new Exception("エラーログ");
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }
        }
    }
```
```xml:NLog.config
  <targets>
    <target
      name="fooFile"
      xsi:type="File"
      layout="${longdate} [${threadid:padding=8}] [${uppercase:${level:padding=-5}}] ${callsite}() ${message} ${exception:format=tostring}"
      fileName="${basedir}/logs/${date:format=yyyyMMdd}.log"
      encoding="UTF-8"
      archiveFileName="${basedir}/logs/archives/archive.{#}.log"
      archiveEvery="Day"
      archiveNumbering="Rolling"
      maxArchiveFiles="7" />
  </targets>

  <rules>
    <logger name="fooLogger" minlevel="Trace" writeTo="fooFile" />
  </rules>
```
```txt:20150228.log
2015-02-28 19:11:46.2020 [       9] [TRACE] Shusaku.Examples.NLog02.Main() トレースログ 
2015-02-28 19:11:46.2190 [       9] [DEBUG] Shusaku.Examples.NLog02.Main() デバッグログ 
2015-02-28 19:11:46.2350 [       9] [INFO ] Shusaku.Examples.NLog02.Main() 情報ログ 
2015-02-28 19:11:46.2350 [       9] [ERROR] Shusaku.Examples.NLog02.Main() System.Exception: エラーログ
   場所 Shusaku.Examples.NLog02.Main(String[] args) 場所 c:\hoge\Examples\NLog02\NLog02\Program.cs:行 25 
```
Docker Swarm リファレンス


![logo.png](https://qiita-image-store.s3.amazonaws.com/0/20833/d1ba2dde-e806-d256-b863-a07dbc84e5f6.png "logo.png")


## 概要
[2014年末の DockerCon EUで発表された公式のオーケストレーションツール Machine, Swarm, Compose](http://blog.docker.com/2014/12/announcing-docker-machine-swarm-and-compose-for-orchestrating-distributed-apps/) のうち **Swarm** についてのまとめ。
2015年02月26日にダウンロード可能な最初のバージョンが出た


Swarm を一言で説明するならば、複数ホスト環境でも1ホストと同じように Docker を扱えるツール。

Machine, Compose については以下参照

* [Docker Machine リファレンス](http://qiita.com/spesnova/items/073dd64a8a1d580d9ae9)
* [Docker Compose リファレンス](http://qiita.com/spesnova/items/6e8919b34e763f27c34e)

## Swarm とは
Swarm は Docker 環境をクラスタリングするツール。

swarm ができること

* Docker コンテナを使ったシンプルなセットアップ
* リソースマネジメント / スケジューリング
* 既存の Docker Remote API と互換性のある Docker Swarm API を提供
* 指定した条件を満たすホストでのコンテナの起動
* あのコンテナとこのコンテナは同じホストに / 違うホストに、ができる
* TLS

既存の Docker API と互換性があるというのは非常に強力で、 Dokku や Fig (compose) といった 1 ホストで使っていたツールも複数ホスト環境で利用できるようになるということ。

またリソースマネジメントの仕組みは Mesos ほど高機能ではないが、シンプルで現実的、実用的という印象。

2015年02月27日現在はベータ版という扱い

### Swarm の基本的な考え方

* 極めて簡単に使い始められる
* 既存の Docker API との互換性がある
* サービスディスカバリやスケジューリング機能は標準装備だが別のを使うこともできる

## インストール
swarm は Docker コンテナとして動かすようになっているので、イメージを取得してくるだけでよい。

```
$ docker pull swarm:latest
```

注意点としては、

* swarm を利用する環境の Docker のバージョンが揃っていること
* Docker のバージョンが 1.4.0 以上であること

## Hello World
[Docker Swarm を使ってマルチホスト環境で Hello World コンテナを動かす](http://qiita.com/spesnova/items/47fa9ba3e8aa3721384c)

## [WIP] How It Works

* Swarm は各 Node の Docker Remote API を tcp 経由で使う

## [WIP] Machine を使って Swarm クラスタを構築する

## [WIP] TLS

## [WIP] スケジューリング

## [WIP] Swarm API

## Compose 連携

[Swarm と組み合わせて Compose(Fig) をマルチホスト環境で使う](http://qiita.com/spesnova/items/bd64b84368370391eb0c)

## REF

* [docker/swarm](https://github.com/docker/swarm)
 * [Roadmap](https://github.com/docker/swarm/blob/master/ROADMAP.md)
* [公式ドキュメント](https://docs.docker.com/swarm/)
 * [Discovery](https://docs.docker.com/swarm/discovery/)
 * [Filters](https://docs.docker.com/swarm/scheduler/filter/)
 * [Strategies](https://docs.docker.com/swarm/scheduler/strategy/)
 * [Docker Swarm API](https://docs.docker.com/swarm/API/)
* [SCALING DOCKER WITH SWARM](https://github.com/spesnova/catchup/issues/42)
Xcodeのストーリーボードでボタンをドラッグアンドドロップ出来ない問題

# Xcodeのストーリーボードでボタンをドラッグアンドドロップ出来ない問題

## ドロップしても反応しない。
ストーリーボードのコントローラーのクラス名と追加しようとしてるコントローラのクラス名が同じかを確認。

## class情報が見つからない

Could not insert new outlet connection: Could not find any information for the class and not showing any class named "xxx"

``` sh
$ rm -rf ~/Library/Caches/com.apple.dt.Xcode
$ defaults delete com.apple.dt.Xcode IDEIndexDisable  
$ defaults write com.apple.dt.Xcode IDEIndexEnable 1
```

xcode再起動
vagrant upして放置しまくっていたら読み込めないし、エラー文も謎

## 現象
たまにvagrant + virtualboxでローカル開発を行うが
久しぶりに立ち上げて、ブラウザでアクセスした所

```
ForBidden
You don's have permission to access "ディレクトリ名"
```
と出てくる。
あれと思いvagrant sshで入って操作しようとしても

```
[vagrant@dev vagrant]$ sudo cd /vagrant
d??????????   ? ?    ?        ?            ? vagrant
[vagrant@dev vagrant]$ sudo ls /vagrant
ls: cannot open directory .: 許可されていない操作です
[vagrant@dev vagrant]$ sudo mv /vagrant /vagrant1
ls: cannot open directory .: 許可されていない操作です
[vagrant@dev vagrant]$ sudo rm -fr /vagrant
ls: cannot open directory .: 許可されていない操作です
```
...
更にエラー文を見ると

```
[vagrant@dev vagrant]$ less /var/log/httpd/error_log
Symbolic link not allowed or link target not accessible: /var/www/html
```
とシンボリックリンクがおかしいぞーとのこと

## 原因
vagrant fileが入ってるディレクトリ名を
vagrant upした後に変えていた...
ただそれだけ。

## 対策
vagrant reloadしてあげると元通り
エラー文から原因が推測しづらかったのでmemo
【備忘録】NLog 出力するファイルを分ける

# はじめに
よく忘れちゃうので、明日の自分のためにメモっとく。

## 環境
* Windows7 Professional SP1
* Microsoft Visual Studio Version 12.0.31101.00 Update 4
* Microsoft .NET Framework Version 4.5.51209
* Microsoft Visual C# 2013
* NLog 3.1.0.0

# Example
```csharp:Program.cs
    /// <summary>
    /// 【備忘録】NLog 出力するファイルを分ける
    /// </summary>
    class NLog01
    {
        private static NLog.Logger logger1 = NLog.LogManager.GetLogger("fooLogger");
        private static NLog.Logger logger2 = NLog.LogManager.GetLogger("barLogger");

        static void Main(string[] args)
        {
            logger1.Info("fooLoggerに出力");
            logger2.Info("barLoggerに出力");
        }
    }
```
```xml:NLog.config
  <targets>
    <target
      name="fooFile"
      xsi:type="File"
      layout="${longdate} ${uppercase:${level}} ${message}"
      fileName="${basedir}/logs/${shortdate}.log"
      archiveAboveSize ="5000000"
      maxArchiveFiles="2"/>
    <target
      name="barFile"
      xsi:type="File"
      layout="${longdate} ${uppercase:${level}} ${message}"
      fileName="${basedir}/logs/${longdate}.log"
      archiveAboveSize ="5000000"
      maxArchiveFiles="2"/>
  </targets>

  <rules>
    <logger name="fooLogger" minlevel="Trace" writeTo="fooFile" />
    <logger name="barLogger" minlevel="Trace" writeTo="barFile" />
  </rules>
```
Raspberry PiにNode.jsをインストールしてCylon.jsでLチカする

Raspberry Piにapt-getからNode.jsをインストールすると古いバージョンになります。ARMでNode.jsをソースからビルドするのは大変( [Error compiling v0.10.30 on Raspberry Pi Model B](https://github.com/joyent/node/issues/8062))なのでビルド済みのバイナリからインストールします。[node-arm](http://node-arm.herokuapp.com/)のサイトではv0.10.36の最新バージョンまで公開されていますが、今回は[Node.js](http://nodejs.org/dist)からarm-piのバイナリをダウンロードして使います。

## Node.jsのインストール

[Node.js](http://nodejs.org/dist/)に公開されているarm-piは[Why no more arm-pi binary release at http://nodejs.org/dist/ ?](https://github.com/joyent/node/issues/8098)にissueがあるように手動で公開しているようです。v0.10.28が最新でした。ビルド済みのバイナリをダウンロードして`/opt/node`にインストールします。

``` bash
$ wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-arm-pi.tar.gz
$ tar zxvf node-v0.10.28-linux-arm-pi.tar.gz
$ sudo mv node-v0.10.28-linux-arm-pi /opt/node
```

環境変数PATHにNode.jsを追加します。

``` bash
$ vi /home/pi/.bashrc
export PATH=/opt/node/bin:$PATH
$ source ~/.bashrc
```

バージョンを確認します。

``` bash
$ node -v
v0.10.28
$ npm -v
1.4.9
```

sudoでnpmコマンドが実行できるようにシムリンクを作成します。

``` bash
$ sudo ln -s /opt/node/bin/node /usr/bin/node
$ sudo ln -s /opt/node/bin/npm /usr/bin/npm
```

## Cylon.jsでLチカ

まずはプロジェクトを作成します。

``` bash
$ mkdir -p ~/node_apps/mqtt-led
$ cd !$
```

package.jsonに、Raspberry Piアダプタの[cylon-raspi](https://github.com/hybridgroup/cylon-raspi)を追加します。

``` json:~/node_apps/mqtt-led/package.json
{
  "name": "mqtt-led",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "cylon-raspi": "0.15.0"
  },
  "scripts": {"start": "node app.js"}
}
```

`npm install`します。

``` bash
$ npm install
```

Cylon.jsの[Raspberry Pi](http://cylonjs.com/documentation/platforms/raspberry-pi/)のページにあるサンプルを実行します。

``` js:~/node_apps/mqtt-led/app.js
var Cylon = require("cylon");

Cylon.robot({
  connections: {
    raspi: { adaptor: 'raspi' }
  },

  devices: {
    led: { driver: 'led', pin: 11 }
  },

  work: function(my) {
    every((1).second(), my.led.toggle);
  }
}).start();
```

`npm start`をroot権限で実行するとLチカが始まります。

``` bash
$ sudo npm start
```
都道府県と市町村区を分割し、配列に格納する。


都道府県名の大体は3文字目を"都道府県"のいずれかにマッチさせることで対応できます。
神奈川県、和歌山県、鹿児島県の3県だけ4文字目でも"県"をマッチできるようにします。

replace()で空白を入れて、split()で分割します。

```javascript
'東京都文京区本郷'
.replace(/^(.{2}[都道府県]|.{3}県)(.+)/, "$1 $2")
.split(' ')

// ['東京都','文京区本郷']  
```
WPF ソースでリソースの指定

動的にコントロールを作成して、そのコントロールにTemplateを指定したいことがありました。
そのときにどうやってTemplateを指定すればいいのか、と言う内容です。

Templateを指定するxamlの内容です。
**ContentTemplate** というものを作っています。

```xml:text.xaml
<Grid Name="gvContent">
	<Grid.Resources>
		<ControlTemplate x:Key="ContentTemplate" TargetType="Label">
			<Border BorderBrush="Gray">
				<ContentPresenter>
				</ContentPresenter>
			</Border>
		</ControlTemplate>
	</Grid.Resources>
</Grid>
```


次に ソースでLabelを作成して そのLabelに **ContentTemplate** を指定しています。
※ Gridに追加して 位置の指定もしています。

```csharp:text.cs
Label text = null;
gvContent.Children.Add( text = new Label()
{
	Content = "-",
	Template = gvContent.Resources["ContentTemplate"] as ControlTemplate,
} );
Grid.SetRow( text, gvContent.RowDefinitions.Count - 1 );
Grid.SetColumn( text, 0 );
```

このように **コントロール.Resources["リソース名"]** で指定ができました。
Aeromockでサーバサイドに影響されない開発をしよう

### Aeromockとは

サイバーエージェントがオープンソースで公開しているScala製モックサーバです。

[CyberAgent/Aeromock](https://github.com/CyberAgent/aeromock)

### Javaプロジェクトのフロントエンド開発が抱える問題

旧来、サイバーエージェントのJavaプロジェクトにおいては多くのプロジェクトが以下のような問題を抱えてきました。

* サーバサイドにエラーでも発生しようものなら、開発が止まる
* フロントエンジニアが専門領域外の作業に手を取られる（サーバサイド関連の環境構築、DBのテストデータ投入・修正等）
* サーバサイド開発に引きずらがちなインタフェース（テンプレートの変数、JSONの構造等）
* アプリケーションサーバの起動時間待ち

と言った感じで、サーバサイドはフロントエンド開発にとって完全なクリティカル・パスであり、その生産性には大きな問題を抱えていました。その内情は昨年の[DevLOVE甲子園](https://speakerdeck.com/stormcat24/zhi-matutiyaikenaihurontoendokai-fa)での発表を見るとイメージしやすいと思います。

そのようなサーバサイドJava主導のフロントエンド開発の生産性を改善し、フロントエンジニアが本来の専門領域の開発に専念できるようにするためにAeromockは開発されました。

Aeromockの使いどころはJavaプロジェクトだけではなく、最近ではネイティブ開発においても利用されることが増えています。また、GruntやGulpで起動したサーバのproxy先として利用したりすることもできます。

### 主な機能と特徴

* テンプレートに紐づくデータファイル（JSON or YAML）を用意するだけでHTMLを描画できる
* テンプレートでのメソッド呼び出しや、カスタムタグ・ファンクションを利用している
* 対応しているテンプレート(0.2.3現在）
 * Freemarker
 * handlebars.java
 * Jade4j
 * Velocity
 * Groovy Template Engine
 * Thymeleaf
* 純粋なJSON APIサーバとしても機能
* リクエスト内容（クエリストリングやPOSTデータ）によって、レスポンスする内容をコントロールできる
* Protocol BuffersやMessagePack等の特殊なレスポンスもサポート
* 数秒で起動し、再起動不要

### クイックチュートリアル
公式の[クイックチュートリアル](https://github.com/CyberAgent/aeromock/wiki/Quick-Tutorial-Japanese)を利用すると、動作イメージをつかみやすくて良いです。

### Dockerイメージ
AeromockはDockerHub上にDockerイメージも用意しています。Dockerに慣れている方であれば、インストーラー無しで利用することができます。

[Docker Hub - stormcat24/aeromock](https://registry.hub.docker.com/u/stormcat24/aeromock/)

またDockerイメージがあることで、CircleCIのようなDockerをサポートしたCIツールでAPIのモックとして利用するようなこともできます。様々な外部システムに依存しているようなシステムのテストに有効です。

使い方は、任意のAeromockのディレクトリを/projectでマウントしてdocker runするだけです。

```bash
$ docker run -t -i -p 3183:3183 -v /aeromock_dir:/project stormcat24/aeromock
```

### まとめ
Aeromockの機能はそれなりにあるので、この記事ではその詳細にまでは触れません。まずはチュートリアルを触ってみてください。フロントエンド開発で価値を出せる役割を担ってくれれば幸いです。

**Happy mock life!!**
Xcode6.1.1 Swiftを書いている時に，コード補完が効かない話


###Xcodeでコード補完されなかったり，色が変わらない時の方法です
#※簡単です

1.Xcode，iOS Simulatorを全て終了します。

2.~/Library/Developer/Xcode/DerivedData を全て削除します。
※必要なものは，全てバックアップを取ってください。

3.~/Library/Caches/com.apple.dt.Xcode. を削除します。

###完了です！！
インストール直後の簡易的なファイアーウォールスクリプト

# 概要
最近ハンズオンや検証でテスト環境が必要になったとき、AWSやらAzureで仮想サーバーを立てて使っている。
しかし、インターネット上で使うので当然IPフィルタリングをしなければいけない。
AWSはセキュリティグループでIP制限をかけられるがAzureの場合は自分でiptablesを設定しないといけない。
毎回調べて書いていて煩わしいのでまとめます。

# さくらVPSや直接コンソロールを叩く場合

直接コンソロールに接続している場合はこう。
sudoするなりroot権限で行う
3行目のxxx.xxx.xxx.xxxは接続元IPに置き換える

```bash
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
```

出力パケットはすべて許可、
入力パケットは指定したIPからとサーバー側から送った接続の戻りのみ許可。

これで指定IPからの接続はすべて使えてyumもaptも使える。
ミスってSSHが繋がらなくなったら再起動すればリセットされます。

# すでにSSH接続をしている場合

SSHでログインしている場合に↑をやると最初の一行目を打ち込んだ瞬間に接続が途切れてしまうので、
スクリプトを書いてそれを始動させる。

下記の頭の変数の値を変えてiptable.shとかいう名前で保存、そしてroot権限で動かす。

```bash
#!/bin/sh
MYIP=xxx.xxx.xxx.xxx
 
 
iptables -F
iptables -X
iptables -Z
 
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
 
 
# accept local roopback
iptables -A INPUT -i lo -j ACCEPT
 
# accept my IP
iptables -A INPUT -p tcp -s ${MYIP} -j ACCEPT
 
# accept established connection
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# drop other connection
iptables -A INPUT -j DROP
```

これも失敗してしまったときはサーバーを再起動すれば元に戻ります。


# 仕上げ
```bash

sudo service iptables save
```

これで再起動しても戻らなくなる。
※debianは使えません
【jQuery】プラグインの作り方


##サンプル
sampleというプラグインを定義して実行してみる。

```js:プラグインの定義
//POINT1 即時実行の無名関数で囲うこと
(function($) {
  $.fn.sample = function(option){
    
    //POINST2 パラメータとデフォルト値のマージ
    var defaults = {text:'hello'};
    var option = $.extend(defaults,option);

    //ここに処理を書く！
         
    //POINT3 メソッドチェーンに対応するためthisを返す
    return(this);
  };
})(jQuery);
```

jQueryを読み込んで、プラグインの定義したファイルを読みこむ。
jQueryオブジェクトのメソッドにプラグインが追加されているので実行できる。

```js:プラグインの実行
$('p').sample();
```

##POINT解説

### POINT1 即時実行の無名関数で囲うこと
グローバル汚染しないため。

### POINST2 パラメータとデフォルト値のマージ
オプションはオブジェクト$.extend()を使うとマージが簡単！

```
var option = $.extend(defaults,option);
```

### POINT3 メソッドチェーンに対応するためthisを返す
これはマナー的な感じ。

参考：[はじめてのjQueryのプラグインの作り方](http://yyengine.jp/blog/jquery/jquery-plugin-5step/)
AmazonLinux(t2.small)でPhantomJS2.0をビルド


公式ページ http://phantomjs.org/build.html の手順に沿ってAmazonLinuxでPhantomJS2.0をビルドしてみました。

# 環境
* Amazon Linux AMI 2014.09.2
* t2.small

# ビルド手順
ビルドに必要なパッケージのインストール

```
$ sudo yum -y install gcc gcc-c++ make flex bison gperf ruby \
openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel \
libpng-devel libjpeg-devel git
```

ソースコードをcheckoutしてビルド（ビルド完了まで1時間半ほどかかりました）

```
$ git clone git://github.com/ariya/phantomjs.git
$ cd phantomjs
$ git checkout 2.0
$ ./build.sh
```

PATHの通ってるディレクトリにコピー or PATHを通す

```
sudo cp bin/phantomjs /usr/bin/
```

# 動作確認

```
$ phantomjs -v
2.0.1-development
```
バージョン情報が表示されればOK

# ついでに日本語対応
この状態でPhantomJSで日本語サイトのスクリーンショットを撮ろうとすると、おそらく日本語フォントが入っていないために文字化けしてしまうと思うので、ついでに日本語フォントもインストール

```
sudo yum install ipa-gothic-fonts.noarch
sudo yum install ipa-mincho-fonts.noarch
```
Ensimeインストール

# Documents

・Wiki Home
https://github.com/ensime/ensime-emacs/wiki

・Command Reference
https://github.com/ensime/ensime-emacs/wiki/Emacs-Command-Reference

・ENSIME SBT(Ensime用の設定ファイル生成ツール)設定
https://github.com/ensime/ensime-sbt

# 試した環境

・Mac OSX YosemiteかEl Capitan

・Emacs 24.5

# 構築

## Scala+sbt
```
brew install scala
brew install sbt
```

## Emacsインストール
http://qiita.com/saito400/items/528c82c4b6e26cbe4777


## scala-mode2+Ensimeインストール
~/.emacs.d/init.elに以下の記述を追加しEmacsを再起動

```
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)

(unless (package-installed-p 'scala-mode2)
(package-refresh-contents) (package-install 'scala-mode2))
(unless (package-installed-p 'ensime)
(package-refresh-contents) (package-install 'ensime))


(setenv "PATH" (concat "PATH_TO_SBT:" (getenv "PATH")))
(setenv "PATH" (concat "PATH_TO_SCALA:" (getenv "PATH")))


(require 'scala-mode2)
(require 'ensime)
(add-hook 'scala-mode-hook 'ensime-scala-mode-hook)


```


## sbt pluginの設定


~/.sbt/0.13/plugins/plugins.sbtに以下を追加

```
resolvers += Resolver.sonatypeRepo("snapshots")

addSbtPlugin("org.ensime" % "ensime-sbt" % "0.2.3")

// project/plugins.sbt
dependencyOverrides += "org.scala-sbt" % "sbt" % "0.13.8"

```

## プロジェクト毎のEnsime用設定ファイル生成

プロジェクトのディレクトリに移動し以下コマンドを実行

```
sbt gen-ensime

```

## Ensimeを起動

Emacs起動後に以下を実行

```
M-x ensime
```

# よく使ってる機能



| ショートカット | 説明 |
|:-----------|:-----------|
|C-c C-v f|ソースをフォーマット|
|C-c C-v r|呼び出し元にジャンプ|
|C-c C-v i|カーソルが当たってる要素をインスペクト|
|C-c C-c a|全ソースを型チェック|
|C-c C-t t|現在のクラスのテストクラスに移動|
|C-c C-t i|現在のテストクラスの実装クラスに移動|
|C-c C-r o|インポートを整理|
|M-.|定義にジャンプ|
|M-,|ジャンプから戻ってくる|


# remote debugging

以下コマンドでデバッグモードでactivatorを起動
```
activator -jvm-debug 9999 run
```

ensimeからアタッチ
```
M-x ensime-db-attach
```
【備忘録】byte配列⇒16進数文字列へ変換

# はじめに
この手の変換ってよく忘れちゃうので、明日の自分のためにメモっとく。

## 環境
* Windows7 Professional SP1
* Microsoft Visual Studio Version 12.0.31101.00 Update 4
* Microsoft .NET Framework Version 4.5.51209
* Microsoft Visual C# 2013

# Example
```csharp:
    /// <summary>
    /// 【備忘録】byte配列⇒16進数文字列へ変換
    /// </summary>
    class ByteArray01
    {
        private static byte[] b = { 0x41, 0x42, 0x43 };
        private static string s = string.Empty;

        static void Main(string[] args)
        {
            // s = "41-42-43"
            s = BitConverter.ToString(b);

            // s = "414243"
            s = BitConverter.ToString(b).Replace("-", string.Empty);

            Console.ReadKey();
        }
    }
```
ネットワークシミュレータns-2をFreeBSD8.2とかUbuntu11.10とかで動かす

ネットワークシミュレータのデファクト「ns-2」のインストール時のトラブル解決方法をご紹介．手順書通りにやってもエラーが出ますので，そんな時にはこちらを参考にしていただければと思います．

気が向いたら，Agentの作り方やNodeの作り方などオリジナルプロトコル作成時のコツを書きますね．

# FreeBSD 8.2 (g++ 4.2.1)で，ns-2.34 かns-2.35を動かす場合
* コンパイル時にエラー発生

> aomdv/aomdv.cc: In member function 'void AOMDV::recvReply(Packet*)':
> aomdv/aomdv.cc:1197: error: 'AF_INET' was not declared in this scope
> gmake: *** [aomdv/aomdv.o] Error 1
> Ns make failed!
> See http://www.isi.edu/nsnam/ns/ns-problems.html for problems

「AF_INETの定義がない」と怒られますので，定義してあるヘッダ（sys/socket.h）をコンパイルエラーとなったソースファイル（aomdv/aomdv.cc）に追加

```cpp:ns-2.35/aomdv/aomdv.cc
//#include <ip.h>
#include <sys/socket.h>   ←これを追記
#include <aomdv/aomdv.h>
```

で，再コンパイル．
> \> cd ns-2.35; gmake

FreeBSDのmakeは標準ではgnuのライブラリを使わないヤツなのでエラーが起きます．
gmakeとして明示的にgnuを使うようにしてあげましょう．

モバイルやらマルチキャストやらのモジュールでテストエラーが出ますが，当該モジュールを使わない方は無視しても問題ありません．

ちなみに，インストール成功後，画面にも表示されますが，環境変数の設定が必要となります．私の場合は，こんな感じ．

```tcsh:.cshrc
set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local\
/bin $HOME/bin /usr/home/osada/ns-allinone-2.35/bin /usr/home/osada/ns-allinone\
-2.35/tcl8.5.10/unix /usr/home/osada/ns-allinone-2.35/tk8.5.10/unix)
setenv LD_LIBRARY /usr/home/osada/ns-allinone-2.35/otcl-1.14:/usr/home/osada/ns\
-allinone-2.35/lib
setenv TCL_LIBRARY /usr/home/osada/ns-allinone-2.35/tcl8.5.10/library
```

# Ubuntu11.10の場合
* tkインストール時のエラーの対応

> \> sudo apt-get update
> \> sudo apt-get install autoconf automake libxmu-dev build-essential
> \> tar zxvf ns-allinone-2.35.tar.gz
> \> cd ns-allinone-2.35
> \> ./install

x関係のライブラリが標準では入っていないようです．上記コマンドで，必要なライブラリをインストールします．

# 共通
* 中間クラスを修正するときの注意
Agent/TCP/NewrenoやAgent/TCP/RenoなどのスーパークラスであるAgent/TCPを修正する場合，修正するクラス以外に，サブクラスについてもそれぞれ再コンパイルすること．
そうしなければ，オブジェクト間リンクがうまく機能せず，実行時エラーになるか，うまく動作しなくなりますので注意．


# 予告
ns-3も，色々エラーが出るので，それもそのうち書きます．そのうち．
エクセルからGoogle Adwordsの予算設定を一括で行う（Selenium VBA）

celenium + excel + chrome の組み合わせで、GoogleAPIの[BudgetOrder]リクエストが使えなくても
代理店が各アカウントに対して毎月月末に行う、来月の月額予算設定を一括で実行する泥臭い方法。

※ループ処理、例外処理、エラーハンドラは省略、wait処理はミニマムな記述
※celenium wrapper type libralyをアーリーバインドしておく



    Sub Start_BudgetOrder_with_chrome()
     Dim  driver As New SeleniumWrapper.WebDriver
     Call driver.Start("chrome", "https://accounts.google.com/ServiceLogin?")
     Call driver.get("")
     driver.findElementById("Email").SendKeys (Sheets("sheet1").Range("B4").Value) 　'GoogleアカウントID
     driver.findElementById("Passwd").SendKeys (Sheets("sheet1").Range("B5").Value)　'GoogleアカウントPASS　
     driver.findElementById("gaia_loginform").submit
     
     Call driver.get("/signup?authuser=0&__c=[AccountID]&u=[agentID]" ) 'アカウントIDと代理店IDは管理画面URL内Getパラメータより事前に取得

     driver.findElementById("Passwd").SendKeys (Sheets("sheet1").Range("B5").Value)　’再度パスワードを要求されるので対応
     driver.findElementById("gaia_loginform").submit
     
     Call driver.get("https://adwords.google.com/payments/u/0/adwords/signup?authuser=0&__c=[AccountID]&u=[agentID]#MANAGE_BUDGETS")

     Dim frameUrl
     frameUrl = driver.findElementsByTagName("iframe").Item(0).getAttribute("src")　’新しい予算オーダーはiframe内なのでiframe側に移動
     driver.get frameUrl
     driver.waitForVisible ("id=addBudget")　’AJAX処理を待つ
     
     driver.Click "id=addBudget"
  
     Dim collection2 As WebElementCollection
     Set collection2 = driver.findElementsByClassName("jfk-radiobutton-radio")
     
     driver.Click "id=fixedSpendingLimitAmount.amountInput"
     driver.Type "id=fixedSpendingLimitAmount.amountInput", [Budget]　’設定したい予算の入力
     driver.Type "id=startDateInput", "[startDate]"                   ’開始日の入力
     collection2.Item(3).Click
     driver.Type "id=endDateInput", "[endDate]"                　　　　’終了日の入力
     
     driver.Click "id=submitBudget"

     End Sub
Rubyでインスタンス変数に値をセットする

APIの戻り値などで取得したJSONの内容をモデルのインスタンス変数に保存したい場合、インスタンス変数ごとに代入文を書くのは面倒。
JSONのキーとインスタンス変数の名前が一致しているなら、繰り返し処理で書きたい。

```rb
class User
  attr_accessor :user_id
  attr_accessor :user_nm
  attr_accessor :mail

  def load
    # API実行の結果、こんな感じの戻り値を受け取ったとする
    api_result = '{"user_id":1,"user_nm":"user1","mail":"user1@example.com"}'

    # JSONを解析してハッシュに変換
    json = JSON.parse(api_result, symbolize_names: true)

    # インスタンス変数にセット
    json.each do |key, val|
      instance_variable_set("@#{key.to_s}", val)
    end
  end
end
```

Rubyリファレンス参照。
http://ref.xaio.jp/ruby/classes/object/instance_variable_set

JSONのキーに該当するインスタンス変数がない場合はNameErrorの例外になるのかな？戻り値の形が決まっていない場合はこれではだめそう。
javascriptでのカウントダウン表示

##カウントダウン実装

![Screenshot (1).png](https://qiita-image-store.s3.amazonaws.com/0/64377/68b34954-756b-675e-175b-489d593833e5.png)



セールまでのカウントダウンとセール終了までのそれの表示を実装しなくてはならなかったのでメモメモ


####仕様
 - 2015年5月23日10:00（セールまでのカウントダウン）設定
 - 2015年5月24日20:00 (セール終了までのカウントダウン)設定
 - 2つのカウントダウンを同時に表示させる
 - jQueryで走査
 - 15秒毎表示時間が更新される
 - 0はテキストも表示しない。（00時間04分→4分）
 - カウントダウンの時間は2つ（別の値を持つ）、共通の関数を利用する
 - 1回目の表示は使い捨て関数で呼び出し、その後15秒毎に呼び出し


###JQuery.ver
    <script src="../js/jquery1.11.1.js" type="text/javascript" charset="utf-8"></script>


###html
    <p class="js-saleStartView"><span>セール開始まで残り</span><span class="js-day">??</span><span class="js-day-txt">日</span><span class="js-hour">??</span><span class="js-hour-txt">時間</span><span class="js-mini">??</span><span class="js-mini-txt">分</span></p>
    <p class="js-saleExitView"><span>セール終了まで残り</span><span class="js-end-day">??</span><span class="js-end-day-txt">日</span><span class="js-end-hour">??</span><span class="js-end-hour-txt">時間</span><span class="js-end-mini">??</span><span class="js-end-mini-txt">分</span></p>



###JQuery,javascript

    $(function(){
        var settingCountDwon = function(setedTime){
            this.setFutureTime = new Date(setedTime);
        };
        var day = {sTime : 24 * 60 * 60 * 1000};

        var untileSaleStart = new settingCountDwon('May 23,2015 20:38:00');
        var untileSaleExit = new settingCountDwon('May 23,2015 20:30:00');

        settingCountDwon.prototype.viewLeftTime = function(whitch){
            var leftTime = this.setFutureTime - new Date();
            var leftDay = Math.floor(leftTime / day.sTime);
            var leftHour = Math.floor((leftTime % day.sTime) / (60 * 60 * 1000));
            var leftMinute = Math.floor((leftTime % day.sTime) / (60 * 1000)) % 60;
            if(whitch === 'start'){
                (leftDay > 0) ? $('.js-day').text(leftDay) : $('.js-day, .js-day-txt').css('display','none');
                (leftHour > 0) ? $('.js-hour').text(leftHour) : $('.hour, .hour-txt').css('display','none');
                (leftMinute > 0) ? $('.js-mini').text(leftMinute) : $('.mini, .mini-txt').css('display','none');
            }else{
                (leftDay > 0) ? $('.js-end-day').text(leftDay) : $('.js-end-day, .js-end-day-txt').css('display','none');
                (leftHour > 0) ? $('.js-end-hour').text(leftHour) : $('.js-end-hour, .js-end-hour-txt').css('display','none');
                (leftMinute > 0) ? $('.js-end-mini').text(leftMinute) : $('.js-end-mini, .js-end-mini-txt').css('display','none');
            }
        };
        untileSaleStart.viewLeftTime('start');
        untileSaleExit.viewLeftTime();
        setInterval(function(){
            untileSaleStart.viewLeftTime('start'),untileSaleExit.viewLeftTime()
        },15000);
    });



※もっとこうした方がパフォーマンスいいよ！っていうの教えてください。。別の方法なんかも
SSH秘密鍵 id_rsa -> putty形式&OpenSSH形式に変換

# SSH秘密鍵 id_rsa を putty形式 & OpenSSH形式に変換する手順

ネットにうじゃうじゃあるこの類の記事ですが、久しぶりにやったら忘れていたので自分用にメモします。
Windows環境での方法です。

## 使用するツール

* puttygen.exe  
[このページ](http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)とかかからダウンロードします。

## 手順

※id_rsa の読み込みには、鍵のパスフレーズが必要です。

### ppkファイル

1. `puttygen.exe`を起動
2. [Conversions]を押下
3. [Import key]を押下
4. id_rsaを選択
5. [Save private key]を押下
6. 適当な名前を付けて、`*.ppk` ファイルの出来上がり

### OpenSSHファイル

poderosa とかでも使っている鍵形式です。

1. `puttygen.exe`を起動
2. [Conversions]を押下
3. [Export OpenSSH key]を押下
4. 適当な名前と拡張子を付けて保存して完了
バックエンドアプリ用のgulp-skeletonをつくった

今時あんまやらないと思うけど、やんごとなき事情からローカルファイルをサーバに同期して開発したかったので、gulp-rsyncを使ったファイル同期用のgulpfileをつくった。

## 構成
src以下にアプリを突っ込んで同期する。

```
.
├── gulp_config.json
├── gulpfile.coffee
├── node_modules/
├── package.json
└── src/
```

### gulpfile.coffee

```coffee:
'use strict'

gulp    = require 'gulp'
rsync   = require 'gulp-rsync'
plumber = require 'gulp-plumber'

config = require './gulp_config.json'

gulp.task 'deploy', ->
  gulp
  .src 'src/**'
  .pipe plumber()
  .pipe rsync
    root: 'src' # コピー元ディレクトリ
    hostname: config.rsync.dst.host    # コピー先ホスト名
    destination: config.rsync.dst.path # コピー先ディレクトリ
    progress: true  # 転送情報を表示
    recursive: true # 再帰的にディレクトリを走査
    compress: true  # 圧縮する
    clean: true     # コピー先に存在しないファイルを削除
    exclude: [      # 除外ファイル
      '.git'
      '.gitignore'
      'node_modules'
    ]
  .on 'error', (message) ->
    console.log 'deploy Error', message

gulp.task 'watch', ->
  gulp.watch 'src/**', ['deploy']

gulp.task 'default', ['deploy']
```

gulp_config.jsonにサーバの設定書いておく感じ。.gitignoreでリポジトリから弾いてる。

```json:
{
  "rsync": {
    "dst": {
      "host": "{同期先サーバのホスト名}",
      "path": "{/path/to/directory/}"
    }
  }
}
```

## ｷﾞｯﾊﾌﾞ
[clngn/backend_gulp_skeleton](https://github.com/clngn/backend_gulp_skeleton)
【備忘録】char配列⇔string型の変換

# はじめに
この手の変換ってよく忘れちゃうので、明日の自分のためにメモっとく。

## 環境
* Windows7 Professional SP1
* Microsoft Visual Studio Version 12.0.31101.00 Update 4
* Microsoft .NET Framework Version 4.5.51209
* Microsoft Visual C# 2013

# Example
```csharp:
    /// <summary>
    /// 【備忘録】char配列⇔string型の変換
    /// </summary>
    class CharArray01
    {
        private static char[] c;
        private static string s;

        static void Main(string[] args)
        {
            // char配列をstring型へ変換
            c = new char[] { 'A', 'B', 'C' };
            // s = "ABC"
            s = new String(c);

            // string型をchar配列へ変換
            s = "ABC";
            // c[0]='A', c[1]='B', c[2]='C'
            c = s.ToCharArray();

            Console.ReadKey();
        }
    }
```
BEAR.Sunday メモ

BEAR.Sunday を使い始めたので、引っかかった点などをメモしていきます。

## コードを変更したのに！

コードを変更したのに変わらない、という場合は、APCのキャッシュが効いているせいかもしれません orz

## ブラウザで結果を見たい

ブラウザで結果を見るには、[マニュアルの "HTML"](http://bearsunday.github.io/manuals/1.0/ja/html.html)の通りに Twig の環境を整える必要がありますが、後もうひとつ、http の response header を application/json から text/html に変えてやる必要があります（マニュアルのように、CLI で確認する分には不要です）。変えない場合、HTMLと解釈されず、タグなどがそのままブラウザに表示されることになります。

標準では、 vendor/bear/sunday/src/Provide/Transfer/HttpResponderModule.php で JsonResponder が指定されていますので、上書きして HttpResponder を指定します。

```php:src/Module/HttpResponderModule.php
<?php

namespace CoBEAR\Core\Module;

use BEAR\Sunday\Provide\Transfer\HttpResponder;
use BEAR\Sunday\Extension\Transfer\TransferInterface;
use Ray\Di\AbstractModule;

class HttpResponderModule extends AbstractModule
{
    protected function configure()
    {
        $this->bind(TransferInterface::class)->to(HttpResponder::class);
    }
} 

```

```php:src/Module/AppModule.php
    protected function configure()
    {
        $this->install(new PackageModule(new AppMeta('MyVendor\MyPackage')));
        $this->override(new HttpResponderModule()); // この行を追加
    }
```
右クリックメニューにOpen Powershell Hereを追加

[エクスプローラの右クリックメニューをカスタマイズする](http://qiita.com/tueda/items/0036ee8e9280f70f04f0)を参考に、下記の内容で```.regファイル```を作成した。

- 任意のフォルダを右クリックした時のメニューを追加
- 何もないところを右クリックした時のメニューを追加

```powershell_here.reg
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\powershell_here]
@="Open PowerShell Here"

[HKEY_CLASSES_ROOT\Directory\shell\powershell_here\command]
@="C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe -NoExit -Command Set-Location -LiteralPath '%L'"

[HKEY_CLASSES_ROOT\Directory\Background\shell\powershell_here]
@="Open PowerShell Here"

[HKEY_CLASSES_ROOT\Directory\Background\shell\powershell_here\command]
@="C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe -NoExit -Command Set-Location -LiteralPath '%V'"
```
GCC ARM Toolchainでmbedをオフラインビルド


## Windowsでの環境構築
意図しない悪質なサイトになっているようなので、リンクを切りました（ご指摘ありがとうございます）
~~ほぼ、Part 1 – Setting up the GCC ARM Toolchain のとおり。~~


### GCC ARM Toolchainのインストール
[gcc-arm-none-eabi-4_8-2013q4-20131204-win32.exe](https://launchpad.net/gcc-arm-embedded/4.8/4.8-2013-q4-major)をダウンロードして、実行する。

忘れずに、最後は```Add path to environment variable```にチェックを入れる。（環境変数を追加してくれる）

### Gnu Makeの追加
```C:\Program Files (x86)\GNU Tools ARM Embedded\4.8 2013q4\bin```に下記のファイルを追加する。

- make.exe
- libiconv2.dll
- libintl3.dll

上記ファイルは、[sorceforge.net](http://sourceforge.net/projects/gnuwin32/files/make/3.81/)の```make-3.81-bin.zip```と```make-3.81-dep.zip```の中にある。

## Macでの環境構築
[gcc-arm-none-eabi-4_8-2013q4-20131218-mac.tar.bz2 ](https://launchpad.net/gcc-arm-embedded/4.8/4.8-2013-q4-major)をダウンロードしてきて、任意の場所に展開する

### Pathを通す
例えば、~/arm-cs-tools直下に展開したとすると、
.bash_profileには下記のようにPathを追加する。

```.bash_profile
export PATH=/Users/****/arm-cs-tools/bin:$PATH
```

上記編集後は、```source .bash_profile```で適用しておく。

## 動作確認
コンソールで下記のコマンドが反応すればOK。

- ```arm-none-eabi-gcc -v```
- ```make -v```

## Mbedプロジェクトのコンパイル

1. mbed Compilerより、Export Program(Toolchain:ARM Embedded)したプログラムをダウンロードし、展開する。

2. コンソールより対象フォルダ内へ移動し、```make```コマンド叩けば、hexファイルが生成される。
使わない方がいいwithの使用方法

##withの使用方法

なんか嫌われているwithみたいだけど、どうやって使うんだと思ったのでメモメモ


###オブジェクトの指定を省略
    var obj = {
        man : '30',
        woman: '29'
     };
     with(obj){
        console.log(man); //30
        console.log(woman); //29
     };




###変数優先順位を変更
     var ojs = 'global';
     function fn(){
        var ojs = 'local';
        alert(ojs);//local
        with(window){
          alert('withあり' + ojs );//global
        };
     };
     fn();



使うことあるのかな。。


![image.jpg](https://qiita-image-store.s3.amazonaws.com/0/64377/bfa7ac12-37ef-c47f-3144-2b662e784b53.jpeg)


>参照　独習javascript第2版　翔泳社
他言語経験者による初めてのrails（環境構築編）

Macにrails開発環境を揃えるまでの手順

## 手順
* rubyをインストール
    * [rbenv](https://github.com/sstephenson/rbenv) という、ローカルに複数バージョンのrubyを良しなに共存させてくれるヤツ を使って↓このバージョンを入れた。（rbenvの導入手順はググればいくらでも出てくるので省く）
    
    ```
    $ ruby -v
    ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin13]
    ```
    
    * [gem(Ruby言語用のパッケージ管理システム)](http://ja.wikipedia.org/wiki/RubyGems) は↓このバージョンが入ってた
    
    ```
    $ gem -v
    2.4.5
    ```

* `~/.gemrc`というファイルを作って、`gem install`の際にドキュメントが同時インストールされないようにした
    * [Ruby - gemrcの--no-riと--no-rdoc、deprecatedなoptionなのでみなおしたほうがいいかもですよ - Qiita](http://qiita.com/kei_q/items/d13235157fcfc435489d)

```
$ cat ~/.gemrc
install: --no-document
update: --no-document
```

* railsをインストール
    * openssl とか sqlite 絡みでインストールがコケるかも知れない。その時はググれ
    * rbenv でrubyのバージョンを管理している場合、新しいgemをインストールした後に`rbenv rehash`する
        * "~/.rbenv/versions/2.2.0/bin/ 以下に置いてあるコマンド群を ~/.rbenv/shims/以下に置いて使える(PATHが通った状態にする)ようにする" 
        * [rbenv rehashは何をやっているのか？ - DQNEO起業日記](http://dqn.sakusakutto.jp/2014/02/rbenv_rehash_what_it_does.html) 
        * `rbenv rehash` をgem install時に自動でやってくれるプラグイン？があるらしい（試してない）
        * [Ruby - rbenv を使っているなら rbenv-gem-rehash を使おう - Qiita](http://qiita.com/riocampos/items/f0fe7217972b312c4f3a)

```
$ gem install rails
$ rbenv rehash

$ rails -v
Rails 4.2.0
```

* [Bundler(App単位で依存パッケージを管理してくれるツール)](http://bundler.io/) をインストール

```
$ gem install bundler
$ rbenv rehash

$ bundle -v
Bundler version 1.7.12
```
simplexmlはstringにキャストした方が使いやすい

昔ブログに書いたtipsを移項
例えばあるxmlをパースすることを考える

```PHP
<?php
$xml=simplexml_load_string($result);
$name=array();
foreach($xml as $item){
    $name[$i]=$item->name;//ここの文
    $i++;
}
var_dump($name);
```

ここでダンプしたデータは

```PHP
array
  0 => 
    object(SimpleXMLElement)[5]
      string '金剛' (length=4)
  1 => 
    object(SimpleXMLElement)[4]
      string '那珂' (length=4)
  2 => 
    object(SimpleXMLElement)[6]
      string '島風' (length=4)
```

のようにオブジェクトの中にstringが入っている形になっている。基本的にはそのままでもいいけど、
何かのAPIに文字列を投げる必要があるときに、キャストしないとエラーを吐いてしまう。
ここではまって解決まで時間かかった。

```
<?php
$xml=simplexml_load_string($result);
$name=array();
foreach($xml as $item){
    $name[$i]=(string)$item->name;//ここの文
    $i++;
}
var_dump($name);
```

オブジェクトとして持っておく必要がなければ配列に突っ込むときにstringにキャストしておくべき。
特に関数として、呼び出して、文字列を返すって設計ならば。

逆にオブジェクトとして持っておきたいならキャストしないで、投げる時にキャストをすればよいと思う。
pepperめも_08:バーチャルロボット利用時にpythonから作成したファイルを確認する方法

#バーチャルロボット利用時にpythonから作成したファイルを確認する方法
Choregrapheからバーチャルロボットにつないで開発をしている時に、pythonから作成したファイルを確認したい時の方法です！macのみ！

#Finderの設定を変更
![スクリーンショット 2015-02-28 12.58.57.png](https://qiita-image-store.s3.amazonaws.com/0/40994/25f6f8c6-aa64-50ee-c1f5-2279973d692d.png)

バーチャルロボットのフォルダは隠しフォルダになってるので、不可視項目を表示にチェックをいれます。

#フォルダをみつける
場所はココです！（macで確認しました！）
.lastUploadedChoregrapheBehavior というフォルダが、Choregrapheから実行したアプリのフォルダです！

![スクリーンショット 2015-02-28 13.03.59.png](https://qiita-image-store.s3.amazonaws.com/0/40994/fa6a75ec-2b91-60fa-5d7f-7c8a14b90603.png)

![スクリーンショット 2015-02-27 18.23.03.png](https://qiita-image-store.s3.amazonaws.com/0/40994/6ce678f1-095d-ef1b-187c-d2726c3e31e5.png)

#まめちしき
### .lastUploadedChoregrapheBehaviorに、Choregrapheから実行したアプリがはいる
違うプロジェクトでも上書きされるので注意しましょう

### Choregrapheから実行するたびに、フォルダごと削除→全コピーされる
実機でSSH接続してる時とかは、lsしても一覧が出なくなったりするので注意しましょう
実機でのデバッグに時間かかってめんどくさい人は、画像ファイルとかを別フォルダにいれておくと効率よく開発できるかも！

### 実機とバーチャルロボットで、フォルダのパーミッションが違うっぽい
最終的には実機で試しましょう。chmod必要だったりするかも。

#おしまい
以上、バーチャルロボットのファイル確認方法でした！

わいわい！
xmgrace > ヒストグラムを作成する

ヒストグラムを作成したい。

Graceというグラフソフトを用いる。Grace-5.1.22で動作確認

データを用意する。例では1列の乱数が1000行入ったファイルを作った。 

```dat.real
161.02
174.25
100.03
...
```

2. graceを起動する

    $xmgrace dat.real

3. [Data]-[Transformations]-[Histograms]を選択する
4. Sourceの「Set:」において、[G0,S0[2][1000]]上で右クリックし、Duplicateを選択する。[G0.S1]が生成される。
5. Sourceの「Set:」にて[G0,S0]を選択し、Destinationの「Set:」にて[G0.S1]を選択する。
6. Start at:に0を、Stop at:に500、# of binsに10を入れる。こうすると、0から500の値域を10個に分けたヒストグラムになる。
7. Applyを押す。G0.S1[2][1000]がG0.S1[2][11]となる。G0.S1にはヒストグラムの値が入っている。
8. G0.S0(元のデータ)をHideにして、G0.S1の表示を調整することで、ヒストグラムが出来上がる。

![Transformation.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/6f658da5-56de-3ec4-3378-3f3e5627816f.jpeg)

![data_org.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/f6a0e0f2-c6b1-3516-8778-dbc148d0266e.jpeg)

![histogram.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/364cd814-7570-c836-3cc6-dd4e05061cc5.jpeg)

Link: [こちら](http://stackoverflow.com/questions/23205999/how-to-use-xmgrace-to-plot-histogram-from-a-plot)が参考になった。

<hr>
データファイルについては以下のようにインデックスが１列目にあってもよいようだ。

```dat.real
1 161.02
2 174.25
3 100.03
...
```