OmniAICreator/Qiita-1.07M huggingface dataset:
Salesforceカスタム項目のデータ型（DisplayType、SOAPType、Primitive）

Salesforceでカスタム項目を作成して、Apexコードで扱う際にどのデータ型で扱えばいいのか都度調べていたのでまとめてみました。
正規のリファレンスと、Schema.DescribeFieldResultから取得できる情報を突き合わせただけです。いま開発しているシステムがSalesforceのオブジェクトを抽象化、同一視して扱うっていう特殊なものだから必要なんであって、普通はそんなに需要ないですかね。

# 項目／型一覧

| カスタム項目     |データ型     | DisplayType Enum  | SOAPType Enum         | Primitive型       |
|:----------------|:-----------|:------------------|:----------------------|:------------------|
|自動採番          |string       |String             |String                |string              |
|数式              |calculated  |戻り値のデータ型次第 |戻り値のデータ型次第    |戻り値のデータ型次第 |
|外部参照関係       |?           |?                  |?                      |?                  |
|参照関係          |ID          |ID                 |ID                     |string             |
|主従関係          |ID          |ID                 |ID                     |string             |
|URL              |url         |URL                |String                 |string             |
|チェックボックス   |boolean     |Boolean            |Boolean                |boolean            |
|テキスト          |string      |String             |String                 |string             |
|テキスト(暗号化)   |encryptedstring |EncryptedString|String                 |string             |
|テキストエリア     |textarea    |Textarea           |String                 |string             |
|パーセント        |percent      |Percent           |Double                 |double             |
|メール            |email       |Email              |String                 |string             |
|テキストエリア (リッチ)|textarea |TextArea           |String                |string             |
|ロングテキストエリア|textarea    |TextArea           |String                |string             |
|数値              |number      |Double            |Double                  |double            |
|選択リスト         |picklist    |Picklist          |String                 |string            |
|選択リスト (複数選択)|multiPicklist|MultiPicklist   |String                 |string            |
|地理位置情報       |location    |Location           |Location               |―                 |
|通貨              |currency    |Currency           |String                 |string            |
|電話              |phone       |Phone              |String                 |string            |
|日付              |date         |Date               |Date                   |date              |
|日付/時間         |date         |Datetime           |Datetime               |datetime          |

#memo

* データ型のstring/date/number/booleanはanyTypeデータ型
* 外部参照関係とか地理位置情報は使ったことがないのでよくわからない
* DisplayType/SOAPType EnumにはIntegerがあるが、カスタム項目では定義できない？
（リードとか取引先の従業員数（標準項目）がIntegerだった）
Rspecのrequest(Integration test)でDeviseを使う方法


## 目的

以下の2点により、本記事をまとめました。

* いろいろググって試したりしたけど、なんだかうまくいかなかった
* Deviseの公式を翻訳してみたけど、公式としてIntegration Testはできないよって書いてあった

## 参考にしたところ

最終的には、この[サイト](https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara)の通りでうまく行きました。

## やったこと

1. `spec/spec_helper.rb`の`RSpec.configure do |config|`のところに以下を追加した。
  
    ```spec/spec_helper.rb
    RSpec.configure do |config|
  
      # Devise
      config.include Warden::Test::Helpers
      config.before :suite do
        Warden.test_mode!
      end
    
    end
   ``` 

2. FactoryGirlの設定

    ```spec/factories.rb
    FactoryGirl.define do
      factory :user do
        email 'test@example.com'
        password 'passworddayo'
      end
    end
    ```
    
3. request specのbefore処理でログインする

    ```spec/request/some_request_spec.rb
      let(:user) { FactoryGirl.create(:user) }
      before do
        login_as(user, :scope => :user)

        visit some_authentificated_path
      end 
     ```
日本語Webフォントの流行の最適化「NotoSans」「サブセット化」

#日本語Webフォントを最適化

##そもそもなぜ
1. フォントはそもそも**機種依存**
1. 欧米フォントは、字数が限られている為ファイルサイズがそもそも小さい約250KB。しかし、日本語は16MBとか。（orz）なので、欧米フォントのようにheadにリンクをはって、アクセスごとにまるごとダウンロードすると重すぎる

##んじゃどうするの
####GoogleとAdobeが無料フォント「Noto Sans」作ってくれました。（これで無料でできます）

##何が良くて、何が悪い
###メリット
- 全ての環境で統一したフォントで表示ができる

###デメリット
- ページ表示時の自前のフォントファイルダウンロード分の通信コストがかかる

##導入手順
1. まず「Noto Sans」をダウンロード
1. サブセット化（普段使う文字だけ**抜き出す**）
1. 各環境への対応のためにファイル形式を変える
1. フォントをディレクトリーに設置し、CSSに@font-face記述をする
*******************


###1.「Noto Sans」をダウンロード
#####[Noto Sans CJK](http://www.google.com/get/noto/#/family/noto-sans-jpan)<-ここからダウンロードを行ってください。


###2.サブセット化
#####サブセット化＝普段使うものだけを抜き出す作業。**「第一水準漢字＋ひらがな＋記号」**この辺りを抜き出せば普通のwebサイトであれば十分にまかなえるでしょう。  「第一水準漢字」などで検索すれば一覧などが出てきます。

######＃[「サブセットフォントメーカー」](http://opentype.jp/subsetfontmk.htm)があるのでそれを使用。ダウンロードしたフォントファイルを指定して、サブセット化されたものの吐き出し先を指定します。そしてどの文字をサブセット化するかを入力します。そこに「第一水準漢字＋ひらがな＋記号」を記入（コピペ）すればいいです。詳しくは「サブセットフォントメーカ　使い方」などで検索すれば出てきます。

###3.ファイル形式を変える
#####フォントにもそれぞれの環境で対応したファイル形式があるので、それぞれ変換してやります。
###### ＃[「WOFFコンバータ」](http://opentype.jp/woffconv.htm)を使用。

