OmniAICreator/Qiita-1.07M huggingface dataset:
機械学習論文読みメモ_56


[Generation and Comprehension of Unambiguous Object Descriptions](http://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Mao_Generation_and_Comprehension_CVPR_2016_paper.pdf), CVPR2016
画像とそれに対するobject bouding boxを入力とし、それに対する曖昧な説明を出力する、あるいは、曖昧な説明といくつかのregion proposalを入力し、具体的なregionを選択するモデルを提案する。
従来手法と比較して、対象としている物体以外の物体も考慮に入れる事で、性能の改善を可能にした。

[How to Evaluate the Quality of Unsupervised Anomaly Detection Algorithms?](https://arxiv.org/pdf/1607.01152.pdf), ICML2016WS
異常検知の評価では、多くの場合十分なラベルが与えられていないため、ROCやprecision-recall curveなどの利用は難しい。
そのためラベルに頼ることなく評価を行う手法が求められている。
本論ではそうしたラベルに頼らない手法を提案し、経験的にアルゴリズム間評価が可能な事を示した。
この手法はExcess-Mass、Mass-volume curveといった、level set estimation系の手法に基づいている。

[Learning Granger Causality for Hawkes Processes](http://jmlr.org/proceedings/papers/v48/xuc16.pdf), ICML2016
Granger causality、時系列データにおいて以前の観測と同じパタンが将来観測されるような因果性、を一般的な点過程において学習する事は難しい。
本論では、Hawkes process、直前のイベント発生に影響されて発生確率が変化する点過程、においてgranger causalityを学習する手法を提案する。
特に、過去イベントの影響力を表すimpact functionとイベント間の時系列因果関係を示すGranger causality graphとの間の関係性に注目する。
これにより、モデルのimpact functionは基底関数表現を行い、またcausality graphにおける因果をimpact functionに基づいたgroup lassoで表現する事で、group lasso制約付き最尤推定問題として扱える。
またこのモデルを利用する事でイベントのクラスター構造も取り入れ可能である。
機械学習論文読みメモ_55


[On Multiplicative Integration with Recurrent Neural Networks](https://arxiv.org/pdf/1606.06630.pdf), NIPS2016
RNNを改善するための構造としてMultiplicative Integration(MI)を提案する。
MIを利用する事で、新たなパラメータを導入する事なく、異なったソースからの情報を処理し統合していく事が可能になる。
LSTMやGRUといった一般的な構造にMIを導入する事が可能である。

[An Embedding Approach to Anomaly Detection](http://mashuai.buaa.edu.cn/pubs/icde2016a.pdf), ICDE2016
構造的な異常箇所を発見するための手法としてネットワーク異常検知手法は一般的である。
検出された異常そのものが与える情報を得るためだけでなく、ネットワーク構造の非一貫性がデータ内に介在する事によりデータマイニング手法などでは大きな障害となりうる事より、その検出は重要となる。
そうした背景を元に、本論ではソーシャルネットワークなどで、大きなコミュニティー（集合）へリンクを持つノードに関して、構造的な非一貫性を持つものを検出する手法を提案する。
この手法は新しく提案するネットワーク埋め込み手法を利用し、次元削減手法と組み合わせて使われる。

[Strongly-Typed Recurrent Neural Networks](https://arxiv.org/pdf/1602.02218.pdf), ICML2016
RNNは複雑な構造を持っており、それを簡単な構造を用いて近似する事は難しい。
本論では物理学と、関数型プログラミングの手法を導入する事でその道程を描く。
物理の分野からは、型制約（メートル次元のものを測度次元のものへ足し合わせない）の導入を行う。
関数型プログラミングの分野からは、strongly typedな構造を考え、それは状態変数に依存しない（汎関数的な？）stateless learnwareと
そうでないstate-dependent firmwareに分解可能であり、各因子の意図しない副作用を低減させる事ができる。
Dynamic average poolingを通して、提案するモデルは理解可能である。
またstrongly typedなgradientは従来のネットワーク構造に関するgradientよりもその挙動が改善され、またネットワーク自体の表現力を示す事ができる。
結果、訓練、汎化誤差を下げる事が出来た。
コマンドライン版NuGetを利用してローカルで.nupkgファイルを利用する方法

筆者はWindows 10 x64に.Net Core SDK 1.0.1(x64)をインストールしています。
コマンドライン版nuget.exe(v4.0.0)を　https://dist.nuget.org/index.html からダウンロードしてPathを通しています。

#.nupkgファイルを作成する
NuGet パッケージを作って公開する - しばやん雑記(http://blog.shibayan.jp/entry/20110306/1299422776) を参照してください。

#.nupkgファイルをローカル環境でインストールする
.nupkgファイルを作成しただけでは他のプロジェクトにインストールすることはできません。
目的のプロジェクトフォルダに.nupkgファイルを置いてnuget installしてもダメです。

C:\\Users\\(ユーザー名)\\AppData\\Roaming\\NuGet\\Nuget.config に変更を加えればローカルの.nupkgファイルからnuget installできるようになります。

```Nuget.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="(任意のアルファベット列)" value="file://C:/(任意のフォルダ)/>
  </packageSources>
</configuration>
```

ただ、WindowsならVisual Studio 2017入れた方がいいです
PythonでLINEに通知を送る



バッチなどで日々のKPIを自動で集計した内容をすぐ確認できるようにしてみる。今回はLINEへ通知する方法。とても簡単

１．まずは下記にアクセスし、ログインした上で通知を行いたいチャットに対してアクセストークンの発行を行う。

https://notify-bot.line.me/ja/


![image](https://qiita-image-store.s3.amazonaws.com/0/41877/0df70058-1706-4064-0938-a0732ded4b35.png)


２．発行されたアクセストークンをメモして（1回しか表示されないらしいので注意。コピーし忘れたら一旦提携を解除してもう一度発行しなおせばＯＫ）

３．以下のコードを追加

```python
import requests

line_notify_token = 'アクセストークン'
line_notify_api = 'https://notify-api.line.me/api/notify'
message = '通知したい内容'


payload = {'message': message}
headers = {'Authorization': 'Bearer ' + line_notify_token}  # 発行したトークン
line_notify = requests.post(line_notify_api, data=payload, headers=headers)

```
ansibleで冪等性を保証しながらファイルが存在しない場合のみ空ファイルを作る

単純にtouchすると、毎回touchされて鬱陶しかったので。

```yaml
- name: Check iptables log file
  stat:
    path: /var/log/iptables/iptables.log
  register: iptables_log

- name: Create iptables log file
  file:
    path: /var/log/iptables/iptables.log
    state: touch
  when: iptables_log.stat.exists == false

- name: Set attribute for iptables log file
  file:
    path: /var/log/iptables/iptables.log
    owner: syslog
    group: syslog
    mode:  0600
```
Android StudioでRunすると実機に反映されるがレイアウトが崩れている


質問失礼いたします。

このたびAndroid Studioを初めて使ったのですが、掲題の件で困っております。

![Screenshot_2017-03-24-12-51-44.png](https://qiita-image-store.s3.amazonaws.com/0/171143/880e0d3e-3059-0b3c-6ff4-a513124b2ddb.png)

具体的には画像を見てもらえればと思うのですが、Android StudioのDesing上のレイアウトと実機で表示されるレイアウトが異なってしまっております。
実機では、ボタン等がすべて左上に寄ってしまっております。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/171143/943cf48c-e0ea-2fd6-4c5a-dc0d454e6a1a.png)

よろしくお願いいたします。
CentOSでPhantomJSの起動ができない

#概要
CentOSにmysql 5.7/Anaconda/PhantomJSをインストールしたが、
PhantomJSの起動でつまづいたのでメモ

#事象
以下の手順でPhantomJSをダウンロードした。

```
$ wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
$ tar xfv phantomjs-2.1.1-linux-x86_64.tar.bz2 
$ mv phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/
```

で、バージョン確認してみると

```
$ phantomjs -v
phantomjs: error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory
```

shared object fileがないから開けねーよと言われてる・・・

#原因
libfontconfig.so.1ってのがないっぽい？
と思って[ldd](http://itpro.nikkeibp.co.jp/article/COLUMN/20140127/532486/)を打ってみる。

```
$ cd /usr/local/bin
$ ldd phantomjs 
	linux-vdso.so.1 =>  (0x00007fff2e763000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f6535657000)
	libfontconfig.so.1 => not found
	libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007f65353b0000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f65351ac000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f6534fa4000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6534d87000)
	libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f6534a7f000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f653477d000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f6534566000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f65341a5000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f6535876000)
```
大変だ・・・not foundだ・・・

#解決

```
$ sudo yum -y install fontconfig-devel
```

これで入ったはず。

```
$ ldd phantomjs
	linux-vdso.so.1 =>  (0x00007fffec3fe000)
	libz.so.1 => /lib64/libz.so.1 (0x00007fdf71119000)
	libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007fdf70edc000)
	libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007fdf70c35000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fdf70a31000)
	librt.so.1 => /lib64/librt.so.1 (0x00007fdf70829000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fdf7060c000)
	libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fdf70304000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fdf70002000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fdf6fdeb000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fdf6fa2a000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fdf71338000)
	libexpat.so.1 => /lib64/libexpat.so.1 (0x00007fdf6f800000)
$ phantomjs -v
2.1.1
```

OK!!!
decodeしようとしたらAttributeError


どうやら配列に対してはdecodeできないらしい。しょうがないので
ひとつひとつ取り出してdecode
```
AttributeError: 'list' object has no attribute 'decode'
```
参考：
http://d.hatena.ne.jp/r_onodr/20120103/1325607565
Rails4でRiot.js(3.3)が動く環境を構築する

# 実行環境

* Ruby on Rails 4.2.0
* Riot.js 3.3.2

# 前提
あらかじめNode.jsがローカルにインストールされていること。<br>
`$ node -v` を実行してバージョンが表示されればOK。

## 1. npmを使ってriotをインストールする
`$ cd (Railsプロジェクト直下のディレクトリ)`

### プロジェクト直下にpackage.jsonがない場合は下記を実行
`$ npm init`

=> 基本Entで進み、package.jsonが作成される

### packeage.jsonを編集
scripts, devDependenciesの箇所にriotを記載。<br>
今回riotのバージョンを指定したが、しなくてもOK。編集が終わったら保存。

```
{
  "name": "(プロジェクト名)",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "riot": "riot"
  },
  "devDependencies": {
    "riot": "3.3.2"
  },
  "private": true
}
```

### フロントエンド系のソースをまとめたいのでプロジェクト直下にディレクトリを作成
`$ mkdir ./frontend`

### package.jsonを`/frontend` 以下へ移動する
`$ mv ./package.json frontend/`

### npmを使ってriotをインストール。
今回このプロジェクトのみにインストールしたかったのでgオプションはつけませんでした。
また、指定のディレクトリ以下にインストールしたかったのでprefixオプションをつけました。

`$ npm install --prefix ./frontend/`

frontend以下にetc, node_modulesディレクトリが作成された！<br>
この時点でfrontend以下はこのようなディレクトリ構造になっていると思います。

```
frontend/
├── etc
├── node_modules
├── package.json
└── riot
    ├── sample.tag
```

## 2. RailsでRiot.jsを使うためにソースをDLしてきて配置する
gemもあるようだけど、うまく動かなかったので[Riotの公式サイト](http://riotjs.com/ja/)からソースファイルをDLしてきて利用することにした。

### curlコマンドでcompilerが含まれたmin.jsファイルをDLしてくる。
公式サイトの[GitHub](https://github.com/riot/riot)から、riot+compiler.min.jsを取得する。RawボタンからリンクするページのURLを指定すること〜。

oオプションをつけるとこの名前で保存するという指定ができる。

`$ curl https://raw.githubusercontent.com/riot/riot/master/riot%2Bcompiler.min.js -o ./vendor/assets/javascripts/riot.js`

### application.jsに追記し、上記のソースが読み込まれるようにする。

app/assets/javascripts/application.js

```
（省略）
//= require riot
```

これで環境構築は完了！

## 3. サンプルファイルを配置し、コンパイルを実行
### tagファイルを作成
`$ mkdir frontend/riot`
`$ touch frontend/riot/sample.tag`

公式サイトで配布されている[サンプルコード](http://riotjs.com/play/)をコピーし、sample.tagとして保存

```
<sample>
  <h3>{ message }</h3>
  <ul>
    <li each={ techs }>{ name }</li>
  </ul>

  <script>
    this.message = 'Hello, Riot!'
    this.techs = [
      { name: 'HTML' },
      { name: 'JavaScript' },
      { name: 'CSS' }
    ]
  </script>

  <style>
    :scope { font-size: 2rem }
    h3 { color: #444 }
    ul { color: #999 }
  </style>
</sample>
```

### html.erbファイルを作成
ブラウザで確認出来るviewファイルの<b>bodyタグ内に</b>sampleタグを配置し、mountする処理を書く。<br>
（例）app/views/articles/index.html.erb

```
<!-- place the custom tag anywhere inside the body -->
    <sample></sample>
<!-- mount the tag -->
    <script>riot.mount('sample')</script>
```

### コンパイルを実行し、tagファイルからjsファイルを作成
`$ ./frontend/node_modules/.bin/riot ./frontend/riot/ app/assets/javascripts/riot/`

↑については下記のような意味<br>
[npm内のriotファイル] [tagファイルがあるディレクトリを指定] [jsファイルを作成したいディレクトリを指定]

## 4. 実行
ブラウザで上記のhtml.erbファイルを確認すると、、<br>
Riotのコードが正しく実行されている（このサンプルの場合はsample.tagで設定した内容が表示されている）ことが確認出来る！

## 5. 諸々コミット対象から外しておく
node_modules以下、tagファイルはコミット対象に入れない方がベターなので、.gitignoreに追記しておく。
.gitignore

```
（省略）
/frontend/node_modules/*
/app/assets/javascripts/riot/*
```
Xquartzのアンインストール

##
Xquartzをインストールしたら設定が諸々変わってて困ったからちゃんとアンインストールするためのコマンド

```
#Xquartzの自動起動を停止
launchctl unload /Library/LaunchAgents/org.macosforge.xquartz.startx.plist
sudo launchctl unload /Library/LaunchDaemons/org.macosforge.xquartz.privileged_startx.plist

#作成されたファイルを削除
sudo rm -rf /opt/X11* /Library/Launch*/org.macosforge.xquartz.* /Applications/Utilities/XQuartz.app /etc/*paths.d/*XQuartz

#パッケージのインストール情報を削除
sudo pkgutil --forget org.macosforge.xquartz.pkg
```
sublime3でPython Flake8 Lintを導入したときのE301警告がうざいので無視する設定を行う


Python Flake8 Lintを導入した際に、TABがスペースになっていないとPEP8に準拠していないので警告される。

本当はsublime自体のセッティングで
「"translate_tabs_to_spaces": true」
にすれば、スペースに変換されるのでＯＫなんだけど、TSVファイルとか扱うときにいちいちまたタブに変換しなきゃいけないのが面倒なのでpackageセッティングのところで

```
	// skip errors and warnings (e.g. ["E303", "E4", "W"])
	"ignore": ["W191"],
   ```
   のように設定して警告をスルーするように設定を変更
ipythonでベン図を描こうと思ったらImportError


とある分析でベン図を使用して複数の要素の関連性を見ようと思い、テストやるためにipythonを起動して

```python
#!/usr/bin/env python3
import pylab as plt
from matplotlib_venn import venn3, venn3_circles

v = venn3(subsets=(1,1,0,1,0,0,0))
v.get_label_by_id('100').set_text('First')
v.get_label_by_id('010').set_text('Second')
v.get_label_by_id('001').set_text('Third')
plt.title("Not a Venn diagram")
plt.show()
```
を実行したら
```
ImportError: No module named 'matplotlib_venn'
```
anacondaで全部入れてたと思ってたら、どうやら「matplotlib_venn」は入っていなかった様子

なのでipythonを一旦閉じて、cmdで
```
pip install matplotlib_venn
```
でインストールし、もう一度実行しなおしたらいけました。

pip install 便利～

って思ったらベンズのcirclesってMAXでも3つまでなんだ。。。。
Rubyで作るクローラー

# 導入

SaaS サービスって便利ですよね
便利すぎて次々新しいのが出てきますよね
新しくて、安くて、高機能だったらSaaSサービス移行したくなりますよね
移行する時にデータも移行したいですよね
でもAPIも無いし、エクスポート機能も無いし。。。
そんな時のお話しです

# 標準的なRubyで作るクローラー

[Rubyによるクローラー開発技法](http://amzn.to/2nXHs4z)とかあるじゃないですか（※ 読んだことない）
それ以外にもWebに転がってる情報は大体

・Nokogiri
・open-uri
・Anemone

とか使ってるのですが、今回はそれを使いません

# 今回のRubyで作るクローラー

[selenium-webdriver](https://rubygems.org/gems/selenium-webdriver/versions/2.53.0)を使います
端的に言うと、ブラウザが立ち上がるのでJavaScriptバリバリのページでもクロール出来るんですよね
そう。今回はJavaScriptバリバリのページのクロールです

## 作成物

```rb:Gemfile

source 'https://rubygems.org'
ruby '2.3.1'

gem 'selenium-webdriver'
```

```rb:main.rb
require 'bundler'
Bundler.require

driver = Selenium::WebDriver.for :firefox

url = 'https://www.yahoo.co.jp'

driver.get url
driver.quit
```

とかなんとかそんな感じ

## 苦戦した点

今回、Macで動かしたのですが、最初こちらのブラウザでためそうとしました
```rb
driver = Selenium::WebDriver.for :chrome
driver = Selenium::WebDriver.for :safari
```

しかし、何故かJavaScriptが動かない。
具体的にはクリックすると発生する`$.ajax`のイベントが動かない

この問題の解決に時間をかけるより別ブラウザでやった方が納期に間に合う！

って理由でどんどんブラウザを変えていきました

幸い、3つめで`$.ajax`が動いたのでよかったです

エンジニアとしてはとっても気持ち悪いですが、
有料SaaSサービスだったので翌月課金が発生する前にクロールが出来たのでよかったです
【やっとわかった！】gitのHEAD^とHEAD~の違い

**20190502追記**

- わかりにくい表現を修正しました
- 「おまけ」を追加しました

**追記ここまで**


# そもそもHEADとは
現在チェックアウトしているブランチの先頭を指す。
ブランチの切り替えという動作は、「HEADの移動＋ワークスペースのファイルの更新」で成り立っています。
詳しくはこちらを参照ください。→ [Git のブランチ機能 - ブランチとは](https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%81%AF)



#~　(チルダ)
~世代前のコミットを指定できる。

# ^ (キャレット)
複数ある親コミットのなかからコミットを指定できる。

# 絵にしてみる

### チルダ
![スライド3.JPG](https://qiita-image-store.s3.amazonaws.com/0/45528/9794dcd3-8292-b05f-b559-c9db6eac1b0d.jpeg)
チルダ指定をすることで、コミットをさかのぼって指定ができます。
HEAD<sup>~</sup>と指定することで、HEADに対して1世代前のコミットを指定でき、HEAD<sup>~~</sup>と指定することでHEADの2世代前のコミットを指定できます。

### キャレット
![スライド2.JPG](https://qiita-image-store.s3.amazonaws.com/0/45528/6942118f-9b9b-5089-ef7d-a9752196cc9d.jpeg)

キャレット指定をすることで、複数親がいる場合に、親コミットを指定できます。
複数親がいる状況は、2つのコミットをマージしたときに起きます。
HEAD^と指定することで一つ目の親を指定でき、HEAD^2と指定することで2つ目の親を指定できます。

# HEAD<sup>~~</sup>とHEAD<sup>~2</sup>は同じだけど、HEAD^^とHEAD^2は違う

HEAD<sup>~~</sup>とHEAD<sup>~2</sup>は同じコミットを指しますが、HEAD^^とHEAD^2はそれぞれ違うコミットを指します。

![スライド4.JPG](https://qiita-image-store.s3.amazonaws.com/0/45528/b3a808df-5c2b-5f7a-9085-0d6be3e5659e.jpeg)

HEAD^2はHEADの2つ目の親を指しますが、HEAD^^はHEADの一つ目の親の一つ目の親を指します。
一方、HEAD<sup>~~</sup>とHEAD<sup>~2</sup>はどちらもHEADの2世代前のコミットを指します。

##おまけ
右上付き文字を書けなくて、「HEAD~」と表していたんですが、ちゃんと「HEAD<sup>~</sup>」と書けるようになりました！
以下のように書くことで、右上付き文字が書けます。

```
HEAD<sup>~</sup>
```

参考：http://danpansa.blog.jp/archives/21332987.html

ただし、以下の2点がこの表記だとうまくいきません。

- 記事のタイトル(タイトルはHEAD~のままです)
- 見出し中で「~~」を右上付き文字しようとしたらうまくいきませんでした。いったん「~ ~」のように間にスペースを入れた状態で保存して、その後スペースを消したらなぜかうまくいきました
【Visual Studio Code】特定のファイルだけタブのスペース数が違うとき

VisualStudioCodeのTipsです。

ほかの人が新しく追加したファイルのインデントが4スペースになっていたので2スペースにするためにフォーマットをかけましたが修正できない、ということが起こりました。
確かに、タブを打つと4スペース入ってしまいます。
私の環境では2スペースにしてあるはずなので、`editor.tabSize`の設定を確認しました。
ちゃんと`2`となっています。
他のファイルではタブは2スペースとして入力されます。

調べてみると、以下の設定をする必要がありました。

```json
"editor.detectIndentation": false
```

`editor.detectIndentation`が`true`になっていると、開いたファイルに基づいて`editor.tabSize` と `editor.insertSpaces`が決まってしまいます。
`editor.detectIndentation`はデフォルトで`true`となっています。


このファイルを新規作成した人が、タブを4スペース設定で使っていた、かつ、私の環境で`editor.detectIndentation`が`true`になっていたので、私の環境でもこのファイルのみタブが4スペースになってしまっていました。
`editor.detectIndentation`を`false`にしてフォーマットをかけたところ、きちんと修正できました。


設定方法
1. VisualStudiCode左上の「ファイル」>「基本設定」>「設定」→エディタ部分に「settings.json」が開く
2. エディタ右側に「"editor.detectIndentation": false」を書き、保存する
    ![settings.PNG](https://qiita-image-store.s3.amazonaws.com/0/45528/73fe2b1b-4973-742f-0621-3aeca8ca40ab.png)
Terraform入門 - RDSのパスワード自動生成

# 概要

TerraformでRDSを立てる時にPasswordに入れる値ってどうしてますか？

# 方法

主には[terraform/variables](https://www.terraform.io/intro/getting-started/variables.html)に書いてある方法

1. 環境変数で渡す方法
    * export TF_VAR_secret_key=bar
    * -var 'secret_key=bar'
1. 標準入力で渡す方法
    * variableをnullで定義しておく : `variable "secret_key" {}` (対話形式で入力が出来る)
1. 自動生成する方法
1. 固定で書いてしまう方法

# 課題

(1) の方法の場合、envファイルかコマンド実行時に毎回パラメーターを渡すかしないといけなくてめんどくさい。envファイルをいろんなひとに配るのもめんどくさい。けどenvを持ってる人じゃないと実行できない。

(2) の方法の場合、実行時に毎回聞かれる。(嘘の値を入れてもPasswordの更新は走らないわけだけどとてもめんどくさい)

(3) は(1)と(2)に比べればまともに運用しやすい。tfファイルにはコードは残らないので良い。

(4) はtfファイルにパスワード平文残していまう。

どの手法を使ってもtfstateファイルに平文が残ってしまう。tfstateファイルの管理方法によるが、ひと目に見えるrootパスワードというのはいかがなものだろう

# 解決方法

(3) で作って、その後手動でrootパスワードを更新してあげるのが安全に運用できそうだと思う。本当のrootパスワードはパスワードマネージャーで管理かな。

# 実装

(3)の実装は以下の感じです。

terraform version : 0.8.8

```
resource "random_id" "db_pswd" {
  byte_length = 8
  prefix      = "w)2v_r"
}

~~

resource "aws_rds_cluster" "aurora-cluster" {
　　　　~~
  master_password        = "${random_id.db_pswd.b64}"
　　　　~~
}

```

* prefixは `0.8.8` からのattributeです。base64だと記号が含まれないので、ちょっとしたお気持ちでつけてみました。(作成後に手動変更もするので気持ちの問題だと思います…)


# おまけ

random_idは以下の様な値がとれます

```
random_id.db_pswd:
  id = DRbsI2S5vck
  b64 = w)2v_rDRbsI2S5vck
  b64_std = w)2v_rDRbsI2S5vck=
  b64_url = w)2v_rDRbsI2S5vck
  dec = w)2v_r942218400924646857
  hex = w)2v_r0d26fc2364b9bdc9

```
勾配降下法をざっくりと考えてみる

[前の記事](http://qiita.com/mine820/items/f8a8c03ef1a7b390e372)で何とか損失関数まで理解できたのですが、それだけではまだ関数を定義しただけで、ちゃんと値（損失）を収束させないと答えを求めたことにはなりません。

で、今回はその答えの求め方のお話です。

# どうやって値を収束させるのか
損失関数の説明は省くとして、最終的には値を収束させなくてはいけません。
![801933de-d8ba-729f-9b2c-6bbe3bd64212.jpeg](https://qiita-image-store.s3.amazonaws.com/0/130771/0dde462b-581f-87ee-c383-b07f458d1dbf.jpeg)
このグラフだと、損失が最小となる「m」を求めます。

いきなり答えが求まるわけではなく、少しづつ調整しながら損失を確認し、より小さくなるように調整していきます。
![9170a054-e922-46c3-88bf-0365be4df036.png](https://qiita-image-store.s3.amazonaws.com/0/130771/695f690f-d3a2-5ba3-97ef-e3140af521e1.png)

この「少しづつ調整しながら」の部分がミソなのですが、偉い人たちがいろいろ考えてくれた知恵を使わせていただきます。

- バッチ勾配降下法
- 確率的勾配降下法
- ミニバッチ勾配降下法

代表的な手法はこんな感じなのですが、これの実装方法で、さらにいろいろアルゴリズムがあったりします。
細かい話はしませんが、値の正確さと収束までの早さがポイントとなります。

# TensorFlowの実装
TensorFlowでも、こんなにいっぱい用意してくれています。

- tensorflow.train.Optimizer
- tensorflow.train.GradientDescentOptimizer
- tensorflow.train.AdadeltaOptimizer
- tensorflow.train.AdagradOptimizer
- tensorflow.train.AdagradDAOptimizer
- tensorflow.train.MomentumOptimizer
- tensorflow.train.AdamOptimizer
- tensorflow.train.FtrlOptimizer
- tensorflow.train.ProximalGradientDescentOptimizer
- tensorflow.train.ProximalAdagradOptimizer
- tensorflow.train.RMSPropOptimizer

全部理解するのはしんどいので、チュートリアルで使用している「AdamOptimizer」と「GradientDescentOptimizer」だけ知っていればとりあえずはいいかなと。
「AdamOptimizer」はAdamアルゴリズム、「GradientDescentOptimizer」は急速降下法になります。

使い方はどちらも同じで、初期値として学習率を指定し、値を最小化するため「minimize()」関数に損失関数を渡します。
コードはそれぞれ、こんな感じになります。

```python
train_step = tensorflow.train.AdamOptimizer(1e-4).minimize(cross_entropy)
```

```python
train_step = tensorflow.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
```

※本当はもっといっぱい引数があるのですが、そのあたりはTensorFlowのマニュアルを見てね！

使用するアルゴリズムの取り換えは簡単ですが、学習率をいくつにすればいいのかは試行錯誤．．． ^^;

ということで、この処理を実行すると、自動的に損失関数の値が小さくなるように、重みパラメータを調整してくれます。
これが「誤差逆伝播」となります。

# もっと詳しく知りたいときは
勾配降下法のアルゴリズムに関しての難しいお話は[このかた](http://qiita.com/cnloni/items/ad7dcb7521b936d9fc18)の記事を読むのがよさそうです
ブラウザで実行できるplaygroundまとめ



## コンテナ系

### Docker Playground

Docker Swarm-modeのクラスタを構築できる．

http://play-with-docker.com
ソース: https://github.com/franela/play-with-docker

![image](https://qiita-image-store.s3.amazonaws.com/0/90542/8a15d234-7bed-7c0a-99d9-8f531efd76cb.png)

### Docker birthday #4!

Docker 4周年記念イベントで使われた教材．
([日本でも2017/3/16に開催．](https://www.meetup.com/Docker-Tokyo/events/237389028/))

~~http://birthday.play-with-docker.com/~~ 移転: http://training.play-with-docker.com/
ソース: https://github.com/play-with-docker/play-with-docker.github.io

![image](https://qiita-image-store.s3.amazonaws.com/0/90542/41d4f3f4-6c79-70fe-16d3-6a4b5e5f7641.png)

いちいちコマンドを打たなくても，コマンドをクリックしていくだけで進む．

### Katacoda

Docker Swarm-mode, Kubernetes, DC/OSなどのクラスタを構築できる．
GoとかJavaとかTensorflowとかもある．

https://www.katacoda.com/learn

![image](https://qiita-image-store.s3.amazonaws.com/0/90542/ac0c7089-0e07-25ae-c33d-dc966a142c7f.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/90542/bb9665a2-cca3-5c02-2d6c-2198705d3a37.png)


こちらも，いちいちコマンドを打たなくても，クリックしていくだけで進む．


## いろいろな言語に対応しているもの

### インタラクティブなbashあり

- Coding Ground https://www.tutorialspoint.com/codingground.htm
  - C, Go, Pythonなど，あらゆる言語に対応している．ALGOL-68さえ対応している．

- SageMathCloud https://cloud.sagemath.com/
  - Jupyter, LaTeXなど対応．
  - 要アカウント作成．
  - インターネットに出るには有料プランの契約が必要．
  - ソース: https://github.com/sagemathinc/smc


### インタラクティブなbashなし
- paiza.io https://paiza.io/
  - UIが日本語．

- ideone.com http://ideone.com/

- codepad http://codepad.org/

- wandbox https://wandbox.org/

- repl.it https://repl.it
  - 要アカウント作成．


## 特定の言語用

### Go

- Go Playground https://play.golang.org/
  - ソース: https://github.com/golang/playground

### SQL

- SQL Fiddle http://sqlfiddle.com/
  - 各種SQL対応


## その他

- etcd play http://play.etcd.io/play
  - etcdクラスタに対する障害注入などが出来る．シェルなし．
  - ソース: https://github.com/coreos/etcd-play


## サーバ側ではなく，クライアント側でJSで動くもの

- Python
  - Skulpt http://www.skulpt.org/
  - Brython https://brython.info/
  - PyPy,js http://pypyjs.org/
  - その他似たようなものの比較: http://stromberg.dnsalias.org/~strombrg/pybrowser/python-browser.html

- Go
  - GopherJS https://gopherjs.github.io/playground/

- 機械学習
 - Tensorflow Playground http://playground.tensorflow.org/ (https://github.com/tensorflow/playground)
 - ConvNetJS http://cs.stanford.edu/people/karpathy/convnetjs/
 - Synaptic http://caza.la/synaptic/
 - Support Vector Machine in Javascript http://cs.stanford.edu/people/karpathy/svmjs/demo/

- raft
  - raft visualization https://raft.github.io/
Xcodeの新規作成時のファイルテンプレートをカスタマイズする

## 概要
UIViewController等を新規作成する際に、不要なコードが入っている。また、チーム内のコーディングルールに則ったカスタムのテンプレートを利用したい。そこで、Xcodeインストール時に用意されたテンプレートをカスタマイズし、ファイルの新規作成時に読み込めるようにする。

## インストール方法と使い方

### 1. シェルスクリプトとサンプルテンプレートの入手
[Xcode-Template@github](https://github.com/ayakix/Xcode-Template) よりxcodeTemplateディレクトリにあるシェルスクリプトとサンプルテンプレートをダウンロードする。

### 2. テンプレートの配備
シェルスクリプトにより、カスタムテンプレートをXcodeで読み込めるようにする。Xcodeを開いている場合には、再起動する。

```
xcodeTemplate> chmod +x deploy_templates.sh
xcodeTemplate> ./deploy_templates.sh
```

### 3. テンプレートの選択
ファイルの新規作成より、[Custom]-[Cocoa Touch Class]を選択

![select_custom](https://github.com/ayakix/Xcode-Template/raw/master/images/select_custom.png)

### 4. クラスの作成
カスタムしたCocoa Tocuhクラスのサブクラスとしてクラスを作成する。（例ではUIViewController）

![new_file](https://github.com/ayakix/Xcode-Template/raw/master/images/new_file.png)

### 5. テンプレートの適用を確認
![custom_view_controller](https://github.com/ayakix/Xcode-Template/raw/master/images/custom_view_controller.png)

## テンプレートの修正方法
`xcodeTemplate/Cocoa Touch Class.xctemplate/UIViewControllerSwift/___FILEBASENAME___.swift`を修正する。
また、修正後には、再度シェルスクリプトを起動する。

UIViewController以外を修正する場合には、`/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/Source/Cocoa Touch Class.xctemplate` にある修正したいクラス名のディレクトリを`xcodeTemplate/Cocoa Touch Class.xctemplate`以下にコピーし、修正する。

## サンプル
[Xcode-Template@github](https://github.com/ayakix/Xcode-Template)に動作するプロジェクトがあります。
Laravelでupdated_atは更新したくないとき

この記事は移行しました！[最新の内容はこちら](https://naoqoo2.github.io/blog/Laravel%E3%81%A7updated_at%E3%81%AF%E6%9B%B4%E6%96%B0%E3%81%97%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D/)をご覧ください😀

下記のようにするとupdated_atを更新せずにレコード上書きできます。

```php
$item->status = 'xxx';
// 更新日時は更新しない
$item->timestamps = false;
$item->save();
```

パッチを当てたい場合など、なんらかの理由で更新日時を変更したくないときにどうぞ。
"Animator does not have an AnimatorController"と"Animator is not playing a Playable"

※追記あり。(2023/8/28)

UnityのAnimatorでアニメーションをいろいろ付けて状態遷移させていると、以下のような警告がConsoleに出ることがあります。

![animator_error.png](https://qiita-image-store.s3.amazonaws.com/0/141731/25f30296-3eb2-87da-8536-ebfe2da684de.png)

1. Animator is not playing a Playable
2. Animator does not have an AnimatorController

もちろんGameObjectにAnimatorはAddされているし、AnimatorにAnimatorControllerが設定されています。

いろいろ試したところ、非アクティブなGameObjectに対してAnimator.SetTrigger(SetBool,SetInt,SetFloat等)をしたときに1が、Animator.Playをしたときに2が出るようです。

意味合いとしては、「GameObjectが非アクティブになるとAnimatorはリセットされるし、その間の操作は反映されないので意味ないよ」ということなのでした。(**※ちょっと違う。追記(2023/8/28)を参照のこと**)

私の場合、Animatorの状態をリセットするためにPlayやSetTriggerを呼び、いったん非表示にするためにSetActiveで非アクティブにしていたので、この警告が出ていました。前述のとおり、非アクティブにするとAnimatorはリセットされるので、必要のない処理だったということになります。消そ。

※Unity 5.5.1f1で確認。

### 追記 (2023/8/28)

再び同じ警告が出て検索したら、6年前に自分が書いたこの記事がトップに表示されて、いろんな意味でがっかりしました…。(全然覚えていない上にちょっと違う)

さて、
Animator does not have an AnimatorController
についてなんですが、単純に、

**AnimatorControllerが設定されていないAnimatorコンポーネントから、AnimatorControllerが持つ情報に間接的にアクセスしようとしたときに出る**

ようです。例えば、Animator.parametersの中身はAnimatorControllerにあるので、parametersにアクセスすると警告が出ます。未設定なんてことある？？と思ったけど、誰かがnullに設定してた…。(アニメーションしないという意味？)

ただ、それだけではなく、意図せずAnimatorControllerが未設定になることがあるようで、Animatorを持つGameObjectを非アクティブにすると、内部でnullにしてしまうようです。SetActive(true)にすると元に戻るんですが、Unityは各コンポーネントの実際の処理はGameObjectのあとに行われるので、アクティブに戻してすぐアクセスすると、まだnullなので警告が出るんじゃないかと思われます。

実害はないっちゃないんですが(エラーではない)、意図せずAnimatorControllerをnullにしていないかどうかは確認するといいかもしれません。

※Unity 2021.3.24f1で確認。
Rubyの基礎について

*まだ書き途中の記事です
http://melborne.github.io/2013/02/07/understand-ruby-object/

これを見て自分なりにまとめてみた

# Ruby実行空間には３種類のオブジェクトが存在

1.オブジェクト(インスタンス)
2.クラス
3.モジュール
## クラス
・オブジェクトを生み出すために存在
・より予め多数のクラスが用意されている(組み込みクラス)と、class式を使って独自クラスを定義することもできる。
->定義の仕方

```ruby
class Creature
  def initialize(name)
    @name = name
  end
end
```
・class式を使って既存クラスと同名のクラスを定義した場合、それは既存クラスの書き換えではなく拡張となる。

## オブジェクト(インスタンス)

・特定のクラスからオブジェクトを生成するには、newメソッドを使う。
・代表的な組み込みクラスでは「リテラル表記」を使って、簡易にオブジェクトを生成することができる。
・クラスに定義されるこの種のメソッドを「インスタンスメソッド」



#追記

```ruby
class String
  def expand(n=2)
    self.gsub(/./) { |m| m * n }
  end
end

my_name = "charlie"
my_name.length # => 7
my_name.expand # => "cchhaarrlliiee"
```

このコードの意味がわからないのでどなたか詳しい解説をいただけると嬉しいです。
また、Rubyに関するご指摘、オススメの書籍等ございましたら教えていただけると幸いです。
俺のTrelloアドオン

この記事は移行しました！[最新の内容はこちら](https://naoqoo2.github.io/blog/%E4%BF%BA%E3%81%AETrello%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3/)をご覧ください😀

Trelloで利用しているChrome拡張機能の紹介です。
『かんばん』はなるべくシンプルに！ということで本当に必要なものだけ厳選してます。

## ラベルのタイトルを表示する
[標準でいけるようになっていた！](https://trello.com/c/945TM7wD)ラベル部分をクリックすれば名称が表示され、リロードしても保持してくれる！
そのため下記はインストール不要ですがメモとして残しておきます。

[~~Card Color Titles for Trello~~](
https://chrome.google.com/webstore/detail/card-color-titles-for-tre/hpmobkglehhleflhaefmfajhbdnjmgim?utm_source=chrome-app-launcher-info-dialog)

~~デフォルトだとラベルの色しか表示されず不便です。迷わず入れましょう。~~

## カードにポイントをつける

[Scrum for Trello](https://chrome.google.com/webstore/detail/scrum-for-trello/jdbcdblgjdpmfninkoogcfpnkjmndgje?utm_source=chrome-app-launcher-info-dialog)

スクラムするならこれ。カードタイトルに(数値)を入れるだけです。
リスト毎に合計も表示してくれて便利！

## GMailからカードを作る

[GMail to Trello](https://chrome.google.com/webstore/detail/gmail-to-trello/oceoildfbiaeclndnjknjpfaoofeekgl?utm_source=chrome-app-launcher-info-dialog)

メールで仕事の依頼がくること、よくありますよね。
そんなときボタン一つでカードを作成できます。
MySQLのGroup ReplicationがERROR 3096 (HY000): で開始できない時の確認点

```
mysql> START GROUP_REPLICATION;
ERROR 3096 (HY000): The START GROUP_REPLICATION command failed as there was an error when initializing the group communication layer.
```
こんなエラーが出た時には、次の点をまず確認する

my.cnf等に記述しているIPアドレスと実際のIPアドレスが食い違っているとこのエラーとなる。
```loose-group_replication_local_address= "192.168.4.94:3300"```

対象サーバには二つのIPアドレスが付いていて、二番目のIPアドレスを設定していました。
この場合、実際の通信は１番目のIPアドレス、設定ファイルには２番目のIPアドレスで食い違いがあり、エラーとなっていました。
Useful Excel hotkeys for table editing

## Useful Excel hotkeys for table editing:
- Alt-Enter       Insert line break in a cell
- Ctrl-"-"        Delete row
- Ctrl-Shift-"+"  Insert row
- Ctrl-Z          Undo
- Ctrl-Y          Redo
- Ctrl-;          Insert current date
- Alt-Down Arrow  Select from list (if possible)
- **To add row just type a value below the table**
テキストエリアをフォーカスしたときに全選択状態にする

## はじめに

以下のような使われ方のテキストエリアは、
フォーカスした瞬間に全選択にしてしまいましょう

- コピーさせたい
- 基本上書きする

前者は、生成されたURLやテキストを貼り付けるフォームなど
後者は、入力フォームなど


## 方法

```js:テキストエリアをフォーカスしたときに全選択状態にする①
$(document).ready(function(){
    $('#text').focus(function(){
        $(this).select();
    });
});
```

HTML内の`<input type="text">`全てにこの設定が適用されます


```js:テキストエリアをフォーカスしたときに全選択状態にする②
$(document).ready(function(){
    $('#text2')
        .focus(function(){
          $(this).select();
      })
      .click(function(){
          $(this).select();
          return false;
      });
}); 
```

こちらは、フォーカスだけでなく、
clickイベントでも全選択状態になるような仕様です
テキストエリア内でクリックを繰り返すと、全選択と選択解除を繰り返します

## さいごに

この仕様を実装したいと思ったのは、
IE10以降で実装された、input要素の「×」ボタンについて考えたときでした。

ブラウザによってついてたりついてなかったりすると、なんか不便。
でも、全消しするとき×ボタンがないとないで不便。
同じ手間で消せるor上書きできるようにしたいと考えて辿りついたのがこれです。

フォーカスした瞬間に全選択してしまえば、
BackSpaceで消せるしすぐに上書きもできるので便利！
途中に文字を挿入したいときには不便ですけどね。

## 参考
- [jQuery日本語リファレンス][1]

#### Javascriptで実装したい人向け
- [大人になったら肺呼吸][2]
- [「テキストボックスのフォーカス時に選択状態にする」を少しだけクロスブラウザ対応した(Qiita)][3]


[1]:http://semooh.jp/jquery/ref/cont/select_all/
[2]:http://d.hatena.ne.jp/replication/20100110/1263565412
[3]:http://qiita.com/yskazuma/items/cbf2f523af192e87e059
Mozc でキーボードの配列が日本語にならないのを解決する

キーボードの配列がなぜか日本語にならず、
色々触ったのちに Mozc の設定が原因だとわかったので備忘録。

# 環境
||私が使っているもの|
|:--|:--|
|OS|Fedora 25|
|Mozc|バージョン2.17.2322.102|
|キーボード|HHKB Professional JP|

# 解決手順

Mozc の設定ファイルを編集するだけです。

```
sudo vi /usr/share/ibus/component/mozc.xml
```

ファイルの中身は下記のようになっていると思います。

```
<component>
  <version>0.0.0.0</version>
  <name>com.google.IBus.Mozc</name>
  <license>New BSD</license>
  <exec>/usr/libexec/ibus-engine-mozc --ibus</exec>
  <textdomain>ibus-mozc</textdomain>
  <author>Google Inc.</author>
  <homepage>https://github.com/google/mozc</homepage>
  <description>Mozc Component</description>
<engines>
<engine>
  <description>Mozc (Japanese Input Method)</description>
  <language>ja</language>
  <symbol>&#x3042;</symbol>
  <rank>80</rank>
  <icon_prop_key>InputMode</icon_prop_key>
  <icon>/usr/share/ibus-mozc/product_icon.png</icon>
  <setup>/usr/libexec/mozc/mozc_tool --mode=config_dialog</setup>
  <layout>default</layout>
  <name>mozc-jp</name>
  <longname>Mozc</longname>
</engine>
</engines>
</component>
```

このうち `<layout>default</layout>` を `<layout>jp</layout>` に変更します。
そして、この変更を読み込ませるために再起動します。（もっと速い方法があるかもしれません。未確認）
以上で完了です。
[C++11~] 数値を文字列(std::string)に変換する

数値を文字列に変換する際は、`std::stringstream` だったり、Cの`itoa`だったりを使用していましたが、
C++11から`std::to_string`を使えばもっと便利に変換できます。

[std::to_string - cppreference.com](http://en.cppreference.com/w/cpp/string/basic_string/to_string)

# 使用例

```cpp:to_stringの使用例
#include <iostream>
#include <string>
#include <typeinfo>
#include <memory>
#include <cassert>

#include <cxxabi.h>

template<typename T>
void func(T message) {
	auto demangle = [](const char* type_name) {
		int status = -1;
		std::unique_ptr<char, decltype(&std::free)> realname {
			abi::__cxa_demangle(type_name, 0, 0, &status),
			std::free
		};
		assert(status == 0);
		return std::string(realname.get());
	};

	std::cout
		<< demangle(typeid(message).name())
		<< " : "
		<< std::to_string(message)
		<< std::endl;
}

int main(void) {
	int _int = 123456;
	long _long = 123456;
	long long _longlong = 123456;
	unsigned int _uint = 123456;
	unsigned long _ulong = 123456;
	unsigned long long _ulonglong = 123456;
	float _float = 123.456;
	double _double = 123.456;
	long double _longdouble = 123.456;

	func(_int);
	func(_long);
	func(_longlong);
	func(_uint);
	func(_ulong);
	func(_ulonglong);
	func(_float);
	func(_double);
	func(_longdouble);
}
```

```console:実行結果
$ g++ -std=c++11 test.cpp && ./a.out
int : 123456
long : 123456
long long : 123456
unsigned int : 123456
unsigned long : 123456
unsigned long long : 123456
float : 123.456001
double : 123.456000
long double : 123.456000
```

# 参考
[std::to_string - cppreference.com](http://en.cppreference.com/w/cpp/string/basic_string/to_string)
[Easiest way to convert int to string in C++ - Stack Overflow](http://stackoverflow.com/questions/5590381/easiest-way-to-convert-int-to-string-in-c)
[本の虫: gccの名前のデマングル](https://cpplover.blogspot.jp/2010/03/gcc.html)
[c++ - std::unique_ptr for C functions that need free - Stack Overflow](http://stackoverflow.com/questions/27440953/stdunique-ptr-for-c-functions-that-need-free)
CentOS release 6.6 (Final)にLightGBMをinstall

## os version
CentOS release 6.6 (Final)

## gcc-c++のinstall

```
sudo yum install centos-release-scl && \
sudo yum install devtoolset-3-gcc-c++ && \
scl enable devtoolset-3 bash
```

check

```
which g++
/opt/rh/devtoolset-3/root/usr/bin/g++
```

## LightGBMのinstall
```
git clone --recursive https://github.com/Microsoft/LightGBM ; cd LightGBM
mkdir build ; cd build
cmake -DCMAKE_CXX_COMPILER=/opt/rh/devtoolset-3/root/usr/bin/g++ ..
make -j 
```
Ubuntu14.04にffmpegインストール

普通にapt-getで行けるかと思ったらダメだった。
調べた感じ、配布されているバイナリを落としてくるか、リポジトリ追加してインストールするかのどちらかかなと思ったが、パッケージとして管理したいので後者で。

```shell-session:console
sudo apt-get -y install software-properties-common
sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update
sudo apt-get -y install ffmpeg
```

## 参考
リポジトリ追加（こちらのサイトの方法を採用させて頂きました）
http://d.hatena.ne.jp/katz_24/20160323/1458784199

バイナリから入れる
http://qiita.com/yayugu/items/d7f6a15a6f988064f51c
Python > tuple > (3., 1., 4.)を 3.00000,1.00000,4.00000にする (小数点を5桁に) > .join使用

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

タイトルのことをしようとしている。

http://qiita.com/7of9/items/4aa9f546a4ff1bf2e1aa
のコメントにて色々方法を教えていただいた。

別途、以下を見つけた。
http://stackoverflow.com/questions/15968017/formatting-a-tuple-of-floats

こちらを実装してみた。

```test_python_170324b.py
import numpy as np

atuple = (3., 1., 4., 1., 5., 9., 2., 6., 5., 3., 5.)

astr=','.join(format(elem, '.5f') for elem in atuple)
print(astr)
```

```txt:結果
$ python test_python_170324b.py 
3.00000,1.00000,4.00000,1.00000,5.00000,9.00000,2.00000,6.00000,5.00000,3.00000,5.00000
```

色々やり方はありそうで、自分が「そらで」使えるようになるもの(かつ可読性が高いもの)は検討中。

## 教えていただいた事項
(追記 2017/03/24)

@shiracamus さんの[コメント](http://qiita.com/7of9/items/ab0cbcd65c0bbf237dce/#comment-5217e5984ca2960785c2)の書き方の方が簡潔で読みやすいように思います。

情報感謝です。
モバイルアドの用語覚え書き

#インプレッション数
広告が表示された回数

#クリック数
広告がクリックされた回数

#コンバージョン数
広告をクリックしたユーザーが、商品購入、お問い合わせ、など、広告主にとって成果とみなされる行動をとった回数
「コンバージョン数÷クリック数×100＝コンバージョン率（％）」で算出できる

#リスティングアド
検索結果画面に表示される検索クエリに連動したテキスト型の広告
検索連動型広告とも呼ぶ
広告主は検索キーワードに入札してオークションで掲載順位が決まる、クリック課金型の広告

#インフィードアド
画面の上から下に読み進めていくデザインのコンテンツとコンテンツの間に表示される広告

#インターステシャルアド
ページ移動時にページ間に独立ページとして表示する広告
スプラッシュページと呼ばれることも

#ネイティブアド
広告をモバイルコンテンツに自然に溶け込ませること
ユーザーにコンテンツの一部として見てもらうことを目的とした概念

#CPM（Cost Per Mille）
1,000回表示あたりの広告コスト
Mille=1,000

#eCPM（effective Cost Per Mille）
インプレッション課金でない広告をCPMに換算して課金の違いによらずにインプレッション数に対してのコストを測る指標
「広告コスト÷インプレッション数×1,000」で算出できる
インプレッション課金ではない広告のCPMがeCPM
Laravel の結合テストで、メール送信を Mock する

ユーザー新規登録はクリティカルなので、テストを書いておきたかった。

でも新規登録時にメールが送られて、ミドルウェアの設定をしないとそこでエラーになってしまう。
ローカル上では `mailcatcher` 動いているからいいけど、CI上ではそれをやりたくない。

なので Mock した。思ってたより簡単だった。

- Laravel 5.1

```php:tests/integratin/UserSignupTest.php
<?php

namespace Tests\Integration;

use App\Models\User;
use Tests\TestCase;

class UserSignupTest extends TestCase
{

    public function testUserSignup()
    {
        \Mail::ShouldReceive('send')
               ->once()
               ->andReturn(true);

        $this->visit('/signup')
             ->type('hoge@example.com', 'email')
             ->type('secret', 'password')
             ->press('Sign up')
             ->seePageIs('/home');

        $this->seeInDatabase('users', [
            'email' => 'hoge@example.com'
        ]);
    }
}
```

Mail::send() メソッドが実行されなければ、エラーが発生する。

できればメールの内容のチェックもしたい。
`ShouldReceive('send')->with(...)` とか使えばいいんだろうか。
Raspberry PiにインストールしたOwncloud8をOwncloud9+PHP7.0にする方法

#はじめに
RaspberryPi2+にOwncloud8を入れて運用していましたが、やっぱりスピードが気になるのでOwncloud9+PHP7.0構成に変更してみました。

結果は表示などは主観的には早くなりましたが、Raspberry Piなのでお察しの範囲で\(^◇^;)

#■前提条件
・owncloud8+php5をインストール済み
・webサーバはnginx
・DBはmysql
・owncloud8が動くように各種設定は行われている


#■手順
・PHP7.0の準備
・設定の変更
・owncloud9のインストール及びアップグレード

#■PHP7.0の準備
参考：https://www.symfony.fi/entry/install-php-7-on-raspbian-raspberry-pi

##▼repositoryの追加
###1./etc/apt/sources.listに以下の２行を追加（2行目コメントやけどな）

```shell-session:/etc/apt/sources.list
deb http://repozytorium.mati75.eu/raspbian jessie-backports main contrib non-free
#deb-src http://repozytorium.mati75.eu/raspbian jessie-backports main contrib non-free'
```

###2.必要なPGP鍵の追加

```shell-session:
gpg --keyserver pgpkeys.mit.edu --recv-key CCD91D6111A06851
gpg --armor --export CCD91D6111A06851 | apt-key add -
```

##▼パッケージのリストupdate
```shell-session:
# apt-get update
```

##▼memcachedの準備
apt-get install libmemcached-dev memcached 

##▼必要なPHP7.0パッケージのインストール
```shell-session:
# apt-get install php7.0-cli php7.0-mysql php7.0-gd php7.0-common php7.0-cgi php-pear php-apc php7.0-curl php-xml-parser php7.0 php7.0-dev php7.0-gd php7.0-fpm varnish php7.0-apcu php7.0-zip php7.0-xml php7.0-mbstring
```

##▼PHP7.0でmemcachedを使えるようにする

```shell-session:
# cd /usr/local/src
# git clone -b php7 --depth 1 https://github.com/php-memcached-dev/php-memcached
# cd php-memcached
# phpize
# ./configure
# make
# make test
# make install
```


#■設定の変更
```shell-session:/etc/php/7.0/fpm/php.ini
;daemonize = yes -> daemonize = yes

extension=/usr/lib/php/20151012/memcached.so
を追加
```

```shell-session:/etc/php/7.0/fpm/pool.d/www.conf
;listen = /run/php/php7.0-fpm.sock
listen = 127.0.0.1:9000
```

##▼php7.0-fpmの起動
systemctl enable php7.0-fpm.service
systemctl restart php7.0-fpm.service


#■owncloud9のインストール及びアップグレード

##▼古いowncloud8の退避
```shell-session:
cd /var/www
mv owncloud owncloud-old
```

##▼owncloud9の準備
```shell-session:
mkdir /usr/src/owncloud9
cd /usr/src/owncloud9
wget https://download.owncloud.org/community/owncloud-9.1.4.tar.bz2
tar xvf owncloud-9.1.4.tar.bz

mv owncloud /var/www
```

##▼古い設定のcopy
```shell-session:
cd /var/www
cp owncloud-old/config/config.php owncloud/config
cp owncloud-old/config/.htaccess owncloud/config   ※ある場合のみ
```

##▼ユーザの変更
```shell-session:
chown -R www-data:www-data owncloud
```

#▼upgradeの実施
```shell-session:
cd owncloud
sudo -u www-data php ./occ upgrade
```
※DBが大きいと結構時間かかる
Python > 実行時引数 > -dがついているかどうかを確認する

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

Python スクリプトを実行時、`-d`がついているかどうかのチェックをする。

参考: https://docs.python.jp/3/howto/argparse.html
の`store_true`記載の部分。

```test_python_170324a.py
import argparse

parser = argparse.ArgumentParser(description="do something")

parser.add_argument(
    '-d',
    '--debugMode',
    dest='debugMode',
    action='store_true',
    help='debug mode')

cmd_args = parser.parse_args()

if(cmd_args.debugMode == False):
	print("normal mode")
else:
	print("debug mode")
```

```txt:結果
$ python test_python_170324a.py 
normal mode
$ python test_python_170324a.py -d
debug mode
$ python test_python_170324a.py --debugMode
debug mode
```
【Salesforce】リストビューのインライン編集機能の有効化

# インライン編集
リストビュー(一覧画面)上で項目の値の編集ができる機能

# 有効化手順
### ユーザインターフェースから「インライン編集を有効化」にする
「設定 > ビルド > カスタマイズ > ユーザインターフェース」より
「インライン編集を有効化」にチェックをいれて保存。

- [x] インライン編集を有効化


# チェック事項
インライン編集を有効化にしてもインライン編集ができない場合があるので、
以下を確認する。

### 対象のオブジェクトにレコードタイプの設定がある
レコードタイプが存在する場合はビューの検索条件にレコードタイプを含める必要があります。

### リストビューの検索ロジック

リストビューの設定で「検索ロジックの追加...」のフォームが表示された状態で保存すると、
インライン編集が使用できません。
「検索条件ロジックをクリア」を押してフォームを非表示にして保存することでインライン編集が可能になります。
パスワードで使うランダムな文字列の生成

# はじめに
最近はセキュリティ強化の一環で、パスワードで利用する文字列に「xxx文字以上」「意味のないランダムもの」「記号はxxx文字含める」「前回、前々回で利用したものは再利用不可」etcなど制限がかけられている場合があります。

制限を回避するパスワードをいちいち考えるのも大変なので、自動生成コマンドを探してみました。

# 環境
- PowerShell2.0

# コマンド
Add-type -AssemblyName System.Web;
\[System.Web.Security.Membership\]::GeneratePassword(25,3);

# 実行結果
`
^mfi}*%AO^SHV)lKdTX%NzZ$m
`

# 説明
Add-type -AssemblyName System.Web;
GeneratePasswordメソッドを利用するためにアセンブリをロードします。


\[System.Web.Security.Membership\]::GeneratePassword(25,3);

- 第一引数(Int32)<br>
生成する文字列の長さです。1~128の間で指定します。
- 第二引数(Int32)<br>
生成する文字列に含まれる記号の最小数です。記号は「!@#$%^&*()_-+=[{]};:<>|./?」が利用されます。<br>
最小数なので、よくある「何個以上記号を含む」というケースに対応出来ません。


# 参考
[Microsoft] (https://msdn.microsoft.com/ja-jp/library/system.web.security.membership.generatepassword(v=vs.110).aspx)
adbでURL SchemeからActivityを開く


こんにちはsekitakaです。

Androidアプリを開発していると独自のURL Schemeを設定したアプリを開発することはよくあります。
ただこのURL Schemeからアプリを起動する仕組みの確認が、以下の理由で少し手間に感じると思います。

- プロトコルがhttp/https以外メール経由ではリンクにならない
- Webページ上にリンクを作れば良いけど、まだ外部に公開したくない
- かと言ってプライベートなページを作るほどでも。。。

今回はadbを使って、URL SchemeからActivityを起動する方法を紹介します。

シンプルに1行だけ。

```bash
adb shell am start -a android.intent.action.VIEW -d "https://www.google.co.jp"
```

このコマンドの例ではブラウザが起動しgoogleのページが表示されます。
`https://www.google.co.jp`には実際に試したいURL Schemeを指定してください。

### 2022年追記
公式ドキュメントに記載がありました。

https://developer.android.com/training/app-links/deep-linking
Android Oの機能紹介記事一覧

Android Oのdeveloper previewが発表されました。
今出ている記事をまとめました。(ほぼ自分用ですが）
触ったら、感想とか追加していこうと思います。

## 公式ブログより
- [O-MG, the Developer Preview of Android O is here! ](https://android-developers.googleblog.com/2017/03/first-preview-of-android-o.html)

###juggry

- [Google、「Android O」のDeveloper Preview（DP1）をリリース](http://juggly.cn/archives/222490.html)
- [Google、Androidの次期メジャーアップデート版「Android O」の新機能や変更点を公開](http://juggly.cn/archives/222487.html)
- [Android Oの新機能 : 設定メニューがリニューアル、各セクションがカテゴリに分類される](http://juggly.cn/archives/222505.html)
-  [Android Oの新機能 : ロック画面のショートカットをカスタマイズ可能に](http://juggly.cn/archives/222550.html)
- [Android Oの新機能 : ナビゲーションバーのカスタマイズが可能に](http://juggly.cn/archives/222555.html)
- [Android Oの新機能 : アプリの通知設定をカテゴリ別に変更できる「通知チャンネル」とバッジ表示に対応](http://juggly.cn/archives/222561.html)
- [Android Oの新機能 : ディスプレイ設定に「端末のテーマ」が追加、UIのカラーリングをライトテーマに変更できる](http://juggly.cn/archives/222613.html)
- [Android Oの新機能 : 着信音・通知音・アラーム音を音リストで読み込むことが可能に](http://juggly.cn/archives/222619.html)
- [Android O Developer Preview 1のイースターエッグはこんな感じ](http://juggly.cn/archives/222537.html)
- [Android Oの新機能 : LDAC、aptX、aptX HDをサポート、サンプリング周波数や量子化ビットも調節可能](http://juggly.cn/archives/222524.html)
- [Android Oの新機能 : 通知のスヌーズが可能に](http://juggly.cn/archives/222579.html)
- [Android Oの新機能 : クイック設定ツールの上部にWi-Fiアイコンやバッテリーアイコンが追加、接続先・機器リストはアイコンではなくテキストのタップで表示される仕様に変更](http://juggly.cn/archives/222575.html)
- [Android Oの新機能 : 「ファイル」アプリが追加](http://juggly.cn/archives/222656.html)
- [Android Oの新機能 : クイック設定パネルにバッテリーセーバーが追加](http://juggly.cn/archives/222981.html)
- [Android Oの新機能 : 文字列の長タップメニューにアイコンや外部アプリが表示される](http://juggly.cn/archives/223257.html)
- [Android Oの新機能 : アプリ手動インストール時のプログレスバーが実際の進捗状況を反映](http://juggly.cn/archives/223903.html)
- [Android Oの新機能 : アプリドロワーからのアプリ削除はバックグラウンドで実行される](http://juggly.cn/archives/224896.html)

- [ChainFire氏、Android O DP1をサポートしたSuperSU v2.79-SR4をリリース](http://juggly.cn/archives/222806.html)
→もうROOTアプリが使えるだって…?

### その他
- [次期モバイルOS「Android O」開発者プレビューをGoogleが公開](http://www.itmedia.co.jp/news/articles/1703/22/news058.html) -ITmedia
- [Nexus 5XでAndroid Oの導入に失敗した話。](http://kimihiro-n.appspot.com/show/5887499024990208)
→機能紹介ではないのですが、有用かなぁと思って。
Python > Comprehension > cells > 2重の内包表記 / itertoolsを使う方法を教えていただきました

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

内包表記を使って、表を作る例が掲載されている。

http://ideone.com/QJqVpn

```py
rows = range(1,4)
cols = range(1,3)
cells = [(row, col) for row in rows for col in cols]
for cell in cells:
	print(cell)
```

```txt:結果
Success	time: 0 memory: 23968 signal:0
(1, 1)
(1, 2)
(2, 1)
(2, 2)
(3, 1)
(3, 2)
```

## 教えていただいた事項
(追記 2017/03/24)

@shiracamus さんの[コメント](http://qiita.com/7of9/items/a447b8bbf940ef4448bb#comment-2d6febe4dcd9a4636ec5)において、itertools使用の方法を教えていただきました。

情報感謝です。
Windows 7 + Bitnami( Redmine 3.3.2-2) の環境に、backlogsのプラグインをインストールする時の話

ここ(http://qiita.com/wb773/items/0bef2c0695ac5f8e8874) らを参考にRedmineとBacklogsのプラグインをインストールしたところ、Redmineが起動しなくなってしまったので、備忘録を兼ねて。

# 環境
・ OS : Windows 7 x64 
・ Redmine : Bitman (Redmine 3.3.2-2)
　　ダウンロードURL：https://bitnami.com/stack/redmine/installer

# Bitman＋Redmineのインストール
ダウンロードURLからダウンロードしたモジュールを実行して、インストール。
インストールが完了後、以下のスクリプトを編集。
[注意！！]インストールパスにハイフンやドットなどの、記号が入ってると、
　　　　　DBアクセス時にアクセスできない等があるため、
　　　　　インストールパスは変更します。
対象：[インストール先ドライブ]:Bitnami\redmine\scripts\setenv.bat

[共通]
set RAILS_ENV=production


[プロキシ環境下の場合]
以下を追記。
rem ##### HTTP Proxy #####
set http_proxy=[プロキシアドレス]
set https_proxy=[プロキシアドレス]
set http_proxy_user=[ユーザ名]
set http_proxy_pass=[パスワード]


スタート⇒すべてのプログラム⇒Bitnami Redmine Stack⇒Bitnami Redmine Stackを使用する
を選択し、実行。
コマンドプロンプトが立ち上がる。

1. 以下のコマンドを実行  
cd [インストールドライブ]\Bitnami\redmine\apps\redmine\htdocs\plugin 
2. 以下のコマンドを実行  
gem install bundler  
※今回は必要ないため、行っていません。
　bundler のバージョンが1.9.6だと動きますが、それ以上のバージョンに上げると  
　動作しない模様。。。
# Redmineの動作確認  
1.　Redmineへのログイン  
    URL:http://localhost/redmine  
2.　プロジェクトの作成  
3.　チケットの発行  
ここまでできれば、基本OK。  
  
# backlogsプラグインのインストール  
1. capybara を手動インストール
2. gem install rack -v=1.6.4  
3. redmine の再起動
4. gem install capybara  
5. redmine の再起動
6. backlogs プラグインを配置  
   git コマンドでも、ブラウザからzip形式でダウンロード展開でもどちらでも良い。
   ただし以下の場所に展開。  
[インストールドライブ]\Bitnami\redmine\apps\redmine\htdocs\plugins  
ただし、展開後は、以下のパスになるようにする。  
[インストールドライブ]\Bitnami\redmine\apps\redmine\htdocs\plugins\redmine_backlogs  
※コマンドラインなら以下。  
git clone https://github.com/backlogs/redmine_backlogs.git  
注意：backlogs のバージョンと、Redmineのバージョンの整合性は十分気をつけてください。

7. 以下のファイルを編集する。  
[インストールドライブ]\Bitnami\redmine\apps\redmine\htdocs\plugins\redmine_backlogs\Gemfile  

nokogiri, capybara, thinがそれぞれ含まれている行を削除orコメントアウト  
8. 以下を実行します。
※今回は行っていません。行うと、Redmineが起動しなくなりました。
bundle update  
9. 以下を実行します。  
bundle install --without development test --path vendor/bundle  
10. 以下を実行します。  
bundle install --no-deployment
11. Backlogsの機能と連携させるために、Redmine へトラッカーを追加します。  
トラッカー名は任意です。追加しなくてもOKです。
12. bundle exec rake db:migrate
13. bundle exec rake tmp:cache:clear
14. bundle exec rake tmp:sessions:clear
[参考]手順7-9で、DL is deprecated, please use Fiddleというメッセージが出るかもしれないが、これは、警告メッセージなので、気にしなくて良い。
15. backlogsのインストール
bundle exec rake redmine:backlogs:install
Ubuntu 14.04 LTSへParaViewをインストール

# はじめに

今までParaViewのバイナリインストーラを[ここ](http://www.paraview.org/download/)からダウンロードし使っていましたが、依存ライブラリに係るエラーが発生して使えなくなってしまったため、ソースコードからビルドすることにしました。

[ここ](http://www.paraview.org/Wiki/ParaView:Build_And_Install)に従ってビルドしました。

# CMakeのダウンロードおよびインストール

CMakeのバージョンが古く(v3.2.2)、ParaViewの最新版v5.3.0に対応していなかったため、[ここ](https://cmake.org/download/)から最新版v3.7.2をダウンロードしてコンパイルしました。

```
cd ~/Download
wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz
cd ~/Projects/
tar xvfz ~/Downloads/cmake-3.7.2.tar.gz
cd cmake-3.7.2
./configure --prefix=$HOME/Projects/cmake-3.7.2-bin    # prefixで指定されたフォルダにbin, share, docが作成される
make
make install
```

CMakeのbinディレクトリへのパスを追加します。

```bash:~/.bashrc
PATH="$HOME/Projects/cmake-3.7.2-bin/bin:$PATH"
```

# ParaViewのソースコードをGitHubからダウンロードしてビルド

まずGitHubからソースコードをダウンロード

```
cd ~/Projects
git clone git://paraview.org/ParaView.git ParaView-source
cd ParaView-source
git checkout -b trunk origin/master
git submodule init
git submodule update
```

CMakeを立ち上げ

```
mkdir ~/Projects/ParaView-bin
cd ~/Projects/ParaView-bin
ccmake ~/Projects/ParaView-source
```

1. CMakeを起動後にconfigureを行う（'c'を押す）。
2. 設定パラメータが表示されるので、必要に応じて変更し、再度configureを行う（'c'を押す）。
3. 最後にgenerateを行う（'g'を押す）。

デフォルトの設定のままParaViewをビルドしたところ、下記のエラーが発生しました。

```
CMake Error at /home/sho/Projects/ParaView-source/CMake/ExternalData.cmake:749 (message):
  Object MD5=832570a7d84c1bc08cfb3ae88e2237b4 not found at:

    http://midas3.kitware.com/midas/api/rest?method=midas.bitstream.download&checksum=832570a7d84c1bc08cfb3ae88e2237b4&algorithm=MD5 ("Unsupported protocol")
    http://www.paraview.org/files/ExternalData/MD5/832570a7d84c1bc08cfb3ae88e2237b4 ("HTTP response code said error")
Call Stack (most recent call first):
  /home/sho/Projects/ParaView-source/CMake/ExternalData.cmake:771 (_ExternalData_download_object)
```

[ここ](http://paraview.paraview.narkive.com/tFs4kdO7/paraview-build-from-source-error)から、設定パラメータのうちBUILD_TESTINGをOFFにすればいいということがわかったので、変更後に再度ビルドしたら成功しました。

最後にParaViewのbinディレクトリへのパスを追加して完了。

```bash:~/.bashrc
PATH="$HOME/Projects/ParaView-bin/bin:$HOME/Projects/cmake-3.7.2-bin/bin:$PATH"
```