OmniAICreator/Qiita-1.07M huggingface dataset:
【AWS】Billingファイルから、料金データを取り出してみた

１アカウントに紐付くアカウントの金額を、見やすい形で出力する必要があったので、Rubyスクリプト作ってみました。

まずは、アカウント毎の料金と、それの合計金額のみ出力プログラムです。

各アカウント毎の詳細も出せるように、機能増強していこうと思います。

```ruby:billing_data_calc.rb
# coding: utf-8
require "csv"
require 'bigdecimal'

# hashの初期化
hash = Hash.new
acounts_list = []

# billing.csvをtableデータとして格納
data = CSV.table('../XXXXXXXXXXXX-aws-cost-allocation-2015-10.csv')

# Totalコストで、各社毎のデータを整理
hash["cost"] = {}
data.each do |list|
  if list[:recordtype] == "AccountTotal"
    linkedAccountName = list[9]
    currencyCode = list[24]
    costBeforeTax = list[25]
    taxAmount = list[27]
    totalCost = list[29]

    # アカウント毎のhashデータを作成する
    hash["cost"]["#{linkedAccountName}"] = {}
    hash["cost"]["#{linkedAccountName}"]["currencyCode"] = "#{currencyCode}"
    hash["cost"]["#{linkedAccountName}"]["costBeforeTax"] = "#{costBeforeTax}"
    hash["cost"]["#{linkedAccountName}"]["taxAmount"] = "#{taxAmount}"
    hash["cost"]["#{linkedAccountName}"]["totalCost"] = "#{totalCost}"

    acounts_list.push("#{linkedAccountName}")
  end
end

cost_data = []
# 一括請求金額のTotalコスト算出
sum = 0
acounts_list.each do |aclist|
  account_cost = "#{hash["cost"]["#{aclist}"]["totalCost"]}"
  account_cost = account_cost.to_f
  sum = sum + account_cost
  cost_data.push(account_cost)
end

puts cost_data
puts BigDecimal("#{sum}").round(2,BigDecimal::ROUND_UP).to_f
シェルを書くときによく使うものメモ

## date コマンド

今の日付を `yyyy/MM/dd HH:mm:ss` 形式で出力する

```
date "+%Y/%m/%d %H:%M:%S" 
```

## echoコマンド

### \nを改行として扱う

-e オプションを付ける（文字列はダブルクォーテーションで囲む）

```
➜  echo -e "aaaa\nbbbb" 
aaaa
bbbb
```

## if

### ifでファイルの存在チェック

```
# ファイルある
if [ -e ファイルのパス ]; then
  echo "ファイルあるよ"
else
  echo "ファイルないよ"
fi

# ない
if [ ! -e ファイルのパス ]; then
  echo "ファイルない"
fi
```

## while

### whileで無限ループ

```
# とにかく無限にHey!って出力し続ける
while true ; do
  echo "Hey!"
done

# 30秒毎に無限にHey!って出力し続ける
while true ; do
  echo "Hey!"
  sleep 30
done

```

## sed, awk

- [sedチートシート](http://qiita.com/yujiroarai/items/a8ee951d1f0e70abaefc)
- [awkチートシート](http://qiita.com/yujiroarai/items/e7c362f70f2eed7d2bcd)
マイナンバーのチェックデジットを計算する（Java編）

マイナンバーのチェックデジットを計算する(http://qiita.com/qube81/items/fa6ef94d3c8615b0ce64) を読んでJavaで実装してみました。
SIer脳で書いたJavaコードなので、もっときれいな書き方が絶対あるはず。

```java
import org.apache.commons.lang3.math.NumberUtils;

/**
 * マイナンバーのチェックディジットを求める。
 */
public class CheckDigit {

    public static int calcCheckDigit(String mynumber) {

        // オードソックスな引数チェック
        if (mynumber == null) {
            throw new IllegalArgumentException("引数にnullは指定不可");
        }

        if (mynumber.length() != 11) {
            throw new IllegalArgumentException("引数は11桁必須");
        }

        if (!NumberUtils.isNumber(mynumber)) {
            throw new IllegalArgumentException("引数は数値必須");
        }

        char[] mynumberArgs = mynumber.toCharArray();
        int[] calcResultArgs = new int[11];
        for (int i = 0; i < mynumberArgs.length; i++) {
            calcResultArgs[i] = calc(mynumberArgs[(11 - 1) - i], (i + 1));
        }

        // n=1からn=11までのPn，Qn，Pn×Qnを計算
        int calcTotal = 0;
        for (int val : calcResultArgs) {
            calcTotal += val;
        }

        // 求めた和を11で割ったあまりを求める。
        int amari = calcTotal % 11;

        // 11-(11で割ったあまり)がチェックディジット
        int digit = 11 - amari;

        return digit;

    }

    private static int calc(char c, int n) {

        int i = Character.getNumericValue(c);

        if (n >= 1 && n < 7) {
            return i * (n + 1);
        } else {
            return i * (n - 5);
        }

    }

}
```

```java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author deaf.tadashi
 */
public class Main {

    private static final Logger log = LoggerFactory.getLogger(Main.class);
    
    public static void main(String[] args) {

        int digit = CheckDigit.calcCheckDigit("12345678901");
        log.info("{}のチェックディジットは{}です。", "12345678901", digit);

    }

}
```
Gulp.jsをMacのFinderからダブルクリック起動

Gulpを実行するのにいちいちターミナルを起動してはいませんか？
ごくごく簡単な方法でGulp.jsをダブルクリック起動できます。

# やり方

## 1.テキストエディタで実行するコマンドを書く

```
cd /Users/hoge/www/myweb/ ← gulpfile.jsのある場所
/usr/local/bin/gulp ← gulpの実体。ほとんどの人はここだと思います
```

## 2.保存する
【1】で作ったテキストファイルを保存します。
ファイル名は `glup_プロジェクト名.command` とかだとわかりやすいです。
保存場所はどこでもいいでしが、gulpfile.jsと同じ場所だと管理しやすいかもしれません。

## 3.ターミナルで実行権限を設定
ターミナルを起動し、作成したファイルの場所に移動します。

```
# cd /Users/hoge/www/myweb/
```

`chmod` で実行権限を与えます。

```
# chmod +x glup_プロジェクト名.command
```

## 4.実行

あとはFinderからダブルクリックすれば起動します。
[python]カリー化

#カリー化
wikipedia: [カリー化]()
>カリー化 (currying, カリー化された=curried) とは、複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること（あるいはその関数のこと）である

つまり、カリー化は一つ一つ引数を渡していくものを作ります。
下記のようにすると、一行目は、二つの引数を渡さなければならないが、２行目では、まず初めにx値(ここでは5)だけをわたして、`curried_5y = lambda y: 5*y`という関数ができるわけです。

#sample
```curry.py
xy = lambda x, y: x*y
curried_xy = lambda x: lambda y: x*y
c++ builder | git > .localファイルはgitignoreしてよさそう | .resはgitignoreしてはダメ

```txt:動作確認
C++ Builder XE4
```

https://github.com/github/gitignore/blob/master/Delphi.gitignore
を見ると

>\# Delphi local files (user-specific info)
*.local

とあるので .localはgitignoreしてもよさそう。

<hr>

一方で、.resファイルは

>\# Resource files are binaries containing manifest, project icon and version info.
\# They can not be viewed as text or compared by diff-tools. Consider replacing them with .rc files.
\#*.res

とあり、`# It can make harm to an existing project source. Read explanations below.`
とあるので、gitignoreしてはダメそう。
utf8mb4環境のMySQLを利用するFuelPHPでSimpleauthドライバのAuthパッケージを使う


タイトルのような環境においてSimpleauthドライバのマイグレーションを行うと例外を吐いて失敗します。

```shell-session
$ oil refine migrate --packages=auth
Uncaught exception Fuel\Core\Database_Exception: SQLSTATE[HY000]: General error: 1709 Index column size too large. The maximum column size is 767 bytes. with query: "CREATE UNIQUE INDEX username ON authusers (username, email)"
```

対応方法として、Simpleauthドライバのテーブルを作成するデータベースをutf8で作成するなど方法はあるかと思いますが、へたれな自分は`001_auth_create_usertables.php`で作成するテーブルをAuthパッケージのマイグレーションではなく、作成しているWebアプリのマイグレーションとして実行させる方法を取りました。
つまり、`fuel/app/migrations/`ディレクトリに`XXX_auth_create_usertables.php`というファイルを作成して(`XXX`の部分は適当な数値)、内容を以下のようにします。