####対応形式
- .woff（主にブラウザ）[「.woff」--Can I use](http://caniuse.com/#search=woff)
    - IE9〜
    - Chrome6〜
    - Firefox3.6〜
    - iOS5.0〜
    - AndroidBrowser4.4〜
- .ttf（主にスマホ）[「.ttf」--Can I use](http://caniuse.com/#search=ttf)
    - iOS4.2〜
    - Android2.2〜
(Can I use 参照)

###4.フォントをディレクトリーに設置し、CSSに@font-face記述をする
#####@font-faceは  
>@font-face は、Web ページを製作者が期待した通り描画するためにダウンロードされるべき、Web フォントを指定するための @ 規則を提供します。（MDNより）  

#####要するに、font-family で自前のフォントを指定できるようにする。（という自分の認識です）ブラウザの対応状況は[（「@font-face」--Can I use）](http://caniuse.com/#search=font%20face)


######記述例
```css
@font-face {
    font-family: "NotoSansCJKSC";//ここは好きな名前でOK
    font-style: "normal";
    font-weight: 400;
    src: url("./assets/fonts/NotoSans_regular.otf") format("opentype"),//ここにフォントファイルの指定とそのフォーマットを記述
    url("./assets/fonts/NotoSans_regular.woff") format("woff");  
}
```

以上のように指定すると、font-family: "NotoSansCJKSC;と指定すると使うことができます。font-weight: bold;で使いたいときは、

```css
@font-face {
    font-family: "NotoSansCJKSC";
    font-style: "normal";
    font-weight: 700; //変更
    src: url("./assets/fonts/NotoSans_bold.otf") format("opentype"),//boldのフォントファイルを指定
    url("./assets/fonts/NotoSans_bold.woff") format("woff");  
}
```
##まとめ
#####日本語も全ての環境で同じフォントが表示されるというのは、とても大きなメリットだと。「游ゴシック」だとなんか違うな、なんて時に使っていきたいです。
#####サブセット化に関しては、どこまでを範囲として指定するかは、ケースバイケースだと。静的コンテンツの場合は出てくる文字だけをサブセット化したりしました。
#######　追記「FONTPLUS」など日本語の有料サービスもあり、種類が豊富&勝手にサブセット化してくれるので、そちらも充実している。

######「Qiita」初投稿でした。至らぬ点があるかもしれません。ご了承ください。
シェルスクリプト-e とwget -nc

-e をつける
set -e

-eは、0以外の終了コードで引っかかる。
まぁ便利だけど、ハマるのは、例えば
wget -nc ...
すでにファイルがあったらダウンロードしない
というオプションだけど、
これが、すでにファイルがある場合、終了コード1を返す。
なので
for文などループ内で、-ncを使いながらクロールする場合に
「ファイルがすでにある」でスクリプトが止まる
ここは注意。
ループの前で
set +e
ループの後で
set -e
したら回避はできるけど、その場合、それ以外のエラーが拾えなくなるのでいまいち
なので
wget -ncを使うなら
[ ! -f ファイル名 ] && wget ...
[WebGL] Three.jsのBufferGeometryでUV座標をいじる


色々調べてみたものの、あまりスマートな方法が見つからず。

いわゆる「テクスチャアトラス」的なことをやろうと思ってごにょごにょしたときのメモです。

ちなみに↓のような画像を用意して、それをマウスオーバーで切り替える、というようなものをイメージしています。

CSSとかでもよく使われる方法ですね。

![texture_sample.png](https://qiita-image-store.s3.amazonaws.com/0/5616/897a6529-1fb5-b692-eed7-58e2d57025c7.png "texture_sample.png")


```js
// UV座標のAttributeを取得
var attr = mesh.geometry.getAttribute('uv');
for (var i = 1, l = attr.array.length; i < l; i += 2) {
	// UV座標は(x, y)の2要素のベクトルなので、Yの値を半分にする
	attr.array[i] /= 2;
}
```

やっていることは単純で、UV座標は`(x, y)`の形で1次元配列で格納されているようなので、取得した配列の`Y`に当たる値を半分にしています。（※）

※ ... 今回は上記画像のように、縦にふたつ並んだボタンを想定しているために半分にしていますが、テクスチャアトラスのように縦横に複数の要素を並べた場合はそれ用にしっかりと計算しないとなりません。

[ドキュメント](http://threejs.org/docs/#Reference/Core/BufferGeometry)を見ると以下の要素が取得できるようです。（UVが載ってないので全部じゃないかもしれません）

| attribute | item size | description |
|:----------|:-----------|:-----------|
| position | (itemSize: 3) | Stores the x, y, and z coordinates of each vertex in this geometry. Set by .fromGeometry(). |
| normal   | (itemSize: 3) | Stores the x, y, and z components of the face or vertex normal vector of each vertex in thi |s geometry. Set by .fromGeometry().
| color    | (itemSize: 3) | Stores the red, green, and blue channels of vertex color of each vertex in this geometry. S |et by .fromGeometry().
| tangent  | (itemSize: 3) | Stores the x, y, and z components of the tangent vector of each vertex in this geometry. Se |t by .computeTangents().
| index    | (itemSize: 3) | Allows for vertices to be re-used across multiple triangles; this is called using "indexed triangles," and works much the same as it does in Geometry: each triangle is associated with the index of three vertices. This attribute therefore stores the index of each vertex for each triangular face. If this attribute is not set, the renderer assumes that each three contiguous positions represent a single triangle.<br />In addition to the the built-in attributes, you can set your own custom attributes using the addAttribute method. With Geometry, these attributes are set and stored on the Material. In BufferGeometry, the attributes are stored with the geometry itself. Note that you still need to set the attributes information on the material as well, but the value of each attribute is stored in the BufferGeometry. |


## 参考記事

- [Threejs BufferGeometry - Render some faces with other Texture - Stackoverflow](http://stackoverflow.com/questions/28631414/threejs-buffergeometry-render-some-faces-with-other-texture)
- [ドキュメント](http://threejs.org/docs/#Reference/Core/BufferGeometry)
Swift 2で追加されたエラーハンドリング


Swift 2では新しいエラーハンドリング機構が追加されました。他言語でいうところの例外処理のようなものです。

## エラーを投げる (throw)

まず、下記のようにしてエラーを定義します。エラーは`ErrorType`を継承している必要があります。

```swift
enum MyError: ErrorType {
    case UnexpectedError
}
```

実際にエラーが発生する場所では、下記のように`throw`を使ってさきほど定義したエラーを投げます。

```swift
func myfunc() throws {
    throw MyError.UnexpectedError
}
```

このとき、`myfunc()`に`throws`と修飾されている点に注意してください。`throw`を使ってエラーを投げる場合、これがないとコンパイルエラーとなります。また、`ErrorType`を継承していないものを投げようとする場合にもコンパイルエラーになります。

## エラーを受け取る (do/try/catch)

`throws`で修飾された関数を呼び出す場合、呼び出し側でエラーハンドリング処理を準備しなければなりません。

エラーハンドリングを行うには、下記のように`do`句のなかでエラーが発生しうる関数に`try`をつけて呼び出します。

```swift
do {
    try myfunc()
}
catch MyError.UnexpectedError {
    print("caught")
}
```

`throws`で修飾されている関数を呼び出す場合、この`try`がないとコンパイルエラーになります。逆に、`throws`で修飾されていない関数に`try`をつけて呼び出しても、警告は出ますがコンパイルエラーにはなりません。

エラーが発生すると、対応する`catch`句が実行されます。発生しうるエラーに対して対応する`catch`句が揃っていない場合、コンパイルエラーになります（が、現時点のBetaでは`main()`内に書いた場合はコンパイルエラーにならないようです）。

`try`つき呼び出しを`do`句の外で行ってもコンパイルエラーになりますが、これも現時点のBetaでは`main()`内に書いた場合にはコンパイルエラーにならないようです。

### 引数つきエラー

下記のように、エラーには引数をつけることができます。エラーの引数は`catch`句で受け取ることができます。

```swift
enum MyError: ErrorType {
    case UnexpectedError
    case CountError(count: Int)
}

func thrower(c: Int) throws {
    if c > 0 {
        throw MyError.CountError(count: 2)
    }
    else {
        throw MyError.UnexpectedError
    }
}

do {
    try thrower(10)
} catch MyError.UnexpectedError {
    print("unexpected")
} catch MyError.CountError(let count) {
    print(count)
}
```

`main()`内ではこのようなドキュメント通りの記述ができますが、現時点のBetaでは関数内に記述する場合に、このような複数のエラータイプがあるケースですべてのタイプを網羅する`catch`句を書いてもコンパイルエラーになるケースがあるようです（コメント欄参照）。

## エラーを無視する

`throws`で修飾されている関数を呼び出す際、絶対にエラーが発生しないことがわかっている場合には、下記のように`try!`をつけることでエラーハンドリング処理を実装せずに呼び出すことができます。

```swift
try! myfunc()
```

このような呼び出し方をした場合にエラーが発生すると、アプリケーションはクラッシュします。

## おわりに

Swift 2で新しく追加されるエラーハンドリング処理について記述しましたが、現時点（Xcode 7.0 Beta 7A120f）ではコンパイラの挙動が不安定で、通るはずのないコードがコンパイルを通ってしまったり、またその逆もあったりします。Swift自体がよく仕様が変わる言語なので、常に最新のドキュメントを参照するようにしましょう。
開発者プログラム：WWDC2015以降のきづいた変更



#はじめに
WWDC直後かもしれませんが、Appleのサイトのどこから遷移したものだか不明だったのでまとめました。

#開発者プログラムの選択
https://developer.apple.com/support/compare-memberships/jp/

##内容
* Apple Developer Program
    * 個人
    * 法人
    * 教育機関
* Apple Developer Enterprise Program
    * 法人（DUNS Numberを保有）

#Apple Developer Program
https://developer.apple.com/jp/programs/

![スクリーンショット 2015-06-09 7.41.42.png](https://qiita-image-store.s3.amazonaws.com/0/12362/3d7696c5-28c7-ed5e-df81-0a828ae321d5.png)

- Macのアプリが作れるようになっている
- デバイスのリセットデーがわかるようになっている

![スクリーンショット 2015-06-09 8.05.22.png](https://qiita-image-store.s3.amazonaws.com/0/12362/31a4a2f5-b0f5-97ba-2ddf-25749a694ea7.png)

個人的な話をまぜるとiOS開発者プログラム（個人）でしたが、ここにMac開発もできる要素が加わっていました。
両方のプログラムを利用中だった場合は有効期間が合算されているという記載あり。
>https://developer.apple.com/support/transition/jp/

#エンタープライズ版
社用で使用するための開発者プログラム
https://developer.apple.com/programs/enterprise/enroll/
https://developer.apple.com/programs/enterprise/

#メンバーセンター

https://developer.apple.com/membercenter/index.action

リンクがなかなか見つからなかった
![スクリーンショット 2015-06-09 7.48.21.png](https://qiita-image-store.s3.amazonaws.com/0/12362/4afb593b-c768-73b8-206e-a2a9b71bdd1d.png)

`Certificates, Identifiers & Profiles`
開発用の設定もろもろ

`iTunes Connect`
アプリのStore公開準備なの機能

#App Review Status
https://developer.apple.com/support/app-store/

![Qiita](http://capture.heartrails.com/free?https://developer.apple.com/support/app-store/)

#Top 10 reasons for app rejections
リジェクト理由のトップ10

https://developer.apple.com/jp/app-store/review/rejections/
![スクリーンショット 2015-09-14 20.36.58.png](https://qiita-image-store.s3.amazonaws.com/0/12362/111984fc-efae-9333-7211-7c2826a92413.png)

#Contact the App Review Team
主に早期レビュー入りのお願いをするために使います。
iTunes ConnectへのログインができるAppleIDがあること。

 - メールアドレス
 - 電話番号
 - 団体名（任意）

が必要です。

![スクリーンショット 2015-10-01 18.55.34.png](https://qiita-image-store.s3.amazonaws.com/0/12362/7e84080c-47e9-35c4-dda2-b93da4e2300a.png)


https://developer.apple.com/contact/app-store/?topic=expedite
#さいごに
毎年、2年に一度は大幅な改造がサイト構成にはいるので
Appleさんは開発者に優しくないなあと・・・今回も思いました。
yosemite アップデートで mamp の appche が起動しない



slackoverflow 通り 

`/Applications/MAMP/Library/bin into “envvars”`

から

`/Applications/MAMP/Library/bin into “_envvars”`

ヘ リネームしたら直った。

http://stackoverflow.com/questions/25139599/mamp-pro-3-05-on-mavericks-updated-to-yosemite-apache-does-not-start
技術英語 > w.h.p > with high probability / probable / possible

youtubeのMIT OpenCourseWare 6.006 Introduction to algorithm [Lecture 2](https://www.youtube.com/watch?v=Zc54gFhdpLA&index=2&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb)にて出てきた。

数学で使われる略語のようだ。

w.h.p = with high probability

<hr>
probableと関連してどちらが頻度が高いか迷うものとしてpossibleがある。

オックスフォード現代英英辞典では
- possibly : might happen / chance is rather low
- probably : like to happen / chance is quite high
サーバのHDDを捨てるときは消去にDBANを使おう

## ダウンロード

* [Darik's Boot and Nuke (DBAN) 日本語情報トップページ - OSDN](http://osdn.jp/projects/sfnet_dban/)

## 使い方

* 1CD Linuxです。ENTER押して起動させます。
* 消去したいHDDの選択をSPACEキーで選択し、F10で実行させます。

あとは待つのみ。


## 重要なデータが入っているものについて

* かなづちで中心部分を3～5回叩けば中の円盤が割れます。
* HDDを振ると中がさらさらと砂状になっているのがわかる。

これで捨てる
Swift 2のdefer文


Swift 2ではdefer文が追加されました。これはGoにあるdefer文とほぼ同じもので、スコープを抜ける際に処理を実行するようにするものです。

```swift
func myfunc() {
    defer {
        // Swift 2からprintlnはなくなり、printになりました
        print("deferred")
    }
    print("Hello, World!")
}

myfunc()
```

結果は以下のようになり、defer文が`myfunc()`の最後に実行されていることがわかります。

```
Hello, World!
deferred
```

次に、同じスコープに複数のdefer文を記述してみます。

```swift
func myfunc2() {
    defer {
        print("deferred 1")
    }
    defer {
        print("deferred 2")
    }
    defer {
        print("deferred 3")
    }
    print("Hello, World!")
}

myfunc2()
```

結果は以下のようになり、Goと同じようにコード上の記述と逆順で実行されます。

```
Hello, World!
deferred 3
deferred 2
deferred 1
```

次に、関数以外のスコープにdefer文を記述してみます。

```swift
func myfunc3() {
    for i in 0..<3 {
        defer {
            print("deferred \(i)")
        }
        print("Hello, \(i)")
    }
}

myfunc3()
```

結果は以下のようになり、関数以外のスコープでもそのスコープを抜ける際にdefer文は実行されます。

```
Hello, 0
deferred 0
Hello, 1
deferred 1
Hello, 2
deferred 2
```

Goではリソースのクローズなどを行う際にdefer文が重宝されますが、Swiftでも同様のケースで活用できそうです。
Eclipseでpom編集が３倍心地よくなる方法


たまたま見つけたEclipseの設定。
この設定をするだけで、pom.xmlを編集する際のイライラが軽減します。

# Eclipseの設定変更
1. Maven>UserInterface
2. Open XML page in POM editor by default をチェック

# 恩恵
* pom.xmlを開いた時の初期表示が「pom.xml」タブになる。　高速 ＼(^o^)／  
  ⇒ 規定の「OverView」は表示ラグがありイライラ (´・ω・｀)

# 補足
XMLの閲覧には「アウトライン」ビューが利用できます。
編集はテキストエディタで十分。

表示ラグのある「Overview」タブがデフォルト表示の理由がイマイチ分かりません。。。
cで Stackの実装（入門データ構造とアルゴリズム）

入門データ構造とアルゴリズムから

```lang:stack.c
#include "stdafx.h"

#include <iostream>
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

using namespace std;
#define MAXSIZE 10

struct ArrayStack {
	int top;
	int capacity;
	int *array;
};
typedef struct ArrayStack stack;


struct ArrayStack *CreateStack() {
	struct ArrayStack *S = (struct ArrayStack * )malloc(sizeof(struct ArrayStack));
	if (!S)return NULL;
	S->capacity = MAXSIZE;
	S->top = -1;
	S->array = (int *)malloc(S->capacity*sizeof(int));
	if (!S->array)return NULL;
	return S;
}
int IsEmptyStack(struct ArrayStack *S) {
	return (S->top == -1);
}
int IsFullStack(struct ArrayStack *S) {
	return (S->top == S->capacity - 1);
}
void Push(stack *S,int data) {
	
	
	if (IsFullStack(S)) cout << "Stack Overflow!" << endl;
	else
	{
		S->array[++S->top] = data;
		cout <<"data "<<data<< " is added to "<< S->top+1 <<endl;
	}
}
int Pop(struct ArrayStack *S) {
	if (IsEmptyStack(S)) {
		cout << "Stack is Enpty ";
		return 0;
	}
	else {
		cout << S->array[S->top] << " is pop " << endl;
		return (S->array[S->top--]);
	}
}

void DeleteStack(struct ArrayStack *S) {
	if (S) {
		if (S->array)free(S->array);
		free(S);
	}
}
void show(stack *S) {
	if (IsEmptyStack(S)) 
		cout << "Stack is Enpty ";
	for (int i = 0; i < S->top+1; i++) {
		cout << "No: " << i+1 << " is " << S->array[i] << endl;
	}
		
	
}

int main() {
	stack *st = CreateStack();
	Push(st, 1);
	Push(st, 2);
	Push(st, 4);
	Push(st, 3);
	
	Pop(st);
	//DeleteStack(array);
	show(st);

	return 0;
}
```
実行結果は次の通り。
```
data 1 is added to 1
data 2 is added to 2
data 4 is added to 3
data 3 is added to 4
3 is pop
No: 1 is 1
No: 2 is 2
No: 3 is 4
```
golangで使える 軽量ハッシュアルゴリズム FNV

http://golang.org/pkg/hash/fnv/


influxdbのコードを読んでいて[出てきた](https://github.com/influxdb/influxdb/blob/bafdb7f7cb224e3044c75c2dcbc170694259550c/tsdb/points.go#L617) hash/fnv ってなんだ？と思って調査

## 概要

https://web.archive.org/web/20170403090419/http://www.radiumsoftware.com/0605.html
>非常に軽量でありながら比較的高い分散を持つという特徴がある（ただし，セキュリティ用途に用いることができるほどの耐衝突性は無い）。

## 速度
https://web.archive.org/web/20170403090419/http://www.radiumsoftware.com/0605.html
>最後に簡単な速度の比較を行った。結果として， CRC-32 よりも FNV-1 の方が 3% ほど速いという値が得られた。ただしこの結果については，厳密な測定方法を用いなかったことや，測定環境のセットアップの問題などがあり，あまり深い意味を求めることはできない。

>FNV-1 と CRC-32 は，いずれもシンプルなアルゴリズムでありながらも特徴があり，プロセッサによっては速度に差が出る可能性も考えられる。 FNV-1 は乗算と XOR のみから構成されるが， CRC-32 は XOR が 2 回と AND とビットシフト，それにテーブル参照から構成されている。

>これらの構成を比較すると， CRC-32 は，命令数が速度に直結しやすい（命令レベル並列性が低い）場合や，メモリ参照が高負荷である場合，テーブルがキャッシュ上に維持されないような呼び出され方が繰り返された場合などに，不利になる可能性がある。他方で FNV-1 は，乗算が高負荷である場合に不利になる可能性がある。逆に言えば，乗算さえ速ければ FNV-1 の方が有利であると考えられる。

benchmarkコードは後で書いてみよう。

## FNV-1とFNV-1aの違いは？

http://d.hatena.ne.jp/jonosuke/20100406/p1
> FNV-1a hash
> XORを先にするだけです。変換元のデータが32bitよりも小さい場合はハッシュ値の分散度合いが良くなります。

## とりあえず動かしてみる

http://play.golang.org/p/QsTVpO5Epg
Gradleに補完を効かせる


[クックパッド開発者ブログ](http://techlife.cookpad.com/entry/2014/12/17/182050)に載っていたものです。
Mac向け。

1. [gist](https://gist.github.com/nolanlawson/8694399)から補完に使うソースをダウンロードする → `$ curl -L -s https://gist.github.com/nolanlawson/8694399/raw/gradle-tab-completion.bash -o ~/gradle-tab-completion.bash`
2. `.bash_profile`で読み込むようにする → `source ~/gradle-tab-completion.bash`
3. `md5sum`をインストールしておく　→ `$ brew install md5sha1sum`
4. `$ source ~/.bash_profile`しておく
5. `$ ./gradlew i[TAB]`などで補完が聞くようになるはず！
VimでGradleにシンタックスハイライトを効かせる


[tfnico/vim-gradle](https://github.com/tfnico/vim-gradle)を使えばできました。

1. [NeoBundle](https://github.com/Shougo/neobundle.vim)を導入する
2. `NeoBundle 'tfnico/vim-gradle'`を`.vimrc`に書く
3. vimを立ち上げて`:NeoBundleInstall`を実行する

簡単でした！
Android Studioでgetterやsetterを自動生成するとき

変数名を

```java
private String mText;
```

と宣言している時にgetterやsetterを自動生成すると、

```java
private String getmText() {
    return mText;
}
```

となってしまっていた。

```
Preferences→Editor→Code Style→java→Code Generation
```

Name prefixの部分にmを入れる。

こうすると、以下のようになる。

```java
private String getText() {
    return mText;
}
```

これで自動生成が楽になる。

#### thanks
- [Android Studioで覚えておくと便利なこと](http://qiita.com/sugoi_wada/items/db449d5cbb5c83cb586c)
Python boto - プロファイルの使用方法


botoのプロファイルを使用した時のメモ
検索してもあまり情報がなかったので投稿
#### 動作確認環境

```
OS : Mac OS X 10.9
Python : 3.4.3
boto : 2.38.0
```

#### 設定ファイル

```
cat ~/.boto
[profile <PROFILE>]
aws_access_key_id=<ACCESS_KEY>
aws_secret_access_key=<SECRET_KEY>
```

#### プロファイル使用方法

```
import boto.ec2
conn = boto.ec2.connect_to_region("ap-northeast-1", profile_name='<PROFILE>')
```

#### ※参考
http://makaaso.hatenablog.com/entry/2015/06/03/094352
ビットフラグでシフトを管理してみる

シフト時間なんかを時間（コマ）のチェックボタンで入力および管理をしてみます。
入力フォームには、0時から23時までのチェックボックスが並び、チェックのオン・オフでシフト時間を指定するとします。

```html+php:form.php
<form method="post" action="insert.php">
<?php for($h=0; $h<24; $h++){ ?>
  <label>
    <input type="checkbox" name="hours[]" value="<?php echo $h; ?>">
    <?php echo $h; ?>時
  </label>
<?php } ?>
  <button type="submit" name="mode" value="submit">送信</button>
</form>
```

チェックされた時間を1、チェックされなかった時間を0として文字列にします。
例えば、
9時から18時のシフトなら　000000000111111111100000
9時から11時、15時から18時なら　000000000111000111100000
といった風にします。
その文字列を「2進数→10進数」に変換してDBに登録します。

```php:insert.php
// フォーム処理
if(isset($_POST['mode']) && $_POST['mode'] == 'submit'){
  
  $loginhours = $_POST['hours'];
  $loginbits = '';
  
  for($h = 0; $h < 24; $h++){
    // チェックされていたら1　なかったら0
    $loginbits .= (in_array($h, $loginhours)) ? '1' : '0';
  }
  
  // 2進数から10進数に変換
  $loginbits10 = bindec($loginbits);
  
  // 10進数に変換された数値をDBに登録
  $db->insert('shifttime', $loginbits10, "integer");
}
```

表示する時は、10進数から2進数に戻し、桁数を揃えて、配列に変換して利用します。

```html+php:view.php
<?php
// ログイン可能時間
// DBから shifttime を取得
$shifttimes = (string) $db->shifttime;

$shiftTimeArr = array();

// shifttime を10進数から2進数に変換
$shiftTimeStr = (string) decbin($shifttimes);

// 桁を0で埋める
// e.g. "111111111100000" → "000000000111111111100000"
$shiftTimeStr = sprintf("%024s", $logintimeStr);
// 文字列を配列に変換
$shiftTimeArr = str_split($logintimeStr);

?>
<table>
  <tr>
  <?php foreach($shiftTimeArr as $s){ ?>
    <td><?php echo ($s == 1) ? "●" : "&nbsp;"; ?></td>
  <?php } ?>
  </tr>
</table>
<p>シフトに入っている時間は●で表示</p>
```

今回、シフト時間を例にしてみましたが、いろいろと応用が効きそうです。
時間（コマ）を30分単位にしたい場合は、桁数を2倍にして処理すればよいのですが、既存のデータもすべて桁を合わせる必要があるので、桁を変更する必要がある場合は注意が必要です。
WWDC15 Keynote メモ

#WWDC15

メモ。

https://developer.apple.com/jp/

Keynote では4つのサービス・新製品の発表があった。

* OS X El Capitan
* iOS 9
* watchOS
* Apple Music (MUSIC)



# OS X El Capitan（エル・キャピタン）

http://www.apple.com/jp/osx/elcapitan-preview/

## Spotlight

* 検索の改良
* 自然言語での検索
* Spotlightウインドウをドラッグしたりリサイズできるように

## Metal for OS X

* パフォーマンス改善
* Core Animation, Core Graphics が Metal で動作、UI がヌルヌル軽快に
* Unity, UE, Autodesk, Adobe も対応

## 日本語

* 新しい日本語フォントが4種類追加
 * クレー
 * 筑紫A丸ゴシック
 * 筑紫B丸ゴシック
 * 游明朝体+36ポかな
* 新しい日本語IM
 * 即時変換

（後から判明した情報として、ヒラギノのウェイトがW0 〜 W9までが揃うようになるそうです。）

## その他

* Safariのタブ固定機能
* Mailのスワイプアクション
* 全体的にドラッグ&ドロップでの操作が便利に
* Windowsっぽいウインドウ自動配置機能
 * Split View 的に横に並べたりできる
* 無料アップグレード
* β版今日から

# iOS 9

http://www.apple.com/ios/ios9-preview/

## 検索機能の強化
* Search API, Deep Linking（検索結果からアプリへの導線）
* Siri と Proactive Assistant（Apple版Google Now的な）

## キーボード

* QuickType: ショートカットとドラッグ機能を備えた新しいソフトウェアキーボード
* キーボードショートカットによる App Switcher（Macのcommand-tabみたいなの）

## Multitasking

* SplitView: 画面分割でアプリを同時に実行（iPad Air 2〜のみ？）
 * SplitView はマルチタッチらしい（両方のアプリを同時にタッチできてしまう）
* Slide Over: 右の方に第2アプリを表示できる
* Picture in Picture: 動画プレイヤーなどをアプリの上にオーバーレイ表示できる
* Auto layout, Size classes に対応しておくこと
* App Switcher が Android 風の UI に変更

## Metal

* Metal によるパフォーマンス改善
* Core Animation, Core Graphics が Metal で動作、UI がヌルヌル軽快に

## その他

* メモが便利に
* News: ニュースアプリ（Newsstandの置き換え？）
* アップグレードに必要な容量が1.3GBまで減った（iOS 8の悲劇は繰り返さない）
* Android Migration: "Move to iOS" アプリで Android から iOS にコンテンツの移行が可能
* 2段階認証
* β版今日から

## 対応端末

* iPhone: iPhone 4s〜
* iPad: iPad 2 / iPad mini〜
* iPod: iPod touch 5th〜


# Swift

* Swift 2
* オープンソース化
* Linuxにも対応
* Swift 1.2 to 2.0 Migrator
* Protocol Extension
* Objective-C generics
* コンパイル時間改善
* Markdown でコメントが書ける


# watchOS 2

* ネイティブアプリ解放
* Core Graphics, Audio, ImageIO, Video, Animation, NSURLSession, HealthKit, ClockKit, EventKit, HomeKit, MapKit ...etc
* デジタルクラウン、Taptic Engine の API が解放
* WiFiに直接接続
* β版今日から


# その他

* Apple Pay が UK でも展開（日本は無し）
* Passbook → Wallet に改称
* Apple Map の乗り換え案内と地下施設表示の追加（一部都市のみ）
* ゲーム向けの新しいAPI: GameplayKit, Model I/O, ReplayKit
* HomeKit拡充、iCloud Remote Access
* UI Testing in Xcode
* Xcode 7


# Apple Music (MUSIC)

* 新しい音楽配信サービス
* 「分散している音楽体験をひとつに集約」らしい
* アーティストとつながる（Ping の再来か？）
* iTunesライブラリとも連携
* プレイリストやアルバムの共有
* 6月30日から100カ国以上で展開予定
* iOS 8.4, Windows, Android
* 月額$9.99、3ヶ月無料
WWDC2015をまとめてみた

あまりにも雑なので(眠かったので勘弁して下さい)
社内共有用にまとめます。
多分違うところが多々あるので、ご指摘いただければと思います！！
(Tryとして英語オンリーで聞いてました＆ねむい)

## 目次
- ハードウェア
    - 一切なかったで！！！
- OS 
    - iOS9
    - Mac OS X 10.11
    - watchOS
- サービス
    - Apple Music(月額課金サービス)

## ハードウェア
なかったんやで！

## OS
### Mac OS X
【バージョン】
OS X 10.11 __「El Capitan（エル・キャピタン）」__

【リリース】
デベロッパーベータは今日から
公開は秋

Yosemiteシェアは55％

- マウスをシェイクするとカーソルが拡大する遊び心入り
- Apple純正アプリのUX強化が主
- Safariも強化
    - faviconの設定が大事になる
- Spotlightも強化
    - 単語ではなく文章での検索が可能
        - 今週の金曜の天気は？　てきな
- 単一の画面でデュアルモードが出来る(MultiTasking的なやつ)
- その他パフォーマンスの向上
	- アプリの起動が1.4倍
	- PDFのオープンは4倍
- MacOSXにも「Metal」が入る「Metal for Mac」
    - これによりグラフィック系ソフトのパフォーマンスが上がる・・・かも？
- 日本語フォントが4つ追加！
	- クレー
	- 筑紫A丸ゴシック
	- 筑紫B丸ゴシック
	- 游明朝体+36ポかな


### iOS 9
【バージョン】
iOS 9

【リリース】
デベロッパーベータは今日から
公開は秋

8のシェアは83％ (Android5は12％だぜ！！！！)

#### Siriが賢くなります
- UIも変わります
- アシスタントからプロアクティブアシスタントへ
- 電話がかかってきた時、誰かわからなかったら「多分この人」ってのを表示してくれる
- SearchAPI
    - DeepLinks
- ヘッドフォン、イヤフォンをさしただけでミュージックアプリが立ち上がってくれる

#### Apple Pay
「イギリス」も使えるようになりました
日本では使えないので詳しいことは省略

#### Note App
タイトルや本文、リストなどの文章をデコレートする要素が追加される
手書きも行けるようになった。
機能追加はNoteが使えるどのデバイスも共通

#### Map App
Transitを追加
電車などの乗り換え案内や、グーグルマップの道案内的な奴が追加
ただし、「アメリカ」と「中国」のみ。
まぁ日本は難しいですよねー。

#### News App
Apple純正アプリの追加「News」
Flipboardぽいデザインで、自分の好きな雑誌やカテゴリーを選んで、自分だけのニュースフィードを作れる
・・・これってFlipboardでは？って感じ？
ニュース内では画像の他に動画も見れて結構リッチ
アメリカの有名雑誌が最初から参画するとのこと。
ちなみにアメリカ、イギリス、オーストラリアだけです。

#### iPad向け
- MultiTaskingを導入
- PCのショートカットなどが使えるようになる
- MacOSでのアプリの切り替えのようなUIを実装
- マルチタッチできます

##### MultiTasking
待望の昨日が導入
右側にSafariを起動しながら、左側にツイッターを表示する的な感じ。
Windows8のそれに近い
ビデオを再生しながら他のアプリをフルスクリーンで操作可能

#### その他アップデート
全体のパフォーマンスや、バッテリー持ちの改善、
セキュリティなどのアップデート

#### デベロッパー向け
- GamingAPI
    - 機能を追加(フレームワークとか)
- HomeKit
    - セキュリティシステムなどの追加
    - 各機能のアップデート
    - すべてiCloudで管理できる
- CarPlay
- Swift
    - Swift2のリリース
    - オープンソース化！！！！！！！！
    - iOS MacOSX and Linux


### watchOS
【バージョン】
watchOS 2

【リリース】
デベロッパーベータは今日から
公開は秋
もちろん無料


NEWバージョン
名称は「watchOS」
- TimePieceのアップデート
    - 時計部分に画像やアルバムアート、タイムラプスが使える
    - デベロッパーに機能を公開
    - タイムトラベル機能を追加
- コミュニケーションアプリも機能追加
    - メールにリプライ機能を追加するなど・・・
- ヘルスケアアプリもアップデート
- ApplePayもアップデート
- Transitも
- SiriもiOS同様にアップデート

開発者向け
WatchKitのアップデート
WiFiネットワークに繋がる
録音機能、Audio、ビデオが使える
HealthKit公開
HomeKit公開
Accelerometer公開
TapticEngin公開(車向け)



## サービス
### Apple Music (one more thing枠)
Appleが提供する新しい音楽サービス
Apple Announces 'Apple Music' Streaming Music Service
"All the ways you love music, all in one place."
Revolutionary Music service
  - for you
  - new 
  - radio
  - Connect

24/7 global radio
Connecting fans with artists
UIが非常に面白い
アーティストが投稿した動画なども見れる(?)
$9.99/月で使えて、最初の3ヶ月は無料
家族共有は6人までで$14.99/月
6/30から
Windows、Androidでも使える。
Apple Music launches in iOS 8.4 later this month in 100 countries, with a new version of iTunes for Mac and Windows. Android coming in fall.

## まとめ
終わったら4:30とか。。。辛いです。。。
最後の方雑(AppleMusic)なので、後でちゃんとしたものにします。
イテレータから示すものの型を取り出す

#状況説明
`std::accumulate`を使ってコンテナ内の数値の平均を求める関数を書いた。
(正確に言えば`first`から`end`までの平均)

```cpp
template<typename InputIt>
double mean(InputIt first, InputIt last,size_t size){
	return std::accumulate(first,last,0.0) / size;
}
```
平均なのだから`double`で帰ってくれば良いという考え。
#本題
`int`のコンテナからも`double`の結果を返すようなことになるのは腑に落ちない。
引数のイテレータから型を取り出すように変更。
~~ついでに要素数もイテレータの距離で計算するようにした。~~

*2015/06/09 追記:イテレータ間の距離を`(last-first)`で求めるには、ランダムアクセスイテレータが必要らしい。`std:distance(first,last)`なら他のイテレータでも問題ないそうなのでそっちに変更。*
  
```cpp
template<typename It>
using v_type = typename std::iterator_traits<It>::value_type;

template<typename InputIt>
v_type<InputIt> mean(InputIt first, InputIt last){
	return std::accumulate(first,last,v_type<InputIt>(0)) / std::distance(first,last);
	//return std::accumulate(first,last,v_type<InputIt>(0)) / (last-first);
}
```

型名が`iterator_traits`のせいで長いので、エイリアステンプレートで別名をつけた。

#疑問
~~上のやつの方が「イテレータ使ってる感」は強いが、このシチュエーションなら次のコードでよいのではないだろうか? 気持ち以上の差はあるのだろうか?~~

~~*2015/06/09 追記:答えを教えていただいた。この書き方だとメモリ領域が不連続なコンテナ(`std::list`など)には使えないそうだ。
`std::vector`などに使う分にはこれでよいようだが。*~~

2015/06/09 追記 : なにか考え違いをしていたようだ。この形はC配列か`std::array`とかが対象でないと手元の環境(clang 3.6.1)ではコンパイルが通らない。イテレータは一般にポインタに変換することはできないようだ。

```cpp
template<typename T>
T mean(T* first, T* last){
	return std::accumulate(first,last,T(0)) / (last-first);
}
```
#`iterator_traits`
今回のシチュエーションでは使わないが、`iterator_traits`はイテレータが示すものの型(`value_type`)以外の情報も含んでいる。
たとえば引き算の結果の型(`difference_type`)とか、イテレータ自身の種類(`iterator_category`)とか。
さくらVPSにdocker環境を構築したメモ


* うわさのdockerにmysqlをぶっこんで何かあったら気軽に捨てたい。
* VPSはきれいなままでいてほしい

# dockerを入れる

```shell-session
sudo su -
yum -y update
yum -y install docker-io mysql
vim /etc/sysconfig/docker
- other_args=""
+ other_args="-dns 8.8.8.8"
# imageをとってくる
docker pull mysql
```

## mysql環境を構築する

```shell-session
sudo docker run --name sample-mysql -e MYSQL_ROOT_PASSWORD=hogehoge -p 3306:3306 -d mysql:latest
mysql -uroot -p -h0.0.0.0
Enter password:
<中略>
mysql >
```

**v-追記**

↑これだとデータ永続化がちゃんとできていない。
ホストの適当なディレクトリに -v オプションで関連付けしてあげるとよいらしい。というかそうすべき。ちょろ検証では当然不要。

```shell-session
sudo docker run --name sample-mysql -e MYSQL_ROOT_PASSWORD=hogehoge -v /var/lib/sample-mysql:/var/lib/mysql -p 3306:3306 -d mysql:latest
```

あと、本当は、-h オプションでホスト名を指定しておいた方があとあとwebから呼ぶときに便利かもしれない。未検証。

**^-追記ここまで**

## iptablesで縛る

```shell-session
sudo iptables -A INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT
sudo iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 3306 -j ACCEPT #すきなリモホ
sudo iptables -A INPUT -p tcp --dport 3306 -j REJECT #基本拒否
sudo service iptables save
sudo service iptables resatart
```

おしまい。
さくらVPSのiptablesをとりあえず設定


# 裸のLinuxはやばいのでiptablesで防御するメモ。

[ここを参考にした](http://blog.nzakr.com/vps-setting/)

```shell-session
#サーバへの攻撃対策
sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

#通信内容の制限
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p icmp -j ACCEPT

#確立済みの通信を許可
sudo iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#httpのポートを指定(80)
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
#httpsのポートを指定(443)
sudo iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
#sshのポートを指定(default:22)
sudo iptables -A INPUT -p tcp -m tcp --dport 64188 -j ACCEPT

#パケットの設定
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT

#設定を保存
sudo service iptables save
#再起動
sudo service iptables restart
```
さくらVPSにgit共有リポジトリを構築する。


# 自分しか使わないけど、リモートリポジトリがほしい。

超参考：[Gitリモートリポジトリの作り方](http://qiita.com/nekogeruge_987/items/326ba157d5552f0076be)

## ユーザー作成～リポジトリ構築

```shell-session
$ sudo su - 
$ adduser git
$ mkdir /var/lib/git
$ chown git:root /var/lib/git
$ sudo su - git
$ mkdir /var/lib/git/[リポジトリ名].git
$ cd /var/lib/git/[リポジトリ名].git
$ git --bare init --shared
$ mkdir ~/.ssh
$ chmod 0700 ~/.ssh
$ touch ~/.ssh/authorized_keys
[公開鍵を登録しておく]
$ chmod 0600 ~/.ssh/authorized_keys
```

## リモートリポジトリ設定

ほかのホストから・・・

```shell-session
vim ~/.ssh/config
Host git-host
    HostName    xxx.xxx.xxx.xxx
    Port        xx
    IdentityFile ~/.ssh/id_rsa
    User        git
# User を先ほど作成したgitにして、気軽につながるようにする。
git remote add origin ssh://<config定義したホスト名:git-host>/var/lib/git/nouka.git
git push origin master
```

できた。
mingwでconfigureに設定しとくといいもの

autoconfのアレでmingwに合わせるときによくやるやつ。 
64bit環境入れた時の覚書。

```
./configure --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --enable-static --enable-dynamic
```
STLコンテナのインスタンスから要素の型を取得する

こんなコードを書く必要性に迫られた。

```cpp
template<class T>
struct foo{
 T operator()( ... ){ ... };
};
 
std::array< double, ... > a = {{ ... }};
bar( foo<  >() ); // <  >の中に a の要素の型 double を入れたい
```

別に手打ちで`double`と書けば済む話なのだが、何とか型を`a`から引っ張り出したい。

そこで調べてみたら、stack overflow に答えがあった。
[http://stackoverflow.com/questions/12391814/how-to-get-element-type-from-stl-container-instance](http://stackoverflow.com/questions/12391814/how-to-get-element-type-from-stl-container-instance) (英語)

次のようにすれば良いようだ。

```cpp
bar( foo< decltype(a)::value_type >() );
// decltype(a)::value_type は double
```

結構使える機会はあると思うのだが、あまりヒットしなかった。
ひょっとしてこんなことをしなければならないそもそもの設計が間違いなのだろうか。
ファイルの世代管理が辛いときに使うやつ

ファイルの世代管理が辛いときに使うやつ

```bat
@echo off

:: file_path を backup_dir にコピーする。
:: コピーする際にファイル名に日付を付与する(C:\backup_dir\fileName_yyyymmdd.ext)。
:: 既に同名のファイルが存在する場合は、更に連番を付ける(C:\backup_dir\fileName_yyyymmdd_n.ext)。

:: ユーザ定義変数
set file_path=hogehoge.ext
set backup_dir=C:\example\fugafuga

:: ユーザ定義変数のエラーチェック
if not exist %file_path% (
    call :GET_FULLPATH %file_path%
    set file_path=%RETURN%
    echo バックアップ対象のファイルが存在しません。 %file_path%
    echo 処理を終了します。
    echo;
    pause
    exit /b
)

if not exist %backup_dir% (
    call :GET_FULLPATH %backup_dir%
    set backup_dir=%RETURN%
    echo バックアップ先が存在しません。新しく作成します。
    echo mkdir %backup_dir%
    mkdir %backup_dir%
    echo;
)
if %errorlevel% neq 0 (
    echo バックアップ先の作成に失敗しました。
    echo 処理を終了します。
    echo;
    pause
    exit /b
)

:: 変数の初期化
call :GET_YYYYMMDD
set yyyymmdd=%RETURN%

call :GET_BASENAME %file_path%
set baseName=%RETURN%

call :GET_EXTENSION %file_path%
set extension=%RETURN%

call :BUILD_PATH %backup_dir% %baseName%_%yyyymmdd%.%extension%
set backup_path=%RETURN%

set /a suffix=0
:LOOP
    if not exist %backup_path% goto :BREAK
    set /a suffix=suffix+1
    call :BUILD_PATH %backup_dir% %baseName%_%yyyymmdd%_%suffix%.%extension%
    set backup_path=%RETURN%
    goto :LOOP
:BREAK

:: バックアップの実行
copy %file_path% %backup_path% > nul

:: 実行結果の確認
if %errorlevel% neq 0 (
    echo ファイルコピーに失敗しました。
    echo 処理を終了します。
    echo;
    pause
    exit /b
)

:: 実行結果の出力
call :GET_FULLPATH %file_path%
set file_path=%RETURN%

call :GET_FULLPATH %backup_path%
set backup_path=%RETURN%

echo ファイルをコピーしました。
echo From:	%file_path%
echo To  :	%backup_path%
echo;
pause
exit /b


:: サブルーチンの定義

:: システムの日付を YYYYMMDD 形式で取得する
:GET_YYYYMMDD
set RETURN=%date:/=%
exit /b

:: パスのフルパスを取得する。
:: 第一引数としてファイルパスを受け取る。
:GET_FULLPATH
set RETURN=%~dpnx1
exit /b

:: ファイルパスからファイル名と拡張子を取り出す。
:: 第一引数としてファイルパスを受け取る。
:GET_FILENAME
set RETURN=%~nx1
exit /b

:: ファイルパスから拡張子を取り出す。
:: 第一引数としてファイルパスを受け取る。
:GET_EXTENSION
set RETURN=%~x1%
set RETURN=%RETURN:~1%
exit /b

:: ファイルパスからファイル名(拡張子除く)を取り出す。
:: 第一引数としてファイルパスを受け取る。
:GET_BASENAME
set RETURN=%~n1
exit /b

:: ファイルパスから親ディレクトリのパスを返す。末尾の \ は付いたまま。
:: 第一引数としてファイルパスを受け取る。
:GET_PARENT_DIR
set RETURN=%~dp1
exit /b

:: 末尾の \ の有無に関わらず文字列を連結してWindowsパスを作る。
:: 第一引数としてディレクトリパスを受け取る。
:: 第二引数としてファイル名を受け取る。
:BUILD_PATH
setlocal
set parent=%1
set child=%2
set tail=%parent:~-1,1%

if %tail% EQU \ (
    set RETURN=%parent%%child%
) else (
    set RETURN=%parent%\%child%
)
endlocal && set RETURN=%RETURN%
exit /b

```
PandocのカスタムWriterでMarkdownからはてな記法に変換

# PandocのカスタムWriter
pandocはデフォルトでもmarkdown、docx、latexなど多様なフォーマットに対応しているが、当然ながら「はてな記法」などローカルなフォーマットには対応していない。
ところが、pandocには、実はLuaを使って独自のWriterを書く機能がある。
これを使えばはてな記法だろうがwiki記法だろうがどんなフォーマットにでも書き出すことができる。

- [Custom Writer](http://pandoc.org/README.html#custom-writers)
- [日本語訳](http://sky-y.github.io/site-pandoc-jp/users-guide/#custom-writers)

以下のコマンドでサンプルのLuaスクリプトを出力することができる。サンプルはHTMLへの書き出しを行なうWriterだ。これを改造し、[はてな記法](http://hatenadiary.g.hatena.ne.jp/keyword/%E3%81%AF%E3%81%A6%E3%81%AA%E8%A8%98%E6%B3%95%E4%B8%80%E8%A6%A7)への変換を試みてみよう。

```shell-session

$ pandoc --print-default-data-file sample.lua
```

基本的には、以下のように、ドキュメントの各要素に対応する関数を書き、変換後の文字列を返すだけだ。

```lua
function Link(s, src, tit)
  return "[" .. src .. ":title=" .. tit .. "]"
end
```

以下がsample.luaを修正し、はてな記法に対応させたものだ(一部適当)。私はLuaを書いたのははじめてだが、さほど苦労せず、1時間程度でサンプルを修正できた。
https://gist.github.com/takada-at/e974fb7a23800cb4e448

## 実行
実行時は、以下のようにluaスクリプトへのパスをpandocのフォーマットとして指定する。

```shell-session

$ pandoc pandoc -t hatena.lua
```

```sample.txt
# 今日の日記

今日のご飯。

ゴハン   メニュー
------ ---------
朝御飯  パン
昼御飯  カレー
夜御飯  焼き肉
```

```shell-session
$ pandoc -t hatena.lua sample.txt 
* 今日の日記

今日のご飯。

|*ゴハン|*メニュー|
|朝御飯|パン|
|昼御飯|カレー|
|夜御飯|焼き肉|
```
勉強会7つ道具 +α

[Creators MeetUp](https://www.facebook.com/cmujp)など勉強会をちょくちょく開催するにあたって持参している7つ道具を紹介します。

この7つ道具は1つのバッグに入れてすぐに持ち出せるようにしてあります。

これが揃っていれば大抵のことには対応できる基本7点セットなので、これから勉強会を運営する人してる人は参考にしてみてください。

もちろん、勉強会の内容や会場に合わせて適宜必要なものをプラスしてくださいね。

#備品準備のポイント

## 当日の流れを細かくイメージして

会場設営から開場、受付、開始、休憩、終了、懇親会、片付け、撤収まで、当日やることを全て順番に細かくイメージして、必要なものをリストアップしましょう。

ここで大事なのは「何をするか」ではなく「何を使うか」です。「チラシを並べる」ではなく「カッターで箱のテープかヒモを切ってチラシを出して並べる」でないとダメです。

## 会場企業に借りないで済むように

テーブルやイスなど会場設備は別として、持ち歩ける一般的なものは当日会場で借りないで済むように心がけましょう。

当日は担当者さんに会場自体のことでおんぶにだっこであれこれお世話になるので、それ以外のところでは手をわずらわせないようにしましょう。

# 7つ道具

![2015-06-08 18.38.52.jpg](https://qiita-image-store.s3.amazonaws.com/0/27176/292e6008-f691-a800-b2e4-eef5207adb11.jpeg)

## 1. iPhone＆スタンド

- タイマーアプリ表示
- 開始前、休憩、終了後のBGM再生
- 古くてOK。他のスマホでもタブレットでもOK

演台にタイマーアプリで残り時間を表示するとしないでは、時間通りに進行できるかどうかを大きく左右します。

## 2. ビデオ＆三脚

- アーカイブ録画
- 動画配信

アーカイブを残して、可能であれば公開しておくのはとても大きな資産になります。

当日参加した人もしなかった人も見られるし主催者やスピーカーにとって貴重な振り返る資料になります。

## 3. 電源タップ(5m×2本)

- ビデオ用
- 自分or演台用

「電源完備」という会場でも持参しましょう。コンセントはたくさんあっても席から届かなかったり、Macのアダプターが入らなかったりすることもあります。

## 4. VGAアダプター＆HDMIアダプター

スピーカーのMac率は高いので主催者はアダプターを揃えましょう。全てのスピーカーがアダプターを持参してくれるとは限りませんし、会場のアダプターが接触が悪かったりしても対応できます。

まだまだHDMI端子がないPCユーザーもいるのでHDMIアダプターもあったほうが安心です。

## 5. VGAケーブル(10m)

会場のケーブルが何らかの不具合を起こしたり、演台の位置の関係などで届かない場合などに長いケーブルがあると命拾いします。

アダプターも同じことが言えますが、勉強会でスライドが映せないというのは致命的なトラブルなのでプロジェクター関連のパーツは自前で持っていても損はないでしょう。

## 6. クリップボード＆コピー用紙(10枚程度)

- クリップボード（受付リスト用）
- コピー用紙
- イベント名や「受付」と印刷した紙もあると尚よし

受付リストは不安定な状態でも記入できるようにクリップボードに挟んで使いましょう。

急な貼り紙やメモが必要なときに対応できるように白紙のコピー用紙を10枚くらいでいいのでクリップボードに挟んでおきましょう。

## 7. ステーショナリー

- ボールペン
- マジックペン
- セロテープ
- カッター

このあたりをおさえておけば会場で張り紙や段ボールの開梱などが発生しても対応できるでしょう。

これらは会場で誰かに貸して忘れてしまったりどこか行ってしまうことがよくあるので、100円で何個か入っている最安のもので十分です。行方不明になっても消耗品だと思ってクヨクヨしないようにしましょう。

## +α. 釣り銭

- 千円札
- 100円玉
- それを入れるポーチ

勉強会や懇親会の会費を会場で受け取る場合はお釣りを用意しておきましょう。[Creators MeetUp](https://www.facebook.com/cmujp)の場合は参加費が500円なので千円札✕15＋500円玉✕10を毎回持参しています。これだけあれば100人くらいまでは十分対応できます。

大きいのしか持ってない人は待っててもらうとか、細かいのがたまったら回収に行くとかはやめましょう。ただでさえ慌ただしい現場で来場者に個別対応するのはとてもコストがかかることです。

受付のスムーズさスピーディさは来場者の勉強会に対する印象に影響します「1人の対応は手際よく1回で済ませる」これ大事です。
SpriteKitを試してみる11 pathを使ってホーミング


![iphonePlay_20150608.gif](https://qiita-image-store.s3.amazonaws.com/0/40693/d7675bf1-da7e-a7d6-7dbd-c4753a37ace0.gif "iphonePlay_20150608.gif")

敵がうねうね動いてプレイヤーに向かってきたり、敵の弾がこちらに向かって来るようにして難易度を上げてみる。

黄緑の敵は出現したタイミングでのプレイヤーの位置を目指して、うねうね動いて接近してくる

```createEnemy()
if (enemy.enemyColor == SKColor.greenColor()) {

	// プレイヤーの位置
	let dragon: DragonUnit = childNodeWithName("dragon") as! DragonUnit
	// CGPath の宣言
	let path:CGMutablePath = CGPathCreateMutable()
	let y = Int(arc4random() % 450) + 150
	// 始点を決定
	CGPathMoveToPoint(path, nil, CGRectGetMaxX(self.frame), CGFloat(y))
            
	var cp1x : CGFloat = (2 * CGRectGetMaxX(self.frame) + dragon.position.x)/3
	var cp1y : CGFloat = CGRectGetMinY(self.frame)
	var cp2x : CGFloat = (CGRectGetMaxX(self.frame) + 2 * dragon.position.x)/3
	var cp2y : CGFloat = CGRectGetMaxY(self.frame)
                        
	//最終目標はプレイヤー
	CGPathAddCurveToPoint(path, nil, cp1x, cp1y, cp2x, cp2y, dragon.position.x, 	dragon.position.y)

	//プレイヤーの位置から画面の端までの動き                     
	cp1x = dragon.position.x - (CGRectGetMaxX(self.frame) - dragon.position.x)/3
	cp1y = CGRectGetMinY(self.frame)
	cp2x = dragon.position.x - (CGRectGetMaxX(self.frame) - dragon.position.x)*2/3
	cp2y = CGRectGetMaxY(self.frame)
            
	CGPathAddCurveToPoint(path, nil, cp1x, cp1y, cp2x, cp2y, 	CGRectGetMinX(self.frame), CGRectGetMidY(self.frame))
            
	//作ったCGPathをSKActionにセット
	let sequenceLeft = SKAction.followPath(path, asOffset: false,orientToPath: false, duration: 3.0)
	let remove = SKAction.removeFromParent()
	let sequence = SKAction.sequence([sequenceLeft, remove])
           
	// 敵SKSpriteNodeのrunActionにセット 
	enemy.runAction(sequence)
}
```

黄色の敵の場合は弾をプレイヤー目指して撃ってくる

```
var enemyShot1Last:CFTimeInterval! // 敵ショットタイミング

override func update(currentTime: CFTimeInterval) {
    
  //敵ショット
     if(enemyShot1Last == nil){
         enemyShot1Last = currentTime
     }
        
     if(enemyShot1Last+1.5 <= currentTime){
         if(!self.paused){
             enemyShot1Fire()
         }
         enemyShot1Last = currentTime
     }
}
```

敵の弾は黄色の敵が画面上にある場合のみ出力する。

```createEnemy()
if (enemy.enemyColor == SKColor.yellowColor()){
	enemy.name = "yellow"
}
```

敵の弾はプレイヤーを目指しつつ、画面の外にまで向かう必要があるので出発点からプレイヤーまでのx軸とy軸の距離と、画面の端（x軸＝０）から端時点のでy軸を求める

```enemyShot1Fire
if((childNodeWithName("yellow")) != nil){
	let action = SKAction.animateWithTextures([b1, b2, b3, b4], timePerFrame: 0.5)
	fire.runAction(SKAction.repeatActionForever(action))
	fire.size = CGSizeMake(60, 60)
            
	fire.position.x = enemyYellow.position.x + 5
	fire.position.y = enemyYellow.position.y
            
	let dragon: DragonUnit = childNodeWithName("dragon") as! DragonUnit
            
	let path:CGMutablePath = CGPathCreateMutable()
    
    // ｙの座標算出
	let y2 : CGFloat = fire.position.y -
	 (fire.position.x * (fire.position.y - 	dragon.position.y))/
	 (fire.position.x - dragon.position.x)
            
	CGPathMoveToPoint(path, nil, fire.position.x, fire.position.y)
	CGPathAddLineToPoint(path, nil, 0, y2)
	
	fire.runAction(sequence)
            
    self.addChild(fire)
}
```
まだDockerで消耗してるの？


タイトルはネタです。すいません。それほどDockerを毛嫌いしているわけでもないのですが、Systemdを採用しているLinuxを使う場合、仮想環境を簡単に作成できるようになっています。具体的には、[Systemd-nspawn](https://archlinuxjp.kusakata.com/wiki/Systemd-nspawn)を使います。

例えば、Arch Linuxの場合は、以下のようにします。

```bash:
# コンテナのディレクトリを作成する
$ mkdir -p ~/Container/{arch-base,arch-base-devel,arch-desktop}

# コンテナにツールをインストールする
$ sudo pacstrap -i -c -d ~/Container/arch-base base

# コンテナの起動
$ sudo systemd-nspawn -bD ~/Container/arch-base

# 起動時に自動でコンテナを起動する
$ sudo mv ~/Container/arch-base /var/lib/container/arch-base
$ sudo systemctl start systemd-nspawn@arch-base
$ sudo systemctl enable systemd-nspawn@arch-base
```

特別なツールをインストールする必要がないのでいいですね。そして、シンプルなので非常にわかりやすいです。

インストールするパッケージ上の関係で、ちょっとだけ、Arch Linuxについて解説します。

Arch Linuxは、Shellを多用しないなら、`base`のみで使えるようになります。つまり、インストールする際、`pacstrap /mnt base`となるわけです。しかし、これでは設定自体やりにくいし、不便なので、殆どの人は、`base-devel`をインストールすると思います。
Rails + PostgreSQL 環境で気軽に全文検索できる PGroonga を使ってみた

**注意: 筆者は Rails / PostgreSQL 初心者です。指摘・異論を歓迎します**

最近 [Wiki のなりそこないのような Rails アプリ](https://github.com/sohosai/jiwiki-rails)を作っていて、それに PGroonga を組み込む機会があったので紹介します。

# 準備 before Rails

開発に使うマシンに Groonga と PGroonga をインストールします。詳しくは [Groonga のドキュメント](http://groonga.org/ja/docs/install.html) と [PGroonga のドキュメント](http://pgroonga.github.io/install/) を参照してください。メジャーどころはだいたいサポートされているので、簡単にインストールできると思います。

# 準備 on Rails

PostgreSQL の PGroonga 拡張を有効にして、インデックスを作成する Rails のマイグレーションを書きます。

以下は、`versions` テーブルの `body` カラムに PGroonga のインデックスを張る例です:

```rb
class EnablePGroonga < ActiveRecord::Migration
  def change
    enable_extension 'pgroonga'

    add_index "versions", ["body"], name: "pgroonga_index", using: :pgroonga
  end
end
```

`add_index` メソッドのオプションとして `using: :pgroonga` を渡しているのがキモです。

書いたらマイグレーションを実行してください。

# 検索

[Groonga のクエリ記法](http://groonga.org/ja/docs/reference/grn_expr/query_syntax.html)を使って全文検索する scope は以下のようになります:

```rb
class Version < ActiveRecord::Base
  scope :full_text_search, ->(query) { where("body @@ ?", query) }
end
```

これでひとまず検索できるようになりました。

```rb
Version.full_text_search "いちご あおい 蘭" # AND 検索
Version.full_text_search "スターライト OR ドリームアカデミー" # OR 検索
Version.full_text_search "いちご -あかり" # NOT 検索: (いちご かつ (あかり を含まない))
```

scope なので、当然 AR っぽいメソッドチェーンをしてもいい感じになってくれます:

```irb
irb(main):001:0> Version.where('created_at > ?', 10.days.ago).full_text_search "いちご"
  Version Load (26.5ms)  SELECT "versions".* FROM "versions" WHERE (created_at > '2015-05-29 14:42:21.335443') AND (body @@ 'いちご')
```

クエリ構文を用いない、一つの単語のみによる単純な検索は `%%` 演算子で実行できます。

```rb
class Version < ActiveRecord::Base
  scope :one_word_search, ->(query) { where("body %% ?", query) }
end
```

また、[PGroonga は `LIKE` 演算子もサポートしている](http://pgroonga.github.io/tutorial/#like-operator)ので、それを使用しているクエリがあれば自動的に PGroonga での検索に切り替わります (`column LIKE %keyword%` と `column %% keyword` は等価)。

SQL の演算子についての詳細は [PGroonga のドキュメント](http://pgroonga.github.io/tutorial/#operators-for-full-text-search)を参照してください。

# おわり

前述したとおり初心者ですがなんなく検索できました。Elastic (旧 Elasticsearch) や Solr のように外部にいろいろ用意したりする必要がなく、またコードへの変更もかなり小さく抑えることができるのでかなり手軽でした (依存 gem は増えません！！！)。

本番環境は internal なものなので紹介はできないのですが、Groonga だけあってとても快適に動いています。
踏み台経由でRDSへSSHポートフォアリングする方法

RDSへの接続方法

メモっすよ。

```bash
$ ssh -f -N -C -L 13306:rdsname.ap-northeast-1.rds.amazonaws.com:3306 username@ssh-server-name -p 22
$ mysql -h 127.0.0.1 -u mysql_user_name database_name -P 13306 -p
```

まあこんなかんじです。
停止させるときは、必殺技の「kill プロセス番号」ですね。
AWS IOTハッカソン発表事例AWS構成説明（１）

6/2にAWS Summit 2015内で行われたAWS Summit Tokyo IOT ハッカソン2015に出場してきました。
ハッカソンは5/9に行われたアイデアソンで通過した５チームで行われたのですが、実質３週間で作り上げないといけなかったためかなりハードでした。
我々はホームロボットと家庭用センサー端末を利用したアイデアを提案したのですが、その中で私はクラウド側（AWS側）の構築とアプリケーションの開発及びホームロボットの基本ロジック部分の実装を担当しました。
今回はその中でAWS側を中心に内容を簡単にまとめたいと思います。

#■その前に今年のAWS Summitについて

説明の前に今年のAWS Summitの感想を少しばかり。
ここ数年、AWSはIaaSからPaaSへの移行が進んでいましたが、昨年はCognitoやMobile Analyticsなどが発表されるなど、モバイル端末との接続を強く押し出していたような印象を受けてました。その流れのを受けて、今年の潮流は、ずばり「IoT/M2M」だったように思います。モバイルからの接続という昨年までの流れを一歩進めて、あらゆるデバイスが接続され、それらから得られる大量のデータを溜め込み、それを解析して活かすという部分に今年はフォーカスが置かれていたように感じました。そういう方向性の中でAWS ハッカソンが行われたのは自然の流れだったのかもしれません。

#■AWSについて

実は、私自身これだけちゃんとAWSを触ったのははじめてでした。
業務上でAWSを利用することがあったとしても環境構築はインフラチームの方がやってくれていましたし、個人で触っていたといってもEC2インスタンスを立ててDocker上でGitLabを立てるとかそれぐらいでした。
なので、今回はかなり初心者レベルからのスタートでした。
そのためかなり難儀しましたが、その分学んだ部分も多かったと思います。


#■システム構成概要

やっと本題です。
今回はまず我々のシステム構成を簡単に紹介させていただきたいと思います。







![aws_kousei.png](https://qiita-image-store.s3.amazonaws.com/0/64855/b900ca56-c217-385c-cfe3-87763e7939ea.png)

我々のシステムは大きく分けて二つの処理の流れがあります。
1. アプリケーション側からホームロボットを遠隔操作するための流れ
2. 家のセンシング情報を集約→集計してアプリケーションに受け渡す流れ

1.については、昔ながらにEC2インスタンスを立てて、その上にMQTTサーバ（正式には　MQTT Brokerというのですね）を立てて構築しました。

2.については、S3にログが保存されたことを検知してLamdaで解析処理を実行し、結果をDyanamoDBに登録するという流れになっています。またアプリからDynamoDBへアクセスするための権限付与のためにCognitoも利用しています。

1.はAWSの中でもレガシーな環境構築が必要で、2.については比較的新しめのサービスを利用しているという点で両方を同時に学べたのは非常に良かったと感じています。

次回から何回かに分けて説明を行いたいと思います。
自分自身の備忘録も兼ねて、基本的なことも書いていきたいと思います。
（残バグ修正したり、やり残したこともトライしながら書くと思うのでペースは遅いかもしれません。。。。）
Table化 

# 始めに
## Table化とは？
* 同じような条件文をまとめて短くコーディングするテクニックである。
* 例えば・・・・  
経験値によってこのレベルになるみたいにしてると凄い行なる  
敵のAIで体力がこのぐらいになったら状態が変わるような行もすごい行になる  
共通部分が必ずあるはずなので、それを見つけてテーブル化にしてあげる  
これができるととても短い行でプログラムが描けます  
必要な技術：構造体、配列、for文、if文  

# よくあるコード
*　例文(敵のAIに関して)

```cpp:ExampleSentence
int hp = 80;
enum STATE
{
	ATTACK_TYPE1 = 0,
	ATTACK_TYPE2,
	ATTACK_TYPE3,
	ATTACK_TYPE4,
	ATTACK_TYPE5,
};
int state = STATE::ATTACK_TYPE1;
if (hp <= 100 && hp > 80)
{
	state = STATE::ATTACK_TYPE1;
}
else if (hp <= 80 && hp > 60)
{
	state = STATE::ATTACK_TYPE2;
}
else if (hp <=60 && hp > 40)
{
	state = STATE::ATTACK_TYPE3;
}
else if (hp <= 40 && hp > 20)
{
	state = STATE::ATTACK_TYPE4;
}
else if (hp <= 20 && hp > 1)
{
	state = STATE::ATTACK_TYPE5;
}
	
std::cout << "敵の攻撃パターンは : " << state << std::endl;
```
### やばいポイント！！
* if elseの条件分がほぼ同じである。
* なんか長い！！
* コード的に無駄がある。

# 改善策
* まずは、条件分が同じの場合は、まとめましょう！
* 長く見えるif elseを1つだけで収めてみよう！
* hpや条件分をたくさん書かないようにしよう！

# 改善コード
```cpp:
int hp2 = 50;
int state2 = STATE::ATTACK_TYPE1;

//　AIの構造体
struct EnemyStateAI
{
	int hp;		//	体力
	int state;	//	状態
};
	
EnemyStateAI aiStates[] =
{
	{ 80, STATE::ATTACK_TYPE2 },
	{ 60, STATE::ATTACK_TYPE3 },
	{ 40, STATE::ATTACK_TYPE4 },
	{ 20, STATE::ATTACK_TYPE5 },
};

for (auto& ai : aiStates)
{
	if (hp2 <= ai.hp)
	{
		state2 = ai.state;
	}
}
std::cout << "敵の攻撃パターンは : " << state2 << std::endl;

```

### 良いポイント
* 改善策でもあるように、if文が1つになっているところ。
* 構造体でデータを作り、まとめている。
* 配列を使い、見やすくしている。
* 無駄なコードがなくなった。
* AIの種類を増やしたい場合は、enumと構造体のデータを追加すればOKになった。


# 最後に
* 同じような条件分のif文をこのようにまとめていきましょう！
* これができると、きれいなコードにつながります。
* 無駄なコードがあれば、まとめていきましょう！

以上です。
コマンド型モジュールでpackage.jsonを読み込んでバージョン番号を取得する

#とりあえず豆
いい気になって[goldblend](http://qiita.com/mrpepper/items/5750257057e44cb01fb3)も[npmに上げた](https://www.npmjs.com/package/goldblend)ので、ついでに豆っす。JSON.parse使ったり、変にこねくり回してパスを探したりするのはうまく行きません。（軽くハマった）

```coffeescript
getPackageJSON = ->
  packagejson = require('../package.json')
  return packagejson

packagejson = getPackageJSON()
console.log packagejson.name+' version '+packagejson.version
```

こんな感じ。