OmniAICreator/Qiita-1.07M huggingface dataset:
フォーカスについて


##フォーカスの概要
[MSDN](https://msdn.microsoft.com/ja-jp/library/aa969768(v=vs.110).aspx)

##初期フォーカスのセット
[FocusManager.FocusedElement](https://msdn.microsoft.com/ja-jp/library/system.windows.input.focusmanager.focusedelement(v=vs.110).aspx)を使用する。

```csharp:sample.xaml
<Grid  FocusManager.FocusedElement="{Binding ElementName=*****}" >
```

##ViewModelからのフォーカスセット
バインドできるプロパティを作成する。

```csharp:FocusExtension.cs
    public static class FocusExtension
    {
         public static bool GetIsFocused(DependencyObject obj)
         {
             return (bool) obj.GetValue(IsFocusedProperty);
         }
      
      
         public static void SetIsFocused(DependencyObject obj, bool value)
        {
            obj.SetValue(IsFocusedProperty, value);
        }
     
     
        public static readonly DependencyProperty IsFocusedProperty =
                DependencyProperty.RegisterAttached(
                   "IsFocused", typeof(bool), typeof(FocusExtension),
                    new UIPropertyMetadata(false, OnIsFocusedPropertyChanged));
     
     
        private static void OnIsFocusedPropertyChanged(DependencyObject d,
                DependencyPropertyChangedEventArgs e)
        {
            var uie = (UIElement)d;
            if ((bool) e.NewValue)
            {
                uie.Focus();
            }
        }
    }
```

```csharp:ViewModel
        public bool IsTextBoxFocused
        {
            get { return _isFocused; }
            set
            {
                this.SetProperty(ref this._isFocused, value);
            }
        }
```

```csharp:View

<TextBox local:FocusExtension.IsFocused="{Binding IsTextBoxFocused}" /> 
```

##Behaviorでフォーカスセット

```csharp:FocusBehavior.cs
{
    public class FocusBehavior : Behavior<FrameworkElement>
    {
        /// <summary>
        /// フォーカス設定
        /// </summary>
        public void Focus()
        {
            this.AssociatedObject.Focus();
        }
    }
```

```csharp:sample.xaml
        <CheckBox Content="flg1" HorizontalAlignment="Left" IsChecked="{Binding Flg1}">
            <i:Interaction.Behaviors>
                <local:FocusBehavior x:Name="forcusTest" />
            </i:Interaction.Behaviors>
        </CheckBox>
        <Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Command="{Binding CalcCommand}" >
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Click">
                    <ei:CallMethodAction TargetObject="{Binding ElementName=forcusTest}" MethodName="Focus" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>
```

##Tabキーでの移動
TabIndex プロパティを指定する。
[参考URL](http://d.hatena.ne.jp/hilapon/20110228/1298877960)
回転楕円体面上（地球表面上）の距離などの計算

こんにちは。
回転楕円体面上（地球表面上、WGS84）の距離などの各種計算（近似）を使いやすくまとめたものを見つけたので[^1] [^2]、少し手直ししてみました（[cheap-ruler.js](https://github.com/kkdd/cheap-ruler)）[^3]。

[^1]: これは曲率を使った一次近似計算式です（「[地理経緯度の変換式](https://ja.wikipedia.org/wiki/経緯度#地理経緯度の変換式)」(Wikipedia)）。「[回転楕円体面上（地球表面上）の正多角形](http://qiita.com/kkdd/items/abc02008ddce6e70bb60)」と同様の計算です。
[^2]: polygon領域内部に点が含まれるかどうかの判定については、今回の近似（曲率係数を掛ける）を行っても行わなくても結果には差がありません。したがって「[二次元多角形領域内部に点が含まれるかどうかを判定](http://qiita.com/kkdd/items/eda0a0a2386dc0549d7c)」のような方法をそのまま経緯度値に適用しても近似的には良いでしょう。
[^3]: 手直し前のオリジナルの[cheap-ruler.js](https://github.com/mapbox/cheap-ruler)は、$e^2$で展開し係数は数値化した計算式を使っています。

下記が使用例です（これの二点間距離計算値は、12.4604705 km で、近似誤差は 2.5 mm [^4]）。

[^4]: このような距離条件では 「[回転楕円体面上（地球表面上）の二点間距離高精度近似](http://qiita.com/kkdd/items/0380cf778ac23d39b6fe)」を使う必要はあまりなく、今回の近似方法で十分そうです。

```usage.js
const lat_ruler = 60.0;
const ruler = cheapRuler(lat_ruler, 'kilometers');
const distance = ruler.distance([135.5, 59.95], [135.6, 60.05]); // #=> 12.4604705 km
```

ソース（抜粋）は、

```cheap-ruler.js
// WGS84 ellipsoidal earth
const consts = cheapRuler.constants = {
    RE: 6378137.0, // IS-GPS
    FE: (1/298.257223563), //IS-GPS
    DEGREE: Math.PI/180
};
consts.E2 = consts.FE * (2 - consts.FE);

function cheapRuler(lat /*: number */, units /*: ?string */) {
    if (lat === undefined) throw new Error('No latitude given.');
    if (units && !factors[units]) throw new Error('Unknown unit ' + units + '. Use one of: ' + Object.keys(factors).join(', '));
    return new CheapRuler(Math.cos(lat * consts.DEGREE), units);
}

// see https://en.wikipedia.org/wiki/Geographical_distance
function CheapRuler(coslat, units) {
    const m = consts.DEGREE * consts.RE / factors[units ? units : 'kilometers'];
    const w2 = 1 / (1 - consts.E2 * (1 - coslat * coslat));
    const w = Math.sqrt(w2);
    this.kx = m * w * coslat;
    this.ky = m * w * w2 * (1 - consts.E2);
}

CheapRuler.prototype = {
    /**
     * Given two points of the form [longitude, latitude], returns the distance.
     *
     * @param {Array<number>} a point [longitude, latitude]
     * @param {Array<number>} b point [longitude, latitude]
     * @returns {number} distance
     * @example
     * const distance = ruler.distance([30.5, 50.5], [30.51, 50.49]);
     * //=distance
     */
    distance: function (a, b) {
        const dx = (a[0] - b[0]) * this.kx;
        const dy = (a[1] - b[1]) * this.ky;
        return Math.hypot(dx, dy);
    }
}
```
List同士のマッチング

職場で現状調査のためソースを眺めていましたが、たまたま2重ループでリスト同士をマッチングするコードがありました。
マッチングの仕様はソースを見た限り
‐文字列が格納されているList AとList Bがある
-List Aの文字列がList Bの文字列の先頭から一致しているものが一つでもあればtrueを返す
というものでした。
実装方式は古典的な2重ループでList同士をひとつづつ比較するものでしたが、Stream関数を使ってもっと簡素に記述できるのではないか？と疑問が湧いたので、stream関数を使って実装してみました

```MyListSearcher.java
package test;

import java.util.Arrays;
import java.util.List;

public class MyListSearcher {
	
	public static void main(String args[]){
		List <String> target =Arrays.asList("triple","evergreen");
		List <String> matcher =Arrays.asList("triple,ok","evergreen,ng","aria,ok");
		System.out.println(String.format("実行結果: %b", exe(target,matcher)));
		//実行結果: true
		
		target =Arrays.asList("triple_1","evergreen");
		matcher =Arrays.asList("triple,ok","evergreen,ng","aria,ok");
		System.out.println(String.format("実行結果: %b", exe(target,matcher)));
		//実行結果: true
		
		target =Arrays.asList("triple_1","evergreen_2");
		matcher =Arrays.asList("triple,ok","evergreen,ng","aria,ok");
		System.out.println(String.format("実行結果: %b", exe(target,matcher)));
		//実行結果: false

	}
	
	private static boolean exe(List<String>target,List<String>matcher){
		return target.stream().anyMatch(a->matcher.stream().anyMatch(b->b.startsWith(a)));
	}

}

```
R オフラインでのパッケージインストール

###オフラインでのパッケージインストール
Rのパッケージは、インターネット環境下では

```.R
install.packages()
```
を使用すると、簡単にインストールできますが、
作業環境がインターネット接続下にない場合も多々あると思います。

その場合、CRANサイトにてパッケージファイルのダウンロードが可能ですが、
使用したいパッケージのダウンロードだけでは機能しないことが大半です。
一つのパッケージの中で、複数のパッケージを呼び出しているので、それに紐付いているパッケージ全てが必要なためです。
ですが、それを一つ一つ調べてダウンロードすることは大変なので、一括でしたいと思います。

今回は"ranger"というランダムフォレストモデルを作成するためのパッケージを例にやってみたいと思います。
(windows環境で行っています)

##①紐付いているパッケージの調査
まずは、インターネット接続のあるPC上のRで、
使用したいパッケージに紐付いているパッケージを調べます。
Rコンソールに以下を入力してください。

```.R
#miniCRAN というライブラリを使用します
install.packages("miniCRAN")
library(miniCRAN)

#pkgDep("使用したいパッケージ")で使用したいパッケージに紐付いているパッケージの探索
pkgs <- pkgDep("ranger")

#出力
pkgs

```
![gateway.png](https://qiita-image-store.s3.amazonaws.com/0/147821/ed4ec853-4a75-f69b-a567-09f2676ca44b.png)


"ranger"を使用するために必要なパッケージを探索できました。


##②必要なパッケージのダウンロード
必要なパッケージがわかったので、ダウンロードします。

```.R
#パスが通らないときは、ディレクトリの区切りを"¥¥"や"/"に変更してみてください
#destdir にダウンロード先のパスを指定してください
download.packages(pkgs,destdir="C:¥¥users¥mochi¥", type="win.binary")

```

ダウンロードがはじまりました
![gateway-1.png](https://qiita-image-store.s3.amazonaws.com/0/147821/d58f4ae3-fb47-f9c6-e2cc-c12b8e9a5763.png)


すべてダウンロードが完了すると以下のような表示が出てきます。
![gateway-1 2.png](https://qiita-image-store.s3.amazonaws.com/0/147821/2b3f6747-64a2-58cd-64bf-64b623188d83.png)

①で調査した際に出力されたパッケージが揃っているはずです。


##③移動
②で"destdir"(ダウンロード先)に指定したディレクトリに、zipファイルが出力されているはずなので、
それをUSBに入れるなどしてください。
そして、Rを使用したいオフライン環境へ移動させてください。

オフライン環境のR上で、以下を実行すると、インストール完了です。

```.R
install.packages(
  c("オフライン環境の、パッケージ移動先パス/ranger_0.8.0.zip",
    "オフライン環境の、パッケージ移動先パス/Rcpp_0.12.11.zip"), 
  repos = NULL, conrib.url="win.binary", type = "win.binary")

```

###※上記でインストールしても、使用できない場合
Rを使用したいオフライン環境の、Rライブラリのディレクトリを探し、必要なzipファイルを解凍した状態で入れましょう。
同じ名前のパッケージフォルダがあると、どちらを使用すべきか判断できないことによりエラー発生することがあるので注意してください。
vagrant up時カーネルの違いでコケるときの対応

【検証環境】

| virtual box | vagrant | 
|:-----------:|:--------|
|5.0.14	| 1.7.4|


vagrant up で失敗する（つらい）

1.vagrant up時にバーっと流れる文の中にこれがこっそり出てる。。。

```An error occurred during installation of VirtualBox Guest Additions 5.0.14. Some functionality may not work as intended. In most cases it is OK that the "Window System drivers" installation failed. Restarting VM to apply changes..```

*解決方法*
`[vagrant@vagrant-centos65 ~]$ sudo vagrant plugin install vagrant-vbguest`
このプラグインでGuest Addtionsを合わせることで解決します。

2.vagrant up時下記のエラー分が出る場合
GuestAdditions versions on your host (5.0.14) and guest (4.3.10) do not match.

*解決方法*
guestOS側のカーネルのバージョンとあっていませんよということなので最新のものを入れてあげる。
`[vagrant@vagrant-centos65 ~]$ sudo yum update --exclude=centos*`
`[vagrant@vagrant-centos65 ~]$ sudo yum install http://vault.centos.org/6.5/updates/x86_64/Packages/kernel-devel-2.6.32-431.3.1.el6.x86_64.rpm`

このときに `--exclude=centos*`が入ってないとOSのバージョンまで上がってしまうため注意が必要です。。。
Djangoistへの道のり

# **はじめに**
- Djangoistと呼ぶかどうかは知りません！
- Django学習に**実際に使用している**サービス、ナレッジ、技術書などをメモしていこうという企みです
- 良いサービス、良い学習方法があれば教えて頂けると幸甚でございます

# **学習に使用しているもの**
- Webドキュメント
- Django学習サービス
- Django技術書

# **Webドキュメント**
## [Djangoドキュメント](https://docs.djangoproject.com/ja/1.10/)
- version 1.10版
- うれしい日本語対応
- Django を使いこなすための全てがここにあります

## [Django Girls Tutorial](https://djangogirlsjapan.gitbooks.io/workshop_tutorialjp/content/)
- ブログ作成までのチュートリアル
- うれいしい日本語訳

## [Django Girls Tutorial: Extensions](https://djangogirls.gitbooks.io/django-girls-tutorial-extensions/)
- Django Girls Tutorialで作成したアプリケーションに機能追加等を行っていく
- 英語版のみしかないっす

## [PythonのWebアプリケーション（Django）を初心者にもわかりやすく解説](http://qiita.com/yoshizaki_kkgk/items/f3c79e38b802c7fc8863)
- Qiitaの @yoshizaki_kkgk さんによる記事
- 全6章からなり、Django Girls Tutorialをアレンジしたものっぽい？（まだやってないですorz）

# **Django学習サービス**
## [PyQ](https://pyq.jp/)
- ビープラウドが提供しているPython学習サービス
- 月額2980円から利用可能
- Python学習には良いが、Djangoに関しては説明が不足しまくりで改善の余地ありまくりなため今後に期待

# **Django技術書**
**まだ購入してないので良い書籍があればおせーて下さいorz**
Riot.jsでもAsync/Await または co/yieldしたい

## 動機

[WebpackでRiot.jsをトランスパイルする雛形](https://github.com/NewGyu/riot-sample)はなんとなく出来たのですが、非同期を扱い始めるとPromiseだけではやはり苦しい。async/await せめて、co/yeldを使いたい。

いまいち正解がわからず試行錯誤右往左往したので後々のためにメモです。
フロントエンド周りは１年前の情報だと疑ってかからないとハマるというつらい世界ですね。

## Webpackの設定

```js
plugins: ["transform-regenerator", "transform-runtime"]
```

この２つのbabel-pluginを追加です。

https://github.com/NewGyu/riot-sample/commit/ddd02ec4f270bd127a345c4ba49716483994fd89

### es2015-riot には transform-regenerator が含まれている

https://github.com/riot/babel-preset-es2015-riot/blob/master/index.js

### しかしブラウザで動かすためには transform-runtimeが必要

https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-runtime

## 試してみる

サンプルはこちらです。
https://github.com/NewGyu/riot-sample/tree/async-await

`npm start` して http://localhost:8080 でためせます。

![Screenshot from 2017-07-11 23-02-11.png](https://qiita-image-store.s3.amazonaws.com/0/31010/40c802c0-ff1b-560b-3703-036cc58c76f6.png)

https://github.com/NewGyu/riot-sample/blob/async-await/src/tags/pages/async.tag

```html:async.tag
<async-page>
  <button class="button { is-loading: yielding }" onclick={ testGeneratorYield }>generator,yield</button>
  <button class="button { is-loading: awaiting }" onclick={ testAsyncAwait }>async,await</button>

  <div id="notify-area"></div>
  <script>

  async testAsyncAwait(e) {
    this.update({awaiting: true});
    const r = await asyncFunc();
    riot.mount("#notify-area", "message-notify", {text: r});
    this.update({awaiting: false});
  }

  testGeneratorYield(e) {
    const self = this;
    co(function*(){
      self.update({yielding: true});
      const r = yield generatorFunc();
      riot.mount("#notify-area", "message-notify", {text: r});
      self.update({yielding: false});
    })
  }

  </script>
</async-page>
```

```js
export function* generatorFunc() {
  yield waitFor(2);
  return "generator";
}

export async function asyncFunc() {
  await waitFor(3);
  return "async";
}

function waitFor(sec) {
  return new Promise((res, rej) => {
    setTimeout(res, 1000*sec);
  });
}
```

いずれかのボタンを押すと、2,3秒後にメッセージが表示されるという単純なものです。
async/awaitの方がタイプ数少なく書けますね。
R tcltk エラー

arulesViz でインタラクティブな図を作成しようとしたら、
エラーが出てきてしまいました...

##背景とエラー
アソシエーション分析で、ルールが見つかった時、以下のような描画をします。
![スクリーンショット 2017-06-28 18.23.30.png](https://qiita-image-store.s3.amazonaws.com/0/147821/d80e4abc-e562-1619-92f3-65ca66c35dbe.png)

このノードなどを自分で動かせるようにするには、以下のように
"interactive = TRUE" というオプションを追加します。

```.R
# ルールのグラフ描画
par(family = "HiraKakuProN-W3")
plot(data,
     method="graph",
     interactive = TRUE,
     control=list(type="items", cex=1),
     margin=-0.1)
```
こんなかんじ。

そこで出てきたエラーが以下。
![スクリーンショット 2017-06-28 17.32.13.png](https://qiita-image-store.s3.amazonaws.com/0/147821/2b36e6da-d8b1-0909-946a-c96dd9f8fbe6.png)

oh...

##対応

どうやらtcltk ライブラリがダメっぽい...
ならば入れ直そうと

```.R
install.packages("tcltk")
```

を実行しても、以下のエラーが。

```.R
Running that line returned two warnings: 1.) "Warning in install.packages : package ‘tcltk’ is not available (for R version 3.3.0)", 2.) "Warning in install.packages : package ‘tcltk’ is a base package, and should not be updated"
```

古いバージョンのrtcltkライブラリを、CRANで探してインストールしてもダメでした。
そこで、

https://cran.r-project.org/bin/macosx/tools/

でPC環境に合うバージョンの方をダウンロード。

![スクリーンショット 2017-06-28 18.09.40.png](https://qiita-image-store.s3.amazonaws.com/0/147821/743d8af5-8a20-8b02-bb4b-635f3758e288.png)

落としてきたフォルダをクリックして実行。
インストール完了したので、再び

```.R
library("tcltk")
```

![スクリーンショット 2017-06-28 17.31.38.png](https://qiita-image-store.s3.amazonaws.com/0/147821/72f5b05e-b806-a2bf-baea-ae1a1f8ec202.png)

まだダメっぽい。
今度はxquartzを入れろ　とのこと。

https://www.xquartz.org/

![スクリーンショット 2017-06-28 18.13.17.png](https://qiita-image-store.s3.amazonaws.com/0/147821/2ca61f3b-b86b-5fd3-457b-5d42aa624299.png)

これをダウンロード。

のち、再び

```.R
library("tcltk")
```
![スクリーンショット 2017-06-28 18.14.26.png](https://qiita-image-store.s3.amazonaws.com/0/147821/747536e5-0591-8f69-bb99-e56ba7702942.png)

警告だし大丈夫でしょう。という期待を胸に図をplot。

![スクリーンショット 2017-06-28 18.14.46.png](https://qiita-image-store.s3.amazonaws.com/0/147821/6528678c-3a44-9608-4bc4-8797ae1bab29.png)

ダメじゃん。

そののち、再起動したらできました！！！！！
IntelliJとGradleで始めるApache Beam 2.0.x with Google Cloud Dataflow

# IntelliJとGradleで始めるApache Beam 2.0.x with Google Cloud Dataflow

基本的にドキュメントでは、Mavenでのクイックスタートしか書いていなかったので、[Apache Beam](https://beam.apache.org/)をGradleとIntelliJで始める方法をメモする。

今回は、Pipelineに対するOptionを指定することなどは考えず、とりあえずローカル環境で動かせるようにするための設定である。
Pipelineに対するOptionを指定するなど、諸々のことを考慮したものを今後追加記述する可能性もある。

## 方法

### 1 intelliJ IDEAでCreate New Project 
<img width="427" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/145611/ce4e16ae-448a-a8a3-4880-7cf9271cd03b.png">


### 2 GradleとJavaを選択
<img width="962" alt="2.png" src="https://qiita-image-store.s3.amazonaws.com/0/145611/6f1c2f7e-1350-fa0b-e947-7d685a218a7d.png">

### 3 groupIdとartifactIdを指定
<img width="953" alt="3.png" src="https://qiita-image-store.s3.amazonaws.com/0/145611/e40fa0a4-54e7-da82-56ff-b3fec10a613f.png">

groupId:プロジェクトのルートパッケージ名
artifactId : プロジェクト名

### 4 諸々の設定
設定を以下のようにする

<img width="945" alt="4.png" src="https://qiita-image-store.s3.amazonaws.com/0/145611/e05c30ac-30fd-9397-1947-c12d0c298179.png">



### 5 project nameとproject locationを設定
表示されたままでよければ進む

### 6 以下のbuild.gradleに変更する
```
group 'hoge'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'com.google.cloud.dataflow', name: 'google-cloud-dataflow-java-sdk-all', version: '2.0.0'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}
```


### 7 ビルドを待つ
build.gradleを上記に変更してしばらく待つと、IntelliJが勝手にbuildしてくれるので、Apache Beamを使用できるようになる。

## Mavenのリポジトリ
掲載したbuild.gradleのような感じで、以下のMavenのリポジトリから、引っ張ってこられる
[Maven Repository: com.google.cloud.dataflow](https://mvnrepository.com/artifact/com.google.cloud.dataflow)


## 参考にさせていただいたサイト
[Gradle初心者によるGradle事始め - Qiita](http://qiita.com/navekazu/items/af886fa200be8a683132)

[Maven Repository: com.google.cloud.dataflow](https://mvnrepository.com/artifact/com.google.cloud.dataflow)

※ ブログでも同一の投稿を行っている
[IntelliJとGradleで始めるApache Beam with Google Cloud Dataflow](http://www.sekky0905.com/entry/2017/07/11/IntelliJ%E3%81%A8Gradle%E3%81%A7%E5%A7%8B%E3%82%81%E3%82%8BApache_Beam_with_Google_Cloud_Dataflow)
R 二軸でのplot()

#概要
Rで、二軸のグラフ描画を行います。

内容は以下です。
・サンプルデータの作成
・通常の描画
・二軸で描画


#サンプルデータの作成
まずは、サンプルデータの作成をします。
今回は、30日分の売り上げと、購入者数、購入日がある3列のデータを作成します。

```.R
##まずはサンプルデータ作成

#購入金額データ
purchase <- rnorm(n=30, mean=400000, sd=50000) %>%
  as.integer() 

#購入者数データ
usr_num <- rnorm(n=30, mean=200, sd=50) %>%
  as.integer()

#上で作成したデータをデータフレームにし、購入日列の追加
data <-data.frame(purchase, usr_num) %>% 
  mutate(date = seq(1:length(purchase))) 

```

以下のような、purchase(購入金額合計)、usr_num(購入者数)、date(購入日)の
3列からなるサンプルデータができました。

![スクリーンショット 2017-06-05 14.16.18.png](https://qiita-image-store.s3.amazonaws.com/0/147821/58848e03-c88c-12e6-19ee-d42a0ec614f7.png)


##通常の描画
通常、購入金額合計と、購入者数のような、単位の大きく異なる二数を
一つのグラフにまとめようとすると、以下のグラフのように、
単位の小さい購入者数は、増減の波がないように見えてしまいます。

![スクリーンショット 2017-06-05 14.13.27.png](https://qiita-image-store.s3.amazonaws.com/0/147821/b381243a-e66a-e515-2769-74350a2f47c0.png)



##二軸で描画してみよう

###1.まずはグラフパラメータの設定から
通常、一軸のメモリを置くだけのスペースしかないので、グラフパラメータを変更して、
２軸目を置くとこが出来る余白を作ります。

```.R
##グラフパラメータを変更する
#パラメータを元に戻せるよう、デフォルト値を保持しておく
default_mai <-par()

#グラフパラメータの設定
mai <- par()$mai

#余白サイズの設定(上下と左右の幅を揃える)
mai[4] <- mai[1] 

#指定した余白サイズの適用
par(mai = mai)

```


###2.一つ目のグラフを描こう
これはいつも通りに。

```.R
##1つ目のグラフの描画
plot(
  data$usr_num,
  type = "l", #"l"で折れ線グラフの指定
  ylab = "usr_num", #y軸の表示
  col = "blue" #線の色の指定
  ) 

```

先ほど、余白を作っておいたので、通常よりも右側があいています
![スクリーンショット 2017-06-08 18.21.28.png](https://qiita-image-store.s3.amazonaws.com/0/147821/b79a6032-084b-6f60-0e11-8d5ebafb1936.png)

###3.二つ目のグラフを描こう
ここからが本番です！

```.R

##2つ目のグラフの表示
par(new = T) #現在のplotに上描きの設定

plot(
  data$purchase, #plotしたいものを指定
  type = "l", 
  axes = FALSE, #axes=Fの指定をしないと既存の軸の上に軸が乗ってしまう
  ylab = "", #空にしておかないと既存の表示の上に重なってしまう 
  col="red" 
  )

#2軸目を表示
axis(4) #どこにメモリを置くか(1なら下,2なら左,3なら上,4なら右)

#2軸目のラベル設定
mtext("purchase", #2軸目のラベル名
      side = 4, #どこにラベルを置くか(1なら下,2なら左,3なら上,4なら右)
      line = 2 #グラフの枠からの距離
      )

```

![スクリーンショット 2017-06-08 18.23.13.png](https://qiita-image-store.s3.amazonaws.com/0/147821/a0bc71b5-a9ba-83cc-715d-3b5cecd0cdc7.png)

完成 ＼ (＠＾0＾＠) ／
購入者数と金額の増減の波は、ある程度関係があるように見えます。
描くグラフによって、新しい発見があることが多いです。

###4.最後に
最初に変更した、グラフパラメータを元に戻しておきましょう。

```.R
#グラフパラメータの余白をデフォルト値に戻す
par(mai = default_mai$mai)

```
macOS Sierraでシステム環境変数を設定する

ターミナル以外のアプリなどで使う環境変数を設定したかった。してみました

内容としては、こちらの記事のとおりですが備忘として残しておきます。
http://qiita.com/__10100__/items/622548eca4773535e979

``` bash
$ vim ~/Library/LaunchAgents/environment.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>my.environment</string>
  <key>Program</key>
  <string>/Users/shwld/.environment-plist.sh</string>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>
```

``` bash
$ vim ~/.environment-plist.sh
#! /bin/sh
launchctl setenv GOOGLE_API_KEY hogehoge
launchctl setenv GOOGLE_DEFAULT_CLIENT_ID hogehoge
launchctl setenv GOOGLE_DEFAULT_CLIENT_SECRET hogehoge
$ chmod +x ~/.environment-plist.sh # 不要?
```

```
launchctl load ~/.environment-plist.sh
```

上記のファイルを保存、実行した後、再起動したら反映されていました(再ログインでもいけるかも)
brew cask install android-sdk


## brew caskでインストール

```sh
$ brew cask install android-sdk
```

## PATH追加

```sh
export ANDROID_SDK_ROOT=/usr/local/share/android-sdk
```

## 以上

## 補足

Android端末を開発モードにする

1. 設定へいく
1. ビルド番号を７回タップ
1. 設定へもどる
1. 「開発者向けオプション」が表示される
1. ビルドする

```
$ react-native run-android
```

-----

##　追記

結局のところ[Android Studio](https://developer.android.com/)使うのが一番はやい。
https://developer.android.com/
Swiftでテキストをニコニコ風に表示する


画面外の位置から画面の外に位置を動かします


```Swift
// UILabelをニコニコ風に流す
func  nicoAnimation(label: UILabel) {
    label.frame.origin.x = UIScreen.main.bounds.size.width
    // 文字の流れるスピードを調整する
    UIView.animate(withDuration: 8, animations: { () -> Void in
        label.frame.origin.x = -UIScreen.main.bounds.size.width
    }, completion: { finished in
        // 繰り返し
        self.nicoAnimation(label: label)
    })
}
```

storyboaradを使用する際はauto layoutを外す
Pythonでsklearnのgrid searchが使えないときの対処方法

python(ver 3.6.1)でsklearnのgrid searchを使おうと思ってコード書いてコンパイルしたら、なんか引っかかってWarningが出てきました。


↓ソースに書いて、引っかかったところ。

```py3
from sklearn.grid_search import GridSearchCV
```
↓コンパイルして出てきたWarning（ちなみにMacでやってます）

```
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/cross_validation.py:
44: DeprecationWarning: 
This module was deprecated in version 0.18 in favor of the model_selection module into 
which all the refactored classes and functions are moved. 
Also note that the interface of the new CV iterators are different from that of this module. 
This module will be removed in 0.20.
  "This module will be removed in 0.20.", DeprecationWarning)
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/grid_search.py:
43: DeprecationWarning: 
This module was deprecated in version 0.18 in favor of the model_selection module into 
which all the refactored classes and functions are moved. This module will be removed in 0.20.
  DeprecationWarning)
```


Warningを解読すると、モジュールのバージョンが「0.18」から「0.20」に上がったときに削除された模様？
なんやかんやで色々と試したら、pythonのソースの記載をいじって無事に使えるようになりました。

```py3
from sklearn.model_selection import GridSearchCV
```

同じようなところで躓いた方はぜひお試しください！
Ruby用に環境変数を設定した軌跡


#####シェルの確認

```bash:
$ echo $SHELL
/bin/bash
```

#####環境変数の確認
```bash:
$ printenv
#すごい出るので略
```
#####環境変数の設定
- `.bash_profile`に追加

```bash:.bash_profile
export QIITA_MAIL=ThisIsMail
export QIITA_PASS=ThisIsPass
```

#####反映させる
```bash:
$ source ~/.bash_profile 
```

#####bashで確認
```bash:
$ echo $QIITA_MAIL
ThisIsMail
$ echo $QIITA_PASS
ThisIsPass
```

#####Rubyで確認
```env.rb
p ENV['QIITA_MAIL']
p ENV['QIITA_PASS']
```

```:結果
$ ruby env.rb 
"ThisIsMail"
"ThisIsPass"
```

#####参考にしたサイト
- [bash 環境変数とシェル変数 webzoit.net ](http://www.webzoit.net/hp/it/internet/homepage/env/cs/server/os/type/unix/linux/shell/kind/sh_bash/environment/)
- [シェル変数と環境変数の違いをコマンドラインで確認する - Qiita ](http://qiita.com/kure/items/f76d8242b97280a247a1)
Electronでrequestモジュールを使って、プロキシ経由でpostする

こんな感じ。
認証が必要なプロキシでも大丈夫。

```Javascript
const request = require('request');

let request_with_proxy = request.defaults({proxy: 'http://user:password@proxy.example.jp:80'});

request_with_proxt.post('http://service.com/upload', {form:{key:'value'}});

```

## 必要なもの
requestモジュール
https://github.com/request/request
Parallelのマルチプロセスでハマったこと

# Parallelのマルチプロセスでハマったこと

## マルチプロセスにおいて子プロセスは親プロセスの変数に影響を及ぼさない
まず、以下のようなマルチスレッドで実行されるコードをみましょう。

##### Rubyコード
```multi_threads.rb
require 'parallel'
files = [1, 2, 3, 4, 5, 6, 7 ,8, 9 ,10 ,11, 12, 13]
@array = []
Parallel.each(files, :in_threads=>10) {|x|
  @array.push(x)
}

puts @array
```

##### 結果
``` 
[1, 2, 4, 3, 5, 7, 6, 8, 9, 11, 13, 12, 10]
```

上記のものをマルチプロセスで実行するようにしようとして、 `:in_threads` のところを単純に `:in_processes` に変更しました。そうすると。。

##### Rubyコード
```multi_processes.rb
require 'parallel'
files = [1, 2, 3, 4, 5, 6, 7 ,8, 9 ,10 ,11, 12, 13]
@array = []
Parallel.each(files, :in_processes=>10) {|x|
  @array.push(x)
}

puts @array
```

##### 結果
``` 
[]
```

何にも出力されませんでした！！！なんだって！！！

## 理由
Parallelでは子プロセスをforkして子プロセス内でロジックを遂行していきますが、同じ変数であっても親プロセスと各子プロセスの変数はメモリ上別領域にあるためです。
<img width="793" alt="スクリーンショット 2017-07-11 21.13.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/81150/4471a8ba-e622-1f59-842e-07bd75db8826.png">


以下のコードを実行して結果を見ればわかるように、子プロセスで累積した結果は、親プロセスに何の影響も及ぼしません。
##### コード
``` multi_processes_test.rb
require 'parallel'
files = [1, 2, 3, 4, 5, 6, 7 ,8, 9 ,10 ,11, 12, 13]
@array = []
puts "parent pid: #{$$}"
Parallel.each(files, :in_processes=>10) {|x|
  puts "pid:#{$$} #{x} #{@array}"
  @array.push(x)
}
puts "parent pid:#{$$} #{@array}"
```

##### 結果
```
parent pid: 65100
pid:65101 1 []
pid:65102 2 []
pid:65104 3 []
pid:65106 4 []
pid:65101 5 [1]
pid:65110 7 []
pid:65103 8 []
pid:65104 9 [3]
pid:65102 12 [2]
pid:65106 13 [4]
pid:65105 10 []
pid:65107 11 []
pid:65109 6 []
parent pid:65100 []
```

## 対処方法
`Parallel.map` を使用することです。

##### Rubyコード
```improved_multi_processes.rb
require 'parallel'
files = [1, 2, 3, 4, 5, 6, 7 ,8, 9 ,10 ,11, 12, 13]
@array = []
@array = Parallel.map(files, :in_processes=>10) {|x|
  x
}

puts @array
```

##### 結果
``` 
[1, 2, 4, 3, 5, 7, 6, 8, 9, 11, 13, 12, 10]
```
来た！！

~~このロジックいける理由は、子プロセスが死ぬときに、その戻り値を親プロセスに伝え、親プロセスがそれを収集して結果を返すためだそうです。。(僕もロジックはみてないので自身はありませんwww)~~

以上です。
CodePipeline から CodeBuildの呼び出しでエラーになった場合の対応


# Error calling startBuild: Invalid artifacts: outputName must be a valid S3 key

Invalid artifactsというのでOutputArtifactsの設定かと悩みましたが、実際はProjectNameの設定ミスでした

## 正
```
Configuration:
  ProjectName: !Ref Build
```

ステージ全体としてはこんな感じ

```yaml
- Name: BuildStage
  Actions: 
    - Name: BuildAction
      ActionTypeId:
        Category: Build
        Owner: AWS
        Version: 1
        Provider: CodeBuild
      InputArtifacts:
        - Name: SourceOutput
      OutputArtifacts:
        - Name: BuildOutput
      Configuration:
        ProjectName: !Ref Build
```
## 誤
```
Configuration:
  ProjectName: !GetAtt Build.Arn
```
ステージ全体としてはこんな感じ

```yaml
- Name: BuildStage
  Actions: 
    - Name: BuildAction
      ActionTypeId:
        Category: Build
        Owner: AWS
        Version: 1
        Provider: CodeBuild
      InputArtifacts:
        - Name: SourceOutput
      OutputArtifacts:
        - Name: BuildOutput
      Configuration:
        ProjectName: !GetAtt Build.Arn
```
RPGツクールで衝突判定を実装する


# 背景
RPGツクールMVではイベントの開始条件としてイベントごとに「トリガー」を設定できます。
イベントと衝突したときのトリガーに使うのは「プレイヤーから接触」もしくは「イベントから接触」になりますが、トリガーとして設定できるのは1つだけなので、両方をトリガーとして使いたいケースに対応できません。(例えば動き回っている敵イベントとの衝突であれば、プレイヤからか敵からかに問わず発動してほしいため)

# 解決策

```javascript
var switchIndex = 1
if(!$gameSwitches.value(switchIndex)){
  if(Math.sqrt(Math.pow(this.character(-1)._x - this.character(1)._x,2) + Math.pow(this.character(-1)._y - this.character(1)._y,2))<0.5){
    $gameSwitches.setValue(switchIndex,true)
  }
}
```

このスクリプトを実行するイベントを置いて、トリガを「並列処理」に設定します。IDが-1のイベント(=プレイヤ)とIDが1のイベントとの衝突を判定しています。_x,_yで取得する値は1マスあたり1.0の値になっており、互いの座標が円形で0.5マス以内の距離にあったら衝突しているとみなします。
この例の場合は、衝突した、と判定されたらスイッチ1番をONにしています。これで後は1番のスイッチで自動実行されるイベントなどを置いておくことで衝突後のイベントを実行させます。

この衝突判定は重なっている必要があるので、「すり抜け」を設定したイベント、もしくは、プライオリティを「通常キャラの下」に設定したイベントでないと発動しません。

# 実際に使ってみて
割りといい感じに当たり判定が行われます。
動き回る敵とプレイヤとの衝突などにも使えますし、シューティングゲームの当たり判定にも使えます。

下記に公開しているゲームで一部この当たり判定を使っているところがあります。よろしければ覗いてみてください。

* Rapid Quest
  * https://game.nicovideo.jp/atsumaru/games/gm220
* ツクールチャンネル (シロガネチャンネルにあるシューティングゲーム)
  * https://game.nicovideo.jp/atsumaru/games/gm1708
[Emacs] key-chord.el を改良してキーバインドし放題になった話

# デモ

![screencast.gif](https://qiita-image-store.s3.amazonaws.com/0/54240/39351fc2-8061-a1e2-a716-257b6ada65b3.gif)

際限なくキーバインドができるので、「`bootstrap.css` を読み込む `link` タグを挿入する」のような超ニッチなコマンドにも気軽にショートカットを割り当てられます (ステノワードみたいな気分です)。

# ダウンロード

ここでダウンロードできます☞ <https://github.com/zk-phi/key-chord/> 。

個人のタイピングスピードに合わせてチューニングが必要です。

```el
(setq key-chord-two-keys-delay           0.15
      key-chord-safety-interval-backward 0.1
      key-chord-safety-interval-forward  0.25)
```

詳細は下を読んでください。

# key-chord.el とは

key-chord.el は、複数のキーの同時押しにコマンドを割り当てることができる Emacs プラグインです。

```el
(key-chord-define-global "hj" 'undo) ;; h と j 同時押しで undo
(key-chord-mode 1) ;; キーバインドを有効に
```

ある入力が同時押しかどうかは、２つのキー入力の間が 0.1 秒以内 (`key-chord-two-keys-delay` で変更可能) かどうかで判定されます。

key-chord.el を使うと、 `C-` とか `M-` だけじゃなく同時押しにも別のコマンドをバインドできるので、１ストロークで呼び出せるコマンドがかなり増えるように見えます（しかも装飾キー不要）。

# key-chord.el の弱点

使い始めてみると気づくのですが、 key-chord.el には「よく出てくるキーの並びを登録できない」という弱点があります (ソースの Commentary にも書かれています)。

たとえば

```el
(key-chord-define-global "fi" 'find-file) ; f, i 同時押しでファイルを開く
```

とキーバインドして

> final

をすばやく入力すると、 `fi` 部分が同時押しと判定されて `M-x find-file nal` の挙動になり、びっくりすることがあります。とはいえ「単語の中に `fi` (or `if`) が含まれている場合はゆっくりめに打つ」というのも厳しいし、本末転倒な感じです。

一応 `key-chord-two-keys-delay` の閾値をシビアに調整すればマシにはなるのですが、今度は正確に同時押ししないと「微妙にずれていて普通に `fi` が入力されてしまった」みたいになってしまうので、それはそれで疲れます。

そんなわけで、 key-chord.el は一見すごい可能性を秘めているように見えて、実際に使ってみると使いやすい同時押しは案外限られていることに気づきます。

# key-chord.el の誤発火 を減らす

key-chord.el の誤発火を減らすためにやったことです：

## アイデア

しばらく key-chord.el を使っていて気づいたことは、「同時押しは想像よりは大変」ということです。

２つのキーを同時に押すために、その２つのキーの位置に２本の指を移動して、いっぺんに押すので、単語を入力するときのように流れで１つづつキーを押すのに比べるとけっこう大変です。少なくとも、同じスピードではそうそう押せません。

そこで自分が考えたのは、今まで key-chord.el が「２つのキー入力の間が十分短いこと」だけで同時押しを判定していたのを、「ほかのキー入力からワンテンポ遅れていること」も条件に加えることで誤入力を減らすことです。

従来の key-chord.el イメージ：

     \ カタカタ /      \ バン /     \ カタカタ /
    h o g e h o g e      hj       h o g e h o g e . . .
    ----------------------------------------------------
                      |< 0.1s|

改良後 key-chord.el イメージ：

     \ カタカタ /      \ バン /     \ カタカタ /
    h o g e h o g e      hj       h o g e h o g e . . .
    ----------------------------------------------------
                     |< 0.15s|
                  |> 0.1s||> 0.25s|

(経験的に、 key-chord の前の待ち時間と後の待ち時間は別々に設定できるようにしたほうがよさそうでした)

この方法なら、たとえば `final` と入力しても `i` と `n` の間が十分短ければ、一連の入力の一部とみなされて `fi` の key-chord は発火しません。

自分の場合はこれでかなり誤発火が減りました。それでもまれにありますが… (`今後やること` 参照)。

## 実装

key-chord を受け付ける（直前のキー入力から 0.1s 以上離れている）状態かを保持する変数 を用意してあげて

- 任意のコマンドの実行後 (`post-command-hook`) に `nil` にする
- 0.1s のアイドルタイマーで定期的に `t` にする

ようにしました。

また、 key-chord 入力後も 0.25s だけ `sit-for` で待ってあげて、もし直後に何か入力があればやっぱり key-chord ではなかったものとみなします (`sit-for` の戻り値で、待っている間にキー入力があったかが取れます)。

## やってみて

誤発火はかなり減りました、前後の待ち時間をいい感じに調整すると、むしろ同時押しの閾値はゆるゆるでも使えるので、同時押しするときも緊張しません。 `va` などごく普通に出てくるキーの並びにも平気でキーバインドして使っています。ただ、誤発火はまだゼロではなくて、ごくまれにあるので何とかしたさがあります。

# 今後できそうなこと

同じ手で続けて入力するとタイピングスピードが落ちるので、左右の手で交互で押せる key-chord と、同じ側の手に両方のキーがある key-chord で待ち時間を変えられるとさらに誤発火を減らせそうです。
Conditional GANをchainerで実装した

#はじめに

Conditional GANをchainerで実装しました。
Github - https://github.com/lyakaap/GAN/tree/master/ConditionalGAN

実装は以下の記事を参考にしました。
http://qiita.com/ysasaki6023/items/55b8545c296ce32ac135

# 解説
「Conditional GAN」はGANの一種で、従来のGANが生成される画像をコントロール出来なかったのに対して、ラベルを指定することで生成される画像を任意のクラスのものに出来るという素晴らしいモデルです。
また、指定する条件はラベル以外でも可能で、色々な応用が考えられます。
主なGANとの違いは、Generator及びDiscriminatorの入力に対応するラベルデータも渡してあげるという点です。

# 実装
実装する際に考える事として、「どのようにネットワークにラベルを渡してあげるか」が重要になってきます。
具体的にクラス数10のMNISTを例に挙げて説明します。

## Generator

* 入力ノイズ z：100次元の乱数のベクトル 
* ラベル l：10次元のone-hotのベクトル

をchainerのconcat()を使ってくっつけます。

具体的にそれぞれのshapeを書き出してみると、

* z => (ミニバッチのサイズ, 100, 1)
* l => (ミニバッチのサイズ, 10, 1)
* input => (ミニバッチのサイズ, 100+10, 1)

となっています。上記3つのテンソルに共通して三次元目に付いてる「1」はチャンネル数です（RGB画像を扱うときは当然3になる）。

inputは最終的にGeneratorの入力となるテンソルを表していて、`input = F.concat((z, l), axis=1)`  のように結合しています。

##Discriminator

DCGANベースだと、ネットワークがConvolution層になっているので、そのままではone-hotのラベルを渡すことが出来ません。
なので、下に示すようにしてDiscriminatorの入力を定義しました。

<img width="500" alt="スクリーンショット 2017-07-11 20.01.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/178922/0f90494c-5f20-b88f-9c51-30bb6eeeb21a.png">


上の図の例では入力画像が「2」であるので、対応する2チャンネル目が塗りつぶされています。このようにone-hotラベルを10チャンネルの画像のように扱うことで、Convolutionにも対応できるようになっています。
最終的に、ラベルと入力画像を結合したものは、11チャンネルの28x28画像(MNISTの画像サイズ)としてDiscriminatorの入力層に渡されることになります。
具体的な入力のshapeは
(ミニバッチのサイズ, 10+1チャンネル, 28, 28)
のようになります。
結合にはGeneratorと同じくconcat()を使っています。

# 結果
生成する画像のラベルを上から行ごとに指定して、並べたものを可視化しました。

学習の様子です

![ConditionalGAN.gif](https://qiita-image-store.s3.amazonaws.com/0/178922/959e9a0a-d80f-c9ea-fac8-930978295c9e.gif)


ちゃんと指定されたラベルに対応するような学習をしていることが分かります。

また、おまけとして入力ノイズ空間の原点を入力とした際の、300epoch後の生成画像を載せておきます。（同じ数字の出力は当然ながら同一のものです）

![image180000.png](https://qiita-image-store.s3.amazonaws.com/0/178922/44e9229f-57b8-6b99-e4dc-2c1f9d14f692.png)

生成画像を見ると、どの数字の画像も、ノイズ空間の原点が綺麗で中性的な画像を生成するように対応付けされていることが分かるので楽しい。

任意の数字を引数として入力すると対応する画像を表示してくれるスクリプトも作ってみました。同じ数字でも色々な筆跡の手書き文字を出力されます。

```
$ python digit_generator.py --digits 20170710
```
<img width="192" alt="スクリーンショット 2017-07-12 17.28.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/178922/2a10aaf0-e6bc-2f16-8d2b-7b6282260b5a.png">

<img width="186" alt="スクリーンショット 2017-07-12 17.28.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/178922/352a64c5-b29f-5a7d-6224-2832a44dae95.png">


ひらがなのデータセットとかでやると面白そう。

# その他
tensorflowにあるようなone-hotラベル化する関数がchainerに無いのが意外でした。（見落としてるだけかもしれない）
scikit-learn使えってことなんですかね…

因みに自分の実装はこんな感じです。

```
def to_onehot(label, class_num):
    return numpy.eye(class_num)[label]
```

ラベルとクラス数を渡すと単位行列を基にone-hotなラベルを出力してくれます。
Elastic Beanstalk のワーカーで環境変数に依存した cron を動かす方法



```txt
* * * * * ec2-user . /opt/elasticbeanstalk/support/envvars && do_stuff
```

## ポイント

**`/opt/elasticbeanstalk/support/envvars`** からユーザ定義の環境変数を読み込む必要がある。これを忘れていて2時間ぐらい溶かした…
AWS ElasticSearch ServiceのログをElastAlertで監視する

ElastAlertをAWSのElasticSearchで使う具体的な方法がネットに転がってなかったのでメモ。

環境は
Ubuntu: 14.04
ElasticSearch: 5.3
ElastAlert: 0.1.16

## EC2のIAM Roleに権限付与する
下記のようなポリシーを、ElastAlertを乗せるEC2のIAM Roleに付与する。

```json:Policy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "es:*",
            "Resource": [
                "ElasticSearch ServiceのARN"
            ]
        }
    ]
}
```

## install
pipでインストールする。
python2でないと動作しない。

```bash:command
sudo pip2 install elastalert
```

## ElastAlert用のインデックスを生成する
```bash:command
elasticsearch_host=hoge.com
aws_region=ap-northeast-1

elastalert-create-index \
  --host ${elasticsearch_host} \
  --port 443 \
  --aws-region ${aws_region} \
  --url-prefix '' \
  --no-auth \
  --ssl \
  --verify-certs \
  --index elastalert_status \
  --old-index elastalert_status
```

```bash:response
New index elastalert_status created
Done!
```

## 共通設定作成
これから通知のためのルールを作っていくが、それらに共通する設定を記載する。

```bash:command
# elastalert用のディレクトリ作成（どこでもよい）
mkdir -p /etc/elastalert
cd /etc/elastalert

vim config.yml
```

```yaml:config.yml
es_host: [ESのendpoint]
es_port: 443
use_ssl: True
aws_region: ap-northeast-1
rules_folder: /etc/elastalert/rules
buffer_time:
  hours: 1
run_every:
  minutes: 1
writeback_index: elastalert_status
# Slackを利用する場合(下記のRuleにも記載可)
slack_username_override: "ElastAlert"
slack_webhook_url: "[Slackのwebhook url]"
```

## 個別の通知ルール作成
通知をするためのルールを作成する。
ルールの記載方法については下記参照。
<http://elastalert.readthedocs.io/en/latest/ruletypes.html>
<http://elastalert.readthedocs.io/en/latest/recipes/writing_filters.html>

```bash:command
mkdir -p /etc/elastalert/rules

vim rules/hoge_rules.conf
```

```yaml:rules/hoge_rules.conf
name: status200-moniroting
type: frequency
index: access_log*
num_events: 10       # 発生回数
timestamp_field: tu  # Indexでのtime fieldを設定しないとエラーになる
timeframe:
    minutes: 1       # 1分間計測する
filter:
  - term:
      status: 200    # http statusが200なら
alert:
  - slack
```

## 実行
```bash:command
elastalert --config /etc/elastalert/config.yml
```
rbenvでよく使うコマンド

rbenvでよく使うコマンドについて記載


```
#インストール済みバージョン一覧
$ rbenv versions

#インストール　バージョン
$ rbenv version

＃インストールできるバージョン一覧
$ rbenv install -l

＃インストール
$ rbenv install 2.2.2

# 更新
$ rbenv rehash

＃グローバルバージョン指定
$ rbenv global 2.2.2

＃ディレクトリごとのバージョン指定
$ rbenv local 2.2.2
```


以上
Apacheでproxyの設定


###CentOSのversion確認

```:bash
cat /etc/redhat-release
```

```
CentOS release 6.7 (Final)
```

###Apacheのversion確認

```:bash
httpd -V
```

```
Server version: Apache/2.2.15 (Unix)
```

###proxyが読み込まれていることを確認

```:bash
httpd -M | grep proxy
```

```
proxy_module (shared)
proxy_balancer_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
proxy_ajp_module (shared)
proxy_connect_module (shared)
```


###FireWallが空いていることを確認


###Listen port(8888)が開放されていることを確認

```:bash
netstat -antp
```

```
tcp        0      0 ::ffff:119.254.114.xxx:8888 ::ffff:210.213.86.122:13812 TIME_WAIT   - 
```

###設定ファイル

```:/etc/httpd/conf.d/proxy.conf
Listen 8888
<IfModule mod_proxy.c>
    ProxyRequests On
    ProxyVia On
    AllowCONNECT 443

    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
</IfModule>
ProxyTimeout  1000*1
```
ロリポップ! で Let's Encrypt！（独自SSL）

#TL;DR
10年単位でお世話になっている Lolipop! が[2017年07月11日から Let's Encrypt などの独自 SSL に対応](https://lolipop.jp/info/news/5759/)することになりました。しかも全プランで対応とのこと。

さっそく試したところ、以下の３ステップ（数クリック）で自分のサイトを HTTPS 化（SSL 対応）できました。ここらへんの作り込み（使いやすさ）は流石だと思いました。

1. ロリポップ！ のユーザー専用ページ内の「[証明書お申込み・設定](https://user.lolipop.jp/?mode=ssl)」にログイン
2. 自分のドメインを選択して「独自 SSL （無料）を設定する」ボタンを押す
3. ステータスが「SSL 保護申請中」になるので、数分待つ

#所感
今まで、Xrea だのテヘムルだのバリューだのと、色々試した中で、業務メインは「さくらのインターネット」、そして個人用には「ロリポップ!」の中でも一番安い「エコノミープラン」（100円/月）に独自ドメイン ＋ Wordpress ＋ SQLite の組み合わせで落ち着いていました。

問題は、安いメニューだと独自ドメインには SSL 対応が出来なかったため、HTTPS での REST 接続が必要な（LINE などの）API は仕事用のサーバーをパーサーに（一旦経由して）使っていました。

実は、 ".well-known/acme-challenge/" ディレクトリを作って、無理やり試したりもしていました。ところが、昨日ロリポップ！ちゃんから『_突然ごめんね。どうもあなたのサイトで Let's Encrypt を使った形跡があって、仕様変更をするから使えなくなるよ♪ うふ_』といった内容の突然メールが来て、期限を見たらメールが届いてから 40 分後！

ってか、FTP で覗いたら、すでに ".well-known" ディレクトリが消えていました。 ガチョーン Σ(￣□￣；） 

まぁ、もともと**対応外のところをいじっていたので仕方ない**にしても、仕様変更のアナウンスから実行まで１時間を切るってどういうことよ？！と、いささか腹が立っていました。

すると、本日メールが届き『_昨日はゴメンね？ 実は、あの急な仕様変更は正式に Let's Encrypt! に対応するためだったのよーん！じゃじゃじゃーん！しかも無料！（ p.s.全メニューで使えるよ♪ ）_』と、なんというサプライズ。

ワンコイン足らずで、独自ドメイン＋ SSL ＋ Wordpress が使える時代が来たのか、、時代だわねぇ。
Matrix2Dで回転移動・対称移動を試みるも失敗したので、座標をあれこれいじたら上手く行ったかも。。

[Matrix2D | CreateJS](http://labo.project-nya.jp/createjs/matrix2d/ver1/)

回転移動・対称移動の組み合わせても、ちゃんと移動する！
・・・と思う。
依存関係にあるrakeタスクをキャンセルする方法

**2017-07-12更新**
以下の内容は、特定の状況下でしか発生しない現象で、通常はrakeのタスク実行中に例外が発生すると以降のタスクはキャンセルされます。
なので、rakeタスク中の例外でキャンセルされない現象が発生している場合も、この記事で書いた修正方法は **参考にせず** 、例外を握りつぶしているコードを特定して修正してください。ぼくのプロジェクトの場合は、依存しているgem内で例外が無視されるようになっていました。

## 内容
rakeタスク `hoge` に依存しているタスク `fuga` があるとします。
なんらかの条件でタスク `fuga` を実行せずにキャンセルする方法でちょっと迷ったのでまとめました。

## 問題

```rb

task :hoge do
  if some_check
    # ここで処理を中断。 `fuga` タスクも実行したくない
  end
  puts 'hoge'
end

task fuga: :hoge do
  puts 'fuga'
end 
```

## 方法

`abort` か `exit` を使う
`raise` や `return` や `next` では、 `hoge` タスク自体は中断されるが、 `hoge` に依存している `fuga` タスクが実行されてしまう。

```rb
task :hoge do
  if some_check
    abort 'なんかエラーがおきました'
  end
  puts 'hoge'
end
```
nodebrewでよく使うコマンド


nodebrewでよく使うコマンドについて記載



```
#インストールできるバージョン一覧
$ nodebrew ls-remote

＃インストール
$ nodebrew install-binary v0.10.38

# 安定版インストール
$ nodebrew install-binary stable 

# 最新版インストール
$ nodebrew install-binary latest  

# インストール済みのリスト
$ nodebrew list   

# 使用するバージョンの指定
$ nodebrew use v0.8.28

# アンストール
$ nodebrew uninstall <version>

# 削除
$ nodebrew clean <version>
```


以上
プログラミング言語Go読書会#15(8.1-8.4.3)[2017/07/05]

[Go読書会 #15](https://lancers-engineer.connpass.com/event/61433/) が[ランサーズ株式会社](https://www.lancers.co.jp/)で行われたので進捗と技術的なメモ書きを書いておきます。読書会の内容は[プログラミング言語Go](https://www.amazon.co.jp/dp/4621300253/?&_encoding=UTF8&tag=amesho-22&linkCode=ur2&linkId=7e29043d833086d36f8b64c2ed3721b2&camp=247&creative=1211)を冒頭から皆で読み進めていくというものです。

## 進捗した内容

+ 8章 ゴルーチンとチャンネル
  + 8.1 ゴルーチン
  + 8.2 例：平行な時計サーバ
  + 8.3 例：平行なエコーサーバ
  + 8.4 チャネル
    + 8.4.1 バッファ無しチャネル
    + 8.4.2 パイプライン
    + 8.4.3 一方向チャネル型


## 話題に上がった話

### 8.1 ゴルーチン

ここでは、プログラムを開始するmain関数もゴルーチンで`メインゴルーチン(main goroutine)`と呼ばれるところが話題になりました。ここまではあまり意識せずに来ていたのですが、mainそのものもゴルーチンであるという共通認識ができたところが良かったです。

呼び出し方そのものは以下のように関数呼び出しの前に`go`をつけるだけなのですが、これまでのように処理の終了を待たないというところが違います。

```go
go f()
```

あとは、`mainから戻ること`と`プログラムを終了させること`以外にゴルーチンを他のゴルーチンから終了させる方法が無いことも話題になりました。


### 8.4 チャネル

ここでは、ゴルーチンが他のゴルーチンへ値を送れるようになる仕組みである`チャネル(channel)`の解説がされています。チャネルは`要素型(element type)`と呼ばれる特定の型の為の導管で、以下のように宣言します。

```go
ch := make(chan int)
```

送信と受信ができ、以下の構文で行うことができます。

```go
ch <- x // 送信
x = <- ch // 受信
```

あとは、`close`について解説されており、closeされた後に送信使用とするとpanicが起こることが書かれていました。

### 8.4.1 バッファ無しチャネル

チャネルには、バッファ有りとバッファ無しがあり、makeで生成するときにバッファを指定しないか、0をしていすればバッファ無しチャネルになります。

```go
ch := make(chan int)
// or
ch := make(chan int, 0)
```

### 8.4.2 パイプライン

ここでは、バッファ無しチャネルはゴルーチンを`同期(synchronize)`させるので`同期チャネル`と呼ばれていること。`x happens before`に関して説明していて、呼び出す前の処理に依存できることが書いてありました。安心ですね。あとは、順序を仮定できない`x is concurrent with y`についても説明されていました。


### 8.4.3 一方向チャネル型

指定無しで宣言した場合、goのチャネルは送信、受信に使用することができます。これだと意図されない使われ方が起きるの可能性があるので、宣言で、送信専用か受信専用に指定することができます。

```go
out chan<- int // send-only
in  <-chan int // recive-only
```

これでより安全にプログラムを組むことができます。


ここまで呼んだところで、時間になりました。次回は 8.4.4 バッファありチャネルからです。
DialogFragmentのタイトル領域をなくす


## DialogFragmentのタイトル領域をなくす (メモ)

`DialogFragment` で `onCreateDialog` をオーバーライド

```kotlin
  override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    val layout = RelativeLayout(activity)
    layout.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
    val dialog = Dialog(activity)
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
    dialog.setContentView(layout)
    dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.WHITE))
    dialog.window!!.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
    return dialog
  }

```
VBSで特定のフォルダ内にある連番ファイルの中身を結合し、txtにExport

VBSで特定のフォルダ内にある連番ファイルの中身を結合し、テキストに吐き出すスクリプトを書いた。
久しぶりに触ったけど、qiitaに色々リファレンスがあったので、あまり苦労せず作成できた。

書き方で甘い部分があると思うので、ご指摘等頂ければ、たいへん嬉しいです！

```vbs
' ファイル操作のためのおまじない
dim fso
set fso = WScript.CreateObject("Scripting.FileSystemObject")

' カレントパスを取得
dim current_path
current_path = fso.getParentFolderName(WScript.ScriptFullName)

' 今いるディレクトリ内にあるファイル名一覧を取得
dim folder
set folder = fso.getFolder(current_path)

'結果保存用のtxtデータが存在した場合、削除
if fso.FileExists("output_text.txt") Then
	fso.DeleteFile "output_text.txt", True
end if

'エラー結果保存用のtxtデータが存在した場合、削除
if fso.FileExists("output_error_text.txt") Then
	fso.DeleteFile "output_error_text.txt", True
end if

' 結果保存用のtxtデータを追加上書きモードでOPEN
dim output_file
set output_file = fso.OpenTextFile("output_text.txt", 8, True)

' エラー結果保存用のtxtデータを追加上書きモードでOPEN
dim output_error_file
set output_error_file = fso.OpenTextFile("output_error_text.txt", 8, True)

' ファイル一覧にあるファイルをリストにしてループ処理
dim file
for each file in folder.files

　　　　'ファイル名がTANADATAから開始しており、かつナンバリングされているものを対象にする。下記のfunction file_name_checkを参照。
	if file_name_check(file.name) = True Then 

		dim input_file
		set input_file = fso.OpenTextFile(file.name, 1, False, 0)
		
　　　　'各ファイルに含まれるデータを１行ずつ読込み
		do until input_file.AtEndOfStream

			dim line_str
			line_str = input_file.ReadLine

		　' 読込んだデータを精査し、数字で始まるデータのみ抽出（中に余計なテキストが含まれている事があるため）。下記のfunction line_checkを参照。
			if line_check(line_str) = True then

		　　　' 読込んだデータを精査。フォーマットが999999,999999,9999999か否かで、エラーデータがそうでないかを判別し、output_error_textかoutput_textに書込み。下記のfunction data_format_checkを参照。
				if data_format_check(line_str) = True then 'Exclude lines not include, digit information
					output_file.WriteLine line_str
				else
					output_error_file.WriteLine line_str
				end if
			end if
		loop
	end if
next

' 各ファイルをクローズ
input_file.Close
output_file.Close
output_error_file.Close

function file_name_check(name)
	dim re
	set re = new regexp  'Create the RegExp object
	
	re.Pattern = "^TANADATA(\s)*(\d)*$" ' Check file name, TANADATA 999...
	file_name_check = re.Test(name) 
end function

function line_check(line)
	dim re
	set re = new regexp  'Create the RegExp object
	
	re.Pattern = "^\d.+$" ' Get only digit data
	line_check = re.Test(line) 
end function

function data_format_check(line)
	dim re
	set re = new regexp  'Create the RegExp object
	
	re.Pattern = "^(\d){6},(\d){6},(\d){7}$" ' Check data format = 999999,999999,9999999
	data_format_check = re.Test(line) 
end function
```

##参考
WSHでスクリプトファイル自身が存在するフォルダパスを取得する
http://qiita.com/asterisk9101/items/54cdcedb9ef60ea0bb21

VBS: ファイル一覧とフォルダ一覧の取得
http://qiita.com/asterisk9101/items/a7310c0e4ec33352835f

ファイルが存在するかを調べる
http://vbscript.infopos.net/p/000019.html

[ファイルを削除する]
http://www.whitire.com/vbs/tips0088.html

Clinick's Clinic on Scripting: 正規表現による Visual Basic Scripting Edition (VBScript) の機能強化
https://msdn.microsoft.com/ja-jp/library/ms974570.aspx
KotlinでJavaの関数型インターフェースを模倣する


関数のようにはたらく新しい型を定義しつつ、ラムダ式を使ってオブジェクト生成したい場合に。

# 背景
Javaでは抽象メソッドが一つだけあるインターフェース(＝関数型インターフェース)のオブジェクトはラムダ式で生成できます。

```java
@FunctionalInterface
interface Composable {
    int apply(int v);

    default Composable compose(Composable other) {
        return v -> { return this.apply(other.apply(v)); };
    }
}

class Main {
    public static void main(String[] args) {
        Composable f = v -> { return v + 2; };
        Composable g = v -> { return v * 2; };
        System.out.println(f.compose(g).apply(2));
    }
}

```
Kotlinでもラムダ式や無名関数が用意されていて、これを使って関数型のオブジェクトを生成できます。しかし、これはあくまで関数オブジェクトを生成するためのもので、関数のような何か、例えば関数型を継承したインターフェースのオブジェクトを生成することは出来ません。
従って次のコードはコンパイルエラーとなります。

```kotlin
interface Composable {
    fun apply(v: Int): Int

    fun compose(other: Composable): Composable = { this.apply(other.apply(it)) }
}

fun main(args: Array<String>) {
    val f: Composable = { it + 2 }
    val g: Composable = { it * 2 }
    println(f.compose(g).apply(2))
}
```
代わりに

```kotlin
object : Composable {
    override fun apply(v: Int): Int { ... }
}
```
といちいち書かなければならず煩わしいです。


# 方法
関数を受け取り、インターフェースを返す関数を定義します。実際の処理は受け取った関数に委譲します。

```kotlin
interface Composable {
    fun apply(v: Int): Int

    fun compose(other: Composable): Composable = composable { this.apply(other.apply(it)) }
}

fun composable(f: (Int) -> Int) = object : Composable {
    override fun apply(v: Int): Int = f(v)
}

fun main(args: Array<String>) {
    val f = composable { it + 2 }
    val g = composable { it * 2 }
    println(f.compose(g).apply(2))
}
```
ubutnu のイケてないUIをカスタマイズする。

毎回毎回イラッとくるUIをカスタマイズします。
自分用のメモです。


## compize の設定
 compizconfig-settings-managerのインストロール

```
sudo apt install compizconfig-settings-manager

```

## HUDの無効化
HUDというランチャーが初期設定されているが Alt 2回という面倒なキーバインドになっているので設定を殺す。

![範囲を選択_009.png](https://qiita-image-store.s3.amazonaws.com/0/6134/727008b9-1dfc-5d4d-23f8-2b90e1e5a9f4.png)

## タスクスイッチャーからデスクトップを表示を除外する。
そんなにデスクトップ見ません。

![範囲を選択_010.png](https://qiita-image-store.s3.amazonaws.com/0/6134/217ee50b-08e3-b8dd-a0cd-6aaba0e8dbcd.png)
UnityでOSのユーザールートパスを取得する

C#の[Environment.SpecialFolder](https://msdn.microsoft.com/en-us/library/system.environment.specialfolder(v=vs.110).aspx)を用いると，OSの特殊ディレクトリのパスが取得できる．

例えば，ユーザールートのパスは下記で取得できる．

```csharp
using System;

// /Users/tanakaworld
Environment.GetFolderPath(Environment.SpecialFolder.Personal)
```

# 参考

+ [Environment.SpecialFolder](https://msdn.microsoft.com/en-us/library/system.environment.specialfolder(v=vs.110).aspx)
+ [[SOLVED] Special folder path in mac](https://forum.unity3d.com/threads/solved-special-folder-path-in-mac.23686/)