```php:XXX_auth_create_usertables.php
<?php

namespace Fuel\Migrations;

class Auth_Create_Usertables
{
	function up()
	{
		// get the driver used
		\Config::load('auth', true);

		// get the tablename
		\Config::load('simpleauth', true);
		$table = \Config::get('simpleauth.table_name', 'users');

		// make sure the configured DB is used
		$connection = \Config::get('simpleauth.db_connection', null);
		\DBUtil::set_connection($connection);

		// table users
		\DBUtil::create_table($table, array(
			'id' => array('type' => 'int', 'constraint' => 11, 'auto_increment' => true),
			'username' => array('type' => 'varchar', 'constraint' => 50),
			'password' => array('type' => 'varchar', 'constraint' => 255),
			'`group`' => array('type' => 'int', 'constraint' => 11, 'default' => 1),
			'email' => array('type' => 'varchar', 'constraint' => 255),
			'last_login' => array('type' => 'varchar', 'constraint' => 25),
			'login_hash' => array('type' => 'varchar', 'constraint' => 255),
			'profile_fields' => array('type' => 'text'),
			'created_at' => array('type' => 'int', 'constraint' => 11, 'default' => 0),
			'updated_at' => array('type' => 'int', 'constraint' => 11, 'default' => 0),
		), array('id'), true, 'InnoDB row_format=DYNAMIC', 'utf8mb4', [], $connection);

		// add a unique index on username and email
		\DBUtil::create_index($table, array('username', 'email'), 'username', 'UNIQUE');

		// reset any DBUtil connection set
		\DBUtil::set_connection(null);
	}

	function down()
	{
		// get the driver used
		\Config::load('auth', true);

		// get the tablename
		\Config::load('simpleauth', true);

		// make sure the configured DB is used
		\DBUtil::set_connection(\Config::get('simpleauth.db_connection', null));

		// drop the admin_users table
		\DBUtil::drop_table(\Config::get('simpleauth.table_name', 'users'));

		// reset any DBUtil connection set
		\DBUtil::set_connection(null);
	}
}
```
Webアプリのマイグレーションを行ったあとにSimpleauthドライバのマイグレーションを行うと無事成功します。

```shell-session
$ oil refine migrate --packages=auth
Performed migrations for package:auth:
001_auth_create_usertables
002_auth_create_grouptables
003_auth_create_roletables
004_auth_create_permissiontables
005_auth_create_authdefaults
006_auth_add_authactions
007_auth_add_permissionsfilter
008_auth_create_providers
009_auth_create_oauth2tables
010_auth_fix_jointables
```
良かった良かった。
`001_auth_create_usertables`が重複するのですが、ファイルを見れば分かる通り、テーブルの存在確認を行っているので問題無いです。というかココで存在確認を行っているのを利用してWebアプリのマイグレーションで先にテーブルを作ってしまおうという企みです。
gitレポジトリとhttpで通信する場合にユーザ情報の入力を省略する

# はじめに
gitでhttpを使ってリモートレポジトリとやり取りする場合、 
毎回ユーザ名とパスワードを入力する必要があるので、その手続きを省略できるようにする。

# 環境

