OmniAICreator/Qiita-1.07M huggingface dataset:
hub で GitHub にターミナルから issue、PR を作成する

## hub のインストール

brew でもインストールできるが `pre-release` ではなく issue や pull-request の一部のオプションが使えないので以下 URL から最新版をインストール。

https://github.com/github/hub/releases

## Issue を作成

```bash
# -a assignee
# -M milestone (ID)
# -m message
# -l label
$ hub issue create \
    -a "github_account" \
    -M 83 \
    -m "This is new issue" \
    -l "My Feature","WIP"
```

## Pull Request を作成

```bash
# -b branch name
# -m message
$ hub pull-request \
    -m "This is new Pull-Request" \
    -b feature/new_function
```

## ヘルプ

```bash
$ hub issue --help  

Usage: hub issue [-a <ASSIGNEE>] [-c <CREATOR>] [-@ <USER] [-s <STATE>] [-f <FORMAT>] [-M <MILESTONE>] [-l <LABELS>] [-d <DATE>] [-o <SORT_KEY> [-^]]
       hub issue create [-oc] [-m <MESSAGE>|-F <FILE>] [-a <USERS>] [-M <MILESTONE>] [-l <LABELS>]

$ hub pull-request --help

Usage: hub pull-request [-foc] [-b <BASE>] [-h <HEAD>] [-a <USERS>] [-M <MILESTONE>] [-l <LABELS>]
       hub pull-request -m <MESSAGE>
       hub pull-request -F <FILE> [--edit]
       hub pull-request -i <ISSUE>
```
Collectors.toMapで任意のMapクラスを返す

Collectors.toMapは通常、Mapクラスのインスタンスを返却します。

```java:Collectors.toMapの例
enum ENUM {
	ENUM_1
	,ENUM_2
	,ENUM_3
	,ENUM_4
	,ENUM_5
	,ENUM_6
}


Map<ENUM, Integer> map = Stream.of(ENUM.values())
		.collect(Collectors.toMap(
			e -> e
			,e -> e.ordinal()
		));
```

HashMap、LinkedHashMap、TreeMapなど、Mapクラスの任意の子クラスを返したい場合は、引数4つの Collectors.toMap を使えば可能になります。

```java:Collectors.toMap
toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier)
```

```java:Collectors.toMapでHashMapを返す例
HashMap<ENUM, Integer> map= Stream.of(ENUM.values())
		.collect(Collectors.toMap(
			e -> e
			,e -> e.ordinal()
			,(e1, e2) -> e1
			,HashMap::new
		));
```

Collectors.toMapでEnumMapを返したい場合ですが、EnumMapは引数なしコンストラクタを持ってません。この場合どう実装すれば良いかというと、コンストラクタ参照は無理なのでラムダ式で実装すればOKです。

```java:Collectors.toMapでEnumMapを返す例1
EnumMap<ENUM, Integer> map = Stream.of(ENUM.values())
		.collect(Collectors.toMap(
			e -> e
			,e -> e.ordinal()
			,(e1, e2) -> e1
			,() -> {
				EnumMap<ENUM, Integer> ret = new EnumMap<>(ENUM.class);
				return ret;
			}
		));
```

いろいろ省略すると以下の様に書くことも出来ます。

```java:Collectors.toMapでEnumMapを返す例2
EnumMap<ENUM, Integer> map = Stream.of(ENUM.values())
		.collect(Collectors.toMap(
			e -> e
			,e -> e.ordinal()
			,(e1, e2) -> e1
			,() -> new EnumMap<>(ENUM.class)
		));
```
自分の Qiita などでの公開リソースを一覧する

自分の Qiita などでの公開リソースを一覧する
===========================================

世の中に対してオープンに公開するソフトウェア系のリソースは、大昔は自らのサイトに集約して置いていましたが、最近は GitHub などのサービスが一般的になり複数のサービスにまたがって公開することが多くなりました。

そうすると、今度は自分のリソースがどのように公開されているのか、全体像が見えにくくなります。

そこで、リソースを置いている各サービスを巡回して情報を収集し、Web ページ１ページで全体を一望できるようにしてみました。

