OmniAICreator/Qiita-1.07M huggingface dataset:
Terraform を 0.8.8 から 0.9.1 にアップグレードしたら、remote state の設定方法変わった

# 目的
Terraform のバージョンが v0.9.1 になったので、アップグレードしたら、remote state の設定方法変わっていたので、設定方法を見直す

# v0.8.8 までの設定方法
S3 では、以下のような Terraform コマンドを実行してたかと。

```
terraform remote config -backend=s3  -backend-config="bucket=tctf-state" -backend-config="key=prod.tfstate" -backend-config="region=ap-northeast-1"
```


# v0.9.0 からの設定方法
任意の Terraform ファイル (config.tf みたいな) に以下のコードを追加する。
S3 とかでやったよ！という事例はよく見るので、Microsoft Azure Storage でやってみた。

```[config.tf]
terraform {
  backend "azure" {
    storage_account_name = "abcd1234"
    container_name       = "tfstate"
    key                  = "prod.terraform.tfstate"
  }
}
```

アクセス キーは、環境変数とかで、直接 .tf ファイルには書かないほうが良いかと。
そして、`terraform init` コマンドを実行すると、remote state が利用できました。

# 参考
詳細は、[こちら](https://www.terraform.io/docs/backends/index.html)を御覧ください。
Atomで書いたコードをteminalを起動することなくコマンド一個で起動する方法

コードを書いてそのコードを実行する時って、みなさん今までどうやってますか？



僕はいつも



terminalを起動

↓

cdで適当なディレクトリまで移動

↓

python 〇〇.py

↓

enter



とやっていたんですが、これ結構面倒くさいですよね。 



今回はこの面倒な手順を全部すっ飛ばしていきなりAtomのアプリケーション内でコマンド一つでコードを実行する方法となります。



Atomの拡張機能をインストールすることで、terminalを起動せずにプログラムを実行することができたのでメモしておきます。



多分たいていの方はふつーにやっていることだと思うんですが、自分の場合Atomの設定をごにょごにょいじっていたら見つけた機能だったので結構感動しました。

 

 

で、実際に何をやったかというと

↓これをインストールしただけです。

![スクリーンショット 2017-03-18 0.01.37.png](https://qiita-image-store.s3.amazonaws.com/0/161518/2e35b6c3-9c6d-7544-94f2-f2c1e91e2af5.png)


Preferences→install

 

scriptというパッケージをインストールするだけです。

 

 

Atom上でコードを選択し、⌘+iで自動でterminalを起動してコードを実行してくれます。

⌘+jとかでコードの一部分だけ実行することもできるらしいのですがその使い方はまだよくわかってないです。笑
dockerのコンテナを手軽に外部ネットワークへ公開する方法

# はじめに
dockerのコンテナを外部ネットワークに公開する方法のメモ

dockerのコンテナは基本的にはプライベートネットワーク（デフォルトで172.17.0.0/16）上に構築されるようで、コンテナから外部へのネットワーク接続は仮想ブリッジ（docker0）経由で通信することができますが、逆に外部からコンテナへの接続は（デフォルトでは）できないようです。

色々ググってみてそれらしい記事を参考に試してみるもうまくいかず。
*※仮想ブリッジをNICと接続する方法とか試したんですが、動きませんでした・・・。
理由は調べた気がしますが、忘れましたw
dockerがNATの設定をおかしくさせてたような？*

なので、ここは純粋にNICへセカンダリIPアドレスを割り振り、firewalldでDNATする方法で解決します。
*ちなみに、DNATは Destination Network Address Translation の略だそうです。*

# 環境

| 環境 | バージョン                              |
|:----|:--------------------------------------|
| OS  | CentOS Linux release 7.2.1511 (Core)  |
| docker | 1.12.5                             |


# 環境構築

まずはサービス公開用のブリッジを作成します。
これは最初に設定しておけば、以降は行う必要はありません。
ここでは、ネットワーク 172.18.0.0/16 で、ブリッジのIPアドレスは 172.18.0.1、ブリッジ名をdocker1、docker上のネットワーク名をserverとしました。

```
# docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 --opt "com.docker.network.bridge.name"="docker1" server
```

firewalldのzone設定を行います。
これも最初に設定するものです。
ここではdocker1をtrustedゾーンに配置します。
*ポート開けの設定が面倒なのでtrustedで横着してますw*

```
# firewall-cmd --zone=trusted --change-interface=docker1
```

次にNICにセカンダリIPアドレスを割り振ります。
ここから、公開するコンテナごとに必要な設定になります。
ここでは、enp0s3インターフェイスに192.168.0.15を追加しました。

```
# nmcli connection modify enp0s3 +ipv4.addresses "192.168.0.15/24"
```

次にDNATを設定します。
セカンダリIPアドレス 192.168.0.15 から、例えば 172.18.0.2 にアドレス変換する場合は下記となります。

```
# firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING_direct 0 -d 192.168.0.15 -j DNAT --to 172.18.0.2
# firewall-cmd --reload
```
*※間違って--directの設定をしてしまった場合、/etc/firewalld/direct.xmlに設定が永続化されているため、ここをいじれば修正できます。*

コンテナを作成します。
ネットワークに server を指定、IPアドレスに先ほどの 172.18.0.2 を指定します。
ここでは、nginxサービスをインストールするCentOS7コンテナを作成＆起動してみます。
その他のオプションはお好みで。

```
# docker run --restart always --cap-add=SYS_ADMIN -d --net server --ip 172.18.0.2 --name nginx centos:7 /sbin/init
```

コンテナが起動するのでbashコマンドで接続します。

```
# docker exec -it nginx /bin/bash
```

接続出来たらnginxをインストールします。

```
# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# yum -y install nginx
# systemctl enable nginx
# systemctl start nginx
```



外部ネットワークから http://192.168.0.15 が開けばOKです。

なお、nginxコンテナを再起動すると/var/log/nginxディレクトリが無くなっていてサービスの起動に失敗してしまいます。
対処方法ご存知の方、コメントください。

### 暫定対応
ひとまず、再起動がうまくいかないのは実用に耐えられないので、Data Volumeをマウントして強制的に/var/log/nginxを作っています。

```
# docker run --restart always --cap-add=SYS_ADMIN -d --net server --ip 172.18.0.2 --name nginx -v /var/log/nginx centos:7 /sbin/init
```
ESP8266 で WebServer 入門

# 対象のボード
Amazon USA で [NodeMCU LUA WiFi Internet ESP8266](https://www.amazon.com/gp/product/B010O1G1ES/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1) を購入しました。$8.79なり。

ボードをひっくり返すとメーカーのURIとボーレートは書いてあるので特に迷わないと思いますが、簡単にステップを書いておきます。

<img width="768" alt="IMG_20170317_230215.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/93800/c5e1ca86-dd44-e2d9-0fd2-d033bc922f60.jpeg">

# Arduino IDE の環境整備
まずは Arduino IDE をダウンロードします。
- [Download the Arduino IDE](https://www.arduino.cc/en/main/software)

Windows なら Store で以下の場所からダウンロードできます。
- [Windows Store](https://www.microsoft.com/en-us/store/p/arduino-ide/9nblggh4rsd8?ocid=badge)

## ESP8266 の設定
以下のページにある json を使って、Arduino core for ESP8266 WiFi chip の最新版をダウンロードできるように設定します。まずは以下のURI に飛んで stable な Boards manager link をコピーしてください。

https://github.com/esp8266/Arduino#stable-version-

上記 URI を ファイル -> 環境設定 メニューの「追加のボードマネージャーのURL」に入力します。　
![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/93800/8c054bb5-0931-ef35-b297-ade6e620f98e.jpeg)

ツール -> ボード -> ボードマネージャー とクリックするとダイアログから新しい ESP8266 に関係するファイルをインストールできます。「インストール」ボタンを押してください。
![WS000008.JPG](https://qiita-image-store.s3.amazonaws.com/0/93800/5f42ef26-996b-447c-7e60-387b56e6f658.jpeg)

インストールが終わると、ツール -> ボード 以下に新しいボードが増えているともいます。自分が買ったESP8266 ボードを選択してください。自分は NodeMCU 1.0 を選びました。

![WS000012.JPG](https://qiita-image-store.s3.amazonaws.com/0/93800/093f0ab9-8676-dc37-f143-58a47f0b2972.jpeg)

次に、Upload Speed を設定します。ボードによって違うと思いますので、マニュアルを読んで変更してください。NodeMCU 1.0 は 9600 でした。

![WS000013.JPG](https://qiita-image-store.s3.amazonaws.com/0/93800/f0f0e3fe-2e9d-f38a-373f-69c3efb1e68a.jpeg)

# スケッチの書き込み
Hello World でスケッチの書き込み、実行を行います。

以下のような Hello World をシリアルに吐き出すソースを書きます。

```c
void setup() {
  // put your setup code here, to run once:
  Serial.println("Hello World!");
}

void loop() {
  // put your main code here, to run repeatedly:
}
```

スケッチ-> 検証・コンパイル でエラーがないことを確認、
さらに ツール -> シリアルモニタ を予め開いておいて、スケッチ->マイコンボードに書き込む を選ベバ、しばらくして実行されます。シリアルモニターに "Hello World!"と表示されるか確認してください。
rails select_tagのvalueを変えて送信

railsのform_tagの中にプルダウンメニューを追加します。


```
<%= select_tag 'range', options_for_select([["300","1"], ["500","2"], ["1000","3"], ["2000","4"], ["3000","5"]],:selected=>"5") %>
```
結果

```
<select name="range" id="range">
<option value="1">300</option>
<option value="2">500</option>
<option value="3">1000</option>
<option value="4">2000</option>
<option selected="selected" value="5">3000</option></select>
```
こんな感じになります。(bootstrap)
![スクリーンショット 2017-03-19 9.09.35.png](https://qiita-image-store.s3.amazonaws.com/0/144904/3eeab178-02d8-2765-5ee7-4ed2e464af40.png)

submitされたrangeをControllerで取得してHTML

```
#controller
@range = params[:range]

#View
<%=@range%>

```
この場合 5　と表示されます。
【Unity】HDR Color Pickerをインスペクタから使う

UnityでスクリプトからHDRな色を使いたい時がちょこちょこ出てきたので忘れないようにメモしときます。

**環境**
Unity 5.5.0f3 Personal

## 概要
マテリアルのEmissionの設定に使うようなColorPickerをスクリプトのインスペクタからでも使えるようにしようと言う話
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/159238/3c0d1764-74fa-408c-d212-1d1d744b6f6d.png)
↑こんな感じのやつ

## やり方
非常に簡単でした。
Unityの方でAttributeを用意してくれてるのでエディタ拡張など必要ありません！！（さすがUnity！！）

```csharp:colorPicker.cs
[ColorUsage(false, true, 0f, 8f, 0.125f, 3f)]
public Color color;
```
こんな感じに使いたい変数の上に`[ColorUsage(bool, bool, float, float, float, float]`と書くだけです。
引数は順番に...
- アルファ値を設定出来るようにするか
- HDRで設定出来るようにするか
- 最小輝度
- 最大輝度
- 最小露出値
- 最大露出値
です。

なので、HDRを設定するために２つ目の引数を`true`にすればOKです！
詳しくは、Unityの[リファレンス](https://docs.unity3d.com/ScriptReference/ColorUsageAttribute-ctor.html)を見てください。

## 最後に
これでスクリプトにHDRな色を設定出来るようになると思います。
正直、最小露出値と最大露出値がどこに影響してるかよく分かってないです(-_-;)
コメントで教えていただけたら幸いです。
cocoapodsでxcconfigファイルが正しく登録されないとき

#現象
備忘録です。
Unityのプロジェクトにcocoapodsを実行しても正常にビルドできない。
xcconfingが正常に読めていないためプロジェクトの設定にxcconfigのファイルが表示されない。

#エラー内容
ビルドしたら以下のようなエラーが出た。

```
diff: /../Podfile.lock: No such file or directory
diff: /Manifest.lock: No such file or directory
error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
```

プロジェクトの設定をみるとxcconfigファイルが正常に設定されていない。

正常に設定されているときは以下のようになる。
![スクリーンショット 2017-03-19 5.34.54.png](https://qiita-image-store.s3.amazonaws.com/0/36154/17307c38-97d1-ac0f-d56d-bf8007d6daa1.png)



#修正手順
Unityプロジェクトに登録されているPodsフォルダが古いものがあると
pod installやupdateをしても正常に最新のものに更新できないようです。

このため以下のような手順で状態を復帰。

1.UnityプロジェクトのPodsフォルダを削除
2.Xcodeを閉じる
3.pod installまたはupdateを実行


![スクリーンショット 2017-03-19 4.13.53.png](https://qiita-image-store.s3.amazonaws.com/0/36154/cff8ff55-1c19-f80f-483b-dbdc2e352abd.png)

これでPodsファイルがUnityプロジェクトへ再登録され
xcconfigファイルの設定自体も正常に復帰していた。
Realmで一意なPrimaryKeyを設定する方法二つ

### DroidKaigi2017の@zaki50さんによる[オフラインファーストなアプリケーション開発](https://speakerdeck.com/zaki50/ohurainhuasutonaapurikesiyonkai-fa)より抜粋

```java
@PrimaryKey
public String id = UUID.randomUUID().toString();
```

この手があったか！っと目から鱗でした。。`Context`が取得できる場合なら`InstanceID.getInstance(getApplicationContext()).getId();`も選択肢にはいるかもしれません。
参照 : [一意の識別子のベストプラクティス](https://developer.android.com/training/articles/user-data-ids.html?hl=ja)  


### 自分でAutoIncrementを書く

**Kotlin**  

```java
inline fun <reified T : RealmObject> getAutoIncrementKey(realm: Realm): Long {
    if (realm.where(T::class.java).count() == 0L) return 1
    else return realm.where(T::class.java).max("id").toLong() + 1
}

// 呼び出し方 getAutoIncrementKey<Dog>(realm)
```

**Kotlin拡張関数**

```java
inline fun <reified T : RealmObject> Realm.getAutoIncrementKey(): Long {
    if (where(T::class.java).count() == 0L) return 1
    else return where(T::class.java).max("id").toLong() + 1
}

//呼び出し方 realm.getAutoIncrementKey<Dog>()
```

**Java** 

```java
public int getAutoIncrementKey(Realm realm, Class klass) {
    if (realm.where(klass).count() == 0) return 1;
    else return realm.where(klass).max("id").intValue() + 1;
}

// 呼び出し方 getAutoIncrementKey(realm, Dog.class)
```

雑ですが、以上です。
NSImageを反転させるextension

自分用メモ

```swift:NSImage+Flip.swift

extension NSImage {

    func flipHorizontal() {
        let flipper = NSAffineTransform()
        let dimensions = self.size
        self.lockFocus()
        
        flipper.scaleX(by: -1, yBy: 1)
        flipper.concat()
        
        self.draw(at: NSPoint(x: -dimensions.width, y: 0), from: NSMakeRect(0,0, dimensions.width, dimensions.height), operation: .copy, fraction: 1)
        self.unlockFocus()
    }
    
    func flipVartical() {
        let flipper = NSAffineTransform()
        let dimensions = self.size
        self.lockFocus()
        
        flipper.scaleX(by: 1, yBy: -1)
        flipper.concat()
        
        self.draw(at: NSPoint(x: 0, y: -dimensions.height), from: NSMakeRect(0,0, dimensions.width, dimensions.height), operation: .copy, fraction: 1)
        self.unlockFocus()
    }
}
```
ESLint v3.18.0

前 [v3.17.0] | 次 [v3.19.0]

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">ESLint v3.18.0 has been released: <a href="https://t.co/ajPcRN19PJ">https://t.co/ajPcRN19PJ</a></p>&mdash; ESLint (@geteslint) <a href="https://twitter.com/geteslint/status/842857107129061377">2017年3月17日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

ESLint 3.18.0 がリリースされました。
いくつかの機能追加・バグ修正が行われています。

質問やバグ報告等ありましたら、お気軽にこちらまでお寄せください。

- :globe_with_meridians: [日本語 Issue 管理リポジトリ](https://github.com/eslint/eslint-jp)
- :speech_balloon: [日本語サポート チャット](https://gitter.im/eslint/eslint-jp)
- :globe_with_meridians: [本家リポジトリ](https://github.com/eslint/eslint)
- :speech_balloon: [本家サポート チャット](https://gitter.im/eslint/eslint)

----

# ✨ 本体の変更

## [#5407]: [AST Selectors]

プラグイン・カスタム ルール開発者向けです。

各ルールは AST の種類毎にイベントハンドラを書くことで実装されていますが、そのイベント名に [AST Selectors] を利用できるようになりました。
例えば、`let`定義を調べたい場合のコードは次のように簡潔になります。

```js:例.(before)
exports.create = (context) => ({
    VariableDeclaration(node) {
        if (node.kind === "let") {
            // 調べる
        }
    }
})
```

```js:例.(after)
exports.create = (context) => ({
    "VariableDeclaration[kind=let]"(node) {
        // 調べる
    }
})
```

これに伴い、[no-restricted-syntax] ルールのオプションとしても [AST Selectors] が利用できるようになりました。

```json:例.(xdescribe関数呼び出しを禁止する)
{
    "rules": {
        "no-restricted-syntax": [
            "error",
            "CallExpression[callee.name='xdescribe']"
        ]
    }
}
```

# 💡 新しいルール

今回はありません。

# 🔧 オプションが追加されたルール

## [#7632]: [no-unused-expressions] \(`allowTaggedTemplates`)

タグ付きテンプレートを副作用を持つ式として扱うオプションが追加されました。

```js
/*eslint no-unused-expressions: [error, {allowTaggedTemplates: true}] */

//✘ BAD
`hello, ${world}!`

//✔ GOOD
tag`hello, ${world}!`
```

# ✒️ `eslint --fix` をサポートしたルール

今回はありません。

----

[v3.17.0]: http://qiita.com/mysticatea/items/a2d72c76671c2197c712
[v3.19.0]: http://qiita.com/mysticatea/items/172be6510b91c36711f4
[#5407]: https://github.com/eslint/eslint/issues/5407
[#7632]: https://github.com/eslint/eslint/issues/7632
[#9999]: https://github.com/eslint/eslint/issues/9999
[no-restricted-syntax]: http://eslint.org/docs/rules/no-restricted-syntax
[no-unused-expressions]: http://eslint.org/docs/rules/no-unused-expressions
[xxxx]: http://eslint.org/docs/rules/xxxx

[AST Selectors]: http://eslint.org/docs/developer-guide/selectors

<!-- 
![JSCS Icon](http://jscs.info/favicon.ico) JSCS 互換ルールです。
-->
$this->redirect()->toRoute()の謎に迫る

ハマるってなかなかふかいです。でもハマりから抜け出せたときの爽快感はハマったものしかわからないですね。
#どうしてreturnがいるの？
コードを書いていると、こういうのをよく見かけますね。

```php:returnがついている
return $this->redirect()->toRoute(...);
```
なんでかな〜どうしてかな〜って思いませんか？
意味なく付けるおまじないほど後々バグの温床になるといつも意識していて

```php:returnがついている
$this->redirect()->toRoute(...);
```

で実装してみました。そうしたら「おぉちゃんとリダイレクトするやんか〜」ってことで置いておいて、他との違いを見ることにしました。

が

「他との違いを見る」のを忘れ、忘却の彼方においてしまいました。
やがて次の画面でセッションで渡された値が必要になりました。

が

全然取れないのです。どんなにどんなにもがいても。どんどん深みに…ずぶずぶずぶ

そこから何日か過ぎました。色々実装してはそこを見直し、また他を実装しながらソース全体を見直し、
そして他との違いに気づいたのです。

`return`ついてない:scream:

ということで`return`つけてsession取れました。

#"->"これなんていうの？
アロー演算子と呼ばれているようです。ちなみに`=>`はロケット記法とRubyにはありました。
最近、言語の垣根を超えて色々実装するようになったので、知ってて当然そうな説明は省かれて、初心者にはカオスだったりするんですよね。というかとっくに私は初心者の域は当然脱しておりますが、いまさら知ったのでした。

#toRoute(...)の君
君というか黄身。要するに卵の中身の大切な部分のことだけど、色々わかってきたので別の記事にしよっと。

（放置してRubyに夢中になったら君のことすっかり忘れちゃったよ。）
また戻ってきたので続き書くぞ宣言
Swift3 - 変数に入ったUIImageをLINEに投稿する方法

えーっとですね、[こちら](http://blog.maplesystems.co.jp/programming/20099.html)のサイトを参考に画像をLINEにシェアさせたいんですけど、残念ながらStringしか入りませんで、僕が入れたいのは、変数の中に入ったUIImageの型なのです（アプリの中で動的に変数の中の画像の名前が変わるからです）。若干苦戦しましたが下記のコードで、ちゃんとUIImageをLINEにシェアできたよ。大切なコードの場所は ここ`pastBoard.setData(UIImageJPEGRepresentation(ImageHensu!, 1.0)!, forPasteboardType: "public.png")`です。下記のコードをそのまんま`@IBAction`の`UIButton`の中にでも貼り付ければ動くはず

# 実装
```
        let pastBoard: UIPasteboard = UIPasteboard.general
        
//        pastBoard.setData(UIImageJPEGRepresentation(UIImage(named:  (ShareToImage) )!, 0.75)!, forPasteboardType: "public.png")
        
//        pastBoard.setDataUIImageJPEGRepresentation(ShareToImage, 1.0);, forPasteboardType: "public.png")
        
        pastBoard.setData(UIImageJPEGRepresentation(ImageHensu!, 1.0)!, forPasteboardType: "public.png")
        
        let lineUrlString: String = String(format: "line://msg/image/%@", pastBoard.name as CVarArg)
        
        UIApplication.shared.openURL(NSURL(string: lineUrlString)! as URL)

```


# 参考

[Cannot convert value of type 'String' to expected argument type 'URL'](http://stackoverflow.com/questions/41010771/cannot-convert-value-of-type-string-to-expected-argument-type-url)
has_one :throughで結合モデルの属性で絞り込みたい場合の書き方

* 1人のメンバーが複数のチームに所属できる
* 所属という結合モデルがある
* 所属モデルが役割という属性を持っていて、その人のそのチームでの役割を表す

とした場合

```models/team.rb
class Team < ActiveRecord::Base
  has_many :belongings
  has_many :members

  has_one :leader_belonging, -> { where(role: 'leader') }, class_name: 'Belonging'
  has_one :leader, through: :leader_belonging, source: :member
end
```

```models/belonging.rb
class Belonging < ActiveRecord::Base
  belongs_to :team
  belongs_to :member
end
```

`has_one :leader, through: :leader_belonging, source: :member` というのは、振る舞いとしては `team.leader_belonging.member` と同じ内容を `team.leader` で取得できるようにしている
bearer token による認証、認可

最近はOwin(Open Web Interface for .NET)による Owin middlewareのお世話になることが多い。
認証・認可周りをいろいろと調べていて、２つの作法があることが分かってきた。

まずは、１つめは

```C#
　UseOAuthAuthorizationServer(this IAppBuilder app, OAuthAuthorizationServerOptions options)
```
系のメソッドで認可サーバの設定後、

```C#
　UseOAuthBearerAuthentication(this IAppBuilder app, OAuthBearerAuthenticationOptions options)
```
で呼び出されたヘッダ情報のベアラトークンを検証して、クレーム情報を操作する系。

そして２つ目の、よく見かける実装が

```C#
　UseOAuthBearerTokens(this IAppBuilder app, OAuthAuthorizationServerOptions options)
```
のやつ。

上記は 
　Microsoft.Owin.Security.OAuth
パッケージに格納されているが、下のほう（UseOAuthBearerTokens）は
　Microsoft.AspNet.Identity.Owin
に格納されている。
ってことは生まれが違うんだね。

誰かがやっぱり議論していた。
 http://stackoverflow.com/questions/28048355/useoauthbearertokens-vs-useoauthbearerauthentication
そのままずばりの内容ですね。

ひとつ目の方法の「UseOAuthAuthorizationServer」は「Authorization」って書いてあるからやっぱり「認可サーバ」についての設定だろうし、「UseOAuthBearerAuthentication」には「Authentication」って書いてあるからやっぱり「認証」関係の設定なんだろうな。
翻訳サイトで訳すと「Authorization」も「Authentication」も「認証」って訳されるんことが多いから気を付けましょう。
Visual Studio2017にGitHubの拡張機能を入れる話

#はじめに
既出ネタだったらすみません(ググってもイマイチ出なかったので残しておきます)

※Visual Studio2017Communityでのお話です。他のバージョンはよくわからないですがどうなんでしょうか


#VS2015では
![2017y03m19d_010734926.jpg](https://qiita-image-store.s3.amazonaws.com/0/146347/45499cbd-63fe-e029-2b81-dd389332c9c7.jpeg)
変更→Visual Studio向けGitHub拡張にチェックでホイホイ入ったんですよね

#VS2017だと
2015のように入れられるのかと思えば、インストーラーにGitHub拡張に関するチェック欄がなかったのです
##どういれるの
[GitHub Extension for Visual Studio](https://visualstudio.github.com/)からDownload的なのをポチると拡張ファイルがDLされます。
DLした後にファイルをポチると自動的にVS2017に入れられます。わーいらくちーん
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">でてきたでてきた。インストーラーから拡張機能的なのぶちこむ（2015はそうだった）ではなく、ここ(<a href="https://t.co/Ga2JGEHdb6">https://t.co/Ga2JGEHdb6</a>)からDLするのねー <a href="https://t.co/9X9rK7bilM">pic.twitter.com/9X9rK7bilM</a></p>&mdash; Colloid (@ColloidGel) <a href="https://twitter.com/ColloidGel/status/843127028412895233">2017年3月18日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
このようにTop画面にGitHubアイコンが追加されますん

##追加の方法その他(2017年3月19日更新)
この記事のコメントにてお教え頂きました！ありがとうございます！
VS2017を起動してから**ツール→拡張機能と更新プログラム**からGithubで検索かけると上記と同様のファイルがDLできます
※詳細はコメント欄にわかりやすく解説されております

#今朝別PCにVS2017を入れようとしたら
チェック欄がありました・・・・orz

ま、こういう入れ方もあるという紹介ということで！
[麻雀]簡単なあがり判定法

# はじめに
あがり判定は麻雀において最も基本的なプログラムです。打牌選択と絡める場合など速度が要求されことがあるので、少しでも高速なアルゴリズムが必要です。本記事では四面子一雀頭形のあがり判定アルゴリズムを順を追って説明していきたいと思います。本質的に他の方と同じアルゴリズムです。

# 一色のあがり判定
まずは簡単のため一色に限定して話を進めます。あがり判定の流れは次のようになります。

1. 手牌から雀頭候補を見つけて抜き出す。
2. 残りの牌が面子の組に分解できるか判定する。
3. ステップ2で面子の組に分解できれば「あがり」として終了、そうでなければ雀頭候補を手牌に戻してステップ1へ戻る。
4. 「あがりではない」として終了する。

## 前提
長さ9のint型配列handを用意する。hand[0]からhand[8]の各要素に一マンから九マンの枚数を格納する。例えば牌姿と配列は以下のように対応します。

- 11123456788999 ⇔ 311111123
- 11234777888999 ⇔ 211100333

## 面子の組へ分解できるか判定
先にこちらを説明します。配列handの要素を0番目から見ていって、3で割った余りの数だけ次の要素と次の次の要素から引くことを繰り返します。__この操作が最後までできるときに限り手牌は面子の組に分解できます。__この操作は左から刻子、順子の順で抜いていくことと同じ結果を与えます。以下のコードは手牌の面子分解が可能かを判定する関数で、分解可能の場合はtrueを、分解不可能の場合はfalseを返します。

```cpp:
bool iswh0(const int* hand)
{
  int r, a = hand[0], b = hand[1];

  for(int i=0; i<7; i++){
    if(r=a%3, b>=r && hand[i+2]>=r){
      a=b-r; b=hand[i+2]-r;
    }
    else return false;
  }
  if(a%3==0 && b%3==0) return true;
  else return false;
}
```


## 雀頭候補の探索
2枚以上ある牌を全て雀頭候補とみなしてもいいですが、より効率的な方法を紹介します。
まずは情報を整理します。

- 順子は連続した3つの牌から成る
- 刻子は同じ3つの牌から成る
- 雀頭は同じ2つの牌から成る

面子を構成する牌の和は3で割り切ることができるので、牌の和を3で割った余りに注目すれば雀頭候補を最大で3通りに絞り込めます。上の例では、

- 11123456788999 ⇒ 和は73, 3で割った余りは1 ⇒ 1を2で割って2 ⇒ 雀頭は258のどれか
- 11234777888999 ⇒ 和は83, 3で割った余りは2 ⇒ 2を2で割って1 ⇒ 雀頭は147のどれか

のようになります。1を2で割るときには3を足してから割ることに注意します。以下のコードは雀頭候補を絞りこみ面子分解判定を行う関数です。

```cpp:
bool iswh2(int* hand)
{
  int p = 0;

  for(int i=0; i<9; i++){
    p += i*hand[i];
  }

  for(int i=p*2%3; i<9; i+=3){//ここでiを、牌の和を3で割った余りを2で割った数に初期化
    hand[i] -= 2;

    if(hand[i]>=0){
      if(iswh0(hand)){
        hand[i] += 2;
        return true;
      }
    }
    hand[i] += 2;
  }
  return false;
}
```

# 四色の場合へ拡張
四色の場合への拡張は先ほど定義した関数を使うことでできます。以下の関数islhでは長さ34の配列(0-8:マンズ1-9, 9-17:ピンズ1-9, 18-27:ソーズ1-9, 28-33:東南西北白発中)を受け取り、あがりのときにtrueを返します。ヘッダ__`numeric`__のインクルードが必要です。`accumulate`は配列の和を計算する関数です。

```cpp:
#include <numeric>

bool islh(int* hand)
{
  int head = -1;

  for(int i=0; i<3; i++){
    switch(std::accumulate(hand+9*i,hand+9*i+9,0)%3){
    case 1: return false;
    case 2: if(head==-1) head = i; else return false;}
  }
  for(int i=27; i<34; i++){
    switch(hand[i]%3){
    case 1: return false;
    case 2: if(head==-1) head = i; else return false;}
  }
  for(int i=0; i<3; i++){
    if(i==head){if(!iswh2(hand+9*i)) return false;}
    else{if(!iswh0(hand+9*i)) return false;}
  }
  return true;
}
```

# メリットとデメリット
以上のアルゴリズムのメリットとデメリットをまとめます。

- メリット：高速、枚数に依存しない
 - 面子分解用に一時配列の確保を行わない
 - 最小限の雀頭候補に対してしか面子分解の可能性判定を行わない
 - 3N+2を満たす枚数であれば適用可能(鳴いて枚数が14枚以下でも対応できる、あるいは14枚以上でも対応できる)

- デメリット：面子の分解は部分的にしか行わない
 - 順子は取り出しているが刻子は取り出していない
 - 雀頭の位置は常に決まるとは限らない
 - そのため得点計算に応用できない

デメリットについて補足します。例えば111222333m東東東南南南西西という手牌を考えます。この場合、マンズの部分は順子が3つ、または刻子が3つのどちらにとることもできますが、このアルゴリズムはその判断を行いません。麻雀のルール上、このような場合は得点が高い方の面子の分解パターンを採用します。そのため、この手牌では三暗刻が付くことを考慮して刻子が3つのパターンを採用します。

別の例も取り上げます。11223344m123p123sという手牌を考えます。この手牌では雀頭がどこかということが問題になります。この手牌に上述のアルゴリズムを適用した場合、一マンを雀頭とみなしてしまい、三色同順が見過ごされてしまいます。

つまり、和了判定でだけでなく得点計算を行うには、ある雀頭と面子の分解パターンを見つけて終了(このアルゴリズム)というのではなく、全ての雀頭と面子の分解パターンを求めて、それらに対して得点計算を行う必要があります。
VBA:ワークブック内のシート検索・新規作成

#ワークブック内のシート検索・新規作成
##主な機能
- シートの、シート名での検索
- 先頭一致、完全一致対応
- 呼び出し元でWorksheetオブジェクト変数を渡す必要あり

##引数に関して
- (ByRef/String)sheetName: 検索したいシート名（先頭一致可
- (ByRef/Worksheet)sheetObj: 後で利用したいWorksheetオブジェクト
- (Optional/Boolean)likeSearch: 先頭一致検索フラグ（指定無しなら完全一致）
- (Optional/Boolean)makeNewSheet: シートが無い時に作成するフラグ(指定無しなら作る)
- (Optional/Workbook)wkBook: 対象ワークブック（指定無しならアクティブなWorkbook）

```VB.Net:FindSheet.bas
Public Function FindSheet(ByRef sheetName As String, ByRef sheetObj As Worksheet, _
     Optional ByVal likeSearch As Boolean = False, Optional ByVal makeNewSheet As Boolean = True, _
     Optional wkBook As Workbook = Nothing) As Boolean
    Dim ws As Worksheet
    Dim wb As Workbook
    FindSheet = False
    DoEvents
    
    Set wb = IIf(wkBook Is Nothing, ActiveWorkbook, wkBook)
    
    For Each ws In wb.Worksheets
        If likeSearch = True And ws.Name Like sheetName & "*" Then
            sheetName = ws.Name
            FindSheet = True
        ElseIf ws.Name = sheetName Then
            sheetName = ws.Name
            FindSheet = True
        End If
        
        If FindSheet = True Then
            Set sheetObj = Worksheets(sheetName)
            Exit Function
        End If
    Next ws
    
    If makeNewSheet = True Then
        Set sheetObj = Worksheets.Add
        sheetObj.Name = sheetName
        FindSheet = True
    End If
End Function
```
Visual C++ 2013のプロジェクトをVisual Studio 2017に移行

Visual Studio 2013で作成したVisual C++プロジェクトをVisual Studio 2017へ移行します。

#環境
Windows 7 Professional SP1 64bit
Visual Studio 2017 Community

#手順
Visual Studio 2013で作成したVisual C++プロジェクトのソリューションファイル(*.sln)をVisual Studio 2017で開くと以下のダイアログが表示されます。

![aaa.png](https://qiita-image-store.s3.amazonaws.com/0/112075/5bf3e81e-05a8-5573-89d6-6b8b4ea6d36b.png)

今回はそのままOKボタンをクリックします。

そのままビルドすると以下のエラーが発生しました。
移行元のプロジェクトが Windows SDK 8.1 を使っていたためのようです。

![bbb.png](https://qiita-image-store.s3.amazonaws.com/0/112075/74d12a64-80e7-623a-f4c6-f933a40d9781.png)

説明の通りソリューションを右クリックして[ソリューションの再ターゲット]を選択します。

![cccc.png](https://qiita-image-store.s3.amazonaws.com/0/112075/562eb191-c257-f4e9-c8a7-127d402ca30b.png)

ターゲットプラットホームを選択する画面が表示されるので Windows SDK のバージョンを選択します。

![ddd.png](https://qiita-image-store.s3.amazonaws.com/0/112075/2a138bb9-1196-e4ae-17ee-c6a8d00e9933.png)

これで問題なくビルドできるようになりました。
[Visual Studio Code][Haskell] VSCodeでHaskellの開発環境を整える

すごいHaskell本がほこりを被ってたので、いい加減入門する事前準備

# 検証環境 (2017/03/18)

+ Windows 10 64bit
+ Visual Studio Code 1.10.2
+ Haskell 8.0.2 64bit full

# 事前準備
## VSCodeのインストール
以下のページからインストール

[Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com/)

## Haskell のインストール
Windows向け64bit fullインストーラを使用。（全部入りだとサイズが2.2GBもいるらしい）
fullだと `stack` ってやつも一緒に付いてきます。(PythonでいうAnacondaみたいなやつ？）

[Download Haskell Platform For Windows](https://www.haskell.org/platform/windows.html)

## VSCodeのHaskell拡張機能のインストール

いろいろありますが、コード補完ができるかつVimプラグインと競合しない以下の拡張機能を今回は使用します。

```
ext install haskero
```

[Haskero - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=Vans.haskero)

上記の拡張機能はstackを使用することが前提になっているようです。設定は以下などを参考にしてください。

[client/doc/installation.md · master · Julien Vannesson / Haskero · GitLab](https://gitlab.com/vannnns/haskero/blob/master/client/doc/installation.md)

stackについてはいまいち知識がないため、以下などを参照してください。

+ [Haskellのビルドツール"stack"の紹介 - Qiita](http://qiita.com/tanakh/items/6866d0f570d0547df026)
+ [Stackでやる最速Haskell Hello world! (GHCのインストール付き！) - Qiita](http://qiita.com/igrep/items/da1d8df6d40eb001a561)

# 環境確認

stackでプロジェクトを作成します。

```bash:新規プロジェクト作成後、VSCodeを起動
# 新規プロジェクト作成
$ stack new testproject
$ cd testproject/

# セットアップ
$ stack setup

# コード補完用のパッケージをビルド
$ stack build intero

# VSCodeを開く
$ code .
```

ひとまず以下のようなタスクランナーを書きます。

```js:tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "0.1.0",
    "command": "powershell",
    "isShellCommand": true,
    "showOutput": "always",
    "args": [
        "stack build; if ($?) { stack exec ${workspaceRootFolderName}-exe }"
    ]
}
```

## シンタックスハイライト、ビルド、Hello Worldの出力確認

![image](https://qiita-image-store.s3.amazonaws.com/0/37721/2ce57e99-fdb7-790c-d36f-2cbe64ddf618.png)

（なんかWarningでてますけど）大丈夫そうですね。

## シンタックスチェックの確認

![image](https://qiita-image-store.s3.amazonaws.com/0/37721/a06cd1d8-9f29-0a12-8a09-624626f38a32.png)


## コード補完の確認

![image](https://qiita-image-store.s3.amazonaws.com/0/37721/e56157c9-9d91-d143-fe9f-7017de366a23.png)


以上です。ひとまずはいけるんじゃないでしょうか？

# 参考
[Windows で Haskell 環境構築(Stack) - Qiita](http://qiita.com/tana-ken@github/items/e84f7dda6fde4bf16aaf)
[Stackでやる最速Haskell Hello world! (GHCのインストール付き！) - Qiita](http://qiita.com/igrep/items/da1d8df6d40eb001a561)
Mozilla 製 JPEG エンコーダー「mozjpeg」

## Mozilla JPEG Encoder Project
https://github.com/mozilla/mozjpeg/

## オンラインツール
https://mozjpeg.codelove.de/
2MB まで。

## インストール
CentOS 7.3.1611 へのインストール手順。

```bash
curl -LO https://github.com/mozilla/mozjpeg/releases/download/v3.2-pre/mozjpeg-3.2-release-source.tar.gz
tar xf mozjpeg-3.2-release-source.tar.gz
cd mozjpeg
yum install automake gcc nasm
./configure && make && make install
```
/opt/mozjpeg にインストールされる。

### シンボリックリンク
```
ln -s /opt/mozjpeg/bin/* /usr/local/bin
ln -s /opt/mozjpeg/share/man/man1/* /usr/local/share/man/man1
```
コマンド名は libjpeg を踏襲しているので、既に libjpeg や libjpeg-turbo がインストールされている場合は注意。

## テスト
画像処理界隈で有名な Lena の画像。[^lena]

![Lena (remastered)](http://www.computableminds.com/img/2012/lena/remastered-lena.jpg)

[^lena]: [The photo of Lena Söderberg photo and other image processing test images](http://www.computableminds.com/post/lena-soderberg-common-image-processing-test-images.html)


```bash
cjpeg -optimize -quality 90 lena.jpg > lena_90.jpg
```
`-quality` 未指定の場合のデフォルト値は 75 。
`-optimize` オプションはファイルサイズを小さくする可能性があるが、メモリの使用量が増え、処理に時間がかかる。画像の品質と圧縮解除速度は影響を受けない。

| quality | サイズ | 時間 | 圧縮率 | 
|:-:|:-:|:-:|:-:|
| 84  | 49451  | 0.073s  | 17.5% |
| 90  | 60599  | 0.079s  | 21.5% |
| 95  | 80572  | 0.111s  | 28.6% |
| 100 | 173504 | 0.214s  | 61.5% |

## コマンド
https://github.com/mozilla/mozjpeg/blob/master/usage.txt
jpegtran がロスレス圧縮で、cjpeg が非可逆圧縮のコマンド。

### cjpeg
compress an image file to a JPEG file

```
cjpeg [ options ] [ filename ]
```

### djpeg
decompress a JPEG file to an image file

```
djpeg [ options ] [ filename ]
```

### jpegtran
lossless transformation of JPEG files

```
jpegtran [ options ] [ filename ]
```

### rdjpgcom
display text comments from a JPEG file

```
rdjpgcom [ -raw ] [ -verbose ] [ filename ]
```

### wrjpgcom
insert text comments into a JPEG file

```
wrjpgcom [ -replace ] [ -comment text ] [ -cfile name ] [ filename ]
```
文字列から関数オブジェクトを作成する方法

Pythonで関数を定義する場合、普通は`def`文を使い、次のように記述するかと思います。

```py:
def foo(x):
    print(x)
```
この関数定義文は何をやっているかというと、関数オブジェクトを作成し、その関数オブジェクトをグローバル名前空間の中で`foo`という名前にアサインするという処理をしています。

この関数を定義するPythonスクリプトが、外部からテキストとして与えられ場合に、上記の関数定義と同様の処理を実現するのが、次のコードです。

```py:
func = """def foo(x):
    print(x)
"""
exec(func, globals())
```
Built-in関数の`exec`は最初の引数のPythonコード(文字列か、Codeオブジェクト)を、第二引数の名前空間で実行します。この例では、第二引数の`globals()`で、このモジュールのグローバル名前空間が渡されるので、その中に`foo`という名前で関数オブジェクトが作成されます。つまり、普通に`def`文で定義したときと同じように`foo`が作成されます。
実際`foo`を実行すると、普通に`def`文で定義した時と同じように使えることが分かります。

```pycon:
>>> foo("hello")
hello
```
【初心者投稿-4】祝 「HTML&CSS 学習コース 初級編」2周目完了

#昨日までのおさらい
* Progate 「HTML&CSS 学習コース 初級編」完了！
* あれ？あまり覚えていない…


特に、marginやらpaddingやら細かい。
英単語の意味でなんとなくわかるけど、実際に開発するとき、さっぱりわからないと思う。

#英語の学習にやっぱり似ている！
英単語覚える＝要素覚える
英文法覚える＝要素をどのように組み合わせるか覚える

単語帳に要素を書き出して持ち歩こうかな？
そんな覚え方じゃダメかな？
試行錯誤します。

#学習の記録
* Progate3日目
* 今日の勉強時間：1時間
* 総学習時間：4時間10分
* 今日学んだこと：「HTML&CSS 学習コース 初級編」2周目！(大方覚えました)
* 今日の感想：調子乗ってますけど、簡単なアンケートサイトくらいなら作れる気がしてきた…
プログラミングに向いてないことがわかった

今僕はIT業界3年目で、もうそろそろ4年目になります。
4年目を迎えようとしている今、僕はこんなことを常々思っています。

「俺、プログラマーって向いてないわ」

なんかもう自分の限界を知りました。
新しく始まったプロジェクトでミスばかりしまくって、もうそろそろ4年目を迎えようとしてるのに、ちょっとこれはヒドくないか？と自分でものすごく思ってます。
ミス、ミス、ミス、さらにミスして次の日もミスに次ぐミス。
もう、ボディーブローが効きすぎてダウンしそうです。ギリギリ立ってます。フラフラですよ。

新卒の頃から頑張って勉強してきて、アプリも何本かプライベートでリリースしました。
その頃は、努力すれば報われる！俺もバリバリのエンジニアになれる！と思ってキラキラしながらコードを書いていました。あの頃は良かった。でも正直その頃からプログラミングは自分には向いてないと思ってました。でもそれは気持ちのほんの少ししか占めてなくて、努力すればそんなもの超えられるさと思ってました。あの頃は良かった。

自分の身の程が分かり始めたのは今のプロジェクトが始まってから。
正直今のプロジェクトが始まるまでは、まぁ2年間ガッツリ現場で開発をやらせてもらった経験があるから大丈夫でしょって思ってました。
さて、いよいよ仕事が始まりました。どうなったか？
→ ミスに次ぐミスで情緒が不安定になり、動悸がするようになりました。
→ ストレスで頭痛がするようになり、腹痛で朝目が覚めるようになりました。
→ 自分はいらない子だ、早く追い出してくれと思う。毎日毎日。
自分がこんなにも開発ができないのかと思いました。何をやってもダメ。コードを書けば100発100中でバグが出てきます。さらにチームで話すときも周りの人が何を言ってるのか分からないことが多く、頭が真っ白になりました。そしてボロボロの精神状態で悟りました。

「俺、プログラマーって向いてないわ」

自分と周りの人の思考回路が全く違うことを痛感しました。
自分にはプログラムを書く才能がない。圧倒的にない。
それもそのはず、僕は学生の時は国語と社会が得意で、数学と物理が苦手でした。典型的な文系脳。なのに進んだのは情報系の学科で、就職先もIT業界。
まぁでもなんだかんだ言ってプログラマーという職業を選んだのは良い選択だったとは思います。多分。実際動くものが作れた時は面白いですし。手に職をつけれていると安心感もありますしね。でも基本的にプログラミングには向いてないのでしんどいことは多々あります。
しんどくても今までは希望を持って頑張ってこれたのですが、、、でもちょっとキッツイですね。。。自分の身の程が分かりました。

これは上記のようなことを経験してきた僕の持論なんですが、やっぱり仕事が楽しくないと人生は面白くないです。
日曜日の夜9時の自分「また明日仕事かー」
ガチおもんねえ
仕事ができないって辛い。
そしてその人が仕事ができるかできないかは才能によるところが非常に大きい。努力では天才に勝てない派になりました。

とまぁ、精神的にしんどいことが多いですが、まぁコード書いていきますよ。責任のないポジションでチョロチョロと。
夜中のテンションでガーっと書きましたが、そろそろ寝ます。
おやすみなさい
仕事まであと2日と46分
pyautoguiでクリックマクロを作りたい（願望）

完全に個人用のメモとして:yum:

今回書いたコードは以下

```jidou.py
#!/usr/bin/python

import pyautogui as pg
import time as ti
import random as rm


def syutuxy():
	x,y=pg.locateCenterOnScreen("syutu.png")
	rx=rm.randint(-39,21)
	ry=rm.randint(-39,26)
	x=x+rx
	y=y+ry
	return x,y


ti.sleep(1)
pg.PAUSE=1.0

x,y=syutuxy()

if x != None and y != None:
	pg.click(x,y,button="left",duration=0.5)
else:
	print("nooo")
```


予め用意しておいた画像と合致する座標を探してくれる。
今回はランダム要素を含めて座標を抽出。<br>
とりあえずライブラリの動作は確認できた。
用意する画像はmacの「shift + command + 4」で用意すると良い。
ランダム要素はボタンごとに異なるので、しっかり元々の中心を取れるようにスクショしよう。
　→あとはちまちまランダムの範囲指定を…
<br>
次回は画像フォルダの階層化と、各ボタン画像を生成しようかしら:zzz:
Rails を Windows 10で動かす with PostgreSQL

# モチベーション

友人とウェブサービスを作ろうという話になったので、環境構築の方法をまとめたほうがいいかなと思っやりました。英語なのはただの趣味です。おかしいところがあれば、編集リクエストお待ちしております。

# Build the development environment

We decided that we use below:

* Ruby 2.3.3
* Rails 5.0.2
* PostgreSQL 9.6.2

# Install Ruby

* Get the ruby installer from below URL:
> https://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.3.3-x64.exe

* Install Ruby by the installer, the installation settings are default is OK.

* Add ruby bin path `C:\Ruby23-x64\bin` in `PATH` environment variable. setting by command prompt is like this:

```bash
$ SET PATH=%PATH%;C:\Ruby23-x64\bin
```

* Try to execute ruby. Please type below by command prompt:<br>

```bash
$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
```

Get DevKit
> https://dl.bintray.com/oneclick/rubyinstaller/DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe

Extract exe file in any place. e.g. `C:\DevKit`. And move to the folder which is extracted DevKit files. And then, install DevKit

```bash
$ ruby dk.rb init
$ ruby dk.rb install
```

# Install Rails

Next Install rails by rubygems.

```bash
$ gem install rails --no-ri --no-rdoc
```

Confirm if rails was installed correctly.

```bash
$ rails -v
Rails 5.0.2
```

# Install PostgreSQL

Get the installer from PostgreSQL web site
> https://www.postgresql.org/download/windows/

A "Download the installer" link on this site takes you to download the installer page. Select `PostgreSQL 9.6.2` in postgreSQL's versions, and `Windows x86-64` in Operating System. And then click `DOWNLOAD NOW`

The installation settings are basically default other than below:

* Installation Path : any place which is not including spaces. e.g. `C:\pg\PostgreSQL\9.6\bin`
* Password : (any) Please don't forget it. this is necessary when connecting rails app to DB.
* Port : 5432
* Advanced Options : English, United States

If you see the wizard of StackBuilder after postgreSQL installation, please cancel. It is not necessary the additional module for now.

After installation, set `PATH` environment variable


```bash
$ SET PATH=%PATH%;C:\pg\PostgreSQL\9.6\bin
```

# Create Data Base

launch psql


```bash
$ psql -U postgres
User postgres password:
psql (9.6.2)

postgres=#
```

create role

```bash
postgres=# create role myapp with createdb login password 'password';
```

create database

```bash
postgres=# create database myapp_development owner myapp;
```

quit

```bash
postgres=# \q
```



# Create new your app

Please type in any directory

```bash
$ rails new myapp -TB --database=postgresql
$ cd myapp
$ bundle install
```

Edit `config/database.yml`

```yaml
default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: myapp    # Add this line
  password: password # Add this line
  host: localhost    # Add this line
development:
  <<: *default
  database: myapp_development
```

Migrate database

```bash
$ rake db:migrate
```

Start Rails

```bash
$ rails server --environment=development
```

Access to `http://localhost:3000`. You will be able to see the rails default page.

# That's all !!

Have fun!!
Fortran 90/95 による mpeg audio layer 2, 3 encoder

#mp2 encoder

2000年ごろに書いて、放置していたものです。配列の宣言を C の向きに取ってみたり気まぐれに実験していました。Fortran90 と書いてありますが、実際は 95 の文法も使っています。あの頃は、それほど規格の区別に敏感でなかったため、まぜこぜになっています。

https://github.com/cure-honey/uzura2

#mp3 encoder 

2001年ごろに inner loop だけのものを書いて、そこでやめるつもりだったのですが、outer loop が何なのか知りたくてちょこちょこだらだらといじくりつづけて書いていたものです。

https://github.com/cure-honey/uzura3

###最小限の実装について
CRCなし、心理音響解析なし、long block だけ、inner loop だけ、ハフマン・コード表は小さい方のみ、その他選択的表は一方だけ、で十分音が出ます。

#　
色々、Fortran 文法的にも Mpeg・音響的にも、内容が分かっていなくて恥ずかしい代物ですが、出しておきます。長年心の片隅で、いずれ Fortran が OO 対応になったら心理音響解析を含めて綺麗に書き直したいと思っていましたが、ハイレゾ時代も到来したし、OO も流行りは過ぎたようなのでもういいかなという気がしてきましたので。

色々間違っているはずなので、ご容赦を。
継承関係にある型は関数ジェネリクスでどう評価されるか

TypeScript ではクラス以外に関数でもジェネリクスが使えるようで、それも呼び出し時に型を指定しなくても引数の型から推論してくれるような挙動をするようで、そこでふと、継承関係にある複数のインタフェースを引数に渡した場合、どういう挙動になるのか気になったので検証してみました。

`O < A < B < C` の順に継承関係にあるインタフェースを定義して、可変長引数でオブジェクトを受け取りマージして返す `Object.assign` のラッパー関数に渡して、その返り値から TypeScript がどういう型として評価されたかを確認します。

感覚的には最も近い共通祖先として評価してもらえると嬉しいところです。

```js
interface O {}
interface A extends O { a: string; };
interface B extends A { b: string; };
interface C extends B { c: string; };

const o: O = {};
const a: A = { a: 'a' };
const b: B = { a: 'a', b: 'b' };
const c: C = { a: 'a', b: 'b', c: 'c' };

function assign<T>(...v: T[]) {
  return Object.assign({}, ...v) as T;
}

assign(o, a, b, c).c;
// -> error TS2339: Property 'c' does not exist on type 'O'.

assign(a, b, c).c;
// -> error TS2339: Property 'c' does not exist on type 'A'.

assign(b, c).c;
// -> error TS2339: Property 'c' does not exist on type 'B'.

assign(c).c;
// -> no error

// 並べ替えて試してみる
assign(c, b, a, o).c;
// -> error TS2339: Property 'c' does not exist on type 'O'. (同様)
```

エラーメッセージを見るに、`A` と `B` と `C` の組なら `A` と評価され、 `B` と `C` の組なら `B` と評価されるので、希望通り、並び順に関係なく最も近い共通祖先まで辿って評価してくれるようですね。
postgres で INSERT時に 「id(主キー) がユニークじゃないよ」と怒られる。

エラーとしては以下のようなもの。

```
'duplicate key value violates unique constraint "*******" ' 
```

IDの自動採番が、なぜかズレてしまっているため今回の事態になった。

まず、現在の主キーの最大値を確認。

```
SELECT MAX(id) FROM table;
```

続いて、自動採番をしている nextval関数 での値を確認。

```
SELECT nextval('table_id_seq');
```

この値が主キーの最大値より小さいと、ズレていることになる。

続いてズレの修正。
以下のように setval関数 で修正できる。

```
SELECT setval('table_id_seq', (SELECT MAX(id) FROM table));
```

以上。

下記のサイトを参考(というかそのまま)にさせてもらいました。
大変助かりました。
https://www.xmisao.com/2014/06/07/duplicate-key-value-violates-unique-constant-primary-key-on-postgresql.html
Visual Studio 2017 インストール

Visual Studio 2017 Community をインストールしてみます。

#環境
Windows 7 Professional SP1 64bit

事前に過去の環境はアンインストールしています。
http://qiita.com/akabei/items/789d920775f0645c6905

#手順
オフライン版は無いようなのでオンラインでインストールします。

公式サイトからインストーラーをダウンロード
https://www.visualstudio.com/ja/downloads/

インストーラーを起動すると機能を選択する画面が表示されるので
自分の必要なものを選択します。

自分はワークロードから以下の２つを選択してインストール

- .NETデスクトップ開発
- C++によるデスクトップ開発

以前よりはやいですがそれでもそこそこかかります。

これでインストール終了です。
lineでスタンプ代用botを作ってみた

<img src="http://qr-official.line.me/L/vfIuMABKQv.png">
<a href="https://line.me/R/ti/p/%40ulj0004q"><img height="36" border="0" alt="友だち追加" src="https://scdn.line-apps.com/n/line_add_friends/btn/ja.png"></a>

# はじめに
ラインで画像を表示するBOTを作ってみました。
グループラインとか友達の会話に追加してあげて使ってみてください。
グーグルの画像検索から画像を引っ張ってきて表示します。
「スタンプ買うのもったいないなぁ」とか「あの漫画のセリフのスタンプ売ってないなぁ」とか
そういう時にスタンプの代わりに使ってください。

# 使い方
## 友達追加
下リンクから友達登録します。
<a href="https://line.me/R/ti/p/%40ulj0004q"><img height="36" border="0" alt="友だち追加" src="https://scdn.line-apps.com/n/line_add_friends/btn/ja.png"></a>
## 画像表示
文字の語尾に「。」をつけると画像を表示してくれます。
![image](https://qiita-image-store.s3.amazonaws.com/0/142486/b75c0399-924f-5b22-f04a-e1354ab3a4a8.png)
「。」をつけなければ画像は表示されることはありません。
![image](https://qiita-image-store.s3.amazonaws.com/0/142486/be757974-4b61-37b0-097a-d16b2fcc6f28.png)

## 画像変更
語尾に「×」をつけると画像変更モードになります。
![image](https://qiita-image-store.s3.amazonaws.com/0/142486/aa1c27d4-5930-08d2-af93-fb8583d1cc57.png)
ここで画像を張り付けると変更されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/142486/98ba0824-22ef-dfc8-7426-7f9f5cb41a7a.png)
この状態で「ハロー。」と入力すると変更した画像が表示されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/142486/1558835a-ad1d-75f1-80f0-05fcb4d138c0.png)
この変更は全ユーザに反映されるため、
ここで変更した「ハロー」の画像は今後、他の人がハローと入力するとこの画像が表示されるようになります。

## 使用数ランキング
「使用数」と入力するとよく使われているワードを表示します。
<img width="320" alt="S__9879635.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/142486/99a59098-99e0-a053-d810-ca4bba37ac23.jpeg">

## 更新ワード表示
「更新」と入力すると、ユーザーによって変更された画像が表示されます。
<img width="320" alt="S__9879636.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/142486/f4100ce1-5881-2720-5151-2fe7a6825e22.jpeg">


# 今後やること
・pythonでlineボットの作り方をこれを参考にして書くかも。

# 終わり
スタンプとか顔文字とかあまり使わない人間なので、
少しでもにぎやかにラインで会話できたらと思い作りました。
要望とか不具合とかあったらコメントください。
Blenderでテクスチャを作成してUnityに取り込むまでのメモ

Unity上で使うオブジェクトをBlenderで作るときにテクスチャの反映の仕方に迷うのでメモしておきます。

# Blender上での作業

## 3Dビューでの作業
0. モデルを作る（割愛）
1. 編集モードにする
1. テクスチャ対象となる面を選択する
1. ショートカット[u]でUVマッピングメニューを開く
1. [スマートUV投影]を選択、[OK]
 
## UV/画像エディタービューで作業
2. [+新規]ボタンを押す、[OK]
2. [無題]を【テクスチャ1】に変更、テクスチャ[F]ボタンを押下
2. 画像メニューから[画像を別名保存]で【テクスチャ1(file).png】を保存

## 3Dビューに戻る
3. テクスチャペイントモードにする
3. ツールシェルフ（左側のやつ）のスロットタブにて、ペイントモードを[画像]を選択
3. キャンパス画像にて【テクスチャ1】を選択
3. ツールシェルフのツールタブでブラシの種類や色や半径や強さ等を調整
3. 3Dビュー上のオブジェクトにグリグリ書き込む
3. モデルへの書き込みが、UV/画像エディタービュー側にも反映されることを確認する

## UV/画像エディタービューに戻る
4. 画像メニューから[画像を保存]

## Blender全体メニュー（Infoウインドウ）
5. ファイルメニューの[保存]で【texture1.blend】で保存

# ここからUnity上での作業
6. 取り込み先のプロジェクトを開く、または新規作成する
6. ProjectウインドウにてAssetsフォルダに【texture1.blend】と【テクスチャ1(file).png】をドラック＆ドロップ
6. Assetsフォルダに取り込みされたモデルオブジェクト(texture1)を、Sceneにドラック＆ドロップ
6. 【テクスチャ1(file)】をScene上の【texture1】オブジェクトにドラック＆ドロップ


# 以上!
結構手順多いですね。
不明な点などがあったら画像載せるのでコメントくださいー。
Visual Studio 2013 アンインストール

Visual Studio 2017 がリリースされたので、インストールをする前に過去の環境をきれいに削除してみました。

#環境
Windows 7 Professional SP1 64bit
Visual Studio Community 2013 with Update 5
Microsoft Windows SDK for Windows 7 and .NET Framework 4

#手順
以下のサイトを参考に Visual Studio Uninstaller を使ってアンインストール

Visual Studioをきれいにアンインストールする手順のメモ
http://heetnote.com/vsuninst/

何度か実行するもいくつか残ってしまったので
コントロールパネルから個別にアンインストールを行う

Azure関係でいくつか以下のメッセージが表示されアンインストールできないものがあった。

```
指定されたアカウントは既に存在します
```

仕方ないので Microsoft Fix it を使ってアンインストール

Microsoft Fix it を使用してアンインストールする
https://knowledge.autodesk.com/ja/customer-service/download-install/remove-products/using-microsoft-fixit

これできれいにアンインストールできました！
Unity ParticleSystemで稲妻を作る

ParticleSystemで稲妻っぽいものを作ってみました。

- GameObject>CreateEmpty で空のオブジェクトを追加
![スクリーンショット 2017-03-18 20.36.47.png](https://qiita-image-store.s3.amazonaws.com/0/59911/eabed247-e189-95b2-43b1-5b35164a1fa4.png)

- Component>Effects>ParticleSystem　でParticleSystemを追加
![スクリーンショット 2017-03-18 20.37.40.png](https://qiita-image-store.s3.amazonaws.com/0/59911/0d1eb4c5-ed28-7bf8-eced-b68ac3d967c6.png)

- Inspector>ParticleSystem>GameObject>+>Trails　でTrailを追加

- RenderMode>None
- Renderer>TrailMaterial>Default-Particle
- StartLifetime=1
- StartSpeed=100
- Inspector>ParticleSystem>GameObject>+>Noise　でNoiseを追加
- Noise>Strength=30
- Noise>Frequency=2
- Trails>ColorOverLifetime>Gradient　で後半だけ光るようにalphaを調整
![スクリーンショット 2017-03-18 20.53.26.png](https://qiita-image-store.s3.amazonaws.com/0/59911/1d4a2dde-8d15-3e4e-4a94-d33ce850a9b1.png)

- 横向きに走る稲妻っぽいものができます。
![スクリーンショット 2017-03-18 20.57.02.png](https://qiita-image-store.s3.amazonaws.com/0/59911/de302207-c1e4-9b8e-7afa-bc0f5d375582.png)

- 向きや数、サイズを調整して完成です。
![スクリーンショット 2017-03-18 21.34.26.png](https://qiita-image-store.s3.amazonaws.com/0/59911/8b8ace9a-7d17-8c81-24b5-4acf55a9d90f.png)
eslint と flow で import と import type で no-duplicate-imports の警告が出るのを消す

これで警告が出た時

```js
/* @flow */
import foo from 'foo'
impot type {Foo} from 'foo'
```

no-duplicate-imports を Off にして eslint-plugin-import の import/no-duplicates を使う

```yaml:.eslintrc.yml
plugins:
  - import
rules:
  no-duplicate-imports: 0
  import/no-duplicates: 2
```

https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md
Swift3onlinux

#概要
Swift3が、IBM Swift Sandboxとpaiza.ioで動くか試してみた。

#サンプルコード


```
import Glibc

var array = ["ズン　" , "ドコ　"]
var zun = 0
while true 
{
    let r = random() % 2
    print(array[r], terminator: "")
    if r == 0  
    {
        zun = zun + 1
    }
    else if r == 1 && zun == 4
    {
        break
    }
    else
    {
        zun = 0
    }
}
print("キ・ヨ・シ！！")
```


#実際
paiza.ioで実行　swift v3.0.1
https://paiza.io/projects/e/WXarxwdSzfF2DX4ErwEXvQ?theme=chrome

IBM Swift Sandboxで実行 swift v3.0.2
http://swift.sandbox.bluemix.net/#/repl/58cd1e94c0ea640843175955
よく使うtmuxコマンド/設定ファイル

#概要
tmuxを利用するときによく使うコマンドの個人用メモ
※すべてCtrl-bを前に打つ(~/.tmux.confでPrefixは変更可能)

# Pane関連の操作
|Command|Description|
|:---------|:--------|
|% | Paneを縦に分割 |
|" | Paneを横に分割|
|z | 現在のPaneの最大化|
|o | 分割した別のPaneに移動|
|; | 直前に操作したPaneに移動|
|! | 現在のパネルを別のWindowとして表示|
|x | 現在のPanelの削除|

# Window関連の操作
|Command|Description|
|:---------|:--------|
|c | windowの新規作成|
|n | 次のWindowに移動|
|p | 前のWindowに移動|
|l | 最後に選択したWindowに移動|
|0-9 | windowの選択|
|, | windowの名前を変更|
|f | 現在のWindowで文字列検索|
|& | Windowを削除|

#　その他のコマンド
|Command|Description|
|:---------|:--------|
|[ | コピーモード(開始箇所　: Space、終了箇所　: Enter)|
|] | 最新のバッファ貼り付け|
|? | key-bindを表示|
|C-z | tmuxの終了|
|: | tmuxコマンドプロンプト|

# 参考
## インストール
```sh:インストール
brew install tmux
brew install reattach-to-user-namespace
```

## 設定ファイル
```sh:設定ファイル(tmux2.4)
# Esc入力時の待ち時間をキャンセル
set-option -s escape-time 0

# アクティブウィンドウを目立たせる
setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright

# アクティブペインを目立たせる
set -g pane-active-border-fg white
set -g pane-active-border-bg yellow

# rで設定読み込み
bind r source-file ~/.tmux.conf \; display "Config reloaded."

## ステータスバーを下部に表示する
set -g status-position bottom

# vim-ish keybind
set-window-option -g mode-keys vi
setw -g mode-keys vi

bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
unbind -T copy-mode-vi Enter
bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"

# クリップボード対応
set-window-option -g mode-keys vi
```


``` sh:設定ファイル(tmux2.3)
# Esc入力時の待ち時間をキャンセル
set-option -s escape-time 0

# アクティブウィンドウを目立たせる
setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright

# アクティブペインを目立たせる
set -g pane-active-border-fg white
set -g pane-active-border-bg yellow

# rで設定読み込み
bind r source-file ~/.tmux.conf \; display "Config reloaded."

## ステータスバーを下部に表示する
set -g status-position bottom

# マウス操作を有効にする
setw -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on

## viのキーバインドを使用
setw -g mode-keys vi
# Setup 'v' to begin selection as in Vim
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"

# クリップボード対応
set-window-option -g mode-keys vi
```
※参考設定ファイル
http://qiita.com/yukofeb/items/b9aad876c410863c4d4b
Unity 5.6からpackagename(Android)とbundle identifierの(iOS)が別々に設定できるようになった

# アプリ識別子に別々の文字列をエディターから簡単に設定できるようになった！

　Unity 5.6の[リリースノート](https://unity3d.com/jp/unity/beta)より(現在beta版 5.6f1、多分もうすぐ公開)

> Build Pipeline: Added SetApplicationIdentifier and GetApplicationIdentifier methods to PlayerSettings (Edit > Project Settings > Player). These allow you to set the Bundle Identifier (Apple platforms) / Package ID (Android and Tizen) separately for each platform.

　と、あるようにUnity 5.6から

* packagename : Androidのアプリ識別子
* bundle identifier : iOSのアプリ識別子

　を別々にUnity Editorから設定できるようになりました。（リリースノートによると、Tizenも別々に設定できるようになるようですね。）
 
# いくつかのプロパティも名称変更！

　それから`Application`クラスと`PlayerSettings`クラスにあった、`bundleIdentifier`というプロパティも次のように名前が変わっています。

* `Application.bundleIdentifier` -> `Application.identifier` ([Application.identifier(Unity 5.6 リファレンス)](https://docs.unity3d.com/560/Documentation/ScriptReference/Application-identifier.html))
* `PlayerSettings.bundleIdentifier` -> `PlayerSettings.applicationIdentifier` ([PlayerSettings.applicationIdentifier(Unity 5.6 リファレンス)](https://docs.unity3d.com/560/Documentation/ScriptReference/PlayerSettings-applicationIdentifier.html))


# 何がうれしいのか？

　Unity EditorからAndroid・iOSで異なるアプリ識別子設定できるようになったので、Androidでは「`_`」を、iOSでは「`-`」を含むアプリ識別子を設定できるようになりましたね。

　Androidの`packagename`には「`-`」を含めることができません。iOSでは`bundle identifier`では「`_`」を含めることができません。

　しかしUnity 5.6より前のUnityでは、Androidの`packagename`とiOSの`bundle identifier`には、同一の文字列を設定することしかできませんでした。そのため、両プラットフォームに公開するアプリでは、アプリ識別子に`-`や`_`は使えませんでした。

　Unity 5.6から、Unity Editorから素直にプラットフォームごとに別の識別子を設定できるようになったため、`-`や`_`など片方のプラットフォームでしか使えなかった文字もそれぞれのプラットフォームで使えるようになりました。

　(Unity 5.6以前もエディタ拡張使えば、「Androidビルド前に`-`を`_`に変更する」とかいろいろやりようありましたけどね。)


# 注意

　2017/3/18(土)現在、[Unity 5.6 Beta](https://store.unity.com/ja/download?ref=personal)のバージョンがUnity 5.6f1になりました。いつも通りならばUnity 5.6の正式リリースがもう間もなくだと思われます。
(メモ)ページビューと簡単なイベントGoogleAnalyticsで取得するための基本的な流れ

①GoogleAnalyticsでプロパティ作る
②トラッキングコードを<body>の直後に入れる
③イベントを取得したい要素に以下のような感じでコードを入れる

```html
<a href="#" onclick="ga('send', 'event', 'a', 'click', 'Open popup',{nonInteraction:true});">

<input type="submit" onsubmit="ga('send', 'event', 'input', 'submit', 'Send Request',{nonInteraction: false});">
```

(参考)
・フォーム送信イベントについて
http://sinap.jp/blog/2015/06/efo04.html
・非インタラクションについて
http://primarytext.jp/blog/1427
・イベントトラッキングコードの各フィールド名の意味
https://developers.google.com/analytics/devguides/collection/analyticsjs/events?hl=ja