| 環境要素 | バージョンなど |
| :-------: | ----------- |
| ディストリビューション | CentOS Linux release 7.1 |
| Git バージョン | 1.8.3.1 |
| Gitレポジトリサービス | [gitlab.com](https://gitlab.com/) |


# 作業内容
## .netrcを利用する
ホームディレクトリに`.netrc`を以下の内容で作成する。
ただし、このままでは平文のままパスワードを保存することになるので暗号化を行う。

machineはgitレポジトリのドメイン名,login,passwordの部分は自分のユーザ情報とする。

``` :.netrc
machine gitlab.com
login username
password secret
```
2018/08/24修正 protocolプロパティは必要ない

この状態で`git push`,`git pull`を行うとユーザ情報の入力が省かれる。


## GPGでパスワードを暗号化する

### GPGとは
GPG (GNU Privacy Guard)はOpenPGPの規格に沿って作られた暗号化ソフトで、GNU GPLのもとで公開されているオープンソースソフトウェア。

### .netrcの暗号化
 - GPGで作った鍵を持っていない場合は以下のコマンドで鍵を生成する

```
$ gpg --gen-key
```
鍵生成には時間がかかる場合がある。今回行った環境では30分ほどかかった。
参考 : [ssh 越しに「gpg --gen-key」を実行したときに乱数生成の段階までくるとハングしてしまったかのようになるのは，「単に時間がかかっているから」らしい．約20分もかかった．](http://knoike.seesaa.net/article/413626383.html)


 - .netrcを暗号化する

暗号化を行うとホームディレクトリに`.netrc.gpg`ファイルが生成される。次に元の.netrcファイルを削除

```
$ gpg -e -r <email> ~/.netrc
$ ls .netrc*
.netrc  .netrc.gpg
$ rm .netrc

```

 - git credential helper用のスクリプトに実行権を与え、gitの設定にcredential helperとして追加する

gitで用意されているgpgを使ったnetrc利用のスクリプトがあるので、それに対して実行権を与えることで使えるようになる。

```
$ sudo chmod +x /usr/share/doc/git-1.8.3.1/contrib/credential/netrc/git-credential-netrc
$ git config --global credential.helper /usr/share/doc/git-1.8.3.1/contrib/credential/netrc/git-credential-netrc
```

これで、`git push`,`git pull`するときに自動的に復号されるので、ユーザ情報の入力なしでpush,pullができるようになる。

# 参考
 - [Secure storage for http basic auth credentials with Git](http://byteplumbing.net/2014/12/secure-storage-for-http-basic-auth-credentials-with-git/)
 - [.netrc · Everything curl](https://ec.haxx.se/usingcurl-netrc.html)
DataTable To Dictionary

# DataTable の 内容をDictionary に変換

DataTableの内容をDictionary に変換します。
For Each でもできるのですが、1行でできないかと思いできたのでメモ
Key に重複があった場合、どうなるかはテストしてません。


```lang:VB
Dim dic As Dictionary(Of String, String) = 
           dt.Rows.OfType(Of DataRow)().ToDictionary
           (Function(dr) dr.Field(Of String)(0), Function(dr) dr.Field(Of String)(1))
```
AngularJS勉強メモ その2(HelloWorldをMVCにわける)

これはAngularJSを勉強した内容をまとめたものです。

# 今回したこと
* MVCな構造を作ってみる
* 処理内容を確認

# 環境
* Ubuntu 14.04 (VirtualBox)
* AngularJS 1.4.7

# MVCな構造を作ってみる
１. 以下のようなhtmlを用意

```html
<!DOCTYPE html>
<html ng-app="testMod">
  <head>
    <title>MVC</title>
    <script src="angular.min.js"></script>
    <script src="mvc.js"></script>
  </head>
  <body ng-controller="testController">
    {{str}}
  </body>
</html>
```

２. 以下のようなjsを用意

```js
angular.module('testMod', [])
  .controller('testController', function($scope, HelloWorld){
    $scope.str = HelloWorld();
  })
  
  .value('HelloWorld', function(){
    return "HelloWorld"
  });
```

３. ブラウザでhtmlをみてみる
![mvc.png](https://qiita-image-store.s3.amazonaws.com/0/97052/95dc6c5c-311a-9aff-f6e1-951925d65da7.png)

HelloWorldが出せた！！

# 処理内容を確認
## View
Viewはhtmlの{{str}}の部分。
Viewの式は{{}}で囲む
式の結果が出力される

## Model
Modelはjsの以下の部分

```js
  .value('HelloWorld', function(){
    return "HelloWorld"
  });
```
valueメソッドでHelloWorldという名前のサービスを作成している。
HelloWorldサービスは"HelloWorld"というデータを返す。
(今はあまりに味気ないけど、本来はサーバー側からデータを取得したり、更新するデータを渡したりするらしい。。)

## Controller
Controllerはjsの以下の部分

```js
  .controller('testController', function($scope, HelloWorld){
    $scope.str = HelloWorld();
```
contorllerメソッドでtestControllerという名前のコントローラーを作成している。
contorllerメソッドは第一引数にコントローラー名、第二引数にコンストラクタを渡すみたい。
コンストラクタに渡している$scopeはView側に値を渡すのに使う。HelloWorldはvalueメソッドで作ったサービス。
Viewで参照している"str"にモデルから渡された"HelloWorld"を入れている。

## そのほかポイント
jsファイルの以下の部分はモジュールを定義している

```js
angular.module('testMod', [])
```
moduleメソッドで'testMod'という名前のモジュールを作成。
モジュールでコントローラーやモデル定義する。

そしてhtml側でどのモジュール、コントローラーを使うか指定する

```html
<!DOCTYPE html>
<html ng-app="testMod">　<!-- ここで利用するモジュールを指定 -->
  <head>
    <title>MVC</title>
    <script src="angular.min.js"></script>
    <script src="mvc.js"></script>
  </head>
  <body ng-controller="testController"> <!-- ここで利用するコントローラを指定 -->
    {{str}}
  </body>
</html>
```
指定したコントローラーのコンストラクタで`$scope.str`にモデルからもらった"HelloWorld"をいれて、Viewで($scopeの)strを表示している。
[CSS][マークアップ] bourbon x neatを使わないでグリッド間のmarginをきちんと固定する。


# neatをつかわないで、マージンを固定したグリッドデザインクラスを手早く用意する。

neatはグリッドごとのマージンを宜しく計算してくれて便利だが、
マージンを任意のpxなどで固定させようとすると結構苦心する。

そのためneatを使わないで、下記のような自作のgridクラスを使用している。

```sass:layout/grid.sass
@import bourbon

=grid-base-designated-margin($column-num, $margin)
  margin-left: -($margin/2)
  margin-right: -($margin/2)
  &>*
    +clearfix //bourbonのmixin
    &>*
      float: left
      display: block
      width: percentage(1/$column-num)
      margin-bottom: 10px
      &>*
        padding: 0 $margin/2

// preset grids no-margin-type
.grid-auto-m10--10column
  +grid-base-designated-margin(10, 10px)

.grid-auto-m10--7column
  +grid-base-designated-margin(7, 10px)

.grid-auto-m10--5column
  +grid-base-designated-margin(5, 10px)

.grid-auto-m10--4column
  +grid-base-designated-margin(4, 10px)

.grid-auto-m10--3column
  +grid-base-designated-margin(3, 10px)

.grid-auto-m10--2column
  +grid-base-designated-margin(2, 10px)

```

htmlの使用例は以下。

```
.grid-auto-m10--3column
  %ul
    %li
      .inner
        うんこ
    %li
      .inner
        うんこ
    %li
      .inner
        うんこ

```

若干、ネストが深いのだが。
マージンが10pxを保ったまま、整頓される。

ちなみにneatを使って超手早くやりたい場合はこっち。
http://qiita.com/hanzochang/items/1687dd08407b85582885
[CSS][マークアップ] bourbon x neatのグリッドクラスの利用例(テンプレート)


# この記事の対象

- 部分的にグリッドシステムを使用して、プロトタイピングのスピードを上げたい
- デバイスサイズが確定しないモバイルなど、ピクセル単位の調整が不必要である条件にて、アイテムを並べたい。


# 前提

下記CSSフレームワークを利用する

### bourbon (sass framework)

http://bourbon.io/
同じレイヤーにあるのはcompass。
下記の２つのCSSフレームワークの依存関係があるため使用。
若干使い勝手が違う程度で基本はcompassと同じ。
(compassとbourbonを同時に入れると幾つかのmixinが確かコンフリクトする 記憶曖昧)

### neat (grid framework)

http://neat.bourbon.io/

グリッドフレームワーク。mixinをincludeして使用する。
includeして使用するため、自分の命名規則／CSS設計に則った使い方が可能。
twitter bootstrapを導入したりすると、フレームワークの命名規則に縛られるので
例外のマークアップが発生してしまい非常にストレスフル。
その点、neatは命名規則を汚さない点が非常に優秀



# 本題：neatのテンプレート

前述のようにneatはインクルードして使用するので、
自分の付けたい名前で設定することが可能。
イニシャルやプロトタイプでWEBサイトを作る場合、
下記のような設定ファイルをテンプレとしてグリッドシステムを取り入れている。


```sass:layout/grid.sass

// 開発環境に応じてインストール後、
// import。インストール方法は割愛。
@import bourbon                                                                                                                                                                                                                               
@import neat                                                                                                                                                                                                                                  

// neatに用意されたmixinを利用し、mixinセットを作成
=grid-base($column-num)
  +outer-container
  &>*
    +span-columns(12/$column-num) //母数は「12」
    +omega($column-num+n)

// 上記mixinを利用して、gridのオートメーション化を実現。
.grid-auto--10column
  +grid-base(10)

.grid-auto--7column
  +grid-base(7)

.grid-auto--5column
  +grid-base(5)

.grid-auto--4column
  +grid-base(4)

.grid-auto--3column
  +grid-base(3)

.grid-auto--2column
  +grid-base(2)

```

htmlでの使用例

下記のようにつかうと

```haml:sample.haml
%ul.grid-auto--3column
  %li
    うんこ
  %li
    うんこ
  %li
    うんこ
```

うんこが３つ綺麗にならぶ。便利です。

### partialも便利。

railsでpartialで使う場合、使用箇所でgrid数を変えたい場合こうするとまた便利。

```haml
= render 'shared/grid_partial', col: 4
```

```haml:shared/grid_partial.haml
:ruby
  col = 3 unless defined?(col) #colが空の時のデフォ値を設定しておく。

%ul{ class: "grid-auto--#{col}column" }
  %li
    うんこ
  #(以下略)

```

任意のうんこを一つのpartialで並べることができる。


なお、この場合、neatの仕様で
grid-auto--#{x}columnのmax-widthが68emとなっている場合があるので、
外したい場合は、max-widthを上書いてやればいい。



# 追記

なお、neatはグリッドごとのマージンを宜しく計算してくれて便利だが、
マージンを任意のpxなどで固定させようとすると苦心するので、
グリッドのマージンを固定させた厳密なデザインを施す場合の設定は下記参照

neatを使わないマージン固定のグリッドデザイン
http://qiita.com/hanzochang/items/82a2b944c2a6ee6e0d11
LDAPがなんだかよくわからない

###LDAPがなんだかよくわからない自分のために

####【LDAPとは】
Light weight(軽量)な Directory Access Protocolのこと

LDAPは、ユーザからの検索クエリに対して結果を返したり、システム管理者が内容を自由に追加、変更できるデータベースとして機能する、らしい

####【RDB(リレーショナルデータベース）と何が違うのか？】

それだったらRDBでもいいと思う。RDBと何が違うのか？
→ RDBと違って、LDAPは「ディレクトリ」と呼ばれる階層構造(木構造)により構成されている

＜データベースが木構造であるメリット＞

 - ディレクトリ(階層)によるグルーピングにより、管理がしやすい（木構造だから、枝ごとに管理を委任できる）
 - 目的のユーザ情報がグルーピングされたディレクトリだけ検索すればよいので、検索のパフォーマンスがよい（木構造だから、全検索しなくても、その枝だけ検索すればよい）
 - 主にテキストベースの情報を扱うので処理の負荷が小さい
 - 検索のためのプロトコルとして属性が定義されている。LDAPスキーマとして自分で属性を加えることもできる
 

####【LDAP管理上の単位】

LDAPは管理上の単位として、**オブジェクト**と、**エントリ**を持つ

オブジェクト→管理者が実際に操作する対象（木構造の葉のこと）

|LDAP項目|RDBで言うと|
|:--|:--:|
|entry|レコード|
|attribute|カラム|

 オブジェクトが要素で、エントリが要素の集まった塊のこと。

データベースと同じように、エントリ（レコード）の追加、削除、編集などができるが、それらを行うまえに、バインドを行わなければならない。
バインドとは認証のこと（ログインみたいなもの）

####【LDAPの木構造】

DIT（Directory Information Tree）というらしい。
TOPから順に、

DC（Domain Component）= ドメイン名
OU（Organizational Unit）= 組織単位
CN（Common Name）= 一般名

これらを下位からカンマでつなげると、
DN（Distinguished Name、識別名）になる。当たり前だけど、DNはそのドメインで一意でないといけない。

ちょっと例を見てみよう。
LDAPはデータベースなので、とりあえず登録するものは人でもモノでもなんでもいい。

例えば、日本の、hogehoge社にある、営業課のプリンタを登録してみる。

DC=hogehoge,DC=com ★
OU=Sales
CN=Canon01

★DCはドメインの構成要素のことなので、例えばgoogleだったら、www.google.comは
DC=www,DC=google,DC=comと、3つのDCを持つことになる。

DN:CN=Canon01,OU=Sales,DC=hogehoge,DC=com

こんな感じ。

#### 【LDAP searchの意味がわからない】

```
ldapsearch -x -h localhost -p 9999 cn=hoge1 -b ds=aaaa, o=bbb, dc=ccc -s sub -a always
```

`-x` InfoDirectoryサーバ上で検索する
`-h (ldap host)` LDAPサーバが稼働しているホスト名またはIPアドレス
`-p (ldap port)` LDAPサーバに接続するためのポート名
`-b (search base)` 検索開始位置をデフォルトではなくsearch baseにする
`-s (base|one|sub)` 検索スコープ。base→ベースオブジェクト、one→1レベル検索、sub→サブツリー検索
`-a (never|always|search|find)` never→エイリアスを実名参照しない always→常に実名参照 search→検索で実名参照 find→ベースオブジェクトを探すときのみ実名参照
Qiita > 検索 > C#での検索時 > tag:C#での検索 / 関連タグが表示されない

Qiitaの「キーワードを入力」で検索した時に動作が"C#"では他のキーワードと少し違う。

## tag:C#で検索

「C#」で検索しても関係ない記事(C++やCの記事）まで検索されてしまう。

対策としては「tag:C#」でC#タグがついたものだけ検索する。

## 関連タグが表示されない

通常キーワードで検索した時、「関連タグ」というのが表示される。
その関連タグをクリックすることで、さらなる絞り込みができる。
最近はこの機能を使うことが多い。

例として「cppBuilder」での検索。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/9c7ab43b-6b98-66d0-5da5-02ee7bceb8c0.png)

ところが「C#」では関連タグが出てこない。

対策としては、最初から「tag:C#」で検索する。
RubyMineで環境変数を設定する

RubyMineで実行した時は.bashrcや.bash_profileなどで設定した環境変数を読み込んでくれない。どうしても環境変数を設定したくなった場合、下記手順で設定できる

- ツールバーの[Run]から
- [Edit Configurations]を選択
- [Environment Variables]のモーダルを開きそこでNameとValueを入力する

![スクリーンショット 2015-11-03 12.43.38.png](https://qiita-image-store.s3.amazonaws.com/0/16400/7e3c5be3-8ce9-3705-cfd5-3cd87b728045.png)
Infrastructure as Codeのあるべきかたち？

# Infrastructure as Code
簡単にいうと、サーバインフラのコード化です。

# Infrastructure as Codeの微妙なところ
Puppet、Chef、Ansibleとかでも基本的には、インフラのコード化を誰がやるのかっていうと基本人間がコーディングするって紹介が多いです。ただ、これだと規模が小さいシステムだと、コーディングにかかるコストに見合うのかって問題があります。

おそらく数百〜数千規模の超大規模なシステムだったり、Immutable Infrastructure（サーバインフラをスクラップ・アンド・ビルドで使い捨てる）なシステムであれば、コーディングにかかるコストをカバーできると思います。なので、システム規模が数十とか、昔からあるようなシステム構成で、とりあえずInfrastructure as Codeをやってみようとすると微妙になることがあります。

なぜなら、本当はサーバを楽して構築/構成管理するのが目的であって、サーバを構築/構成管理するコードを作ることが目的ではないから。

# Infrastructure as Codeのあるべきかたち？
横展開はコード化した方がやりやすいのと、1台だけであれば手でやった方が早いのいいとこ取りができないかなと。
Master/Agent構成で例えばこんな感じです。

- 設定お試し用サーバ（以降、Agent）で、手で設定変更する。
- Agent側はコード化対象のリソース一覧を受け取って、情報収集後、自分の定義をMaster側にあげる。
- Master側は、受け取った定義を元に、Agentの構成管理を行う。
- 設定の横展開が必要な場合、展開元のAgentの定義を、展開先のAgentの定義にマージする。
- 展開先のAgentはマージ後の定義を反映して設定変更する。

インフラのコード化といいつつも、コードの細かい部分まで意識しなくてすむとかのイメージです。管理対象のピックアップと、横展開の意思決定に人が専念した方が、はるかに健康的かなと思います。

一言で言うと、**若干の手作業を許容したゆるい構成管理ツール**です。実運用的には、設定お試し用サーバは他サーバとの定義の乖離が大きくなったら使い捨てて作り直した方がよいかなと。厳格に構成管理を行うサーバについては、実績のある定義のみで設定変更を行うとか。例えば、本環境は物理サーバかVMとかでも、設定お試しはDockerコンテナで１台だけ作って、その設定を構成管理ツールの定義として取り出して本環境に横展開するとか。

こんな設計思想なツール、すでにあれば使ってみたいですが、なければ既存のPuppetとかに補助ツールを組み合わせて実現するしかないのかな…。Ansibleはエージェントレスなのと、Chefだと定義がプログラムぽいので。
DataGridViewへのテキストファイルの登録

メモがき。

WindowsFormでDataGridViewへのテキストファイル追加について
このソースではテキストファイルがUTF-8の場合。SJISなら、Encodingの部分を変更する。

```lang:settext2dgv.cs
private void settexttodatagridview( string filename )
{
    StreamReader sr = new StreamReader( filename, Encoding.GetEncoding("UTF-8");
    string line;

    dataGridView1.Rows.Clear();

    while ((line = sr.ReadLine()) != null)
    {
        string[] cols = line.Split(new char[] { '\t', ',' });

        dataGridView1.Rows.Add(cols);
    }
}
```
既存サーバをPuppetマニフェスト化するツール作ってみた( puppet resource)

### 2015/12/30変更
ツール説明等はGitHub側に引っ越したので、こっちはtipsぽい内容に変更しました。
引越し先：https://github.com/kijibato/puppet-manifest-maker
説明は、[README.ja.md](https://github.com/kijibato/puppet-manifest-maker/blob/master/README.ja.md)に記載しています。

# puppet resource
puppet resourceコマンドを使うと、現在のリソースをPuppetのコードで表示することができます。

uesrリソースの中から、guestユーザを表示する例です。

```guest
# puppet resource user guest

user { 'guest':
  ensure           => 'present',
  gid              => '1000',
  home             => '/home/guest',
  password         => '$6$YtdVuKy6$qoKZLThvlBfSwc8hDj2sWAMx9/CM4Sss61nqOdjV9Zp2iI4QKD5jQgBuX5cKhflQFoRizNDh95nl55e8sqhAN1',
  password_max_age => '99999',
  password_min_age => '0',
  shell            => '/bin/bash',
  uid              => '1000',
}
```

fileリソースの中から、/etc/httpd/conf/httpd.confを表示する例です。

```file
# puppet resource file /etc/httpd/conf/httpd.conf

file { '/etc/httpd/conf/httpd.conf':
  ensure  => 'file',
  content => '{md5}3b1c36bd33644c783e13f634861b20c2',
  ctime   => '2015-10-29 13:07:35 +0000',
  group   => '0',
  mode    => '644',
  mtime   => '2015-10-29 13:07:35 +0000',
  owner   => '0',
  type    => 'file',
}
```

リファレンスによると利用可能なタイプを表示するにはtypeとありますが、表示されたタイプ全部がpuppet resourceで表示できるわけではないようです。

```
# puppet resource --types
```

また、user, groupなどは、タイプまでの指定で全ユーザ、全グループが表示されますが、fileなどはエラーになるなど、タイプごとにばらつきがあります。

```
# puppet resource user
user { 'adm':
...略...
}
user { 'apache':
...略...
}
...略...

# puppet resource file
Error: Could not run: Listing all file instances is not supported.  Please specify a file or directory, e.g. puppet resource file /etc
```

ちなみに、puppet resourceコマンドのオプション指定などで値を書き換えると、実際にサーバの設定を変えることができたりします。

# puppet resourceを活用する
このままだとちょっと足りないですが、サーバの状態をpuppet定義として表示する機能は便利なので、puppet resourceの結果を組み立ててマニフェスト化するツールを作りました。

GitHubで公開中です。公開場所は投稿の上部に記載しています。

Puppetマニフェストを作るとき、事前に設定確認のためにサーバを構築して、その後マニフェストにすることがたびたびあります。どうせなら手で設定したサーバから手軽にマニフェストが作れたら便利かなと。
ゼロベースからマニフェストを作るより、既存サーバの設定を有効活用してみようかなというものです。マニフェスト作成や、サーバからの設定ファイル類の回収が”ちりつも”でめんどうなので、その辺を自動化しています。

# 参考
- [puppet resource Man Page](https://docs.puppetlabs.com/references/latest/man/resource.html)
Androidアプリをリリースする時に準備すること備忘録

##AndroidStudio
- googleアナリティクスを埋め込む（初回）

- 除外端末の設定（初回）

- アイコンの変更（初回）

- バージョンコード変更
    　どちらか設定。
    　なぜ二箇所あるのか。
    　buildGradleに設定してある場合、manifestでは書けないようです。

>参考
アプリケーションのヴァージョン情報を設定する
http://techbooster.jpn.org/andriod/application/1478/
>Android Gradle Plugin 入門
http://wasabeef.jp/android-gradle/

- APK作成
　 　動作するのにAPKが作れない場合がある

##GooglePlay

- Google Play デベロッパーの登録

- PR画像の用意

>参考
よく分かる！Android アプリのリリース手順のまとめ
http://dev.classmethod.jp/smartphone/android/android-app-how-to-release/
Elixirの Keyword Lists と Map


似ているので覚え書き。

### List
```
iex(1)> list1 = [name: "taji", age: 43, address: "Tokyo"]
[name: "taji", age: 43, address: "Tokyo"]

iex(2)> list1[:address]
"Tokyo"

iex(3)> list2 = [{:name, "taji"}, {:age, 43}, {:address, "Tokyo"}]  
[name: "taji", age: 43, address: "Tokyo"]

iex(4)> list2[:address]
"Tokyo"
```


### Map
```
iex(1)> map = %{"name" => "taji", "age" => 43, "address" => "Tokyo"}
%{"address" => "Tokyo", "age" => 43, "name" => "taji"}

iex(2)> map["address"]
"Tokyo"
```
Unityで三角関数#1

sinθのθから度を求める方法。
逆三角関数からラジアンを求めてMathf.Rad2Degで度を求めました。

```csharp
using UnityEngine;
using System.Collections;

public class ArcsinTest : MonoBehaviour {

	// Use this for initialization
	void Start () {
		//アークサインからラジアンを求める
		print (Mathf.Asin(0.5f));
		//ラジアンから度に変換します
		print (Mathf.Asin(0.5f)*Mathf.Rad2Deg);
	}

}
```
結果：30度だという事がわかります。
<img width="810" alt="スクリーンショット 2015-11-03 12.27.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/38279/6807c4e8-b238-ec57-b946-5b726a95d339.png">

（補足）
サイン、コサイン、タンジェント
これでsinθ、cosθ、tanθを求めます。
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/38279/059fc2a4-4ed9-d3f4-6254-636916a9913f.jpeg)

例題
![2.png](https://qiita-image-store.s3.amazonaws.com/0/38279/73d476ad-bab9-4aad-a97d-87c24ee4ba06.png)
sinθは0.38.......になります。度数は約22度になります。
早見表
![3.png](https://qiita-image-store.s3.amazonaws.com/0/38279/ff455180-2f97-bb19-9fe7-c8fa1b1bd098.png)

三角関数表
http://emath.s40.xrea.com/ydir/Wiki/index.php?%BB%B0%B3%D1%B4%D8%BF%F4%C9%BD

おまけ
![4.png](https://qiita-image-store.s3.amazonaws.com/0/38279/de8cb188-6827-2a26-28fb-3ae7702d912b.png)

以下の値を求める時に余弦定理を使います。
a^2 = b^2+c^2-2bccosθ
<img width="304" alt="スクリーンショット 2015-11-03 18.20.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/38279/0d3e1e72-3885-9908-7425-e3981ea0a739.png">

C^2 = 8^2+6^2 - 2*6*8*cos60
C = √64+36-2*48*0.5
C = √52 = 7.211

余弦定理の補足
![6.png](https://qiita-image-store.s3.amazonaws.com/0/38279/276ca7f7-a38e-d44d-bc35-1ed344fa6751.png)

ラジアン補足
円周の長さ=2πr（πは3.14 rは半径）
単位円では半径は1
90度:π/2 180度π

Unityで確認してみます。
```csharp
using UnityEngine;
using System.Collections;

public class ArcsinTest : MonoBehaviour {

	// Use this for initialization
	void Start () {
		//πから角度を求める
		print (3.14F*Mathf.Rad2Deg);
		print (3.14F/2*Mathf.Rad2Deg);
	}
}
```
<img width="787" alt="スクリーンショット 2015-11-03 19.11.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/38279/cd7bf02a-6df9-9e02-70fb-fe0f352ff526.png">

-
sedチートシート

めんどくさい説明は抜きにして、書き方と例だけ書いて後で必要なときに見返せるようにするためのメモ。
ここには、僕が必要になったときに必要なことしか追加していかないので、
よく使うのがあったら、編集リクエストかコメントで教えてほしいです！

## 正規表現で置換する

### 書き方

```bash
sed -e 's/置換元/置換後/g'
```

```bash
➜  echo "text_aaa.png" | sed -e 's/aaa/AAA/g'
text_AAA.png
```

## 正規表現に一致した部分抽出

### 書き方

```bash
# 1. 部分的に抽出したいとこを()で囲む。()は\でエスケープする
# 2. 何個目に一致したかを\1みたいに指定する
sed -e 's/パターン/抽出したいとこ/g'
```
```bash
# _前を取り出す
➜  echo "text_aaa.png" | sed -e 's/\(.*\)_\(.*\)/\1/g' 
text
# _後を取り出す
➜  echo "text_aaa.png" | sed -e 's/\(.*\)_\(.*\)/\2/g'
aaa.png
```

## for文使って繰り返す

### 書き方

```bash
#!/bin/bash

for 取り出した値 in 取り出したい値; do
  echo $fileName
done
```
#### - スペース区切り
```bash
➜  cat ./for.sh 
#!/bin/bash

for i in 1 2 3; do
  echo $i
done

➜  ./for.sh    
1
2
3
```

#### - lsの結果

```
➜  cat ./for.sh
#!/bin/bash

for i in $(ls); do
  echo $i
done

➜  ./for.sh    
for.sh
test.csv
test.txt
```
メモ一覧


## シェル

- [シェルを書くときによく使うものメモ](http://qiita.com/yujiroarai/items/112b2a81cc530649e6e7)
- [awkチートシート](http://qiita.com/yujiroarai/items/e7c362f70f2eed7d2bcd)
- [sedチートシート](http://qiita.com/yujiroarai/items/a8ee951d1f0e70abaefc)

## Java

- [Java8チートシート](http://qiita.com/yujiroarai/items/868f37676c40178f7bb5)
- [Velocityメモ](http://qiita.com/yujiroarai/items/c4c66ffa52da419cf9f0)

## SQL

- [MySQLチートシート](http://qiita.com/yujiroarai/items/0351e609fb92cbda590e)

## その他

- [プロダクト開発参考資料置き場](http://qiita.com/yujiroarai/items/8cbe6b4969459d08324c)
awkチートシート

めんどくさい説明は抜きにして、書き方と例だけ書いて後で必要なときに見返せるようにするためのメモ。
ここには、僕が必要になったときに必要なことしか追加していかないので、
よく使うのがあったら、編集リクエストかコメントで教えてほしいです！

### print $1

1列目を取り出す

```bash
➜  ~  la tmp/awk/   
total 0
-rw-r--r--  1 yujiroarai  staff     0B 11  3 11:58 1.csv
-rw-r--r--  1 yujiroarai  staff     0B 11  3 11:58 2.jpg
-rw-r--r--  1 yujiroarai  staff     0B 11  3 11:58 3.png
-rw-r--r--  1 yujiroarai  staff     0B 11  3 11:58 4.rb
```

```bash
➜  ~  la tmp/awk/ | awk '{ print $1 }'
total
-rw-r--r--
-rw-r--r--
-rw-r--r--
-rw-r--r--
```

### 正規表現

9列目が.pngで終わるのだけ抽出する

```bash
➜  ~  la tmp/awk/   
total 0
-rw-r--r--  1 yujiroarai  staff     0B 11  3 11:58 1.csv
-rw-r--r--  1 yujiroarai  staff     0B 11  3 11:58 2.jpg
-rw-r--r--  1 yujiroarai  staff     0B 11  3 11:58 3.png
-rw-r--r--  1 yujiroarai  staff     0B 11  3 11:58 4.rb
```
```bash
➜  ~  la tmp/awk/ | awk '$9 ~ /.+\.png$/'             
-rw-r--r--  1 yujiroarai  staff     0B 11  3 11:58 3.png
```
オキュラスを目線の向いてる方向へ移動するスクリプト



```C#:EyeCameraControll
using UnityEngine;
using System.Collections;

public class EyeCameraControll : MonoBehaviour {

	//settings
	public float ForwardSpeed =  0.01f;

	//objects
	//private Controller Controller_ = new Controller();
	private Transform CameraLeft_; 
	
	void Start () {
		CameraLeft_ = transform.FindChild ("CameraLeft");
	}

	void Update () {
		//camera position
		transform.position += CameraLeft_.forward * ForwardSpeed;

	
	}
}
```
電源について(気まぐれ備忘録)

アンペア A（時間や量）
ボルト V（部品によって決まっている）

ledテープ 5V使わないといけない。
電池は1.5V
1m 3.2A

rgb 255 255 255 = 白くなる
たくさん電流が流れる。

arduinoダウンロード
http://arduino.cc/en/Main/Software
説明
https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library

ライブラリ
https://github.com/adafruit/Adafruit_NeoPixel


![スクリーンショット 2014-12-02 17.26.38.png](https://qiita-image-store.s3.amazonaws.com/0/38279/26b7f8e2-c76d-6791-edd2-601896ec5994.png)


![P-02738.JPG](https://qiita-image-store.s3.amazonaws.com/0/38279/e59d6983-6d79-c283-7ade-f4f0f2771790.jpeg)
オープンデータのメモ書き

- オープンデータ＆公開データのまとめ
  http://matome.naver.jp/odai/2135883023685089601
- e-stat
http://www.e-stat.go.jp/api/api-data/
- 気象庁XML用API
  http://api.aitc.jp/
- 気象庁過去の気象データ・ダウンロード
  http://www.data.jma.go.jp/gmd/risk/obsdl/#
- リクナビ進学
  http://webservice.recruit.co.jp/shingaku/reference-v2.html#5
- Yahoo! Open Local Platformで、地図や地域情報サイトを開発
  http://developer.yahoo.co.jp/webapi/map/
- RESAS（地域経済分析システム）
  http://www.meti.go.jp/press/2015/04/20150421001/20150421001.html
- 土地総合情報システム
  http://www.land.mlit.go.jp/webland/download.html
- OECD
  http://stats.oecd.org/
- ぐるなび
  http://api.gnavi.co.jp/api/use/
- リクルート
  http://webservice.recruit.co.jp/about.html
- Yelp
  https://www.yelp.com/developers/documentation/v2/overview
- Expedia
  http://www.expediaaffiliate.com/products/api/
- TripAdvisor
  https://developer-tripadvisor.com/connectivity-solutions/hotel-availability-check-api/
- 駅データ
  http://www.ekidata.jp/
- 駅すぱあとWebサービス
  https://ekiworld.net/service/lp/webservice/
texmakerで日本語入力できるようにする

## インストール
[こちらの良記事](http://hnsn1202.hateblo.jp/entry/2012/05/24/010921)が参考になります。ほとんどこれで大丈夫です。
ただ、Ubuntu14.40の場合、TexLiveはapt-getでインストールできますのでもっとお気軽。

```
sudo apt-get install texlive
sudo apt-get install texlive-lang-cjk
```

これを補足したくて、この記事を投稿しました。
emacsでgitのコンフリクト解消するにはsmerge-ediffがよい

emacsの中でgitのコンフリクトを解消するツールをいろいろ探していたが、smerge-ediffが一番良い気がしたので、そのメモです。

起動方法はコンフリクトが発生しているファイルを開いて、 `M-x smerge-ediff` と打つ

起動すると↓のような感じに

![I0GlN.png](https://qiita-image-store.s3.amazonaws.com/0/33447/c26ed490-8092-b53f-109b-15676f73e7cf.png)


操作方法は

* `n`:次の差分
* `p`:前の差分
* `a`:左を採用
* `b`:右を採用
* `q`:編集を終える
* `?`:ヘルプ

終わると元のバッファに戻って、マージ後のファイルになっています。

シンプルだし、見た目きれいだし、いい感じっす！
UTF-16実体参照をUTF-8に変換

国立国会図書館の[SPARQLデータベース](http://iss.ndl.go.jp/ndla/sparql/)にアクセスしたら、日本語はUTF-16で実体参照されていた。

![](https://pbs.twimg.com/media/CR0yZD5UsAAm7tf.png:large)


しょうがないので変換する。

```r
library(stringi) ; library(gsubfn)
> stri_unescape_unicode( gsubfn("&#x|;", list("&#x" = "\\u", ";" = ""),  "&#x590F;&#x76EE;"))
[1] "夏目"
```

あとで以下の方法を鍵垢氏より教えてもらった。余計なパッケージを利用する必要がないので、こちらが吉。

```r
> stri_unescape_unicode(stri_replace_all_fixed("&#x590F;&#x76EE", c("&#x", ";"), c("\\u", ""), vectorize_all = FALSE))
[1] "夏目"
```

ちなみにjsonを指定すると、普通にUTF-8を返してきた。ばかやろう。
Rubyから外部コマンドを叩くときはShellwordsモジュールが便利


[Rubyから外部コマンドを実行するときはShellwordsモジュールが便利 - ブログのおんがえし](http://ongaeshi.hatenablog.com/entry/ruby-shellwords)

シェルから引数を受けとってまたシェルに外部コマンドとして渡すような場合、

```
require 'shellwords'

system("ls #{ARGV[0]}")
```

以下のようにしておくと空白文字などのシェルメタ文字が来ても動くようになります。

```
require 'shellwords'

system("ls #{Shellwords.escape(ARGV[0])}")
```
block and inline element


块元素
===

- 如果没有给高宽,会自动填满到父容器中
- 可以设置 margin 和 padding
- 在不设置 float 或者声明位置的情况下,默认会相对上一个元素另起一行
- 忽略`vertical-align` 属性

常见的块元素有:
 
 > p div form header nav ul li hi

 行内元素
 ===

 - 位置更随文本内容
 - 相对块元素,它不会扯清和上一个元素的位置.
 - white-space 设置
 - 会忽略上下的 margin 设置. 但是会对于左右的 margin , 还有4个 padding起作用.
 - 会忽略宽高的设定
 - 如果设置了` float` 属性会变为块元素.

 
常见的块元素有:
 
 > a span b em i cite mark code
RailsのLazy loading

遅延ロードについて、
日本語で調べると、必要なときにSQLを発行するというのよく見かけるが、必要なときとはどのようなときか載ってないので、仕方がないので英語で。


[Lazy loading in rails - Rails Feature](http://rubyinrails.com/2014/01/08/what-is-lazy-loading-in-rails/)

## When database is actually queried (end of lazy loading)?
引用：
The database is queried when data is required or asked for, in cases like **all, first, count, each**. These will trigger database load and thus lazy loading will end.

**all, first, count, each**などで実行される。

---
とはいえ、必ずされるわけでもないような..
2015-11-03 c++ builder XE4 / JSON > "\"付きの文字列の扱いに失敗する > "\\"ではなく"\\\\"にする

```txt:動作確認
C++ Builder XE4
```

JSON文字列の扱いにて、Size()の処理が失敗する。


##症状

```cpp
#include <DBXJSON.hpp>
#include <memory>

...
void __fastcall TForm1::Button1Click(TObject *Sender)
{

	// Case 1: OK
//	String jsonText = L"{\"name\":\"John Smith\",\"age\":\"33\"}";

	// Case 2: NG
	String jsonText = L"{\"name\":\"C:\\Windows\",\"age\":\"33\"}";

	std::unique_ptr<TStringList> slread(new TStringList);

	TJSONObject *jsonObj = new TJSONObject();
	String jsonKey, jsonValue;
	TJSONPair *pairObj;

	jsonObj = dynamic_cast<TJSONObject*>(TJSONObject::ParseJSONValue(jsonText));

	for(int pi=0; pi < jsonObj->Size(); pi++) { // pair index
		pairObj = jsonObj->Get(pi);
		jsonKey = pairObj->JsonString->Value();
		jsonValue = pairObj->JsonValue->Value();
		ShowMessage(jsonKey + ":" + jsonValue);
	}
	jsonObj->Free();
}

```

Case1ではOKでCase2では失敗する。

評価/変更ウィンドウでjsonObj->Size()を評価しようとすると以下のエラーが出る。

> E2122 関数呼び出しが未処理例外 '0xc0000005'によってアドレス'0x91dd50'で終了した。

デバッガで停止しない場合は以下のエラーメッセージが表示される。

> モジュール'DbxCommonDriver180.bpl'のアドレス 521FB4DCでアドレス 000000008に対する読り違反がおきました。

"\"の扱いがダメなのだろう。
置換で対応するかどうか。


## try1 (成功)

`String jsonText = L"{\"name\":\"C:\\Windows\",\"age\":\"33\"}";`
を
`String jsonText = L"{\"name\":\"C:\\\\Windows\",\"age\":\"33\"}";`
にしたらエラーが出なくなった。

置換は

```cpp
jsonText = StringReplace(jsonText, L"\\", L"\\\\", TReplaceFlags()<<rfReplaceAll);
```

JSONファイル保存時でなく、JSONファイル読込時に上記の置換をすることにより、うまく動作した。
JavaScript ES6 (ES2015) 移行に関する覚書

# JavaScript ES6 (ES2015) 移行に関する覚書

私はどちらかというと慎重に進めたい方だ。
早く ES6 (ES2015) のいくつかの文法や機能を使って行きたいが、
できれば波風立てずにゆっくりと移行したい。

Node.js と主要ブラウザ(Chrome, Firefox, Edge, ie11, ...)の全てで使える機能から使っていきたい。

> 2015年11月現在のバージョンで記述している。Node.js 5.0 がリリースされた。

## Node.js

サーバ側で使用するものであれば、ES6 のいくつかの文法や機能を使っても良い。
Node v4 LTS や v5 stable で動作するか確認しておくこと。
なんのオプションも指定せずに動作する機能だけを使うと良いと思う。

使ってもいい機能は...
generators (yield), arrow function などだ。

## Web Browser

Internet Explorer (IE11 以下) を除外しても良ければ、ES6 のいくつかの文法や機能を使っても良い。
Firefox, Chrome, Edge あたりで必ず動作確認しておくこと。

使ってもいい機能は...
generators (yield), arrow function などだ。

## Babel.js (6to5)

altjs や Babel 等を使っても良いが、逆に ES6 の機能が使えるのに ES5 互換のコードに変換してしまって効率が悪くなる可能性もある。

使ってもいい機能は...
generators (yield), arrow function などだ。

> 2015年11月現在のバージョンで記述している。Babel 6.0 がリリースされた。
> async await 等は plugin などでいろいろと指定すれば動くね。

# 結論

って、事で、すぐに使ってもいい ES6 の機能は...

generators (yield), arrow function などだ。

で、なぜ generators (yield) が使いたいかというと、非同期処理をエレガントに書きたいからだ。

やり方は、以下を見て欲しい。

[[JavaScript] 非同期処理のコールバック地獄から抜け出す方法 - Qiita]
(http://qiita.com/LightSpeedC/items/7980a6e790d6cb2d6dad)

[ES7 async/await + Promise で解決できる事、とES6 generators (yield) + Promise + npm aa (async-await) で解決できる事 - Qiita]
(http://qiita.com/LightSpeedC/items/95e3db59276e5d1d1a0d)
Swift 2 で強化されたコメント表記をまとめた #2


[Swift 2 で強化されたコメント表記をまとめた #1](http://qiita.com/roworks/items/7feae86652b5292c296f)では、Line formmatingについて書きました。

今回はSymbol Sectionについて書きます。
Symbol Sectionは、メソッドのパラメータや戻り値を書くためのフォーマットです。

ちなみに、Symbol Sectionは、[VVDocumenter-Xcode](https://github.com/onevcat/VVDocumenter-Xcode)というXcodeのプラグインを使うと簡単に記述できるのでおすすめです。

ここに[ドキュメント](https://developer.apple.com/library/prerelease/ios/documentation/Xcode/Reference/xcode_markup_formatting_ref/Parameter.html#//apple_ref/doc/uid/TP40016497-CH28-SW1)があります。

## 基本的なフォーマット
### パラメータ
「- parameter パラメータ名: 詳細」というフォーマットで1つずつ記載します。
複数のパラメータがある場合には、
「- parameters:」を書き、次の行に「- パラメータ名: 詳細」で記載することもできます。

```
/**
- parameter パラメータ名1: 詳細
- parameter パラメータ名2: 詳細
*/

複数のパラメータがある場合には以下の書き方も可能
/**
- parameters:
	- パラメータ名1: 詳細
	- パラメータ名2: 詳細
*/
```

### 戻り値
戻り値は、「- returns: 詳細」で記載できます。

```
/**
- returns: 戻り値詳細
*/
```

### エラーハンドリング
エラーを返す可能性があるメソッドの場合、投げるエラーの詳細を書けます。
書式は「- throws : 詳細」です。

```
/**
- throws: 詳細
*/
```

### 表示例
![基本的なコメントの表示例](https://qiita-image-store.s3.amazonaws.com/0/3656/5dcd1f86-0e0a-d093-c0e1-d4de73d0516e.png "1.png")

## 補助表示コマンド

メソッドの詳細部分には細かい記述をするためのシンボルが用意されています。
基本的な記述方法は、「- シンボル名: 詳細」となります。
Authorsのみ記述方法が違いますが、ここでは触れません。

| シンボル | 内容 |
|--------|--------|
| attention | 注意事項 |
| author | 作成者 |
| authors | 作成者(複数) |
| bug | バグ |
| complexity | 複雑さ |
| copyright | コピーライト |
| date | 日付 |
| experiment | 実験内容 |
| important | 重要事項 |
| invariant | 一定の内容 |
| note | ノート |
| precondition | 必要(前提)事項 |
| postcondition | 事後事項 |
| remark | 注目 |
| requires | 必要事項 |
| seealso | 関連項目 |
| since | 作成日 |
| todo | To Do |
| version | バージョン |
| warning | 警告事項 |

----

## 特殊なコメント
Objective-Cでよく使う、「#pragma mark」に相当するコメントも用意されています。
「MARK:」「TODO:」「FIXME:」です。
「#pragma mark -」と同様に、「MARK: -」でラインが挿入されます。

```
// MARK: -
// MARK: private methods
func sample() {
    // TODO: 処理を書く

    // FIXME: 修正する
}
```

**表示例**

![特殊なコメント表示例](https://qiita-image-store.s3.amazonaws.com/0/3656/ebb02e69-c049-de2e-8dc8-7fc5d02c4a12.png "2.png")

----

# ちょっと宣伝
著書「Swift 2 標準ガイドブック」には、このコメント記述方法についてもきちんと載ってます。
2015年11月24日まで特別価格になっていますので、細かい部分まで知りたい人は是非買ってみてください。

* [Amazon (Kindle)](http://www.amazon.co.jp/gp/product/B016ZCZN1C/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B016ZCZN1C&linkCode=as2&tag=banwankonet-22)
* [マイナビブックス (PDF)](https://book.mynavi.jp/ec/products/detail/id=44247)
* [達人出版会 (PDF)](http://tatsu-zine.com/books/swift2-hyojyun-guide)
インストールからRails-PostgreSQL環境を整える

#環境
```zsh
$ psql --version
psql (PostgreSQL) 9.3.10

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"

$ bundle list
  * pg (0.18.3)
  * rails (4.2.4)
  ...
```

#PostgreSQLの設定

```zsh
$ sudo apt-get install postgresql
# installするとPostgreSQLのサービスがバックで走る
$ /etc/init.d/postgresql status
9.3/main (port 5432): online
# PostgreSQLのroot userであるpostgresユーザとしてpsqlを実行する
$ sudo -u postgres psql
```

これから設定するrailsプロジェクトのロールを準備します。

```psql
postgres=# create role projectname with createdb login password 'password';
postgres=# \q
```

#Railsの設定
```zsh
$ rails new projectname -TB --database=postgresql
$ cd projectname
```

このままbundle installするとpgがエラーとなるので、依存関係をインストールしておきます。

```zsh
$ sudo apt-get install libpq-dev
```

必要なgemをインストールします。

```rb:Gemfile
source 'https://rubygems.org'

gem 'rails', '4.2.4'
gem 'pg'

# scaffold確認用に必要
gem 'therubyracer', platforms: :ruby
gem 'jquery-rails'
gem 'turbolinks'
```

```zsh
$ bundle install --path vendor/bundle
```

railsと先ほど作ったPostgreSQLのロールを関連付ける為、```config/database.yml```を編集します。

```yaml:config/database.yml
default:
  adapter: postgresql
  encoding: unicode
  pool: 5
  # 以下の3つを追加
  username: projectname
  password: password
  # RailsサーバとPostgreSQLサーバが同じ場合
  host: localhost
development:
  <<: *default
  database: projectname_development
test:
  <<: *default
  database: projectname_test
```

```rake db:setup```に必要な```db/schema.rb```を生成します。

```zsh
$ rake db:migrate
```

その後に、```projectname_development```と```projectname_test```という名前のデータベースを作成します。

```zsh
$ rake db:setup
```

データベースを利用してみましょう。

```zsh
$ rails g scaffold Post title:string body:text
$ rake db:migrate
$ rails s
```

準備ができたので、```localhost:3000/posts```にブラウザでアクセスして動作を確かめてみてください。

# 参考

https://www.digitalocean.com/community/tutorials/how-to-setup-ruby-on-rails-with-postgres
Windowsの「休止状態」や「スリープ」したにも関わらず勝手に起動される

# 「休止状態」や「スリープ」したにも関わらず勝手に起動される対処
タイトルの通りなのですが、BTOマシンをセットアップしたらハマりましたのでその備忘録す。
Windowsには「Wake On xxx」っていう例えばマウスを動かしたり、キーボードを触ったときに電源offの状態から直接電源を入れることができる便利な機能があります。大抵はBIOSで制御できるのですが「休止状態」や「スリープ」のときは、OS的に制御できる便利な・・・はずなのですが、今回は逆に困ったことに（笑）

# 設定の方法は色々あったけど、ベストな確認方法があった

DOS窓で ```powercfg /devicequery wake_armed``` を実行すると現在の設定値をみることができます。

![image](https://qiita-image-store.s3.amazonaws.com/0/44540/720c4e27-ead3-fb5d-0e91-49b69eeed485.png)

私の場合は、マウスとLANが・・・。原因でした。

マウスの電源管理の場合。デバイスマネージャーからマウスのプロパティを選択、「電源の管理」を選択して。赤丸部分のチェックを外すだけ。

![image](https://qiita-image-store.s3.amazonaws.com/0/44540/f833ef82-f72b-7c74-d14e-eee08d65fdfe.png)

LANの電源管理の場合。デバイスマネージャーからLANのプロパティを選択、「電源の管理」を選択して。赤丸部分のチェックを外すだけ。

![image](https://qiita-image-store.s3.amazonaws.com/0/44540/2717769b-ca60-5a4a-ec06-9f3e815526b3.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/44540/48648c2d-33ec-e1e0-f2e0-ca4eb63f002c.png)

と、判ってしまえば大したことないのですけど、ね。
【2015年版】CentOS7 + Nginx に ASP.NET 4.0 環境を構築する

そろそろサーバOSを Windows から Linux へ移行したいが、.Net のコードを PHP に書き換えるのは嫌だ！そんな諸兄に贈ります。

さらに、**PHP と ASP.NET を同居させてしまおう**という企画です。

# ASP.NETサーバのインストール手順（CentOS）
0. リポジトリを追加します
`$ sudo rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
$ sudo yum-config-manager --add-repo http://download.mono-project.com/repo/centos/`

0. Mono をインストールします
`$ sudo yum install mono-complete`

0. ASP.NETサーバをインストールします
`$ sudo yum install xsp`

たったのこれだけでインストールは終わり！簡単ですね。
きちんとインストールされているかは
`$ fastcgi-mono-server4 --version`
これでバージョンを確認できます。.NET 4.0 になっていますね。この fastcgi-mono-server4 が ASP.NET 4.0 サーバ（本番用）の本体なので、これを常時起動すればいいわけです。

ちなみに試験用サーバとして xsp4 もインストールされている筈です。
`$ xsp4 --version`
これで存在を確認できますね。

# Nginx の設定

次に、Nginx から ASP.NETサーバ（Monoサーバ）をコールするように設定します。

前提として既に Nginx はインストール済みとします。FastCGIを経由させるので、設定ファイルを開き下記の location ブロックを追加します。  

```
location ~ \.aspx$ {
    fastcgi_pass   127.0.0.1:9001;
    fastcgi_index  default.aspx;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
```

はい、ここでのポイントは TCP 9001番ポートにしている部分です。大抵の場合 PHP の処理用に 9000番を使っていることでしょう。なのでそれを邪魔しないよう Monoサーバは 9001番を使うことにします。
これで aspx 拡張子のファイルはすべて Monoサーバで処理されるようになります。

さらにディレクトリインデックスの設定もやっておきましょう。

```
location / {
        index  index.html index.htm index.php default.aspx;
}
```

index を定義している location ブロックが既に存在する筈なので、その行に default.aspx を追記します。

# Monoサーバのサービス化

いよいよ最後の仕上げです。Monoサーバを常駐させないといけません。これも簡単！ファイルをひとつ作成するのみです。

`$ sudo vi /etc/systemd/system/mono-server.service`

でファイルを新規作成します。内容は下記の通り。

```
[Unit]
Description=Mono Server
Before=nginx.service
After=nss-user-lookup.target

[Service]
EnvironmentFile=
Type=simple
ExecStart=/usr/bin/fastcgi-mono-server4 \
        --applications=www.kodama.com:/:/var/www/html/ \
        --socket=tcp:127.0.0.1:9001 \
        --verbose=true
User=nginx
Group=nginx

[Install]
WantedBy=multi-user.target
```

上記の変更箇所は

> ドメイン名：www.kodama.com
> ドキュメントディレクトリ：/var/www/html/
> Nginxのユーザ：nginx
> Nginxのグループ：nginx

となっているので、それぞれ自分の環境に合わせて変更してくださいね。
そしてこのファイルを保存したら、通常のサービスと同じように

`$ sudo systemctl start mono-server`

で起動しますし、enable にしておけば自動起動もします。

# おしまい

これでもう CentOS 上で aspx ファイルが実行される筈です。しかも .php ファイルの場合は PHP として実行されます。
まとめてみると意外と簡単でしたね。私が見たところ英語サイトも含め簡潔に説明されているサイトが無かったようなので、記事を執筆してみました。

ASP.NET を CentOS で使いたいと考えている皆さんのお役に立てれば何よりです！ Enjoy:thumbsup:
技術英語 > You have to figure out how all the blocks [fit best together] / put things in / take other things off

[CNN](http://money.cnn.com/2015/10/27/technology/voyager-nasa/)
> You have to figure out how all the blocks <font color=red>fit best together</font>

続いて

> -- except when you <font color=red>put things in</font>, you have to <font color=red>take other things off</font>.

とあり、何かを入れる前に何かを取り除かないといけないpuzzleのようだとのこと。

put xxx inに対してtake xxx off (take xxx outでない)のは少し対称性が悪い気がする。

<hr>
関連して思い出したのは

http://qiita.com/7of9/items/abd7d88a02839df9cd45
>  take it apart / put it together

<hr>

多くのニュースサイトの記事がそうであるように、CNNの上記記事も5年後にはリンク切れになっているかもしれない。。。
【RailsユーザのためのPHP/Laravel】form_for的なのを使いたい


Laravel芸人見習いの[すろっくさん](http://twitter.com/srockstyle)ですよ！　フォームヘルパーつかいたいですね！

フレームワーク芸人たるもの、直接ビューを書いてもいい場合は書くわけですが、当然ビューヘルパーは使いたいですね。Railsでいうform_for、form_tag、input_tagみたいなああいうのです。

ですが、Laravelは4までは組み込まれていたんですが、5からは別パッケージになってしまったみたいです。時代の流れからか、WAFがJsonかえしてくれりゃーええでっていう時代なんで、まあ流れ的に仕方ないのかもしれませんが。

あまりモノシリックにしないのが世の流れなのかもですね！

それはさておき、わざわざReactとかやりたくねーなーっていうサーバサイドエンジニアもいると思うんで、フォームヘルパーがちゃんと用意されています。laravelcollective/htmlってのがそれです。

デフォルトではつかえないので、composerつかっていれましょう。

注意点ですが、Laravel5がリリースされたばっかの記事をみていると、illuminate/htmlをインストールさせる記事がちらほらあります。このパッケージはメンテされてないのでつかっちゃだめです。illuminate/htmlをインストール！とか書いてあったらそのサイトは信じちゃダメです！　約束だよ！

## LaravelCollectiveを使う

インストールはこんぽーさーさんで終わりです。らくらく。

```bash
composer require laravelcollective/html
```

インストールできたら設定をconfig/app.phpに書きます。

```php
return [
    'providers' => [
        // ...
        'Collective\Html\HtmlServiceProvider',
    ], 
    'aliases' => [
        // ...
        'Form' => Collective\Html\FormFacade::class, 
        'Html' => Collective\Html\HtmlFacade::class, 
    ],
 ```

上のprovidersをプロバイダ、aliasesをファサードというらしいです。

大体のフレームワークに言えることですが、なんか新しい用語でてきても初めはぶっとばしていかないと楽しくないです。仕事で使うなら会話で「プロバイダってなに？」「ファサードってなに？」ってふんわり覚えておくくらいは必要ですが、技術を趣味でいじるときに細かいところこだわるとしんどくなるんで、詳細はすっ飛ばします。ただ、Laravelではモジュールを追加してヘルパーいれるときはここに追記が必要なようです。

これでフォームヘルパーが使えるようになりました！

あとはresource/views以下のbladeとかに

```php
{!! Form::label('title', 'Title:') !!}
{!! Form::text('title',[わたしたいパラメータのvalue。なければnull], ['class' => '[クラス名]']) !!}
```

みたいに書くとヘルパー使えます。よかったね！
hashicorp製品群の最新バージョンの取得

[https://hashicorp.com/blog/hashicorp-and-fastly.html](https://hashicorp.com/blog/hashicorp-and-fastly.html)より

```
curl -fsSL https://releases.hashicorp.com/index.json| jq '.[] | [{key:.name, value:.versions[] | .version}]'|jq 'sort'|jq 'from_entries'
```

実行結果：

```
{
  "atlas-upload-cli": "0.2.0"
}
{
  "consul": "0.6.0-rc1"
}
{
  "consul-replicate": "0.2.0"
}
{
  "consul-template": "0.9.0"
}
{
  "envconsul": "0.6.0"
}
{
  "nomad": "0.1.2"
}
{
  "otto": "0.1.2"
}
{
  "packer": "0.8.6"
}
{
  "serf": "0.6.4"
}
{
  "terraform": "0.6.6"
}
{
  "vagrant": "1.7.4"
}
{
  "vault": "0.3.1"
}
```
複数のアニメバリエーションを一つのコントローラーで管理する方法(案)。

# 概要
AnimatorController(Mecanim)って場合によっては便利ですが、
2Dだとあんまり恩恵なかったり、コントローラーが量産されて煩雑になったりしますよね。

今回はUnityの2Dアニメーションに於いて、
キャラバリエーション(とか)が増えてもコントローラーは一つで済ませる方法(案)を綴ります。

※検証環境は Unity 5.0.x 及び Unity 5.2.x です。

# 事例
主人公キャラクターを「万里生」さんと仮定します。

万里生さんは走りアニメーション(run)を保持しており、f01～f05の5フレームで形成されています。
また、万里生さんには、標準形態のsprite_A、第二形態のsprite_B、最終形態のsprite_Cという3つのバリエーションがあります。
![ss_223.png](https://qiita-image-store.s3.amazonaws.com/0/97611/feb0d448-eab9-9f3f-6e9c-de67190dff11.png)

通常であれば、バリエーション毎にコントローラーを用意するところですが、これを一つで成立させよう、というのが今回のお話です。
# サンプル

## プロジェクト構成例
![ss_224.png](https://qiita-image-store.s3.amazonaws.com/0/97611/48f97b44-301d-c511-7513-966839757a58.png)

![ss_225.png](https://qiita-image-store.s3.amazonaws.com/0/97611/78b7719d-5595-1ba6-c20a-8067f2cf10be.png)

[Hierarchy]に任意のアニメーションオブジェクトを配置するよ。(character)
character には Animator と、下で紹介する AnimationOverride コンポーネントを付与するよ。

AnimationOverride の `Renderer` には、Animatorの操作対象になっている SpriteRenderer を指定するよ。(character)
AnimationOverride の `Path` には、万里生のバリエーションテクスチャのパスを指定するよ。(sprite_A/sprite_B/sprite_C)

上図構成で実行すると、万里生(sprite_C)が再生されるようになるよ！

## AnimationOverrideクラス
※[前回のSpriteLoader](http://qiita.com/sango/items/99f080a7f8c86198fca5)を使いまわします。

```csharp:AnimationOverride.cs
using UnityEngine;
using System.Collections;

public class AnimationOverride : MonoBehaviour
{
	[SerializeField]
	SpriteRenderer		m_renderer	= null;		//!< コントローラーの操作対象

	[SerializeField]
	string				m_path		= "";		//!< バリエーションテクスチャのパス

	SpriteLoader		m_loader	= null;		//!< Sprite読み込むやーつ

	void Awake()
	{
		if( m_renderer == null )
			m_renderer = GetComponent<SpriteRenderer>();

		// 任意のバリエーションテクスチャを読み込む
		m_loader = new SpriteLoader();
		m_loader.Load( m_path );
	}

	/**
	 * ここでSpriteを挿げ替える
	 */
	void LateUpdate()
	{
		if( m_renderer == null ) return;
		if( m_renderer.sprite == null ) return;

		if( string.IsNullOrEmpty( m_path ) ) return;

		// SpriteLoaderから今AnimationClipが表示しているスプライトと同じ名前のスプライトを取得して、割り当て直す
		m_renderer.sprite = m_loader.GetSprite( m_renderer.sprite.name );
	}
}
```

# 解説
## 概念図
![animation_override.png](https://qiita-image-store.s3.amazonaws.com/0/97611/22173bd3-7ecb-7233-2b38-226dc795b1ad.png)


## AnimationOverrideでやってること
LastUpdateの内容がミソ！

1. m_renderer.sprite が AnimatorController(AnimationClip) から随時変更されるよね
2. LateUpdate で、変更されたspriteの名前を取得して
3. m_loader.GetSprite で別バリエーションの同じ名前のスプライトを拾ってくる
4. それを m_renderer.sprite に還元する！

とっても簡単ね！

## メリット
- 同じモーションパターンならコントローラーが一つで完結する
- モーションパターン数に変動があってもコントローラー一つを修正すればOK

## デメリット
- 全てのバリエーションに於いて「同じコマ数」、「同じスプライト名」で作る必要がある
- 常にベースのテクスチャがオンメモリになる
- 処理がダサい

## 追記
忘れてましたが、コントローラーだけじゃなくてクリップも大幅に削減できますね！