OmniAICreator/Qiita-1.07M huggingface dataset:
herokuでrake db:migrateしたら怒られた.

エラーは下の様な感じ

```
 $ heroku run rake db:migrate
Running rake db:migrate on ⬢ _app_name_... !
 ▸    ECONNRESET: read ECONNRESET
 $ heroku run bundle exec rake db:migrate
Running bundle exec rake db:migrate on ⬢ _app_name_... !
 ▸    ECONNRESET: read ECONNRESET
```

ECONNRESET が検索してもいい感じの記事が出てこない...

heroku logs を実行すると次の様なエラーが出た.

```
Error R13 (Attach error) -> Failed to attach to process
```

heroku logs を元に検索するとstackoverflowに[良さげな記事](http://stackoverflow.com/questions/20926403/heroku-rake-dbmigrate-results-in-error-r13-attach-error-failed-to-attach-t)がありました.

```
$ heroku run:detached rake db:migrate
```

を実行すると動きました. [run:detached](https://devcenter.heroku.com/articles/one-off-dynos#running-tasks-in-background
) は裏側でいい感じに実行してくれるみたい!

検索力ほしいって感じでした...
デザインパターン学習メモ：「Adapter」

## このパターンの目的

GoF本より引用する。

> 　あるクラスのインタフェースを、クライアントが求める他のインタフェースに変換する。Adapterパターンは、インタフェースに互換性のないクラス同士を組み合わせることができるようにする。(P.149)

このパターンによって、すでに存在するクラスを任意のインタフェースに適合させることができる。

## 実装例
『アジャイルソフトウェア開発の奥義』(P.404) を参考に作成。

```java:Light.java
// 自由に改変できないサードパーティ製ライブラリに含まれるクラスとする
// Adapteeの役割
public class Light {
	public void on() {
		// 何らかの実装
	}

	public void off() {
		// 何らかの実装
	}
}
```

```java:Switchable.java
// 開発中のプロジェクトで要求されるインタフェース
// Targetの役割
public interface Switchable {
	void turnOn();
	void turnOff();
}
```

```java:LightAdapter.java
// Adapterの役割
public class LightAdapter implements Switchable {

	private Light light;

	public LightAdapter(Light light) {
		this.light = light;
	}

	@Override
	public void turnOn() {
		light.on();
	}

	@Override
	public void turnOff() {
		light.off();
	}
```

## 使用するシーン
開発中のプロジェクトにおいて、Switchableインタフェースを用いてポリモーフィズムに則った動作を行うとしているとする。

サードパーティ製ライブラリにLightクラスを見つけ、ほしい機能が揃っていたのでぜひこれを使いたいが、このクラスはもちろんSwitchableインタフェースを実装していない。

そのようなときに、LightAdapterクラスを作成し、SwitchableのインタフェースからLightクラスの機能を呼び出すことで、望み通りのインタフェースとLightクラスの機能が手に入る。

## ２種類のAdapter
### オブジェクトに適用するAdapterパターン
 * 実装例で示したもの
 * AdapterがAdapteeのオブジェクトをクラス内部に持ち、必要な処理を委譲する

### クラスに適用するAdapterパターン
 * 多重継承を用いて、TargetとAdapteeを継承するAdapterクラスを作成する
 * 多重継承を認めるC++などで使用可能


Javaでは「オブジェクトに適用するAdapterパターン」を使うことになるだろう。
それぞれの利点については、GoF本を参照してほしい。

## 参考文献

 * エリック ガンマ、ラルフ ジョンソン、リチャード ヘルム、ジョン プリシディース（1999）『オブジェクト指向における再利用のためのデザインパターン　改訂版』本位田　真一、吉田　和樹 監訳、SBクリエイティブ
 * ロバート・C・マーチン（2004）『アジャイルソフトウェア開発の奥義　第２版　オブジェクト指向開発の神髄と匠の技』瀬谷啓介訳、SBクリエイティブ
wordpressテスト環境構築メモ

Ubuntu を入れて基本的なアップデートは済ませておく。

```
apt-get install wordpress mysql-server
```

`wordpress` は依存関係をまとめて入れるために指定。wordpress 自体はサイトから本番と同じバージョンのものをダウンロードして `/var/www/html` に展開する。

```
chown -R www-data:www-data /var/www/html/wordpress
```

ブラウザで `http://localhost/wordpress` にアクセスする。
Visual Studio / WPF > 09 CheckBox与可空数据类型 > CheckBoxのIsCheckedに関連して、null許容型関連の情報

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

09 CheckBox与可空数据类型
https://www.youtube.com/watch?v=C7Uoy1CVYJU&index=31&list=WL

関連 [Visual Studio / WPF > C# > bool? / Nullable<bool>: NULL許容型](http://qiita.com/7of9/items/00cee629026501ad4b79)
関連 [Visual Studio / WPF > ダイアログ > SaveFileDialog > FileNamesとFileNameで選択ファイルを取得できる / MultiSelectプロパティはない](http://qiita.com/7of9/items/d327ac4eb0a6d753d696)

CheckBoxのIsCheckedプロパティ(?)の戻り値に関連してint ?などのNullable型について紹介している。


### 5:15あたり

```
int i = null;
```

int型にnullを代入するとエラーになる例を示している。
int型以外として、booleam（ブーラと発音)、decimal, DateTimeなど。

### 6:35あたり

```
int? il = null;
DateTime? dl = null;
```

(個人的には`Nullable<int> il = null;`のような書き方が読みやすいように思うが、そのうち`?`表記に慣れるかもしれない。しかしながら、ソースリーディングでの検索時には`?`よりもNullableの方が候補をしぼりこめると思う。)

?をつけることで、nullを代入できるとの例。

### 8:23あたり

```
int? i3 = null;
int i4 = i3;
```

nullが代入されたi3をnullableでないi4に代入したらだめ、とのこと。
試したところ、ビルドエラーとなった。

```
int? i3 = null;
int i4 = (int)i3;
```

上記のように明示的な型変換をするとビルドエラーは出なくなるが、下記のような実行時エラーになる。

![work.png](https://qiita-image-store.s3.amazonaws.com/0/32870/eba6f857-d046-d6ca-8769-50adb83dc9fe.png)

### 16:25あたり

CheckBoxコントロールのIsCheckedの戻り値を`bool ?`で受ける例が紹介されている。

実際にためしたところ、nullが入る場合が不明だった。チェックがされていない時にfalseが入っていた。

RadioButtonの不定のような状態をCheckBoxでも持つのだろうか？


### 中国語

時々話しているキーワード

- bool - ブーア?
- . （プロパティ指定などに使う)
   - ディレ?
   - ピンインは不明 (dire?)
- Mei Wenti (没問題)
   - http://www.chineseonthego.com/t_mei_wenti_no_problem.html
   - No Problem
技術英語 > Reading the manual [in its entirety] is highly recommended. / It's a good idea to [read through the manual],

BANNER社のEZ-SCREEN LS Safety Light Screen
https://www.bannerengineering.com/us/en/products/machine-safety/safety-light-curtains/simple-rugged-safety-light-curtains-ls-series.html
Instruction Manual
http://info.bannerengineering.com/cs/groups/public/documents/literature/179480.pdf
p5

> Reading the manual **in its entirety** is highly recommended. 

別の言い方を検討してみた。

[Vex for the Technically Challenged](https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwiX1o_m9N7TAhUEurwKHYVYAs8QFggzMAI&url=http%3A%2F%2Fengineering.sjsu.edu%2Fe10%2Fwp-content%2Fuploads%2FVex_for_the_Technically_Challenged.pdf&usg=AFQjCNE5j8dwL9z-kEJha_t2ifWIR2HqTQ&sig2=B_GcvZC9Cl-IDwXLDpq-Nw)
> It's a good idea to **read through the manual**,

Reading through the manual is highly recommended.
でいいかもしれない。
[Swift]UIDatePickerの値が変更されたら何かする

UIDatePickerの値が変更されたら何かする例を紹介します。

## やり方
Target-Actionデザインパターンでアプリに通知する
（`valueChanged`イベント）

- `addTarget(_:action:for:)`メソッドを利用する
- `Interface Builde`で`@IBAction`を利用する

### 実装例

```swift
// IB側のUIDatePickerと接続
/// datePickerの値が変更されたら呼ばれる
@IBAction private func didValueChangedDatePicker(_ sender: UIDatePicker) {
    // ここにやりたい処理を書く
    print(createDateString(date: sender.date, calendar: sender.calendar))
}
```

### 補足
`createDateString(date: , calendar: )`メソッドについては[[Swift]weekdaySymbols・shortWeekdaySymbolsから曜日を表示する際の注意点](http://qiita.com/ktaguchi/items/9d719bbba63668648ac1)を参照ください。

## サンプルコード
サンプルコードをGitHubにあげたので、実際に触りたい方は[こちら](https://github.com/taguchi-k/ios-weekday-from-datepicker)からどうぞ。
https://github.com/taguchi-k/ios-weekday-from-datepicker

## 開発環境
|category | Version| 
|---|---|
| Swift | 3.1 |
| XCode | 8.3.2 |

## 参考
https://developer.apple.com/reference/uikit/uidatepicker
[Swift]weekdaySymbols・shortWeekdaySymbolsから曜日を表示する際の注意点

`DateFormatter`の`shortWeekdaySymbols`から曜日を表示するコードを書いているときに意図する曜日が取得できず「あれ？」となったので備忘のために記事を書きました。

## 概要
1. `Calendar`の`component(_:from:)`に`.weekday`を渡した戻り値（`Int`）をそのまま`shortWeekdaySymbols`のindexとして利用
2. 意図しない曜日が取れたり、落ちたりした
3. `weekday`は1始まりなので`-1`しないと`weekdaySymbols`や`shortWeekdaySymbols`のindexとして使えない

以下詳しく書いていきます。

## 現象
- 意図する曜日が取得できない
- 落ちることもある

上手くいかなかったのは下記コードです。

### 意図する曜日が取得できない or 落ちる例

```swift
/// 引数から日時の文字列を返す
func createDateString(date: Date, calendar: Calendar) -> String {

    let dateFormater = DateFormatter()
    dateFormater.locale = Locale(identifier: "ja_JP")
    let weekdayIndex = calendar.component(.weekday, from: date)
    dateFormater.dateFormat = "M月d日 \(dateFormater.shortWeekdaySymbols[weekdayIndex]) H:mm"

    return dateFormater.string(from: date)
}
```

## 原因
- `Calendar`の`component(_:from:)`に`.weekday`を渡した戻り値（`Int`）をそのまま`shortWeekdaySymbols`のindexとして利用していたこと

`weekday`は1始まりなのでした。
そのため`component(_:from:)`で取得した値をそのままindexとして使うと0始まりの配列である`weekdaySymbols`や`shortWeekdaySymbols`とズレが生じてしまいます。

- 意図する曜日が取得できない
    - １始まりと0始まりのズレが原因
- 落ちることもある
    - 配列の範囲を超えた値が渡される可能性があるため（７が渡されると落ちる）

## 対応
原因がわかれば対応は簡単ですね。
`weekday`の値を`-1`してあげればズレがなくなります。

### 修正例

```swift
/// 引数から日時の文字列を返す
func createDateString(date: Date, calendar: Calendar) -> String {

    let dateFormater = DateFormatter()
    dateFormater.locale = Locale(identifier: "ja_JP")

    // .weekdayは1から始まるので、indexとして利用するために - 1 する
    let weekdayIndex = calendar.component(.weekday, from: date) - 1
    dateFormater.dateFormat = "M月d日 \(dateFormater.shortWeekdaySymbols[weekdayIndex]) H:mm"

    return dateFormater.string(from: date)
}
```

## サンプルコード
サンプルコードをGitHubにあげたので、実際に触りたい方は[こちら](https://github.com/taguchi-k/ios-weekday-from-datepicker)からどうぞ。
https://github.com/taguchi-k/ios-weekday-from-datepicker

## 開発環境
|category | Version| 
|---|---|
| Swift | 3.1 |
| XCode | 8.3.2 |

## 参考
https://developer.apple.com/reference/foundation/nsdatecomponents/1410442-weekday
Barba.jsを使って、bodyのクラスネームを動的に更新する方法

一番簡単のは「namespace」と「[transitionCompleted](http://barbajs.org/events.html)」のイベントで使用するようになります。
[Live Demo](https://re.movable-ti.me/tests/javascript/barba.js/body_classnames/foo.html)
例：

```html:foo.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>ページ１：foo</title>
</head>
<body class="foo">
<div id="barba-wrapper">
	<div class="barba-container" data-namespace="foo">
		<h1>ページ１：foo</h1>
		<p>Lorem Ipsum</p>
		<p><a href="bar.html">ページ２へ</a></p>
	</div>
</div>
<script src="//cdn.jsdelivr.net/jquery/3.2.1/jquery.js"></script>
<script src="//cdn.jsdelivr.net/barba.js/1.0.0/barba.js"></script>
<script src="test_classname.js"></script>
</body>
</html>
```

```html:bar.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>ページ２：bar</title>
</head>
<body class="bar">
<div id="barba-wrapper">
	<div class="barba-container" data-namespace="bar">
		<h1>ページ２：bar</h1>
		<p>Lorem Ipsum</p>
		<p><a href="foo.html">ページ１へ</a></p>
	</div>
</div>
<script src="//cdn.jsdelivr.net/jquery/3.2.1/jquery.js"></script>
<script src="//cdn.jsdelivr.net/barba.js/1.0.0/barba.js"></script>
<script src="test_classname.js"></script>
</body>
</html>
```

```js:test_classname.js
Barba.Dispatcher.on( 'transitionCompleted', function( currentStatus, prevStatus ) {
	var $body = $( 'body' );
	if ( prevStatus && prevStatus.namespace ) {
		if ( ! currentStatus
		|| ( currentStatus.namespace && currentStatus.namespace !== prevStatus.namespace ) ) {
			$body.removeClass( prevStatus.namespace );
		}
	}
	if ( currentStatus && currentStatus.namespace ) {
		$body.addClass( currentStatus.namespace );
	}
});
Barba.Pjax.start();
```

jQueryなしでVanillaJSの場合は：

```js
document.body.className = document.body.className.replace( prevStatus.namespace, '' );
document.body.className += ' ' + currentStatus.namespace;
```
だらだらと手作業でいれるvue-mode

### 下記のリンクより各zipをダウンロード
- [vue-mode](https://github.com/CodeFalling/vue-mode)
- [mmm-mode](https://github.com/purcell/mmm-mode)
- [ssass-mode](https://github.com/AdamNiederer/ssass-mode)
- [vue-html-mode](https://github.com/AdamNiederer/vue-html-mode)

上記のzipを解凍したフォルダパスをemacsの設定ファイルのload-pathをへ追加する。
`(require 'vue-mode)` もemacsの設定ファイルに追加。

※ Spacemacsを使うともっと楽にできるようですね、やる気があったら使いたいものですね。
「最大でn回のイベントを発行する + Completeしない」Observableの作り方

RxSwiftを扱っていて、最大でn回のイベントを発行するCompleteしないObservableを使いたいときがある。例えば、API Call等の1回のみ行いたいタスクを行うために、下記の条件を満たしたObservableを扱いたい

1. `UIViewController.viewWillAppear(_:)`に1回のみフックしてイベントを発行する
2. `Complete`しない

## 1. `UIViewController.viewWillAppear(_:)`に1回のみフックしてイベントを発行する

1の条件を満たすために下記の2つの条件に分割する

1.1 `UIViewController.viewWillAppear(_:)`にフックするObservableを生成する
1.2 発行するイベントを1個のみにする

### 1.1 `UIViewController.viewWillAppear(_:)`にフックするObservableを生成する

```swift
extension Reactive where Base: UIViewController {
    var viewWillAppear: Observable<Void> {
        return sentMessage(#selector(UIViewController.viewWillAppear(_:))).map { _ in () }.shareReplay(1)
    }
}
```

```swift
viewController.rx.viewWillAppear
    .subscribe(...)
    .addDisposableTo(disposeBag)
```

上のように扱えるが、上の実装では`UIViewController.viewWillAppear(_:)`が呼ばれる度にイベントが発行されてしまう

### 1.2 発行するイベントを1個のみにする

```swift
extension Reactive where Base: UIViewController {
    var viewWillAppear: Observable<Void> {
        return sentMessage(#selector(UIViewController.viewWillAppear(_:))).map { _ in () }.shareReplay(1)
    }

    var viewWillAppearOnce: Observable<Void> {
        return viewWillAppear.take(1)
    }
}
```

[take](http://reactivex.io/documentation/operators/take.html)オペレータを使って、発行するイベントの回数を制御している

しかし、これだと下記のように`Complete`イベントも呼ばれてしまう

```
next()
complete
```

Subject等にbindingしているとCompleteイベントが流れて**Subjectが終了してしまう**。このようなケースは避けたい

## 2. `Complete`しない

```swift
extension Reactive where Base: UIViewController {
    var viewWillAppear: Observable<Void> {
        return sentMessage(#selector(UIViewController.viewWillAppear(_:))).map { _ in () }.shareReplay(1)
    }

    var viewWillAppearOnce: Observable<Void> {
        return Observable.concat ([viewWillAppear.take(1), Observable.never()])
    }
}
```

[concat](http://reactivex.io/documentation/operators/concat.html)オペレータを用いて、Completeしない`Observable.never()`とフィルタリングしている`viewWillAppear.take(1)`を結合して、下記の条件を満たしているObservableを実現している

1. `UIViewController.viewWillAppear(_:)`に1回のみフックしてイベントを発行する
2. `Complete`しない

### 参考文献

- [RxSwift](https://github.com/ReactiveX/RxSwift)
- [ReactiveX](http://reactivex.io/documentation)
fastlane matchでgit cloneが終わらない


初めてfastlane使ってみたら微妙にハマったのでメモ。

## 現象

証明書の管理をしたかったのでまずmatchから使ってみたく、セットアップをして下記のコマンドを叩いたのですが・・・

```
$ bundle exec fastlane match development
```

下記のログが出て以降、うんともすんとも言わなくなってしまいました。
> [02:22:08]: Cloning remote git repo...
> [02:22:08]: If cloning the repo takes too long, you can use the `clone_branch_directly` option in match.

## 原因

どうも途中でGitのプロンプトが出るような状態だとそれを検知できずに止まってしまうみたいですね。
https://github.com/fastlane/fastlane/issues/1981

僕の場合は設定しているリポジトリをcloneしようとした時のパスフレーズを入力するプロンプトに引っかかっていたみたいです。

```
$ git clone [対象のリポジトリのURL]
Enter passphrase for /Users/my-user-name/.ssh/id_rsa:　<-これ
```

## 対応

下記を参考にパスフレーズを毎回聞かれないように設定したらできました。
http://garicchi.com/?p=19323

以上。
TeraTermから動的IPのEC2に簡単にSSHする方法

## 概要
WindowsからAWSのEC2インスタンスにSSH接続するには、TeraTermを使うことが多いと思われる。
接続するにはマクロが便利だが、マクロに書き込むIPアドレスが動的な場合には一工夫必要になる。
その一工夫を入れて、マクロ実行のみでSSH接続できるようにする。

## 前提条件
- 接続先EC2は動的なパブリックIPを持つ。
- EC2にはSSH認証でログインする。
- AWS CLIはインストール済みである。
- AWS CLIでEC2インスタンス情報を取得するためのプロファイルは設定済みである。
    - `aws configure --profile プロファイル名` で設定できる(参考: [Qiita: AWS CLIで複数アカウントのアクセスキーを管理して扱う設定](http://qiita.com/kwsmkn/items/ce72d8e4cc35f1fc01b5))。
- EC2はNameで一意に特定できる。
    - ※別の方法でも一意に特定しても良い。

## 方法
### EC2のパブリックIPを取得するバッチ
プロファイル名とインスタンス名を渡し、該当するインスタンスのパブリックIPをip_work.txtというテキストファイルに書き込む。
ここで `--filters` の中身を調整すれば、Name以外でインスタンスを指定することもできる。

```bat:get_ec2_ip.bat
cd /d %~dp0
aws --profile %1 ec2 describe-instances --filters "Name=tag:Name,Values=%2" --query "Reservations[*].Instances[*].PublicIpAddress" --output text>ip_work.txt
```

### SSH接続するTeraTermマクロを作成

```:ssh_ec2.ttl
; 1. 動的IPアドレスを取得
; 1-1. バッチを実行し、テキストファイル(ip_work.txt)にIPを書き込む
;      ※バッチをパスの通っていない場所に置く場合はフルパスで指定する
exec 'cmd /c get_ec2_ip.bat プロファイル名 インスタンス名' 'hide' 1
; 1-2. ファイルからIPを取り出し変数にセット
;      (ファイルを仲介せず、コマンドの出力を直接受け取る方法を思い付かなかったので)
fileopen FH 'ip_work.txt' 0 0
filereadln FH HOST_ADDR
fileclose FH

; (2)ユーザ名／秘密鍵を設定
USER_NAME = 'ログインするユーザ名'
getenv 'HOME' KEY_FILE
strconcat KEY_FILE '\.ssh\秘密鍵ファイル(pem)'
 
; (3)コマンド組立て 
COMMAND = HOST_ADDR 
strconcat COMMAND ':22 /ssh /2 /auth=publickey /user=' 
strconcat COMMAND USER_NAME 
strconcat COMMAND ' /keyfile="' 
strconcat COMMAND KEY_FILE
; 設定ファイルを用意しているならここでセット
strconcat COMMAND '" /F=SETTING.INI' 
 
; (4)サーバへ接続 
connect COMMAND

; TeraTermのタイトルバーに任意の名前を記述しておくと分かりやすい
settitle 'タイトル名'
 
end
```

### TeraTermマクロを実行
作成したマクロをttpmacro.exe(TeraTerm本体のディレクトリにインストールされているはず)で実行すれば良い。
私は次のように運用している。

- 拡張子ttlのファイルをttpmacro.exeに関連付け
- 接続先ごとにこのマクロを用意
- 各マクロをコマンドランチャ(最近はAqulinaを使っている)に登録
n個のオブジェクトをリストで受け取って処理

個数が未知のインスタンスを一度に受け取ってメンバを扱いたかった。

```py3:ObjList.py
class object:
  def __init__(self, value):
    self.L = value

def integral(ObjList):
  L = 0.0
  for obj in ObjList:
    L += obj.L
  return L

def main():
  obj1 = object(2.0)
  obj2 = object(3.0)

  L = integral([obj1, obj2])
  print(L)

if __name__ == '__main__':
  main()
```

意外とすっきり書けた。
想定している用途はまた別だけど、ToDoリストやガントチャートの実装に使えそう。
Rubyで素数を求めるプログラム（その２）

#はじめに
採用試験で素数判定のコードが書けなかったので、今後のために勉強として作成中
今回は別のアルゴリズムを使用します
~~「Prime使えばよくね」は禁止~~
#ソースコード
参考
http://judge.u-aizu.ac.jp/onlinejudge/commentary.jsp?id=ALDS1_1_C
https://ja.wikipedia.org/wiki/エラトステネスの篩
一版的にエラトステネスの篩と呼ばれる方法になります
計算効率は前回書いたコードよりも遥か上です

```oneroopprime.rb
def primecheak(x)
  i = 3
  if x < 2
    return false
  end

  if x == 2
  return true
  end

  if  x % 2 == 0
    return false
  end

  while i <= x**(1/2.0)
    if x % i == 0
    return false
    end
    i += 2
  end
  return true
end

num =(1..100).to_a
primenum = []
num.each do |i|
  if primecheak(i) == true
    primenum << i
  else
    #何もしない
  end
end
p primenum
p primenum.length

#実行結果
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
25
```

#今後について
まだまだ素数判定法はあるので、それらも実装していけるように勉強中
射影について

師匠の受け売り(の劣化)だが、まとまっている記事もないので。

## 射影の定義
$X$を集合とする。 $f: X\times X \to \mathbb{R}$が

* $\forall x \in X, f(x, x) = 0$
* $\forall x, y \in X, f(x, y) \geq 0$

を満たすように与えられているとする。これを前距離(premetric)と言う。
$a \in X$の$f(a, \cdot)$による$S \subset X$への射影(projection)$\Pi_{f(a, \cdot)}(a) \in S$(あるいは$\Pi_{f(a, \cdot)}(a) \subset S$)は

```math
\Pi_{f(a, \cdot)}(a) = \arg \min_{s\in S}f(a, s)
```
で、$a \in X$の$f(\cdot, a)$による$S \subset X$への射影$\Pi_{f(\cdot, a)}(a) \in S$(あるいは$\Pi_{f(\cdot, a)}(a) \subset S$)は


```math
\Pi_{f(\cdot, a)}(a) = \arg \min_{s\in S}f(s, a)
```

で定義される。

### Note 1
一般的に射影は$S$上の部分集合である。これが一点集合の時、その元と集合を同一視することとする。

### Note 2
$f$が擬半距離(pseudo-semimetric)である時つまり、

* $\forall x \in X, f(x, x) = 0$
* $\forall x, y \in X, f(x, y) \geq 0$
* $\forall x, y \in X, f(x, y) = f(y, x)$

を満たす時、$\Pi_{f(a, \cdot)}(a)=\Pi_{f(\cdot, a)}(a)$である。この時これを$\Pi_f(a)$と表すこととする。
### Note 3
$a \in X$が$a \in S$でもある時、$a \in \Pi_{f(a, \cdot)}(a)$かつ$a \in \Pi_{f(\cdot, a)}(a)$である。特に$f$が準半距離(quasi-semimetric)である時つまり

* $\forall x, y \in X, f(x, y) = 0 \iff x = y$
* $\forall x, y \in X, f(x, y) \geq 0$

を満たす時、$\Pi_{f(a, \cdot)}(a)$や$\Pi_{f(\cdot, a)}(a)$は一点集合となり、$a = \Pi_{f(a, \cdot)}(a) = \Pi_{f(\cdot, a)}(a)$である。
また、$b \in X$の射影$\Pi_{f(b, \cdot)}(b)$が1点集合である時、つまり $\Pi_{f(b, \cdot)}:\\{b\\} \to S$を写像として見れる時、

```math
\Pi_{f(b, \cdot)}(b) = \Pi_{f(b, \cdot)} \circ \Pi_{f(b, \cdot)}(b)
```
を満たす。この性質を冪等性と呼ぶ。
##射影の例
### 集合論の標準射影
$X$を直積集合$\coprod X_i$とする。$X_i$上の適当な距離を$d_i$とし、$X$上の距離を$\forall a, b \in X, d(a, b) = \sum d_i(a_i, b_i)$で定義する。ここで$a_i$は$a$の第$i$成分である。
$X$上の元$c$を固定し、$X$の部分集合$\\{x \in X|\forall j \neq i, x_j = c_j\\}$を$X_i$と同一視すると、$X$から$d$による$X_i$への射影$\Pi_{i, d}$が、

```math
\forall a \in X, \Pi_{i, d}(a) = a_i
```
を満たす。これは集合論における標準射影である。
### 線形代数の射影
$X$を線形空間とし、$d$を$X$上の適当な距離とする。$X$の部分集合$S$を$X$から$S$への$d$による射影$P_d$が写像となるように選択する。一点集合$\\{a\\}\subset X$がこれを満たすことから$S$は存在する。
距離は準半距離でもあるからNote 3より

```math
\forall x \in X, \Pi_d(x) = \Pi_d \circ \Pi_d(x)
```
と冪等性を満たす。また、距離$d$がユークリッド距離である時、$S$として部分空間を選べる。この時、射影$\Pi_d$は線形性を満たし、射影作用素の条件を満たす。
### 情報幾何の射影
$X$を離散集合$Y$上の分布全体の集合とする。$S\subset X$とする。また、この$S$がパラメータ集合$\Theta$からの単射が存在する時、$S$は統計モデル(statistical model)と呼ばれる。
$D(p||q)$をKL情報量とし、

```math
D(p||q) = \sum_{y \in Y} p(y) \log \frac{p(y)}{q(y)}
```

と定義される。KL情報量は準半距離を満たす。
ここで、$p \in X$の$S$への$D(p||\cdot)$による射影$\Pi_{D(p||\cdot)}$をm 射影(m projection)と呼び、$\Pi_m$で表す。また、$p \in X$の$S$への$D(\cdot || p)$による射影$\Pi_{D(\cdot||p)}$をe 射影(e projection)と呼び、$\Pi_e$で表す。

$p$を経験分布とした時、統計モデル$S$上の最尤推定量はm射影$\Pi_m(p)$である。
divをたくさん重ねた時の重なり順を指定する

##やりたいこと
こんな感じのサイトを作っていた時に、白いところが藍色のナビゲーションバーにかぶってしまって困った。
ので、ナビゲーションバーが一番上にくるように指定したい。

![スクリーンショット 2017-05-10 0.30.49.png](https://qiita-image-store.s3.amazonaws.com/0/94998/addb2dc0-1642-8eaf-e483-15d03621fee6.png)

##結論
`z-index`プロパティを指定する。


まず、白いところは`position: absolute;`で重ねてある。
同様に、ナビゲーションバーも`position: absolute;`が指定してある。

こいつらに、`z-index`というプロパティを指定してあげればいい。
`z-index`プロパティは、数字が大きくなるほど上に重なる。

この場合は、ナビゲーションバーに`z-index: 2;`を指定して、
白いところに`z-index: 1;`を指定すれば、ナビゲーションバーに要素が重ならなくなる！！


ただ、これだと要素が増えるたびに数字をずらさなきゃいけなくなると思うんだけど
「この要素はどんな時でも絶対一番上にする！」っていう指定方法とかないのかな…

あれば教えてくださいo(｀ω´ )o
エンジニアを指導する立場の人こそ読んでほしい、新卒エンジニアが1年間で上司に感じた５つのことw

http://qiita.com/H_Crane/items/22ea96300dda82ec5b02

↑に便乗
新卒でエンジニアになって1年経った

# 1年間で上司に感じたこと

## 1, wiki更新してくれ
 間違った情報はかえって邪魔

## 2, 手続き型やめろ
 しっかり分けて

## 3, バグを放置するな
 バグるのはしゃーない。問題は新卒がてめえのバグを修正するハメになること

## 4, オレオレライブラリの後始末よろ
 面倒見なくなるなら、最初からメジャーなの使ってくれ

## 5, コーティング規約に沿え
 大体blameすると同じ奴だけどな

# 後書き
新卒にケツ拭かせんじゃねえ！
flycheckをC++11に対応させる

gcc向け.

そもそもデフォルトのチェッカがgccではないみたいなので, `flycheck-checkers`を調整して`c/c++-gcc`を優先させる. 

そして

```
(add-hook 'c++-mode-hook (lambda () (setq flycheck-gcc-language-standard "c++11")))
```
とする. 
ただし[よりスマートな方法](http://stackoverflow.com/questions/30949847/configuring-flycheck-to-work-with-c11)もある模様.
「画像の処理でなるべく2重ループを書くな」に実例をつけました

[「画像の処理でなるべく2重ループを書くな」](http://qiita.com/nonbiri15/items/9d4296b3a79fad38bf76)
に実例をつけて書き直しました。

お役に立てば幸いです。
いきなりJavaScript : flowtypeをゼロから始めて1ファイル完成するまで

# 背景
​
仕事でいきなり経験ほぼゼロのJavaScript界隈に飛び込んで開発を進めています。

​コードレビューにおいて型がないのが苦痛との指摘を受け、静的な型チェックを導入しました（してもらいました）。

ただ、何もかもが始めてのことなので学習がてら、flowtypeの書き方についてまとめてみました。

周辺環境は以下の通りです。
Babel + webpack + flowtype + react

ES2015準拠で書いていきましょうという体でやっています。

# 導入

`yarn add -D flow-bin` で追加

# 大まかな手順

1. チェックするjsファイルを1つ選ぶ
2. そのjsファイルをチェック対象にする
3. 型チェックを実施する
4. エラーを修正する
5. flowtypeのためのコードを抜き出して本番用コードとする

3と4を繰り返し、ひとまずエラーがすべて解消できることを目指す。

## 手順2.チェック対象にする方法

おまじない的に、対象ファイルの先頭行に`// @flow`を記述することでチェック対象となる。

現在のチェック対象ファイル一覧は、`flow ls`で確認できる

デフォルトのままだと、使用する関連ライブラリなどもチェック対象となってしまう。
これによって不慮のエラーが発生することがあるようなので、チェック不要なファイルについては`.flowconfig`のignoreに追加する


## 手順3.型チェックの実施

flow自体をインストールしている場合は `flow` で実行できる

yarnでflowを追加している場合は、`yarn run flow` として実行する（上記の`flow ls`なども同様）

## 手順4.エラーを修正する

書き方に倣って、エラーの発生した箇所を修正する



# 型について

## 利用できる型

* 独自型(後述)
* string
* number
* boolean
* any (何か。これを使うとflowを使う旨味がない！って怒られるのだろうか)
* null (nullしか指定できないって何)
* empty (何を指定しても通らなさそうな感じの)
* void (戻り値に指定する)

## 独自型の定義

規定の型以外でも独自に定義して利用することができる。
今回は、JSONのスキーマを作成する用途で独自型の定義をしていた。

```js
type MyType = {
  name: string;
  price: number;
}
```

## Advancedな感じの型

調べていく中で見つけたが今回は使用していない

```js
// stringでもnumberでも
function foo(value: $Either<string, number>) {
  console.log(value);
}
foo(333); // OK!
foo('333'); // OK!
```

これとnullやらvoidをあわせると素敵で複雑な挙動になりそう :innocent:

# flowtypeの書き方

## 変数の定義

型定義を追加するにはコロン(:)で繋いで型を記述する

```js
const hoge: string = '735'; // OK!
const hoge: string = 735;   // NG!
```

## 関数の定義

変数の定義同様に記述する

```js
function foo(name: string) {
  console.log('hello, ' + name);
}
```

## 戻り値の定義

カッコの後ろにコロン(:)で繋いで型を記述する

```js
function foo(name: string): number {
  return name.length;
}
foo('350'); // OK!
foo(350);   // NG!
```

## クラスのフィールドの定義

クラスの先頭で定義したもののみ使うことができる
下のコードのように、定義していないもの(home)を使おうとするとエラーが出る

```js
class Foo {
  name: string;

  constructor(name: string) {
    this.name = name; // OK!
    this.home = name; // NG!
  }
}
const foo = new Foo('FOOOOO');
```

## 配列の定義

配列の定義をするには、Array<型>とする

```js
function foo(numbers: Array<number>) {
}
```

Array<empty>のようにすると空の配列を渡すことが出来るっぽい。
が、結局中身がemptyだから要素を追加することはできない...。

## Predicateの定義

Lodashを使用する中で、filterに渡すためのpredicateを定義する機会があった。

これについてはanyを指定することでSkipした。
（ちゃんとしたやり方があるかどうかはそのうち調べたい）

# 参考

[flow による型のある世界入門 - SlideShare](https://www.slideshare.net/sairoutine/flow-73272518)
[0からはじめるFlow Part.1 - console.lealog();](http://lealog.hateblo.jp/entry/2016/06/21/104558)
[redux アプリに flow を導入したところまでのメモ - わからん](http://d.hatena.ne.jp/kitokitoki/20160615/p1)
[flowtypeのUtility Typeについて その1 - Qiita](http://qiita.com/kinzal/items/e1898c89af5618e18334)
https://github.com/facebook/flow/blob/master/src/typing/type.ml
[静的型チェッカーflowのクラスでPrivateなフィールドを定義するメモ - Namiking.net](http://blog.namiking.net/post/2016/05/flow-class-private-fields/)
[Lambda(Node.js)にFlowによる静的型チェックを導入してみる ｜ Developers.IO](http://dev.classmethod.jp/etc/lambda-node-js-flow-type-check/)
dockerをmacに入れる！


docker上で開発環境を作りたいと思い、まずdockerをmacに入れたいと思います。

ここではhomebrewを使用し構築します。

##1.dockerを探す。

###homebrewのsearchコマンドでdockerを探します。

```
$brew search docker
boot2docker                              homebrew/versions/boot2docker141
docker                                   homebrew/versions/boot2docker162
docker-compose                           homebrew/versions/docker133
docker-machine                           homebrew/versions/docker141
docker-machine-driver-xhyve              homebrew/versions/docker150
docker-machine-parallels                 homebrew/versions/docker162
docker-swarm                             homebrew/versions/docker171
homebrew/versions/boot2docker133
homebrew/emacs/dockerfile-mode           Caskroom/cask/docker
Caskroom/cask/docker-toolbox             Caskroom/versions/docker-edge
```

### 対象の詳細を確認する。

```
$brew cask info docker
docker: 1.10.0
Docker Engine Client
https://docs.docker.com/engine/userguide/
Not installed
https://github.com/caskroom/homebrew-cask/blob/master/Casks/docker.rb
==> Contents
  docker-1.10.0 (binary)
```

### install!!!

```
brew cask install docker
==> Satisfying dependencies
complete
==> Downloading https://get.docker.com/builds/Darwin/x86_64/docker-1.10.0
######################################################################## 100.0%
==> Verifying checksum for Cask docker
==> Symlinking Binary 'docker-1.10.0' to '/usr/local/bin/docker'
Password:
🍺  docker staged at '/opt/homebrew-cask/Caskroom/docker/1.10.0' (10M)
```

### installできているか確認します。
```
$docker version
Client:
 Version:      1.10.0
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   590d5108
 Built:        Thu Feb  4 19:55:25 2016
 OS/Arch:      darwin/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
```

次はdocker-machineを入れます。
Autokey ツールの簡単な紹介

Autokeyは便利なツールなのですが、日本語の紹介が少なくて。

急に立ち上がりでFetarlエラーが出てきて動かなくなる。
.config/autokey の設定ファイルを削除してから、再立ち上げ。
動くようになった。あらかじめスクリプトのバックアップをとっておけばよかった。


参考リンク
憩いの場
http://linux.ikoinoba.net/index.php?mode=show&date=20100509

この画像では、super + F9 でMy Scriptsのメニューが出て、Scriptを選択できます。

テキストのモード（エディター、ブラウザーのテキスト入力など）で"miura"+Speace でスクリプトのInsert Dateが起動してスクリプトから出力されたテキストが貼り付けられます。

変更されたスクリプトは必ずSaveをクリックしてください。これだけで相当に便利なことができるはずです。

簡単ながらメモしました。

![autokey.png](https://qiita-image-store.s3.amazonaws.com/0/23768/4a39dbfb-a3b1-6f86-a4bf-c01b290dbb3b.png)
Rantly(property based testing tool)でテストデータ生成 - string

Rantly#string(char_class) でランダムな文字列データを作ります。
char_classの指定内容によって出力する文字列の内容を選択できます。

## <i class='fa fa-question-circle'></i> 関連記事
[tbpgr の rantly 関連記事](http://qiita.com/search?utf8=%E2%9C%93&q=user%3Atbpgr%20tag%3Arantly)

## <i class='fa fa-flask'></i> サンプル
```ruby
Rantly(5){string}
# => ["gxX^ +", "fn@fXU", "Qct7{\"", "*j=XcD", "'a;@1k"]
Rantly(5){string}
# => ["GjOHTb", "s\"dV.+", "zE1i)t", "{teu=u", "Wvm/7U"]
Rantly(5){string(:lower)}
# => ["vovzuy", "lxbxue", "uudmkh", "sogody", "uritkw"]
Rantly(5){string(:lower)}
# => ["ndopxb", "pkxxeo", "xoeoml", "ntocio", "vbpmnp"]

# char_class を確認
Rantly::Chars::CLASSES.keys
# => [:alnum, :alpha, :blank, :cntrl, :digit, :graph, :lower, :print, :punct, :space, :upper, :xdigit, :ascii]
```

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* [abargnesi/rantly](https://github.com/abargnesi/rantly)
C言語の配列は勉強できない仕様に変わったのか？

数十ヶ月ぶりに，C言語の勉強をしようと思い，ポインタ関係の書籍を開いた．
そして，配列の領域外を参照したプログラムをコンパイルしたとき，警告が出てきて驚いた．
昔は出てこなかったはずなのだが・・・．

```c:hoge.c
#include <stdio.h>

int main( void )
{
	int dat[5] = {0};
	int i;

	printf( "Start\n" );

	/* 隊を表示 */
	for ( i = 0; i < 5; i++ ) {
		printf("dat[%d] %d %p\n", i, dat[i], &dat[i] );
	}

	/* 存在しない要素を表示 */
	printf("dat[5] %d %p\n", dat[5], &dat[5] );

	printf( "End\n" );

	return 0;
}
```

![c89でコンパイル.jpg](https://qiita-image-store.s3.amazonaws.com/0/82414/47cbc34a-4c22-d717-2dd4-96714eb29d99.jpeg)

c89規格ですら警告が出てしまった．

#警告抑止

![警告抑止.jpg](https://qiita-image-store.s3.amazonaws.com/0/82414/db3bcc8a-c662-6c5e-5159-ed24e737350b.jpeg)

コンパイル時に，警告が出ないようにするのはおかしいと思う．
しかし，解決方法がない．

#バージョン

![バージョン.jpg](https://qiita-image-store.s3.amazonaws.com/0/82414/8a280854-5288-43a8-8442-911782a273a8.jpeg)

わざわざ警告抑止をせず，コンパイルエラーも出さず，配列範囲外に踏み込めるコンパイラはないのだろうか．
もしくは，OSの問題か？

OS：OS X Yosemite 10.10.5

書籍に使用しているバージョンが記載されていないからな・・・．
根本的に10年以上前の書籍を使っていることに問題があるのだろうか...
たかが配列外を参照するだけの作業に数時間を費やしたorz
(しかも，本来の作業からずれたことに，数時間を浪費する)

#結論
気にしないことにした．
別に，警告が出るからとは言え，勉強は継続できる(支障は出ない)．

#参考URL
gccのインストール：http://qiita.com/ShinichiOkayama/items/962e55ac7f8920a5f007
バージョンを根本から変更するための手順：http://qiita.com/Hiroki11x/items/261612c142da176bbba5
古いgccコマンドオプション一覧：http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_2.html
コンパイラオプション一覧：http://wwweic.eri.u-tokyo.ac.jp/computer/manual/altix/compile/Fortran/Intel_Fdoc91/main_for/mergedProjects/copts_for/common_content/options_ref_cross_refs_for.htm
GNU gcc警告オプション：http://www.unixuser.org/~euske/doc/gccopts/
一部の警告をエラー扱いに変更：﻿http://www.metareal.org/2008/12/12/gcc-options-request-or-suppress-warnings-and-errors/

オプション使用例：http://wwwcs23.cs.kobe-u.ac.jp/~mori/4students/enshu/enshu2.2006/MORI/gcc.html

C99の仕様：http://www.buildinsider.net/language/clang/01
IBMのc99：https://www.ibm.com/developerworks/jp/linux/library/l-c99/
MacでC言語：http://n-hiroki-prog.hatenablog.com/entry/2016/06/04/212428
今回に無関係なサイト(アセンブリ表示)：http://qiita.com/kaityo256/items/d04d2980b7f9633b735b
LaravelでmLabにつなごうとしてハマった話(jenssegers/laravel-mongodb)


[jenssegers/laravel-mongodb](https://github.com/jenssegers/laravel-mongodb)のReadMe.mdを見ながらLaravelとmLab上のMongoDBに繋ごうとしたところ、
Authentication Exceptionが起きてしまい接続できませんでした。

首をひねりつつ、[PHPのMongoDBドライバ](http://php.net/manual/en/class.mongodb-driver-manager.php)から繋いでみたところ、接続できちゃう。Why？
あとついでに、ローカルで建てたMongoDBには普通に接続できる。なんでやねん。

##Readme.mdに仕掛けられた落とし穴

```php:config/database.php
'mongodb' => [
    'driver'   => 'mongodb',
    'host'     => env('DB_HOST', 'localhost'),
    'port'     => env('DB_PORT', 27017),
    'database' => env('DB_DATABASE'),
    'username' => env('DB_USERNAME'),
    'password' => env('DB_PASSWORD'),
    'options'  => [
        'database' => 'admin' // sets the authentication database required by mongo 3
    ]
],
````

![](https://qiita-image-store.s3.amazonaws.com/0/122390/a56f35f4-9e74-5577-1de0-241d290c7c3f.png)

実はこれ、しれっと書いてありますけど、実は認証が通るDBが指定されてないといけないようです。
ローカルで建てた時はadminにアクセス権があるけど、mLabではないと。
なるほどわかってしまえばそりゃそーだ。

##結論
したがって以下のように修正するといいみたい。

```php:config/database.php
'mongodb' => [
    'driver'   => 'mongodb',
    'host'     => env('DB_HOST', 'localhost'),
    'port'     => env('DB_PORT', 27017),
    'database' => env('DB_DATABASE'),
    'username' => env('DB_USERNAME'),
    'password' => env('DB_PASSWORD'),
    'options'  => [
        'database' => env('DB_DATABASE')
    ]
],
````
主に利用するDBならアクセス権もあるでしょってことで。


###参考
[jenssegers/laravel\-mongodb: A MongoDB based Eloquent model and Query builder for Laravel \(Moloquent\)](https://github.com/jenssegers/laravel-mongodb)
[why project connected the mongo Authentication failed？but client connected succ\.\.\. · Issue \#1028 · jenssegers/laravel\-mongodb](https://github.com/jenssegers/laravel-mongodb/issues/1028)
csvファイルをpythonでダウンロード

pythonでネット上からcsvファイルをダウンロードしてpandasを使った分析をしたいのですが、ダウンロードがうまくいきません。
lsを使ってファイルを探したのですが、どうしても見当たりません。
![スクリーンショット (7).png](https://qiita-image-store.s3.amazonaws.com/0/180547/e23689fd-6234-b06e-c451-4b35a7adedaf.png)
教えてください。
Gitにpush

＜pushした流れをメモ＞

```
$ 　git branch -a                 // ブランチの確認
$ 　git status                    // 変更ファイルの確認
$ 　git add -A                    // 全部のファイルをあげる
$ 　git status                    // あがっているか確認
$ 　git commit -m "コミットメッセージ"  // コミット
$ 　git status                   　// コミットできているか確認
$ 　git push origin 自分のリポジトリ名 // プッシュ
```
PHP Manual 読書会(1回目)(PHPタグ-コメント)

PHPに慣れる為に週1ぐらいで更新していきます。[PHP Manual](http://php.net/manual/ja/index.php)を読んで実験して行きます。

## 内容

+ 言語リファレンス
  + 基本的な構文
    + PHPタグ
    + HTML からの脱出
    + 命令の分離
    + コメント

### [PHP タグ](http://php.net/manual/ja/language.basic-syntax.phptags.php)

+ 開始タグと終了タグで囲まれている 箇所以外のすべての部分は、PHP パーサに無視されます

```php
<?php
echo "hello"
?>

ここはそのまま表示される
```

```sh
hello
ここはそのまま表示される
```

+ PHP では、短い形式の開始タグ `<?` も使えます
  + `--enable-short-tags` オプションつきで PHP を configure した場合
  + php.ini で `short_open_tag` を有効にする

コマンドラインから変更する場合は[CGI/CLI 版における -c コマンドラインオプション](http://php.net/manual/ja/configuration.file.php)で直接iniファイルを指定するといける

```sh
cat > php.ini
[php]
short_open_tag = on

cat > hello.php
<?
echo "hello\n";
```

実行

```php
php -c php.ini hello.php
```

```sh
hello
```

+ ファイル全体が純粋な PHP コードである場合は、ファイルの最後の終了タグは省略するのがおすすめです
+ 終了タグの後に余分な空白や改行があると、予期せぬ挙動を引き起こす場合があるからです
+ 余分な空白や改行のせいで PHP が出力バッファリングを開始し、その時点の内容を意図せず出力してしまうことになります

### [HTML からの脱出](http://php.net/manual/ja/language.basic-syntax.phpmode.php)


+ PHP 5 では、PHP の cnfigure 方法に応じて最大で五種類の開始タグ・終了タグが使えます
+ PHP 7 では互換性を考慮して <?php ?> や <?= ?> だけを使うことを推奨します

### [命令の分離](http://php.net/manual/ja/language.basic-syntax.instruction-separation.php)

+ PHP コードの最終行にはセミコロンを記述する必要はありません

このようなケースの場合は必要ない

```php
<?php echo "hello\n" ?>
```


### [コメント](http://php.net/manual/ja/language.basic-syntax.comments.php)

珍しいことに3種類のコメントをサポートしている

```php
<?php
// 単一行コメント
/*
 * 複数行コメント
 */

# シェル型の単一行コメント
echo "hello\n";
```
cordova 7.0.0がリリースされたので、変更点をまとめてみました。

Monaca では、Cordova を採用し、JavaScript 経由で、ハイブリッドアプリ内から端末側のネイティブ機能へアクセスしていますが、そのCordovaの 7.0.0リリースされました。

詳しくは[こちら](https://cordova.apache.org/blog/)をご覧ください。

主な変更点を記載します。

## 1. package.jsonの自動作成

package.jsonがプロジェクトに存在しない場合、cordova prepareが呼び出されると自動的に作成されるようになりました。

## 2. --saveオプションなしでconfig.xmlとpackage.jsonへ自動保存

プラットフォームまたはプラグインを追加するとき、自動的にconfig.xmlとpackage.jsonにプラットフォームおよびプラグインのバージョンが保存されるようになりました。

## 3. Fetchオプションのデフォルト化

プラットフォームまたはプラグインを追加するとき、デフォルトでnpmを使用してnpde_modules配下にインストールされるようになりました。

## 所感

今まで-saveオプションを付け忘れて、複数人で開発する際のトラブルになったこともありましたが、これでなくなりそうですね。 monacaを使っていると、あまりcordovaのバージョンを気にすることもないかと思いますが、monacaのコア技術なので、変更点を理解しておくといいかと思います。
コードを読む時に使えるコマンド codegrep

皆さんコード読んでますか？
コードを読む時にはどんなツールを使っていますでしょうか。ctags？grep？

grepは通常、**ファイルの中の文字列を検索する** コマンドですが、
コードを読むときは、**カレントディレクトリにあるファイルすべてにgrepしたい**
という要望があると思います。この要望を叶えることができるのが、

```
$ find . -type -f -print0 | xargs -o grep -n '検索したいコードの内容'
```

このコマンドになります。自分はこのコマンドを `codegrep` としてaliasに登録しています。

今私はpipのコードを読んでいる（pipがダウンロードする時に表示されるプログレスバーの実装を見たかった）のですが、pipのソースコードがあるディレクトリで、

```
$ codegrep progress
```

こう実行すると、


![2017_05_09_23_29.jpg](https://qiita-image-store.s3.amazonaws.com/0/1808/4721e9ab-d256-157f-7344-a7e177568892.jpeg)

こんな感じに（grepのカラー設定をしていれば）検索結果が出てきます。
Boto3でIAMユーザのリストを取得


awsとpythonを勉強しようと思ったところ、Boto3なるものを発見！
まずはIAMユーザのリスト処理を作成してみました。(コードがひどいとかは置いておく)

まだまだ勉強中なのでもっと書けるようになりたいなー

```py
# -*- coding: utf-8 -*-

import boto3
from boto3.session import Session

client = boto3.client('iam')

# def
def user_list():
  response = client.list_users()
  for user in response["Users"]:
    print(user["UserName"])

# main
if __name__ == "__main__":
  user_list()
```


from : https://github.com/handa3/study/blob/master/aws/iam/user_list.py
コマンドライン（ターミナル）からフォルダをVS CodeやPhpStormやJetBrainsやSourceTreeで開く

# はじめに
PhpStormすごいです。本当に好きです。
Gitでソースコードを拾ってきてPhpStormで開こう、というときにGUIからしか開くことができませんでした。

![Screen Shot 2017-05-09 at 23.11.12.png](https://qiita-image-store.s3.amazonaws.com/0/47327/6172a22b-ac1e-725d-b582-ae6f6942b524.png)

GitでCloneして開く、という一連の流れをコマンドライン（ターミナル）で実現したかったです。

# GUIから開くということもあるけれど
IDEAだとVCSにGitHubとかのクローン機能があります。
ここでクローンすれば新しいウィンドウで開くので完結できます。

![Screen Shot 2017-05-09 at 23.11.55.png](https://qiita-image-store.s3.amazonaws.com/0/47327/ce6d715f-234f-3c7b-6fcc-2f949a02ebb6.png)

でもやっぱりCUIから開きたい。
ターミナルでGitの作業をやってて、あ、ちょっとコードを確認したいな、とかそういうときにあのフォルダ選択がうざったい。そんな感じでした。

# 解決策

というわけでopenコマンドに-aをつけてアプリケーション名を指定、その後ろに開きたいフォルダパスを指定すれば開けることがわかりました。

```bash
$ open -a PhpStorm ./
```


```bash
$ git clone https://github.com/yousan/dotfiles
$ open -a PhpStorm dotfiles
$ open -a SourceTree dotfiles
```

こんな感じでGUIとCUIをコリコリ使っていけます。スッキリ！
教えてくれた @naname さんありがとう！

# Finder
ちなみにFinderでカレントディレクトリを開くこともできます。

```bash
$ open .
```

# エイリアス
上記のコマンドだと長いのでエイリアスを掛けて使っています。


```zsh:~/.zshrc
alias op='open -a PhpStorm'
alias os='open -a SourceTree'
```

```bash
$ op .
```


# VS Code

VS Codeの場合には `Shell command 'code'` をインストールすると開くことができます。

> Command + Shift + Pでコマンドパレット開く。
> Shellって検索
> インストール

ターミナルからVisual Studio Codeを起動する方法【公式の方法】 - Qiita
https://qiita.com/naru0504/items/c2ed8869ffbf7682cf5c

```console
$ code .
```

便利です！
テストで簡易的な数値アプリを作ってみた。

https://jsfiddle.net/ksapfsv9/

数値計算アプリ作成。

varの特性上Stringからintへできてないことに気付いてなくて、しばらく時間が掛かった。
var自体は混乱を招く恐れがあるため、多用しない方がいいが、JavaScriptでは基本的に指定しないため使用した。

//--------------------------
//ここにvarの特性を書く
//--------------------------

自分用のメモおよび勉強用としてこれから残すようにする。

少しずつ残して、記録していこうとは思う。


この記事にはJavaScriptを埋め込むことができるのだろうか？
まだまだわからないことだらけだ。
Tkinter インストール（homebrew）

こんにちは。
tcl-tk をインストールし、Python で Tkinter を動かしてみました。

```console
$ brew install tcl-tk
$ brew install python --with-tcl-tk
$ python -c "import Tkinter; print Tkinter.__version__"
$Revision: 81008 $
$
$ brew install python3 --with-tcl-tk
$ python3 -c "import Tkinter; print(Tkinter.__version__)"
$Revision: 81008 $
```
なお「[Mac OS X 10.11.3 (El Capitan) + pyenv + Python 3.5.1でimport tkinterできない時](http://qiita.com/hokkun-k/items/223b1125b814621a0c0e)」という記事もあります。
Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion' has value '1.8', but '1.7' is required.

# 事象 : コマンド・プロンプトでJavaのバージョン確認をしようとしたら怒られた
- 環境
    - Windows7 64bit
    - Windows10 64bit のパソコンではJAVA_HOMEで切り替えられました
        - JAVA_HOME : 1.7を指定
    - インストールしているJRE : 1.6 / 1.7 / 1.8(Eclipse 4.6 Neon 起動用)
    - 使っているEclipse : 4.3 Kepler / 4.6 Neon

1. Javaのバージョンを切り替えた
2. コマンド・プロンプトでJavaのバージョン確認
3. エラー

```bat
> java -version
Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion' has value '1.8', but '1.7' is required.
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.
```

## 原因

私的な理由
Eclipse 4.6 Neon を使うにはJRE1.8が必要だったから。
> A Java 8 JRE/JDK is required to run all Neon packages based on Eclipse 4.6. The reasoning behind requiring Java 8 are discussed here.
> [Eclipse/Installation - Eclipsepedia](https://wiki.eclipse.org/Eclipse/Installation#Eclipse_4.6_.28Neon.29)

**ちゃんとした理由**
以下のサイトで丁寧に説明しています。
> Java SE 8以降のパブリックJREで、環境変数PATHの設定を自分で行なわない(行なえない)レベルのユーザーへの対策が変わったため
> [WindowsでJDK 7とJDK 8を切り替える際の注意点 - Daregada (だれがだ)](http://daregada.blogspot.jp/2015/03/windowsjdk-7jdk-8.html)

### 対応方法
- 前提
    - システム環境変数JAVA_HOMEに変更したいJREが指定されていること
    - システム環境変数PATHの[%JAVA_HOME%\bin]が含まれていること

1. システム環境変数PATHの[%JAVA_HOME%\bin]より後ろに[C:\ProgramData\Oracle\Java\javapath]を移動する
    - [Windows 環境変数 Path の設定方法](http://next.matrix.jp/config-path-win7.html)
    - 念のためパソコンを再起動しておくとよいです
2. [C:\Windows\System32\]直下の「java.exe」「javaw.exe」「javaws.exe」を削除する
    - :loudspeaker: 管理者権限が必要
3. レジストリにあるJREの値をJAVA_HOMEのバージョンに書き換える
    - 変更対象 : `HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment`
    - :loudspeaker: 書き換えるバージョンはマイナーバージョンまで指定しない
        - 「1.7.0_79」にしたらエラーメッセージの`value '1.8',`の部分が`value '1.7.0_79',`になった:skull:
        - 例 : エラーメッセージが以下の場合
        - `Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion' has value '1.8', but '1.7' is required.`
            - 変更前のJRE : 1.8
            - 変更後のJRE : 1.7
    - [レジストリエディターの開き方＆使い方 【Windows 7 10 8 Vista XP】 - Let's Emu!](http://www.geocities.co.jp/Playtown-Yoyo/6130/notes/registry-editor-regedit.htm)
Java SE 8 SilverとGold取得した時の勉強内容

# いきさつ
2か月くらい仕事が落ち着きそうだったのと
Java SE 8 Silverを勉強する機会があったのでその流れで。
Silverが意外と早く取れたのでそのままGoldに突入しました。

# 経歴
6年くらいjavaの開発を経験
基本的なところは理解しているが、現場で使っているjavaのversionが
6、もしくは7なので8に関してはあまり知らないです。

# Silverをとるまで
## 勉強内容
まず紫本(テキスト)を買って読みました。二周くらい。
内容は基本的なところが大部分を占めており
練習問題も解けました。この時点では模擬試験はやってません。

続いて黒本(問題集)。
問題集をひたすら解く。これも二周。
黒本のほうが問題が難しく解けない問題も多かったです。
特にStream、ラムダ式、Files、try-with-resourcesあたりは
なじみなかったのでなんじゃこりゃーでした。

主に勉強は行き帰りの電車の中だけ。
やる気あんのかって感じですがだらだらやってました。

そのあとは模擬試験やりまくり生活。
こっからは平日と休日も勉強しました。
紫本が1本、黒本が2本、Oracleが提供してる問題が1本
の計4本の模擬試験を三周くらいやりました。
勉強時間は合計で1か月ちょっとです。
## 結果
結果は満点でした。満点にあまり意味はないですが、気持ちは良かったです。
内容は本当に模擬試験まんまなので、模擬試験で8～9割とれれば合格できると思います。
まんますぎてまじかよと思いました。
#Goldをとるまで
## 勉強内容
ノっていた僕は紫本を買わず。
黒本の練習問題と模擬試験だけやりまくればSilver同様いけると思ってました。

黒本問題集を二周し、模擬試験を受けたところ、一向に問題が解けません。
本当に1/10くらいしかわかりません。
目が覚めたので紫本を買っていちからやりました。

ちなみに諸事情があり、三週間しか時間がなかったため
Gold勉強は平日と土日どっちかを勉強にあててます。

## Silverと違うところ
Goldは暗記しなきゃいけないことが多いです。
特にメソッド。各Functionの引数と戻り値を覚えてないといけないし
CollectionやMapのマイナーなメソッドが出てきて
それらの内容と引数、戻り値を覚えないと解けません。
Silverは決まり事をそれなりに理解した上で問題慣れすれば合格できますが
Goldはそれぞれのメソッドが実際に使えるくらい理解してないと厳しいと思います。

ということで重要なメソッドを単語帳的な感じで
Googleスプレッドシートにまとめて
通勤時や空き時間に携帯で見て暗記しました。
テキストとにらめっこしても覚えられないだろうと思ってました。
模擬試験は紫、黒、Oracle提供を三周。
試験予定まで一週間となったところで気の弱い僕はダメ押しの白本(問題集)購入。
練習問題と模擬試験を三周。
実際にコードを書いて体感してみたりしました。

つらかったのは、黒本の模擬試験が100点とれるようになっても
紫本の模擬試験は60～70点くらいしかとれない。紫を100にしても
白が70点くらいしかとれない。
やはり範囲は広いです。ただしこれら三種類を100にしとけばさすがに受かると思ってました。
各教材は紫、白、黒　の順で難しかったです。
ちなみに最終兵器としてこちらがあるようですが、僕の受験時には発売してませんでした。
紫より難しい問題集らしい。
https://www.amazon.co.jp/OCP-Certified-Professional-Programmer-1Z0-809/dp/1119067901/

## 結果
合格できました。95％です。
やはり肝は、暗記すべきところを覚えたことと
たくさんの模擬試験で問題慣れしたことです。
この二本立ててGoldも取得できると思います。
ロードローラー白本が無くても80％くらいで合格できたと思うのでいらないかもです。
期間としてはSilver一か月、Gold三週間ですが濃度が全然違うので
勉強時間はGoldの方が1.5倍くらい多いです。
## 所感
まじで金がかかります。
書籍が
Silver 紫、黒
Gold 紫、黒、白
受験代×2
合計:8万円くらい

会社が出してくれないと受けらんないですね。
僕はフリーなので自腹でした。
もうやだな。
卒業論文を作成するための資料

[Python下的LibSVM的使用教程](http://www.cnblogs.com/-ldzwzj-1991/p/5893054.html)
[配置为libsvm.python](http://www.cnblogs.com/Finley/p/5329417.html)
[还有这个](http://blog.csdn.net/smilehehe110/article/details/53326010)
Polymer レイジーロードや動的読み込みを利用するときの話

## 問題
`<link rel="import" href="...">`のようなタグを使わずに、`Polymer.importHref`を使って初期レンダー後にレイジーロードしたり、動的にリソースをインポートするときの話。他人のコードを読んだり、後で保守するときにヘッダー部分をみてもコンポーネントの依存関係がすぐに把握できず地味に困る。
## 対策
`iron-component-page`を使ってドキュメント化してもいいが、面倒なのでパス。そこで以下のようなコーディングルールを使うことにした。

~~~html:ヘッダー部分
<link rel="import" href="../static-import-element.html">

<!-- 
Lazy load
<link rel="import" href="../lazy-load-elememt.html">

Dynamic import
<link rel="import" href="../dinamic-import-elememt.html">
-->
~~~
これでヘッダーをみるだけですぐに依存関係が把握できる。

ただし、コードとコメントの同期が保たれないリスクが生じるので、インポート側にも変更時にはコメントを書き換えるように念のため注意書きしておく。
[Google Apps Script] 時限設定を隔週にする

毎週会議の前の決まった時刻に Google Apps Script の時限設定を使って Slack で定期通知していたところ、別の会議で隔週で通知して欲しいという要望があり、トリガーのオプションに隔週の選択肢がなかったので、スクリプト内でなんとかした話。

**この例では年末年始のような休暇時期は考慮していません**

## UNIX 時間

JavaScript では 1970 年 1 月 1 日 午前 0 時 0 分 0 秒から現在までカウントされている秒数を算出することができます。

```js
console.log(Math.floor((new Date()).getTime()/1000)); 
// 実行時の出力: 1494333017
```

これを元に UNIX 時間で今現在、何週目かを割り出してみます。

## UNIX 週を求める

UNIX 秒からさらに秒（60）、分（60）、時（24）、週（7）で割って、 UNIX 週を割り出します。

```js
var ut = Math.floor((new Date()).getTime()/1000);
var week = ut / 60 / 60 / 24 / 7;
console.log(week);
// 実行時の出力: 2047
```
2047 が返ってきました。閏年などは考慮していない算出方法ではありますが、一応確認

```js
// 年間の週数で割ってみる
var year = week / 52;
console.log(year);
// 実行時の出力: 47

// 週数の替わりに日数で割ってみる
var year = ut / 60 / 60 / 24 / 365;
console.log(year);
// 実行時の出力: 47 （同じ）
```
いずれも 47 が返ってくるので `1970 + 47 = 2017` で投稿時の年数と一致しています。

### 奇数と偶数を判別して実行する
やや、厳密ではないかもしれませんが、単に週数を求められればいいのでこの週数を元にして Google Apps Script に組み込んで参ります。

```js:postMessage.gs
// 関数は毎週実行される
function biweeklyPost() {
  var utw = Math.floor((new Date()).getTime() / 1000 / 60 / 60 / 24 / 7);
  var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN');
  var slackApp = SlackApp.create(token);
  var props = {
    channel: "#channel",
    message: "<!channel|channel> 明日は、○○ MTGがありますので、○○ の入力お願いします。",
    userName: "bot"
  }
  // 奇数と偶数を判別し、以下の例では奇数の週だけ Slack 側に通知を行う。
  if(utw % 2 == 1) { 
    slackApp.postMessage(props.channel, props.message, {
      username:props.userName
    });
  }
}
```
これで `biweeklyPost()` 自体は毎週実行されますが、 `postMessage()` は実行されないので、隔週の通知が可能になりました。もっといい方法がきっとあるはずですが、この方法でしばらく様子を見てみます。


#### 参考リンク
- [UNIX時間 - Wikipedia](https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93)
ciscoルータ操作備忘録

# ロール変更
```
# 特権モード
enable

# グローバルコンフィグレーションモード
configure terminal

# インターフェースコンフィグレーションモード
interface Ethernet 0/X
```

# IPアドレス設定（ルーター）
## 設定（コンフィグレーションモード）
```
interface Ethernet 0/X
 ip address ${IPアドレス} ${サブネットマスク}
 no shutdown
 exit
```
## 確認（特権モード）
```
# インターフェース一覧
show ip interface brief

# 0/Xポートのインターフェース詳細
show interfaces Ethernet 0/X
```

# スタティックルート設定（ルーター）
## 設定（コンフィグレーションモード）
```
ip route ${ネットワークアドレス} ${サブネットマスク} ${ネクストホップアドレス}
```
## 確認（特権モード）
```
show ip route
```


# VLAN作成（レイヤ２スイッチ）
## 設定（コンフィグレーションモード）
```
vlan ${vlanId}
 name ${vlanName}
 exit
interface Ethernet 0/X
 switchport mode access
 switchport access vlan ${vlanId}
 exit
```
## 確認（特権モード）
```
show vlan brief
show interfaces Ethernet 0/X
show interfaces status
```

# トランクポート作成（レイヤ２スイッチ）
## 設定（コンフィグレーションモード）
```
interface Ethernet 0/X
 switchport mode trunk
 switchport nonegotiate
 exit
```
## 確認（特権モード）
```
show interfaces trunk
```
Capybara で n 番目の要素をテスト


## はじめに
Capybara でフィーチャスペックを書いているのですが、
table タグを使っているページで「どこどこの td にはなにがしが表示されている」なんてのをテストしたくなり、ページの中の特定の td を指定してテストする機会があったので備忘録にするほどでもないのですが書いておきます。
## 実装
```◯◯.html.haml
%table
  %tr
    %th
    %td 最初の td
  %tr
    %th
    %td ２番めの td
```

めちゃくちゃ雑ですが、上記 html で最初の td に表示されているのが「最初の td」であることをテストする時には、

```◯◯_spec.rb
tds = page.all('td')

expect(tds[0]).to have_content '最初の td'
```
これでテスト完了
## まとめ
td は1ページで使う数も多い上に class とか id 振ってないことが多いので助かりました。
コンソールにプログレスバーと残り時間を表示(python)

#【追記】2017/05/10
表題の件について，[tqdm](https://pypi.python.org/pypi/tqdm)なるパッケージを紹介していただきました．試用したところ，自前でstdoutを叩くのがアホらしくなるくらい負荷が軽く以後愛用しそうです．

stdoutをループ処理する場合のオーバーヘッドが嫌いなので間引くのが面倒なのは勘弁って感じでしたが，まったくもって杞憂でした．おためしあれ．

https://pypi.python.org/pypi/tqdm

_tqdm.py見ればusageそのまんまですが，さっくり試用してみたい方へ
2.x系のひとはxrangeでどうぞ．

```python
> python -m pip install tqdm

>>> from tqdm import tqdm
>>>
>>> for _ in tqdm(range(0x100000)):
>>>     pass
```


以下は寄せていただいたコメントを除き，駄文となります．

# 進捗と残り時間の表示

学習用のトレーニングセットを成型する作業が数万件規模になって来たので，カウントダウンしてくれる機能が欲しくなってきた．
てきとうな実装を探してみても，なんか違うのででっちあげた．

```
> progbar.py
  24% |#######-------------------------|  0:12:06
 100% |################################|  0:00:00
```

終了予定の時間が可視化できたのでちょっと楽ちん．
機械学習のトレーニングループにも良い感じ．

# 仕様
* 繰り返し処理での利用を想定
* 進捗率から終了時間を概算
* 精度は気にしたら負け


# 実装
windows環境下でのみ動作確認．

```python:progbar.py
import sys, time

class progbar:
    def __init__(self, period=100, bars=32):
        self._period  = period
        self.bars     = bars
        self.active   = True
        self.start    = time.time()

    def dispose(self):
        if self.active:
            self.active = False
            self.update(self._period)
            sys.stdout.write("\n")

    def __del__(self):
        self.dispose()

    def __enter__(self):
        return self

    def __exit__(self, type, value, traceback):
        self.dispose()

    def period(self):
        return self._period

    def update(self, tick):
        rate = tick / self._period

        # progress rate
        str = "{0:7d}% ".format(int(rate*100))

        # progress bar
        bar_prog = int(rate * self.bars)
        str += "|"
        str += "#" * (            bar_prog)
        str += "-" * (self.bars - bar_prog)
        str += "|"

        # calc end
        elapsed = time.time() - self.start
        predict = (elapsed * (1 - rate) / rate) if not rate == 0.0 else 0
        s = int(predict)
        m, s = divmod(s, 60)
        h, m = divmod(m, 60)
        d, h = divmod(h, 24)
        str += "{0:3d}:{1:02d}:{2:02d}\r".format(h,m,s)

        sys.stdout.write(str)

def main():
    # how to use
    with progbar(500) as pb:
        for i in range(pb.period()):
            time.sleep(0.01)
            if i % 10 == 0:
                pb.update(i)
    
if __name__ == '__main__':
    main()
```

\# 時刻表示が力業ですな．
Qiitaの根本的におかしいところ

**そもそもナレッジベース作りたいのにブログに毛が生えた程度のサイト出してお前らの努力でナレッジベースにしろというのが頭おかしい。技術者としての資質を疑う。**

俺は1年以上前に同じことを指摘した(http://qiita.com/falsandtru/items/57eac039f7eeee1ceb7c )がQiitaさんは何も思うところがなかったらしい。