→[各サービスを巡回して情報を収集し一覧ページのHTMLを生成するスクリプト(homepage.rb)](https://gist.github.com/suchowan/68a2ae48474959a93da0604abd20ec14)


❶ 巡回するサービス
-------------------

巡回するサービスは、

・[RubyGems](https://rubygems.org/profiles/suchowan)
・[GitHub](https://github.com/suchowan)
・[Qiita](http://qiita.com/suchowan)
・[LinkData.org](http://user.linkdata.org/search?keyword=%E9%A0%88%E8%B3%80%E9%9A%86&category=all)

です。

原則としてマイ・ページ相当のページのHTMLを解析しますが、HTML で取得できない情報を REST API で補います。


❷ Qiita API
------------

Qiita に関しては、REST API を用いて記事の参照や更新ができるようになっています(→[Qiita API v2ドキュメント](http://qiita.com/api/v2/docs))。

```rb:qiita-api-doc.rb
require 'json'
require 'open-uri'
require 'pp'
pp JSON.parse(open('http://qiita.com/api/v2/schema?locale=ja', 'r', &:read)) #=>
# …
# "like"=>
#  {"description"=>"投稿につけられた「いいね！」を表します。Qiita:Teamでのみ有効です。",
#   "links"=>
#    [{"description"=>"投稿につけられた「いいね！」を作成日時の降順で返します。Qiita:Teamでのみ有効です。",
# …
# "user"=>
#  {"description"=>"Qiita上のユーザを表します。",
#   "links"=>
#    [{"description"=>"投稿をストックしているユーザ一覧を、ストックした日時の降順で返します。",
#      "href"=>"/api/v2/items/:item_id/stockers",
# …
```
上記のとおり、API からは Stock や Like を取得できますが、Like については Qiita:Team でのみ有効とのことです。

一方、逆に[マイ・ページ相当のページのHTML](http://qiita.com/suchowan)からは Like数は取得できますが、Stockユーザ数は取得できません。

そこで、主に HTML を解析する homepage.rb に REST API で stock を取得するメソッドを追加して情報を補うことにしました。

```rb:homepage.rb
# …
require 'json'
require 'rest-client'
# …

QIITA_API = RestClient::Resource.new('http://qiita.com/api/v2')

def stocks(id)
  JSON.parse(QIITA_API["/items/#{id}/stockers"].get.body)
end
# …
```

❸ 公開リソース一覧ページ
-------------------------

結果、出来上がった公開リソース一覧ページは、

　http://www.asahi-net.or.jp/~dd6t-sg/

の左フレームに嵌め込んで公開しています[^1]。


❹  Qiita への Contribution
-------------------------

本記事を書いている時点では、各 Qiita 記事の Like と Stock は、

　[機械学習関連ブックマークなど](http://qiita.com/suchowan/items/7fd43a5950170782b467)(2016-11-26)　Like:0, Stock:2
　[機械学習関連情報をトピックモデルで分類する](http://qiita.com/suchowan/items/a4231d1c63c835ae88e2)(2016-11-09)　Like:10, Stock:9

などで、その他の記事の Like と Stock は一致しています。

これには 2016年11月16日のQiitaの変更が影響しているようです。

2016年11月16日以前は Like がなく、Contribution は Stock数でカウントされていました。

2016年11月16日に Like が追加され、Contribution は Like数でカウントされるようになりました。
この際、2016年11月16日時点での Stock 数はそのまま Like数となりましたが、以降 Stock と Like は連動していません。

このため、2016年11月16日以降の公開である[機械学習関連ブックマークなど](http://qiita.com/suchowan/items/7fd43a5950170782b467)は Stock はされているものの Like はノーカウントとなっているわけです。

[機械学習関連ブックマークなど](http://qiita.com/suchowan/items/7fd43a5950170782b467)の主題である[bookmarks](https://github.com/suchowan/bookmarks)は、現在も逐次更新中で、いちばん手間もかかっているので、なんとか広く利用していただければと思っています。

[^1]: このフレームは動的に生成しているのではなく、適宜手動で更新しています。
Vuexが動かない古い端末に対しての対応

## 概要
> Androidの標準ブラウザというのがあってな…

というおじさん臭い話です。

## 現象
### 環境
| | バージョン |
|:-:|:-:|
| Android | 4.4.2 |
| Vue | 2.1.6 |
| Vuex | 2.1.1 |

このときに起きるエラーは以下の様なものです。
標準ブラウザなのでJavaScriptコンソールを開いてみると

```
Uncaught Error: [vuex] vuex requires a Promise polyfill in this browser.
```
とでています。
VuexではPromise使おうとしているけど、それがこのブラウザにはないよ、polyfill使ってね、という感じです。

## 対応方法
pollyfillって何を使えば良いんだろうとgoogle先生に聞いてみます、と以下2つぐらいがでてきました。

- https://github.com/vuejs-templates/webpack/issues/260
- http://stackoverflow.com/questions/40784305/vue-unit-test-error-vuex-requires-a-promise-polyfill-in-this-browser

どうも皆様karmaでうまくいかないようです。 ~~Android標準ブラウザなんかで困っている人なんて~~
以下のようにインストールしろと言っているので、入れているpollyfillはbabelのもののようです。今回もinstallするとうまくいきます。

```
npm install --save-dev babel-polyfill
```

### npmを使っていない場合
しかし、残念ながら私の環境ではnpmを使っていなかったのです。
その為 https://babeljs.io/docs/usage/polyfill/ の ```Usage in Browser``` にも書かれていますが、
vuexを読み込む前にこのpollyfillを読めば良いです。

pollyfillは適当に何処かで ```npm install``` をして ```node_modules/babel-polyfill/dist```に入っているpolyfill.min.jsからありがたくもらってきましょう。
[Linux] ネットワーク・インターフェースの有効化/無効化

eth0等のネットワーク・インターフェースの有効/無効の切替方法メモ

# 旧来の方法 (ifconfig, ifdown, ifup)
`ifconfig`か、`ifdown`, `ifup` という専用コマンドをつかえばよい

```console:ネットワークインターフェースの無効化
$ ifconfig eth0 down
or
$ ifdown eth0
```

```console:ネットワークインターフェースの有効化
$ ifconfig eth0 up
or
$ ifup eth0
```

# 今後の推奨だろうコマンド (ip, nmcli)
net-tools系のコマンドはどうも非推奨になっているらしい。`iproute2` パッケージ内のコマンドだと以下のようにする。

```console:ipの場合
$ ip l set eth0 up
$ ip l set eth0 down
```

```console:nmcliの場合
$ nmcli c down eth0
$ nmcli c up eth0
```

参考
[RHEL7/CentOS7でipコマンドをマスター - めもめも](http://enakai00.hatenablog.com/entry/20140712/1405139841)

# 参考
[Linuxコマンド集 - 【ifdown】ネットワーク・インターフェースを無効にする：ITpro](http://itpro.nikkeibp.co.jp/article/COLUMN/20140122/531526/)
[Linuxコマンド集 - 【ifup】ネットワーク・インターフェースを有効にする：ITpro](http://itpro.nikkeibp.co.jp/article/COLUMN/20140122/531524/)
[ネットワーク管理の基本Tips：NICの無効化／有効化、再起動を行うには？ ifdown／ifupコマンド - ＠IT](http://www.atmarkit.co.jp/ait/articles/1508/13/news015.html)
[RHEL/CentOSでネットワークインタフェースの起動が遅い原因を調べてみた - Dマイナー志向](http://d.hatena.ne.jp/tmatsuu/20121125/1353854378)
docker コンテナ上で Go のアプリケーションを開発しはじめるときの自分のやり方

docker コンテナ上で Go のちょっとした Web アプリを開発する機会があったのでメモしておく。
さいきん出た Go 公式の依存解決ツールである [dep](https://github.com/golang/dep) も使ってみた。

## 準備

```
$ mkdir sampleapp/
$ cd sampleapp/
```

Dockerfile 作成。

```
$ vi Dockerfile.dev
$ cat Dockerfile.dev 
FROM golang
WORKDIR ${GOPATH}/src/github.com/tily/sampleapp
RUN apt-get update -y && apt-get install -y vim
RUN go get -u github.com/golang/dep/...
```

コンテナ起動用のシェルスクリプト作成。

```
$ vi docker-dev.sh
$ cat docker-dev.sh 
docker build -f Dockerfile.dev -t sampleapp:dev .
docker run -ti --rm \
   -v $(pwd):/go/src/github.com/tily/sampleapp \
   --name sampleapp-dev sampleapp:dev bash
```

## コンテナ起動～開発

作成したシェルを起動すると、コンテナに bash でログインされる。

```
$ sh docker-dev.sh 
Sending build context to Docker daemon 18.43 kB
(略)
Successfully built da293a7c17fb
root@d53ab76aac81:/go/src/github.com/tily/sampleapp#
```

外部パッケージを参照したプログラムを書いてみる。

```
$ vi main.go
$ cat main.go 
package main

import (
        "fmt"
        "github.com/tily/gostrcrypt"
)

func main() {
        key := "CAFEBABECAFEBABE"
        sc := gostrcrypt.StrCrypt{key}

        plaintext := "hello, world"
        encrypted, err := sc.Encrypt(plaintext)
        if err != nil {
                panic(err)
        }
        decrypted, err := sc.Decrypt(encrypted)
        if err != nil {
                panic(err)
        }
        fmt.Println(decrypted) // => "hello, world"
}
```

dep init すると、`lock.json` と `manifest.json` というファイルが作成される。


```
root@d53ab76aac81:/go/src/github.com/tily/sampleapp# dep init
root@d53ab76aac81:/go/src/github.com/tily/sampleapp# cat lock.json 
{
    "memo": "db8cc0465eded21abba07d6f57dfae31577fa51c7f7fc356b50f9f09044b0715",
    "projects": [
        {
            "name": "github.com/tily/gostrcrypt",
            "branch": "master",
            "revision": "a03ae0a7729ca39026fb25d7c51b44db53b375a5",
            "packages": [
                "."
            ]
        }
    ]
}
root@d53ab76aac81:/go/src/github.com/tily/sampleapp# cat manifest.json 
{}
```

dep ensure すると、`vendor/` 配下に依存しているパッケージが保存される。

```
# dep ensure        
root@d53ab76aac81:/go/src/github.com/tily/sampleapp# dep ensure
root@d53ab76aac81:/go/src/github.com/tily/sampleapp# ls vendor/github.com/tily/gostrcrypt/
README.md  gostrcrypt.go  gostrcrypt_test.go
```

依存関係を解決して go run できるようになっている。

```
root@d53ab76aac81:/go/src/github.com/tily/sampleapp# go run main.go 
hello, world
```

## 開発を終えてコンテナを終了

ボリュームマウントしてあるので、コンテナを終了してもファイルの変更はホスト側に反映されている。

```
root@d53ab76aac81:/go/src/github.com/tily/sampleapp# exit
exit
$ ls
docker-dev.sh  Dockerfile.dev  lock.json  main.go  manifest.json  vendor
```

とりあえずこんな感じかなー。

## 追記 (2017/02/01)

はてブコメントをいただいていたので返信しておきます。

> http://b.hatena.ne.jp/fn7/20170131#bookmark-318703480
> docker使うメリットはなんだろ

ホスト側の環境を汚さずに何度でも作ったり壊したりできる開発環境が用意できるところじゃないですかねー。

> http://b.hatena.ne.jp/mapk0y/20170131#bookmark-318703480
> WORKDIR は自動で足りないディレクトリを順に作ってくれるはずだからわざわざ事前に作らなくても...

おー、無知ですみません。修正しました。
アニメーションなしに別のViewControllerに遷移する

ボタンを押すとすぐに遷移します。

| before | after |
| :---: | :---: |
| ![螢幕快照 2017-01-31 12.13.45.png](https://qiita-image-store.s3.amazonaws.com/0/15144/a825471e-536e-01d0-f532-cbd693ba53c7.png) | ![螢幕快照 2017-01-31 12.13.47.png](https://qiita-image-store.s3.amazonaws.com/0/15144/a66a3809-8742-524c-f394-7493ab07b57a.png)
 |

```swift:Swift
let storyboard = UIStoryboard(name: "Second", bundle: nil)
let secondViewController = storyboard.instantiateInitialViewController() as! SecondViewController
self.present(secondViewController, animated: false, completion: nil)
```

# コード例 (Xcode 8, Swift 3.0)

https://github.com/keisei1092/CallAnotherViewControllerPractice
PowerShellでWebサイトの入力項目をname属性で操作する

# はじめに
Webブラウザに入力する作業を自動化したい！！
でも、端末にSeleniumDriverインストールできない。
という環境で、PowerShellを利用して自動化を実現しました。

# やりたいこと
1. 所定のWebサイトを開く。
1. IDとパスワードを入力する。
1. ボタンを押す。

# 環境
- Windows7
- Internet Explorer11
- PowerShell2.0

# 操作対象Webサイト
操作対象のWebサイト(sample1.html)は、IDとパスワードと画面遷移用のボタンがあるシンプルな構成です。
ただ、すべてのタグにID属性が付いていません…

```sample1.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>PowerShellからWebサイト操作</title>
    </head>
    <body>
        <form name="auth" method="post" action="./sample2.html">
            認証ID：<input type="text" name="auth_id" value=""><br>
            認証パスワード：<input type="password" name="auth_password" value=""><br>
            <input type="submit" value="認証">
        </form>
    </body>
</html>
```

# PowerShellコード
Webサイトを操作するためのPowerShellのコードです。
ポイントは、getElementsByNameで取得したオブジェクトは配列としてアクセスしなければならない点です。
ID属性があれば、getElementByIdでオブジェクト取得できます。

```sample.ps1
# Internet Explorerを起動する。
$ie = New-Object -ComObject InternetExplorer.Application

# Internet Explorerを表示する。
$ie.Visible = $true

# Web画面へ移動する。
$ie.Navigate('.\sample1.html')

# ページが完全に切り替わるのを待つ。
while($ie.Busy) { Start-Sleep -milliseconds 100 }

# IE画面操作を行うためのドキュメントオブジェクト取得
$doc = $ie.document

# ID入力
$idElements = $doc.getElementsByName("auth_id")
# idElementsは複数取得されるので、1つしか要素がなくとも配列としてアクセスする必要がある
@($idElements)[0].value = "あいでぃ"
    
# パスワード入力
$passwdElements = $doc.getElementsByName("auth_password")
@($passwdElements)[0].value = "パスワード"

# ボタンクリック（IDもNameもないので、valueで判定）
$inputElements = $doc.getElementsByTagName("input")
Foreach($inputElement in $inputElements) {
    if ($inputElement.value -eq "認証") {
        $inputElement.click()
    }
}
```
  
# おわりに
今回はじめてPowerShell周りを調べてみたのですが、色々できて楽しいですね。
Windows10からはBash on WindowsでBash書けるようになるようですので、単純な繰り返し作業はどんどんShellScript化していきたいです。

# 参考サイト
http://stackoverflow.com/questions/28816216/powershell-programatically-set-input-field-by-name-in-ie
Javascriptで連想配列の各要素への処理

Reactにおいて、連想配列とObject.keys、mapを使って
プルダウンのオプションタグを生成する例。

## サンプルコード

```jsx:map.js
const data = {
	'book': '本',
	'phone': '電話',
	'box': '箱'
}

const options = Object.keys(data).map((value, index) => {
	return(
		<option key={index} value={index}>{value}</option>
	);
});

```


## 解説
### Object.keys
連想配列のキーを取り出してArrayで返却

### Array.map
Arrayの要素とキーを順番に取り出して、コールバック関数を実行
使用しているnpmのバージョンとそのリリース時刻を表示するシェルスクリプト

`node_modules`以下のパッケージのバージョンとそのリリース時間を表示させる雑シェル


```bash
#!/bin/bash

for f in `find ./node_modules -maxdepth 1 -type d | grep react-`; do
    v=`cat ${f}/package.json | jq -r .version`
    p=`echo ${f} | cut -d '/' -f 3`
    echo ${p}
    npm info ${p} time | grep "${v}" | tr -ds '}' ','
done
```

※ 上のは `grep react-` でフィルタ。

## 結果例

```bash
babel-preset-react-native
  '1.9.1': '2016-12-15T09:32:55.561Z'
eslint-plugin-react-native
  '2.1.0': '2016-11-17T18:46:08.523Z'
hoist-non-react-statics
  '1.2.0': '2016-06-17T17:52:35.684Z'
react-addons-create-fragment
  '15.4.2': '2017-01-06T20:15:37.051Z'
react-addons-perf
  '15.4.2': '2017-01-06T20:15:47.700Z'
```
WindowsのリモートデスクトップでCtrl＋Alt＋Delを送信する

リモート・デスクトップを全画面表示すると、あたかもローカル・コンピュータのようにリモート・コンピュータを操作できる。
ただし［Ctrl］＋［Alt］＋［Delete］キーは、ローカルで処理されてしまう。リモートデスクトップへの送信は、［Ctrl］＋［Alt］＋［End］キーを押す。
RAML1.0でAPI Documentを作成する

![スクリーンショット 2017-01-31 9.53.23.png](https://qiita-image-store.s3.amazonaws.com/0/4194/355836ff-7766-0202-4297-6b41df715441.png)

書いて見たらほぼこの記事と同じなったので、一旦この記事を見るで問題ない
http://qiita.com/takizawa-hiroki/items/4613a7520a6f6c6e5cd2

RAMLの0.8から1.0への破壊的変更だけはちゃんと見ておいた方がいい。

## チュートリアル

http://raml.org/developers/raml-100-tutorial
http://raml.org/developers/raml-200-tutorial

## 1.0の仕様

ネットの情報はだいたい0.8だが、差分は下記ドキュメントでだいたい埋まる

- [RAML1.0のドキュメント](https://github.com/raml-org/raml-spec/blob/master/versions/raml-10/raml-10.md/)
- [RAML0.8->1.0への破壊的変更を載せたドキュメント](https://github.com/raml-org/raml-spec/wiki/Breaking-Changes)

## 実行環境

初めからブラウザベースの補完なども利く高機能なエディターが用意されている

```
$ yarn global add api-designer
$ api-designer
```

swaggerにもswagger-editorというものがあるが、仕様でもErrorを吐くのでイライラして作業でいない。

## HTML Export

書いたら吐き出す。そのままramlファイルとしてはapi-designerからExportできる。
吐き出されたramlをhtmlに変換する。

```
$ yarn global add raml2html
$ raml2html -i api.raml -o api.raml
or
$ raml2html api.raml > api.raml
```

## サンプル

- 1.0のサンプル
    - [RAML all the REST APIs! – synsugar – Medium](https://medium.com/synsugar/raml-all-the-rest-apis-5ebc44204e5b#.4xj7v2ny8)
    - [sebastianhenneberg/sample-raml-api: Sample API specification in RAML 1.0](https://github.com/sebastianhenneberg/sample-raml-api)
- 0.8のサンプル
    - [RAML API Spec: Remote Medicine Example API](http://static-anypoint-mulesoft-com.s3.amazonaws.com/API_examples_notebooks/raml-design4.html)
    - [RAML API Spec: Notes Example API](http://static-anypoint-mulesoft-com.s3.amazonaws.com/API_examples_notebooks/raml-design3.html)
    - [RAML API Spec: Congo API For Drone Deliveries - Refactored](http://static-anypoint-mulesoft-com.s3.amazonaws.com/API_examples_notebooks/raml-design2.html)
windows8、プロキシ環境下でchocolateyを使ったメモ

初投稿です。  

windowsだったらbrewっぽいやつ、chocolateyを使ってみました。
結構いろいろなパッケージに対応していて便利です。

## 1. windows powershellの起動

- 管理者として実行すること

## 2. 現在のプロキシ設定を確認

```
netsh winhttp show proxy
```

## 3. プロキシ設定を行なう

```
netsh winhttp set proxy proxy-server="hoge.hoge.hoge:xxxx"
```

## 4. powershellにおいて、スクリプト実行の無効状態を解除する

```
# ↓を実行し、"Y"を選択する
Set-ExecutionPolicy RemoteSigned
```

## 5. chocolateyのインストール

```
# 詳細はこちら[https://chocolatey.org/install](https://chocolatey.org/install)のMore Install Optionsを参照のこと
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
```

## 6. 必要なアプリのダウンロード、インストール

```
# dotnet4.5.1 これがないとエラーが出た。事前にwindows updateを実行しておけばエラーは出ないかも
# reinstallは複数指定できないため、個別にchocho install -y --force xxx で
# powershellのコンソール内にカーソルを合わせてクリックすると、一時停止状態になる → ctrl + C で処理の再開
choco install -y dotnet4.5.1 chocolateygui jdk8 7zip git filezilla atom virtualbox google-chrome-x64 git winmerge treesizefree f.lux
```

## 7. あとはchocolateyguiを使ってよしなに

## (おまけ) インストールしたパッケージ全体の更新を行なう

```
chocolatey upgrade all -y
```
SlackでPrivateチャンネルにIntegrationsを設定するときの注意点

Privateチャンネルに設定されたIntegrationsは作った人以外は触れることができません
その人がTeamから離れるとDisableになったまま<span style="color:red; font-size: 200%">編集も削除もできなくなります</span>

↓ :pencil: マークがないのが触れなくなったやつ

<img width="720" alt="Screen_Shot_2017-01-31_at_09_41_11.png" src="https://qiita-image-store.s3.amazonaws.com/0/8581/bbb0dd06-f893-960d-08c9-6c86b7f3ab4d.png">

結論
---

Private chへのIntegrationsの利用は

* 基本使わないようにしましょう
* 設定した人がいなくなる時は設定を確認しておいて、必要なものは設定を聞いておいて不要な物は削除してもらいましょう
* どうしてもやる必要があるならば共通アカウントのようなものを使っておきましょう
Google Analyticsのおすすめカスタムレポート集


#カスタムレポートとは

カスタムレポートは細部を分析するものです。

たとえば「ページ別の AdSense クリック数と収益」や「曜日別・時間別の PV 数」なんかも作成することができます。

これによって、直接収益につながっていない記事を洗い出したり、何曜日の何時に更新すれば良いのかを探ることも可能になります。

#レポート集
下のリンクをクリックするだけで追加できますのでご利用ください。
##ページ分析レポート
https://www.google.com/analytics/web/template?uid=67gZy4g3RU-PXPVZWrg5Lg
##参照元分析レポート
https://www.google.com/analytics/web/template?uid=ubGlI7sfRqGfLBYsOnFowg
##日別分析レポート
https://www.google.com/analytics/web/template?uid=Fv4pQokRQli5cb9I5cbZSg
##ソーシャル分析レポート
https://www.google.com/analytics/web/template?uid=30vMJMEHSCaJOG2uTrp5Jg
##時間別分析レポート
https://www.google.com/analytics/web/template?uid=YNxOikQOTBqv1vC13Q7sZw
##曜日別分析レポート
https://www.google.com/analytics/web/template?uid=VvTuS7uaQk-280wiz-jUJw
##デバイス分析レポート
https://www.google.com/analytics/web/template?uid=G8ONThYmQD-g_WJPXHezUA
##リピート分析レポート
https://www.google.com/analytics/web/template?uid=DrMQFqBcRQ2uJpJaugpO5A
##地域分析レポート
https://www.google.com/analytics/web/template?uid=4W5d1ZCKR2eLDpnPotnjKA
##キーワード分析レポート
https://www.google.com/analytics/web/template?uid=E9z9bX-iRk2i05zCOScgJA
リファクタリング

リリースしてしまったが、次の開発では行いたいリファクタリング
自分用メモですが、ツッコミもお待ちしております。

#nameof演算子の使用
c#6.0から追加された新機能。
変数、型などの文字列名を取得するのに使用します。


```csharp
private void Multiply(int x, int y)
{
	if(x == 0)
	{
		//throw new ArgumentNullException("x","0が指定されました。")
		throw new ArgumentNullException(nameof(x),"0が指定されました。")
	}
}

```

上のコードのコメント行が従来の書き方ですが、
nameof演算子を使用することの何がいいかというと、nameof(x)のxがソースコードの解析対象になることです。
それによって、リファクタリング機能をつかってリファクタリングを行うことが出来るので、
変数名を変えた後に、「あれ、ここのエラーメッセージが違う！古いままだ！」となりません。

今回はこのnameof演算子の存在をすっかり忘れて実装していたので、次回はこのnameof演算子を使っていきたいと思います。
Rustをインストール - macOS & fish-shellの場合


# 結論

fish-shellではPATH変数は自動的に設定されません。手動で設定します。

```
set -U fish_user_paths $fish_user_paths $HOME/.cargo/bin
```

# 背景

## 標準手順

[Rust](https://www.rust-lang.org/en-US/index.html)は標準で以下のインストール手順を用意しています。

```
curl https://sh.rustup.rs -sSf | sh
```
https://www.rust-lang.org/en-US/install.html

これでインストーラーのダウンロードから実行までやってくれます。

インストールされた実行ファイルは`~/.cargo/bin/`に入ります。

`.profile`に次の行が追加されます。

```
export PATH="$HOME/.cargo/bin:$PATH"
```

`.profile`はログイン時に実行されるため、次回ログイン以降にPATH変数の設定が有効になります。[^1]

## fish-shellの場合

fish-shellは`.profile`を読みません。
また、PATHを設定するコマンドがbashとは違います。[^2]

一時的に設定する場合は

```
set -gx PATH "$HOME/.cargo/bin" $PATH;
```

永続的に設定する場合は

```
set -U fish_user_paths $fish_user_paths $HOME/.cargo/bin
```

です。

# 参考

- [PATH support doesn't work for fish shell · Issue #478 · rust-lang-nursery/rustup.rs](https://github.com/rust-lang-nursery/rustup.rs/issues/478)

一応、issueはあります。
fish-shellは、bashに比べればマイナーなシェルなので対応の優先順位は低いと思います。

[^1]: [.bash_profileとか.bash_loginとか.profileとか.bashrcとか.bash_logoutとか多すぎる  rderaログ](http://d.hatena.ne.jp/rdera/20080806/p1)
[^2]: [Fish Shellはじめました – bulblub](https://www.bulblub.com/2013/05/30/starting_fish-shell/)
続: Go入門したときに開発環境を考えた話

[Go入門したときに開発環境を考えた話](http://qiita.com/ababup1192/items/9c5572dfdf922e759d23)の続きです。

まず、やりたかったことの復習です。

- さっくり関数を書いて、単体テストを通すことでGoの勉強がしたい
- GOPATHに依存したくない
- 本コードとテストをキッチリ分けたい

前回の記事では、gbというビルドツールを導入することで一応の解決を迎えました。

その後コメントにて、shibukawa様からありがたいことに貴重なコメントを頂戴致しました。

<img width="781" alt="スクリーンショット 2017-01-31 8.40.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/48687/cc9b2b7b-f270-645c-bd4f-c744ab1bb410.png">

一番の驚きは、direnv([direnvを使おう](http://qiita.com/kompiro/items/5fc46089247a56243a62))の存在でした。これで、GOPATHの依存の不満は一気に解決しました。テストの流儀も指摘にあるように、IDE等の恩恵を得られなくなるのは、厳しいなと重い受け入れることとしました(複雑になったらモジュールを分けるなど、すればシンプルに保てそう？)

shibukawa様のアドバイスを元に早速構造を練り直してみました。

```
プロジェクトルート
├── .envrc
├── .gitignore
├── robo.yml
└── src
    └── sandbox
        ├── lock.json
        ├── manifest.json
        └── stringutil
            ├── reverse.go
            └── reverse_test.go
```

まず、```.envrc```がdirenvのための環境変数ファイルです。

```
$ cat .envrc
export GOPATH=`pwd`
```

はじめに、```dep init```を試したのですが、以下のようなエラーが出ました。GOPATH自体は通っているのですが、init場所として適していなかったようです。結論としては、```$GOPATH/src/[any package]``` 以下でないと、init出来ないようでした。パッケージ(github.com/user/)に依存関係があると考えると当たり前でした。今回(というより小さいサンプルを量産したい私にとって)は、sandboxという名前を使うのが習慣だったので、そちらを採用しました。

```
determineProjectRoot: /Users/abab/Desktop/go-sandbox not in any $GOPATH
```

改めて手順を書くと、

```
cd $GOPATH/src/sandbox
$ dep init
```

すると、lock.json、manifest.json　のファイルが生成されます。このdep中々素晴らしいツールで、依存関係があるようなコードを書いた後(今回は、テストコードでgospelを利用しました)、以下を実行すると、

```
$ dep ensure
```

自動的に依存パッケージをlock.jsonに書き込んでくれました！

```
$ cat src/sandbox/lock.json
{
    "memo": "973bc344957137b370558931392f7993dd258e75eede17df4a8772ecaa3b1635",
    "projects": [
        {
            "name": "github.com/r7kamura/gospel",
            "branch": "master",
            "revision": "d575dd12c2eb84612ae5c84fab56ccb4ce156a1e",
            "packages": [
                "."
            ]
        }
    ]
}
```

その後、テストを実行するとには以下のようにする必要があります。

```
$ go test sandbox/stringutil
ok      sandbox/stringutil      0.005s
```

これで、無事目的が達成された訳ですが、depの使用ディレクトリが限られてしまうのとテストパッケージを一々指定しなければいけないことが不満として残りました。以下のように実行すれば、まとめてテストを実行出来るのですが依存パッケージ(vendor以下)のテストも走ってしまう問題が発生しました。

```
$ cd $GOPATH
$ go test ./src/sandbox/...
ok      sandbox/stringutil      0.008s
ok      sandbox/vendor/github.com/r7kamura/gospel       0.009s
```

そうとなれば、後は不満を自分で埋める工夫が必要です。[robo](https://github.com/tj/robo)というタスクランナーを導入することで解決しました。内容は見てもらえればわかると思います。

```
$ cat robo.yml
init:
  summary: dep initialize
  command: |
    cd $GOPATH/src/sandbox
    dep ensure
    cd $GOPATH

test:
  summary: go test all (note; previous execute go init)
  command: |
    ls -F ./src/sandbox | grep / | grep -v vendor | awk '{system("go test sandbox/" $0)}'
```

最終的なsandboxコードは、[こちら](https://github.com/ababup1192/go-sandbox)になります。使い方は、こちらのようになります。

```
$ robo init
$ robo test
ok      sandbox/stringutil      0.006s
```

IDEAでも問題なく動作が確認できました。かなり満足の出来に仕上がりました！ ご指摘コメントありがとうございました。
C#でMicrosoft Graph API呼び出し(Botからの使用)

# 動機
Bot FrameworkでOffice365の会議室予約とかをするためにMicrosoft Graph APIを呼び出す必要があった。
**実際の開発では[Graph APIライブラリ](https://www.nuget.org/packages/Microsoft.Graph)があるのでそちらを使えばいいが、**テストコードを書いていてライブラリの導入をするほどでもなかったので自分で書いてみた。

# コード
``` CSharp
using (var client = new HttpClient())
{
  var url = "https://graph.microsoft.com/v1.0/me";
  client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
  var response = await client.GetStringAsync(url);
  JObject json = JObject.Parse(response);
  var hogehoge = json.GetValue("hogehoge");

  Console.WriteLine(hogehoge);
}
```
意外にはまったのがリクエストヘッダーにAuthorizationを追加するときに[Bearer]と実際のaccessTokenの間にスペースを入れる必要があるということ。

**！実際にプロダクトに組み込む際はHttpClientをusingで囲って生成と破壊を繰り返してはいけません！**
[参考][HttpClientをusingで囲わないでください](https://qiita.com/superriver/items/91781bca04a76aec7dc0)

# AccessTokenの取得
上のコードでAccessTokenも一緒に渡す必要があるので、APIを呼び出す前にAccessTokenを取得する必要がある。
詳しくは[ここ](https://graph.microsoft.io/ja-jp/docs/authorization/app_authorization#アクセス-トークンを取得する)に書いてあるが、Botからの認証方法は何がいいのか検索したところ[Magic codeを使用したBotからのユーザー認証](https://blogs.msdn.microsoft.com/tsmatsuz/2016/09/06/microsoft-bot-framework-bot-with-authentication-and-signin-login/)のページを見つけたのでMagic codeを使おうと思い、さらに検索したところ[AuthBot](https://github.com/MicrosoftDX/AuthBot)というライブラリを見つけたのでこれを使ってAccessTokenを取得した。
データサイエンス・チートシート(Python)

# データサイエンス・チートシート(6種)
Anaconda developer-blogより
[LEARNING PYTHON FOR DATA SCIENCE: CHEAT SHEETS](https://www.anaconda.com/blog/developer-blog/learning-python-data-science-cheat-sheets/)

## [1. Python Cheat Sheet](https://www.datacamp.com/community/tutorials/python-data-science-cheat-sheet-basics)
<img src="http://community.datacamp.com.s3.amazonaws.com/community/production/ckeditor_assets/pictures/157/content_button-cheatsheet1-2.png" width="300">

## [2. Numpy Cheat Sheet](https://www.datacamp.com/community/blog/python-numpy-cheat-sheet)
<img src="http://community.datacamp.com.s3.amazonaws.com/community/production/ckeditor_assets/pictures/329/content_content_button-cheatsheet-numpy.png" width="300">

## [3. Pandas Cheat Sheet](https://www.datacamp.com/community/blog/python-pandas-cheat-sheet)
<img src="http://community.datacamp.com.s3.amazonaws.com/community/production/ckeditor_assets/pictures/175/content_button-cheatsheet2.png" width="300">

## [4. Bokeh Cheat Sheet](https://www.datacamp.com/community/blog/bokeh-cheat-sheet-python)
<img src="http://community.datacamp.com.s3.amazonaws.com/community/production/ckeditor_assets/pictures/237/content_button-cheatsheet-bokeh.png" width="300">

## [5. Scikit-Learn Cheat Sheet](https://www.datacamp.com/community/blog/scikit-learn-cheat-sheet)
<img src="http://community.datacamp.com.s3.amazonaws.com/community/production/ckeditor_assets/pictures/294/content_button-cheatsheet-scikit_1.png" width="300">

## [6. Matplotlib](https://www.datacamp.com/community/blog/python-matplotlib-cheat-sheet#gs.fW3EuYM)
<img src="http://community.datacamp.com.s3.amazonaws.com/community/production/ckeditor_assets/pictures/405/content_content_button-cheatsheet-matplotlib.png" width="300">

## [その他](https://www.datacamp.com/community/search?utf8=%E2%9C%93&query=cheat+sheet)

## PuLPチートシート

[数理最適化モデラー(PuLP)](https://qiita.com/SaitoTsutomu/items/c0bbf6cf8873ccd7edf3)
[Unity] RectTransformで特定方向にStretchしているかをスクリプト上で判定する

## RectTranformにおけるStretch状態
### X軸に対するStretch
- 横幅は親の横幅に依存して引き伸ばされる
- PosXが指定出来なくなる代わりに、Right/Leftにマージンを指定可能になる
- AnchorsのXの値が Min:0 / Max:1 になる
- AnchorPresetsは以下のような状態になる (X軸が↔表示)

![stretchx.png](https://qiita-image-store.s3.amazonaws.com/0/102664/21bceb0e-2b47-a751-b34b-77762a143509.png)

### Y軸に対するStretch
- 縦幅は親の縦幅に依存して引き伸ばされる
- PosYが指定出来なくなる代わりに、Top/Bottomにマージンを指定可能になる
- AnchorsのYの値が Min:0 / Max:1 になる
- AnchorPresetsは以下のような状態になる (Y軸が↔表示)

![stretchy.png](https://qiita-image-store.s3.amazonaws.com/0/102664/ad7f009f-907b-ea9a-ed96-cc503ab8295c.png)

### XY軸に対するStretch
- 横幅、縦幅共に親に依存して引き伸ばされる
- AnchorsのX/Yの両値が Min:0 / Max:1 になる
- AnchorPresetsは以下のような状態になる (XY軸が↔表示)

![stretchxy.png](https://qiita-image-store.s3.amazonaws.com/0/102664/6c35d0bd-bfac-c215-307e-3631a392c137.png)

## Stretch状態の判定処理
- https://docs.unity3d.com/ja/current/ScriptReference/RectTransform.html
- Inspector上のAnchors:Minに該当する項目は RectTransform.anchorMin で取得できる
- Inspector上のAnchors:Maxに該当する項目は RectTransform.anchorMax で取得できる

```csharp:RectTransformOffsetChecker
using UnityEngine;

[RequireComponent(typeof(RectTransform))]
public class RectTransformOffsetChecker : MonoBehaviour
{
	void Start()
	{
	    var rectTransform = this.GetComponent<RectTransform>();
	    Debug.Log("anchorMin" + rectTransform.anchorMin);
        Debug.Log("anchorMax" + rectTransform.anchorMax);
	}
}
```

![image](https://qiita-image-store.s3.amazonaws.com/0/102664/efa59bd8-7879-9c16-7d5d-d81370851eb2.png)

### RectTransformを拡張して判定を行えるようにする

```csharp:RectTransformExtension
using UnityEngine;

public static class RectTransformExtension
{
    public static bool IsStretchedX(this RectTransform rectTransform)
    {
        return rectTransform.anchorMin.x == 0 && rectTransform.anchorMax.x == 1;
    }

    public static bool IsStretchedY(this RectTransform rectTransform)
    {
        return rectTransform.anchorMin.y == 0 && rectTransform.anchorMax.y == 1;
    }

    public static bool IsStretchedXY(this RectTransform rectTransform)
    {
        return rectTransform.IsStretchedX() && rectTransform.IsStretchedY();
    }
}
```

```csharp:RectTransformOffsetChecker
using UnityEngine;

[RequireComponent(typeof(RectTransform))]
public class RectTransformOffsetChecker : MonoBehaviour
{
	void Start()
	{
	    var rectTransform = this.GetComponent<RectTransform>();
        Debug.Log("IsStretchedX" + rectTransform.IsStretchedX());
        Debug.Log("IsStretchedY" + rectTransform.IsStretchedY());
        Debug.Log("IsStretchedXY" + rectTransform.IsStretchedXY());
	}
}
```

![image](https://qiita-image-store.s3.amazonaws.com/0/102664/92dcd553-cc04-360d-4071-bb4d03ca7ed6.png)
Cognos BI のレポートでツールチップを表示する

Cognos BI & Analyticsでツールチップ(Tooltip)を表示できるレポートの作り方です。

##実現イメージ
こんな感じに、製品画像にカーソルをあてると、製品の説明が表示されます。
![008.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/d2324d15-2524-65cb-3180-fc2308ee417b.png)



##レポートの作り方
CognosサンプルのGOデータウェアハウス(クエリー)パッケージを使用しています。
リストを配置し、製品、製品画像、数量を図のように置きます。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/eb42f229-2194-6c68-4e16-5e10b45d0d6b.png)

ツールバーの赤枠の鍵マークをクリックして鍵を外し、HTMLアイテムを図のように製品画像の左右に並べます。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/33067e45-6e94-1676-cb75-4b518fc07a20.png)

左端のHTMLアイテムの定義です。
\<span title =
と記述してください。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/f62f745c-c7cb-9df3-e3c9-594e1a684ecf.png)

クエリーエクスプローラーから、クエリー1を開き、製品の説明を加えてください。
![004.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/fd61166c-2a71-527d-a2b4-fe2b00e8981e.png)

左から2番目のHTMLアイテムのプロパティで、図のように以下を選択します。
ソースのタイプ：データ・アイテムの値
データ・アイテムの値：製品の説明
![005.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/a2638c72-34c5-f13d-6227-bacaeb4a7e7a.png)

左から3番目のHTMLアイテムの定義です。
\>
と記載してください。
![006.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/3d366307-bb03-26a3-40ae-3d2a551435c2.png)

最後に画像の右側のHTMLアイテムの定義です。
\</span>
と記載してください。
![007.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/10761735-300e-4b61-38dc-2956db2d6fec.png)

以上で完成です。

簡単に作れるので、是非ご活用下さい。
機械学習論文読みメモ_35


[Fast and Guaranteed Tensor Decomposition via Sketching](https://papers.nips.cc/paper/5944-fast-and-guaranteed-tensor-decomposition-via-sketching.pdf), NIPS2015
Tensor CANDECOMP/PARAFAC (CP) decompositionはSVDの一般化でテンソルに適用可能にしたものである。
本論では、count sketchingの手法に基づいた高速で確率的なCP decompositionを提案する。
Count sketchingは計算オーダーが対象とする行列の非ゼロ要素数に依存する手法で、sketch行列の列番号をランダムに割り当て、和を取る事で縮約する方法である。
提案手法はFFTによるテンソル縮約を行う事で、具体的なテンソル計算を回避する。
またcolliding hash関数を用いる事で効率的なsketching計算を行う。
さらにpower iterative techniquesとwhitening手法を組み合わせる事で高速なアルゴリズムを開発した。
この手法は密、または疎な行列双方に適用可能である。
近似誤差はスパース性や要素の一様性などに依存しない。

[Efficient Compressive Phase Retrieval with Constrained Sensing Vectors](https://arxiv.org/pdf/1507.08254.pdf), NIPS2015
Compressive phase retrieval問題を扱う。
この問題は大きさの観測値よりそれを発生させた潜在的なスパースベクトルを復元する問題である。
従来手法は、sample complexityが最適ではなく、またロバスト性が獲得出来ていなかった。
またスパース性と低ランク性の双方を仮定した場合の手法は難しい。
提案手法では、それぞれ一貫しない部分空間からランダムにsensingベクトルを選ぶことで、効率的にスパース要素と低ランク要素を分離する。
そしてスパース部と低ランク部に分けて２段階の凸計画問題を逐次的に解くことでスパースベクトルは再構成される。
この手法はSample complexityが条件を満たせば、精度の高い予測が可能である。

[Frank-Wolfe Bayesian Quadrature: Probabilistic Integration with Theoretical Guarantees](http://www2.warwick.ac.uk/fac/sci/statistics/staff/research_students/briol/together.pdf), NIPS2015
最近では積分計算を推論問題として捉え直す動きが出てきている。
従来手法ではGPを用いて積分推論をするBayesian Quadratureがあるが、理論的な保証がない。
本論では、理論的な収束保証が可能な積分推論の手法としてFrack-Wolfe Bayesian Quadratureを提案する。
本手法は積分値の事後分布に関して指数的な収束が可能である。
機械学習論文読みメモ_34


[Bayesian Manifold Learning: The Locally Linear Latent Variable Model](https://papers.nips.cc/paper/5973-bayesian-manifold-learning-the-locally-linear-latent-variable-model-ll-lvm.pdf), NIPS2015
多様体座標系と局所線形写像が、近傍点間の相関で条件付けされるような非線形多様体学習のための確率モデルとして、locally linear latent variable model(LLLVM)を提案する。
本モデルは、与えられたデータに対して、潜在変数で条件つけされた観測確率分布の事後分布を直接変分最適化する事を可能にする。
また本モデルは従来の決定的な多様体学習モデルであるlocally linear embdeddingのように局所的な幾何構造を保存するようなモデル化を行っている。
本モデルは確率モデルであるため、近傍点間の関係の柔軟な評価、潜在的次元数の選択、out-of-sample拡張、多様体構造を反映した新たな確率モデルの追加、などが可能になる。

[Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting](https://arxiv.org/pdf/1506.04214.pdf), NIPS2015
短期間の降水量履歴から将来の降水量を予測する問題を考える。
本論ではこれを時空間モデルとして捉え、入力、予測データともに時空間シーケンスを持つとする。
従来手法であるfully connectedなLSTMに対し畳み込み構造を入力対状態、前状態対後状態、において持つようにしたconvolutional LSTMを提案する。
従来手法に比べ予測性能が向上した事を実験で確認した。

[Learning with Symmetric Label Noise: The Importance of Being Unhinged](https://papers.nips.cc/paper/5941-learning-with-symmetric-label-noise-the-importance-of-being-unhinged.pdf), NIPS2015
Convex potential minimizationは２値分類問題において標準的に用いられる手法である。
Convex potentialは予測値と真値の内積を用いて損失関数を定義するもので、凸、非増加、微分可能な関数である。
しかしながら、symmetric label noise(SLN)がある場合、学習モデルの予測性能はランダム予測と変わらないものとなってしまう事が証明されている。
この結果はconvex potentialがSLNに対してロバストではない事を示しているようにみえる。
しかし本論で、適切なキャリブレーションを行った損失関数を用いる事でSLNにロバストな損失関数を得る事が可能である事を示した。
提案した損失はヒンジロスと修正して０でヒンジがかからないものであり、つまりnegatively unboundedである。
この損失による最適値は、強い正則化が課されたSVMと同様のものとなり、また二階微分可能なconvex potentialに対する結果となる。
これはL2正則化を用いる事でほとんどのSLNが存在する場合の学習においてロバストな学習が実現できるという事である。
機械学習論文読みメモ_33


[Mind the Gap: A Generative Approach to Interpretable Feature Selection and Extraction](http://people.csail.mit.edu/beenkim/papers/BKim2015NIPS.pdf), NIPS2015
データのクラスタリングを扱う。
Mind the Gap model(MGM)と呼ばれるinterpretableな特徴抽出、選択モデルを提案する。
Interpretability criteriaを導入する事で、MGMはinterpretabilityに関するパラメータ、logical expressionによる表現とそれに伴う次元削減、と、distinguishable dimensions、複数クラスタ間を良く分離するような次元、の直接選択を同時に可能にする。

[Barrier Frank-Wolfe for Marginal Inference](http://cs.nyu.edu/~rahul/papers/KriJulSon_nips15.pdf), NIPS2015
MRFの最適化手法を提案する。
グラフ構造を木構造に近似して信念伝搬法で解くtree-reweighted(TRW)手法がある。
木構造制約はペアワイズ制約(local polytope)として課せられ、変分推論的にmarginal polytope制約として最適化する手法が提案されてきている。
そのための手法としてFrank-Wolfe methodを用いる方法もある。
しかし今回の問題を解くに際してはFrank-Wolfe methodはいくつか問題があり、例えば計算量の問題であったり、収束の問題であったりする。
本論ではそれら問題に対応するための修正されたFrank-Wolfe methodを提案し、その収束性も示した。
この手法はfeasible setの境界付近においてill-posedな挙動を示す場合に有用である。

[A Universal Catalyst for First-Order Optimization](https://pdfs.semanticscholar.org/a81b/61b0c39db6ae5c0efbaac911ff0b1d8dc0e5.pdf), NIPS2015
Nesterovが提案したaccelerated proximal point algorithmに基づいて、新たなaccelerateされた１次オーダー最適化の一般的手法を提案する。
凸最適化問題に対して、選ばれた高速で解く事が可能な補助問題のシーケンスを解く事で近似最適化する。
この手法は勾配法を含む様々な最適化手法に適用可能であり、強凸性を持たないケースにも対応可能である。
機械学習論文読みメモ_32


[Weighted Theta Functions and Embeddings with Applications to Max-Cut, Clustering and Summarization](http://mllab.csa.iisc.ernet.in/nips2015/weighted_lovasz.pdf), NIPS2015
本論はLovasz theta functionの一般化を行い、それに関連したグラフの幾何埋め込みを提案する。
Lovasz theta functionはノイズが乗るような通信において、信頼性を持って送る事のできる情報量の上限を示し、特にどの信号値ペアがノイズで判別不可になりやすいかの依存関係を示すconfusion graphに対して定義される。
Confusion graphは各頂点に関して単位ベクトルを定義し、それらが隣接していない場合に直交するようにした、orthogonal representationに置き換え可能で、その表現を用いてLovasz theta functionを計算可能である。
本論ではこれを拡張し、エッジとノード双方に重みがある場合のグラフに関してもtheta functionを計算できるようにした。
また対応する幾何埋め込みをSVMの要領で可能にした。
提案された新たなtheta functionはグラフの拡散性を示し、この指標を用いる事で相関クラスタリングを可能にした。
また応用として重み付きMax-Cut problemを半正定値計画問題として解く事を可能にした。

[Nonparametric von Mises Estimators for Entropies, Divergences and Mutual Informations](https://papers.nips.cc/paper/5911-nonparametric-von-mises-estimators-for-entropies-divergences-and-mutual-informations.pdf), NIPS2015
ノンパラメトリックなstatistical functionalsに関する予測器を解析、提案する。
提案する予測器はvon Mises expansionとinfluence functionに基づいて成り立つ。
Von Mises expansionは、真の分布とそこからのサンプルとで計算されるstatistical functionの間の微小誤差を展開表現したものである。
Influence functionはvon Mises expansionで得られる結果に関して、真の分布が微小変化した際の影響の大きさを測るものである。
提案する予測器は、data-splittingあるいはleave-one-out法のどちらにおいても早い収束と理論的な特性を得る獲得する事ができた。
提案する予測器を用いていくつかの一般的な情報論的量の予測を行える事を示した。

[Synaptic Sampling: A Bayesian Approach to Neural Network Plasticity and Rewiring](https://papers.nips.cc/paper/5952-synaptic-sampling-a-bayesian-approach-to-neural-network-plasticity-and-rewiring.pdf), NIPS2015
本論では、spiking neural network(SNN)のplaticityを解析した。
SNNの各シナプスのパラメータに対する事後確率からのサンプリングにより、placiticityを実現しそれによる確率推論を可能にする。
従来のML推定に基づくアプローチと異なったBayesianなアプローチとなる。
機械学習論文読みメモ_31


[Deep Structured Energy Based Models for Anomaly Detection](https://arxiv.org/pdf/1605.07717.pdf), ICML2016
深層構造を持つenergy based model(EBM)を提案し、それによりデータ分布を直接学習して異常検知へ応用する。
提案するモデルはstatic, sequential, spatialデータに適用可能なEBMの構造を持たせられる。
Score matching法による最適化を利用する事でEBMとdenoising autoencoderを接続し、denoising autoencoderと同様の最適化を可能にし、従来のサンプリングベースの手法に頼る事なく最適化を行える。
エネルギー関数の観点から、妥当な異常検知指標を利用可能である。
あるいは再構成誤差に基づく異常検知指標も利用可能である。

[Markov Latent Feature Models](http://www.columbia.edu/~az2385/docs/zp16_icml.pdf), ICML2016
逐次シーケンスで構築されていくような特徴に対するモデルとしてスパース潜在変数モデルであるmarkov latent feature model(MLFM)を提案する。
Indian buffet process等の従来手法は、各潜在状態間に条件付き独立を過程する事で得られるexchangability（de Finetti定理）を利用する事で効率的に学習を実現した。
本モデルでは特徴間に相関がある場合を考察する。
つまり、各状態は対応する潜在変数に関連付けられ、また２つのnull状態の間で抽出された特徴シーケンスは観測と関連付けられるとする。
このような確率過程を、提案するモデルは再帰的なマルコフ連鎖の混合モデルとして表現する。
このモデル表現を利用する事で、スパースコーディングにおいて相関する潜在変数を用いたモデルを実現する事ができる。
このモデルはパラメトリック、ノンパラメトリック双方で定義され、変分推論に基づく効率的な学習アルゴリズムも提案した。

[Practical and Optimal LSH for Angular Distance](https://arxiv.org/pdf/1509.02897.pdf), ArXiv
Angular distanceに関するlocality sensitive hashing(LSH)が存在する事を示し、その実用的なモデルを提案する。
理論的な保証が得られている手法、spherical LSH、は計算効率が悪く現実的ではない。
逆に実用的な手法、hyperplane LSH、は理論的な保証が悪いオーダーに留まるが、実際は良い性能を発揮しやすい。
本論ではこうした理論と実際のギャップを埋めるような最適な手法を提案する。
それはhyperplane LSHの改善により成り立つ。
Lightningコンポーネント (Controller)

####属性の参照 (cmpはコンポーネントオブジェクト)
`<aura:attribute name="attrName" type="String" />`
`cmp.get('v.attrName');`
####属性のセット
`cmp.set('v.attrName', 'value');`
####カスタムラベルの取得
`var staticLabel = $A.get("$Label.c.task_mode_today");
`
####ログインユーザーIDの取得
`$A.get("$SObjectType.CurrentUser.Id");`
技術英語 > As before, offsets go 0, 1, and so on [from the start to the right], and -1, -2, and so forth [from the end to the left].

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic
(No. 937 / 12833)

> As before, offsets go 0, 1, and so on **<font color=red>from the start to the right</font>**, and -1, -2, and so forth **<font color=red>from the end to the left</font>**.

リスト内の方向を表す時に使いそう。

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

> from generation to generation

http://ejje.weblio.jp/content/from+generation+to+generation
ブラウザ別 CustomEvent の発火方法

## TL; DR
推奨される方法は IE が対応していないので、環境によって呼び分ける必要があります。

- Internet Explorer
  - `document.createEvent` + `initCustomEvent`
- その他のブラウザ
  - `CustomEvent`

## 概要
アプリケーションで使う目的で、任意の名前のイベントを DOM から発行できる機能として `CustomEvent` があります。`CustomEvent` を使うと、任意の名前のイベントを使ってデータの受け渡しが可能です。

`CustomEvent` は、ブラウザの拡張機能を作る際、ウェブページと拡張機能のサンドボックス間のデータ受け渡しなどに利用されています。

## Internet Explorer 向け
IE では `CustomEvent` という名前はグローバルに定義されていますが、コンストラクタが未実装なため別の手法を取ります。IE では `CustomEvent` のコンストラクタを呼び出すと例外が発生するため、例外発生時のフォールバックとして以下の処理を用いると良いでしょう。

`element` は発火対象の要素に置き換えてください。

```js
var detail = { foo: 1 }; // イベントの引数
var event  = document.createEvent('CustomEvent');
event.initCustomEvent('eventName', false, false, detail);
element.dispatchEvent(event);
```

### 参考
- https://developer.mozilla.org/ja/docs/Web/API/Document/createEvent
- https://developer.mozilla.org/ja/docs/Web/API/CustomEvent/initCustomEvent

## その他のブラウザ 向け
IE 以外のブラウザは `CustomEvent` コンストラクタを呼び出します。IE と同じ `initCustomEvent` を使った方法も動作しますが、非推奨とされています (参考リンクの MDN 参照)。

```js
var detail = { foo: 1 }; // イベントの引数
var event  = new CustomEvent('eventName', { detail: detail });
element.dispatchEvent(event);
```

### 参考
- https://developer.mozilla.org/ja/docs/Web/API/CustomEvent/CustomEvent

## すべてのブラウザで動作させるように記述する場合
対応していないブラウザで失敗した場合、別の処理にフォールバックさせれば、すべてのブラウザで動作させることができます。

```js
var detail = { foo: 1 }; // イベントの引数
var event;

try {
  event = new CustomEvent('eventName', { detail: detail });
} catch (e) {
  event = document.createEvent('CustomEvent');
  event.initCustomEvent('eventName', false, false, detail);
}

element.dispatchEvent(event);
```
今月で終了する客先常駐においての振り返り

久しぶりの投稿。結局2週間くらい開けてしまっているのは本当に反省。
その間にもたくさん学べたことはあったが、それらは後々アウトプットする。
今回は客先常駐が一区切りつくということで本案件における振り返りを行う。


##本案件において
###ぶっちゃけコーディング力成長なし
本案件ではすでに雛形があったり、毎年更新するサイトの運用ということもあるので、あまり新しく作成するという機会がそもそもなかった。正直コーディングというよりは一部分をコピペして一部修正したり、すでに作成済みのものをでバックするという作業がほとんどだったので、ぶっちゃけコーディングという業務を行ったかというとやってないと言える。

###どちらかというと専門用語を学ぶことができた
自分自身本案件が客先常駐初ということもあるので、技術はおろかIT用語すら理解していないというレベルだった。それこそ*ブラバリ*とか*タゲブラ*すら知らなかったレベル。そう考えると、この業界で働くにあたり基本中の基本を少なからず学べたのかなという印象がある。

###結論としては経験できてよかった
初めてということもあるので、学ぶことしかない気もするが、それでも実際に客先常駐を行うことができたのは自分にとって良い経験になったと思う。実際に仕事がどういう雰囲気なのかを感じることができたし、流れとしてはこんな感じなのかと肌で感じることができたのが一番大きい。また開発を行なっていくにあたり、*Backlog*や*Git*、*FTP*といったツールを実際にさわれたのも大きい。それぞれ調べたりしてなんとなくわかった気になっていた部分もあったけど、実際に触ってみることでこんなことができるのかと知ることもできたから。

ただ単純にコーディング力を鍛えたいと思うのなら、客先常駐先で取得しようと思わないこと。自宅などでの自主学習に尽きるのだなと感じた。

###しかし休むことなく・・・
本社の営業からいきなりの面談をガンガン組まれる。案件も会社も全く知らず、「今日の夜面談やりますけど大丈夫ですか」とか「明日仕事午前休とって面談いけますか」とかぶっこまれる。せめて前日の連絡ならわかるが、それを当日の夕方、または夜遅くにいきなり送ってくるのは本当にやめてほしい。実力低いくせにそんなこと言うなと言われるかもしれないが、こっちのモチベーションも少しは考えて欲しい。

そんなことをする理由としては本社の業務体系とかに理由があるんですけどね。
そこについても記載していければと思う。

あー早く自社開発に携わりたい。
vscode を ubuntu に .deb で install したら実行ファイルがどこにあるか探して手 symlink を貼る必要があったメモ

# 概要

[vscode](https://code.visualstudio.com/) を ubuntu に .deb で install した。

公式サイトの stable の .deb パッケージを `dpkg -i` で install したので `code` が適当な bin に作られてすぐに使えるかと思ったが、`/usr/local/bin` や `/usr/bin` には vscode と思われる実行ファイルや関連ファイルが見当たらなかったので少しインストール作業に手作業を追加メモ。

- Note: この記事の手順が必要無いバージョンもあるようです。コメントのディスカッションも参考にして下さい。

# .deb パッケージでインストールされた vscode はどこにあるのか？

`dpkg -L code` で `code` を含む `dpkg` が管理するインストール済みのファイルがわかる。

![image](https://qiita-image-store.s3.amazonaws.com/0/33891/a896c487-4185-a79a-9ab1-1697b5684ca3.png)

と、いうわけで vscode の公式 `.deb` パッケージを install すると全てのファイルは `/usr/share/code` に入っているとわかる。実行ファイルは `/usr/share/code/code` 。

（以下、追記。詳細はコメントのディスカッションを参照。）

しかし、実際にユーザーが実行すべきファイルは `/usr/share/code/code` ではなく、その実行をラップしたシェルスクリプトが `/usr/share/code/bin/code` に入っているのでそちらから実行すると良い。

# /usr/local/bin に symlink を配置して実行し易くする

```zsh
cd /usr/local/bin
sudo ln -s /usr/share/code/bin/code
```

（↑前項の追記に基づき /usr/share/code/bin/code に修正済み。詳細はコメントのディスカッションを参照。）

これで `dpkg -i` によりシステムに install された .deb パッケージの vscode は、このシステムのユーザーなら `code` だけで実行可能になる。もちろんお馴染みの IDE が起動する。

![image](https://qiita-image-store.s3.amazonaws.com/0/33891/8aa065ba-8e03-37b5-07c6-9362614fafa5.png)
Redmine の「ウォッチャーの追加」ダイアログでユーザーをグループ、ロール、カスタムフィールドでフィルタする

# 対象

* Redmine : 3.3.2
* クライアント : Linux, Firefox 51.0.1

# やったこと

プラグインを更新した。

"redmine_watcher_filter"
https://github.com/ayweak/redmine_watcher_filter

# スクリーンショット

![watcher_dialog.png](https://qiita-image-store.s3.amazonaws.com/0/38075/53af3abb-f203-0fa1-7a6d-09018cb4e91c.png)

# TODO

* しっかりテストしていない。バグがありそう。
* 処理に無駄がありそう。

# その他

カスタムフィールドでのフィルタは `LIKE LOWER(%keyword%)` を使う。検索キーワードは `sanitize_sql_like` で処理している。
一方、元からあるユーザー名、ログインID、メールアドレスのフィルタは `sanitize_sql_like` で処理されていない。
違いがあって紛らわしいかもしれない。

検索するカスタムフィールドは `CustomField.visible` を使って判断している。
システム管理者の場合は非表示のカスタムフィールドも検索対象になる。
使いにくいかもしれない。
sshの公開鍵のフォーマット変更

なんかよく知らない形式の鍵をもらってどうしたもんかと思って調べた。
ssh-keygenのメモ。

#### ssh-keygenで鍵のフォーマットの変更をする
<!--more-->
```
##test_rsa.pub中身

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDK4MEG2EklU6k3OtRaVlJC2ytd3rRIyuQ3HzBCHU8rNDDyal2Tdmmt0oJGFAgYBcsgG/DwcGElM9yGxMQaertKyv6kpus//l7N3/r5eQO2efi9eaikVDZ+GC3aN+AjgVVT4t8ZkWyyi8/UimgaO8lqC0IQK0L5Ez+dGdbLrvqnbemCAf3rkHnX/BkAEGLY7jm9ZT6o5SShHC9QcC9V4mTOrg9ZChJsLdr3FbsUJqraw5gEN4AqqgHzADngoggywH7dBlrLk6JZmYUVVE0XKeYCIUGiPchyiXS/s+0xLZi4kqM4/YkJDTuc2krf8q6UEhIeR6UWWJsSr/1MYHeD29z/ kyagi@katsumi-no-MacBook-Pro.local
```

この公開鍵を


```
ssh-keygen -f test_rsa.pub -e -m pem
```


こうすると

```
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAyuDBBthJJVOpNzrUWlZSQtsrXd60SMrkNx8wQh1PKzQw8mpdk3Zp
rdKCRhQIGAXLIBvw8HBhJTPchsTEGnq7Ssr+pKbrP/5ezd/6+XkDtnn4vXmopFQ2
fhgt2jfgI4FVU+LfGZFssovP1IpoGjvJagtCECtC+RM/nRnWy676p23pggH965B5
1/wZABBi2O45vWU+qOUkoRwvUHAvVeJkzq4PWQoSbC3a9xW7FCaq2sOYBDeAKqoB
8wA54KIIMsB+3QZay5OiWZmFFVRNFynmAiFBoj3Icol0v7PtMS2YuJKjOP2JCQ07
nNpK3/KulBISHkelFlibEq/9TGB3g9vc/wIDAQAB
-----END RSA PUBLIC KEY-----
```

こうなる。
ぎゃくにする場合は、

```
ssh-keygen -i -f filename
```

とすれば、デフォルトのフォーマットのrsaに変換できる。
ssh-keygenの-mオプションで指定できるのは

- rfc4716(rsa)
- pkcs8
- pem

で、デフォルトはrsaになっている。
Marp(Markdown Presentaiton)の文法まとめ

# ■ Marpにいて

MarkdownでPDF形式のプレゼンテーションファイルを作成できるフリーソフト。

特色は、

* 日本製 ( [株式会社Speeeの若手エンジニアによる開発](https://thinkit.co.jp/article/10486) )
* 機能がシンプルなので、使いやすい
* Zipファイルを解凍するだけなので、導入が簡単

https://yhatt.github.io/marp/#

※ 2017-06 「Marp v0.0.10 およびそれ以前」に
脆弱性が発見された模様、最新版へアップデートが必要
https://scan.netsecurity.ne.jp/article/2017/06/29/39903.html

---

# ■ スライドの書き方


```md

Markdownで文章を記述↓

# スライドタイトル1

* 例1
* 例2
* 例3

↓ 次のスライドを作成
----

# スライドタイトル2

* 例1
* 例2
* 例3

```

----

# ■ ディレクティブ

特定書式に従って記載することによって、
特別な表現を行うことできるMarpの特別機能。


書式は下記のようになっている。


```md

* 単一の場合
<!-- ディレクティブ1の名前: ディレクティブの値 -->

* 複数を纏めて記載する
<!--
ディレクティブ1の名前: ディレクティブの値
ディレクティブ2の名前: ディレクティブの値
.
.
.
-->
```

---

## ● テーマ

スライドに下記のように記載する。
初期から入っているのは、
Default(白)とGaia(クリーム色）だけ。

```html
* 書式
<!-- $theme: テーマ名 -->

* Defaultテーマ
<!-- $theme: default -->

* Gaiaテーマ
<!-- $theme: gaia -->
```


----

## ● 高さ、幅

スライドの高さと幅を設定。

単位は下記のものが対応している。

* `px` (デフォルト)
* `cm`
* `mm`
* `in`
* `pt`
* `pc`

```html
* 書式
<!-- $width: 長さ|単位 -->
<!-- $height: 長さ|単位 --> 

* センチメートル
<!-- $width: 12cm -->

* ミリメートル
<!-- $height: 14mm --> 
```

----


## ● 縦横比

スライドの縦横比を決める

* `4:3`
* `16:9`
* `A0`-`A8`
* `B0`-`B8`
* `-portrait`.

```html
* 書式
<!-- $size: 縦横比 -->

* 16:9
<!-- $size: 16:9 -->
```

----


## ● ページ番号

trueを設定するとスライドの下部にページ番号が設定される。

```html
* 書式
<!-- paginate: 真偽値 -->

* ページ番号有効
<!-- paginate: true -->

* ページ番号無効
<!-- paginate: false -->
```


## ● フッター

設定するとスライドの下部にフッター文字列が設定される。


```html
* 書式
<!-- footer: フーター文字列 -->
```

----

## ● templateディレクティブ


位置づけがよく分からないが、下記のように書く。

背景と``` ```で囲んだブロック部分のテーマの配色が逆転する。

```html
<!--
$theme: gaia
template: invert
-->
```

----

## ● プリレンダ

trueを設定すると、バックグラウンドで背景画像を事前に読み込む(キャッシュ)するらしい。


```html
* 書式
<!-- page_number: 真偽値 -->

* プリレンダを有効
<!-- prerender: true -->
```

----

## ● ディレクティブを現在のスライドにのみ適用する

ディレクティブ名の前に、*を付けると現在のスライドにのみ設定が有効になる。
*がない場合は、ディレクティブを記載した以降の全てのスライドにディレクティブの設定が反映される。

```
*ディレクティブ名: ディレクティブの値
```

----

## ● 画像

```html
* 画像を挿入
![](画像ファイルパス)

* 画像の大きさをスライドサイズの比率で指定する
![比率%](画像ファイルパス)

* 背景画像を挿入
![bg](画像ファイルパス)

* 背景画像の大きさをスライドサイズの比率で指定する
![bg 比率%](画像ファイルパス)

* 背景画像を連続して書くと水平方向（横）に分割される 
![bg](画像ファイルパス)
![bg](画像ファイルパス)

```

----

## ● 絵文字

Qittaでも使える絵文字に対応している。

全てに対応しているわけではないようだ。


```md
* :heart:
* :soccer:
* :arrow_up_down:
* :exclamation:
* :end:
* :calling:
* :shield:
```

* :heart:
* :soccer:
* :arrow_up_down:
* :exclamation:
* :end:
* :calling:
* :shield:


https://www.webpagefx.com/tools/emoji-cheat-sheet/

# ■ 数式

数式は`KaTeX` 形式で記載する


```html
$$I_{xx}=\int\int_Ry^2f(x,y)\cdot{}dydx$$

```

$$I_{xx}=\int\int_Ry^2f(x,y)\cdot{}dydx$$


![undefined]()
js オブジェクトの集まりが"truthy"であるか判定する

##お題
オブジェクトの集まり(第一引数)に項目(第二引数)が"truthy"であるか判定する。各オブジェクト全てで"truthy"であれば真を返す。
*truthy 真として振る舞う値("falsy" な値であるfalse,undefined,null,0,NaN,''以外)

```js
function truthCheck(collection, pre) {
//write your code.
}

truthCheck([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex");
//true
```

##出力結果　例

```js
truthCheck([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex") //false

truthCheck([{"name": "Pete", "onBoat": true}, {"name": "Repeat", "onBoat": true, "alias": "Repete"}, {"name": "FastFoward", "onBoat": true}], "onBoat") //true

truthCheck([{"single": ""}, {"single": "double"}], "single") //false

truthCheck([{"single": "double"}, {"single": NaN}], "single") //false
```

##つかったもの
hasOwnProperty()
Boolean()
for in

##考え方
・真を返すオブジェクトをカウントする変数を用意する。
・hasOwnProperty()でオブジェクトが第二引数を持っているか判定する
・Boolean()でオブジェクトの第二引数のプロパティが"truthy"であるか判定する
・上記二つにあてはまるかfor...in文で各オブジェクトにたいして実行する
・あてはまった場合、カウンターを増やしていく
・カウンターの数とオブジェクトの数が一致すれば全てのオブジェクトが"truthy"と言える。
その場合、真を返しておわり。

##コード

```js
function truthCheck(collection, pre) {
  var counter = 0;
  for (var c in collection) {
    if (collection[c].hasOwnProperty(pre) && collection[c][pre]) {
      counter++;
    }
  }
  return counter == collection.length;
}
```


##その他コード

```js
function truthCheck(collection, pre) {
  return collection.every(function (element) {
    return element.hasOwnProperty(pre) && element[pre];
  });
}
```

###他にもコードが浮かんだ方、コメントお待ちしております。