OmniAICreator/Qiita-1.07M huggingface dataset:
AWS EC2インスタンスへのFirefox導入方法

# EC2サーバーへのFirefoxのインストール
Selenium webdriverを使う場合等のGUIの導入方法メモ

## epll-releaseパッケージの導入
- HTTPSを使用してpackageのダウンロード

```
curl -X GET -o RPM-GPG-KEY-lambda-epll https://lambda-linux.io/RPM-GPG-KEY-lambda-epll
```

- パッケージのインポート

```
sudo rpm --import RPM-GPG-KEY-lambda-epll
```

- EPLLリリースのRPMパッケージのダウンロード

```
curl -X GET -o epll-release-2016.09-1.2.ll1.noarch.rpm https://lambda-linux.io/epll-release-2016.09-1.2.ll1.noarch.rpm
```

- EPLLリリースRPMパッケージのインストール

```
sudo yum -y install epll-release-2016.09-1.2.ll1.noarch.rpm
```

## firefox-compatパッケージのインストール
- firefox-compatのインストール

```
sudo yum --enablerepo=epll install firefox-compat
```

## 開発マシンへのXQuartzのインストール
- homebrew-caskのインストール

```
brew tap caskroom/cask
```

- XQuartzのインストール

```
brew cask install xquartz
```

- 開発マシンの再起動・Firefox起動  
X11 forwardingを有効化するために開発マシンを再起動。  
その後、sshコマンドに-Xオプションを付けて実行するとX11が起動します。

```
ssh -X -i ./<private_key>.pem ec2-user@<instance_ip>
```

※ ~/.ssh/configが設定済みであれば以下でもOK

```
ssh -X <hostname>
```

## 最新版Firefoxのダウンロード・起動
- ダウンロード

```
wget -O firefox-esr.tar.bz2　"https://download.mozilla.org/?product=firefox-45.3.0esr-SSL&os=linux64"
```

- 解凍/起動

```
bzcat firefox-esr.tar.bz2 | tar xvf -
cd firefox
./firefox
```

これでFirefoxがGUIで起動します。

参考URL：
https://lambda-linux.io/blog/2015/01/28/announcing-firefox-browser-support-for-amazon-linux/
vim で連番データを一気に書く(主にspecのgiven用)

## やりたいこと
topic_1
topic_2
..
topic_29
topic_30
を縦に生成したい。
specのgiven書くのが億劫。

## 概要
1. コピー元をまず1行作る。
2. それからvimのマクロを使う。


### 1.コピー元をまず1行作る
今回はspecのgivenを作りたかったのでこれを例に。

```
given!(:topic_1) {  }
```
### 2.vimのマクロ保存＆実行

1. **qa**  
※マクロ開始
* **yy**  
※行をコピー
* **p**  
※ペースト
* **wとか$とか**  
※数字部分にカーソル合わせる
* **&lt;C-a&gt;**  
※数字にカーソルがある状態で、Ctrl+aをやると+1されていく。便利
* **q**  
※マクロ終了の合図

この後に繰り返したい数を入れて@aと打つ。

**10個作りたい場合**

```
10@a
```

**50個作りたい場合**

```
50@a
```

**1個だけでいい場合**

```
@a
```

## 実行結果

```
given!(:topic_1) {  }
given!(:topic_2) {  }
given!(:topic_3) {  }
given!(:topic_4) {  }
given!(:topic_5) {  }
given!(:topic_6) {  }
given!(:topic_7) {  }
given!(:topic_8) {  }
given!(:topic_9) {  }
```

素晴らしい。
今更だけど CentOS-7 + httpd-2.4 の設定ファイル構成を考えてみる

# 背景
CentOS-7 なら当然の如く httpd-2.4 を使うわけですが、これまでのデフォルト値への文句を反省したのか、「じゃあ好きに設定したらいいじゃん！」とばかりに設定行が少なくなっています。

で、どのファイルに何を書こうか悩んだので、メモ程度に残すことにしました。
特にこだわりがあるのではなくどっちかというとツッコミ待ちですので、お気軽にご意見下さい。

# conf/http.conf の扱い方
Global な設定を記載する場所って限定した方がわかりやすいかなぁ、と考えています。
例えば、ServerTokens とか ServerSignature とか、core モジュールに起因するものを記載する感じで。
なので、あまりいじってません。

core についての記載は最初は conf.modules.d/00-base.conf に記載するか悩んだんだけど、00-base.conf って core モジュールと関連がない上にややこしくなりそうなのでやめました。

# conf.modules.d
## モジュール個別の設定はできるだけ conf.modules.d/*.conf に寄せたかったけど…
結論から先に言うと、MPM チューニング設定のみ conf.modules.d/00-mpm.conf に記載しています。
最初は「LoadModule + ロードしたモジュールの設定の方が自然じゃん！」とか考えたんですが、MPM 以外にあまり適用できそうなものが無かったのですね。

MPM の設定だけなら conf.modules.d/00-mpm.conf に書くのが一番直感的かつ自然だと考えています。
01-cgi.conf とか見る限り別に LoadModule しか書いてはいけないわけではないようですし。

```conf.modules.d/00-mpm.conf
# LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# LoadModule mpm_worker_module modules/mod_mpm_worker.so
LoadModule mpm_event_module modules/mod_mpm_event.so

# 値は適当だよ！
<IfModule mpm_event_module>
    AsyncRequestWorkerFactor 4
    StartServers             32
    ServerLimit              32
    MaxRequestWorkers        4096
    MinSpareThreads          4096
    MaxSpareThreads          4096
    ThreadsPerChild          128
    ThreadLimit              128
    MaxRequestsPerChild      1000000
    ListenBacklog            4095
</IfModule>
```

しかし、context が virtual host, directory, .htaccess と幅広いもの（proxy, rewrite, auth など）については流石に LoadModule 直後に書けないので中途半端な感じが否めません。MPM 以外に適用できそうなものだと SSL くらいしか思いつかず、SSL については conf.d/ssl.conf に記載しないと余計な混乱を招きそうです。
逆にチューニング値を httpd.conf や conf.d/mpm.conf に記載するのも考えたのですが、conf.modules.d/00-mpm.conf から分離する理由としては弱いのでやめました。

# conf.d
conf.d については別に Apache 2.4 関係ないですね。2.2 と同構成です。しかも完全に個人的な好みになってしまいました。

## conf.d/ssl.conf が使いづらい
ssl.conf ってそのまま使うこと殆どないので、welcome.conf と同じく全コメントアウト（削除すると yum update で復活してしまう…）して、ssl.sni.conf とか作ってます。
最低限の SSL 共通設定を ssl.sni.conf でやって、ホストごとの設定は Include で対処。

```conf.d/ssl.conf
# SSL 設定は ssl.sni.conf に寄せました。
```

```conf.d/ssl.sni.conf
# Mozilla SSL Configuration Generator とか参考に SSL 共通設定を書く。

# SNI 使う。
SSLStrictSNIVHostCheck off
Include conf.d/ssl-vhosts.d/*.conf
```

ここら辺は色々模索中。

## VirtualHost 管理はホストごとに分離したい
先程の conf.d/ssl-vhosts.d/*conf と同様に conf.d/vhosts.conf を作り Include させています。

```conf.d/vhost.conf
Include conf.d/vhosts.d/*.conf
```

# その他
## VirtualHost 間の共通設定は Include 使っちゃう
ServerAlias だけでは吸収しきれないような場合、割りと積極的に Include しちゃいます。

```conf.d/vhosts.d/a.example.com.conf
ServerName a.example.com
CustomLog logs/a.example.com/a.example.com-access.log

# a.example.com だけの設定

# 共通部 Include
Include conf.d/vhosts.d/include/a_b-common.conf
```

```conf.d/vhosts.d/b.example.com.conf
ServerName b.example.com
CustomLog logs/a.example.com/b.example.com-access.log

# b.example.com だけの設定

# 共通部 Include
Include conf.d/vhosts.d/include/a_b-common.conf
```

```conf.d/vhosts.d/include/a_b-common.conf
# a.example.com, b.example.com 共通
```

ちなみに上記の例であれば別に無理して二つのファイルに分けるより SetEnvIf で対応すべきですね。


書いてみたら Apache-2.4 がほぼ関係なくなった件。うーん。
eclipseでpython(pydev)を使うためのメモ

#ecripseの設定方法について
## 適当なeclipseを落としてくる
なんでもいいと思います。最新バージョンがいいと思います。
（eclipseの古いバージョンに最新のpydevを入れたら見事に動かなくなりました。。）
## pydevのプラグインを入れる
help→Install New Software
<img width="612" alt="スクリーンショット 2016-09-12 12.21.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/140287/dec864e2-6976-470c-205d-69ec68cf091a.png">
で
http://pydev.org/updates
<img width="848" alt="スクリーンショット 2016-09-12 12.22.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/140287/739966f1-6a63-87a1-536c-ecb4bc14efea.png">
を入れてupdateする。


## pydevのインタプリタの設定
pydevを入れると、環境設定ができるようになるはず
pydev→interpreter - Python
ここで、
/Users/Hoge/.virtualenvs/project/bin/python
など、virtualenvsのpathを指定する。

## runserverを実行する
run→Debug Configurations
の
Python Run
に新しく設定を作る。
Mainタブで
projectを選択
Main Moduleにmanage.pyを指定

Argumentsタブで
runserver_plus localhost:8000 --noreload --settings={settingsのpath}
などを指定する。
これで実行すると、いい感じに動くはず。

## その他
・runserverしても、DBにつながらない場合（コンソールからはつながる）
debugの設定で、enviromentに
DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
を設定する
クラスジャンプ系の設定は
<img width="826" alt="screen.png" src="https://qiita-image-store.s3.amazonaws.com/0/140287/4252fef5-6783-afb3-5369-1706b7c400b5.png">
ここでPYTHONPATHを設定する。
コマンド履歴を収集

監査のため、各人のコマンド履歴を収集する必要がでたのでsyslog収集用に記録

[参考](http://backdrift.org/logging-bash-history-to-syslog-using-traps)

まあ上記参考サイトのまんまなんだけど
以下を"/etc/profile"などに書く


```
function log2syslog
{
   declare COMMAND
   COMMAND=$(fc -ln -0)
   logger -p local1.notice -t bash -i -- "${HOSTNAME}:${USER}:${COMMAND}"
}
trap log2syslog DEBUG
```

これで"/var/log/messages.log"に記録されるようになる
他のlogと混ざるのが嫌なら"facility"などを分ける

###補足

```
fc -ln -0
```
"fc"コマンドはコマンド履歴をリスト表示するコマンド
lastを指定しない場合、lastには現在のコマンドが指定される

```
trap log2syslog DEBUG
```
実行中のプロセスに対するシグナルを検知し、指定された処理を返すコマンド
"DEBUG"を指定した場合、コマンドの実行毎にDEBUGシグナルを補足
Androidのロケールを秒速で切り替える

# やりたいこと
Androidで設定画面をいちいち開かなくてもホーム画面のウィジェットとかでさっさと言語を切り替えたい。
アプリ開発の検証で設定開いて言語変更とかやってらんない。

# 切り替えるアプリ
ロケール切替 - Google Play の Android アプリ - https://play.google.com/store/apps/details?id=com.aokabi.android.localeswitch
こういうのがあるが、結構更新されてなくてパーミッション問題で動かない(アンドロ4.2くらいから端末の設定いじるパーミッションができた)。

# パーミッション問題回避
1. 普通に👆のアプリとか同様のアプリを検証で使用する端末にインスコする
2. `adb` が使えるパソコンにアプリをインスコしたスマフォをつなぐ
3. `adb shell pm grant ${package_name} android.permission.CHANGE_CONFIGURATION` を撃つ
4. めでたい

パッケージ名はグーグルプレイのアプリページのURLの末尾にかいてある。
![image](https://qiita-image-store.s3.amazonaws.com/0/89807/ea492721-8ac3-e1a2-1051-74577aa5adcb.png)
.slimを.pugに変換したあとでhtmlを確認する


# 準備

```
brew install tidy-html5  
```

# 手順

```sh
cp show.slim show.pug
vi show.pug # correct syntax manually

slimrb -o sort_attrs=true _show.slim | tidy -q -config ~/config.txt - > slim.html
pug -o . _show.pug && tidy -q -config ~/config.txt _show.html > pug.html 

# check checksum
md5 -r slim.html show.html  
```

テンプレートにhtmlに無いタグが入っているとエラーになるので `new-blocklevel-tags` に追加する。

揉めてたけど追加するしかない。[Support custom elements · Issue \#119 · htacg/tidy\-html5](https://github.com/htacg/tidy-html5/issues/119)


```
// sample config file for HTML tidy
indent: auto
doctype: html5
indent-spaces: 2
drop-empty-elements: no
wrap: 1024
markup: yes
sort-attributes: alpha
output-xml: no
input-xml: no
show-warnings: yes
numeric-entities: yes
quote-marks: yes
quote-nbsp: yes
quote-ampersand: no
break-before-br: no
uppercase-tags: no
uppercase-attributes: no
char-encoding: latin1
new-inline-tags: cfif, cfelse, math, mroot,
  mrow, mi, mn, mo, msqrt, mfrac, msubsup, munderover,
  munder, mover, mmultiscripts, msup, msub, mtext,
  mprescripts, mtable, mtr, mtd, mth
new-blocklevel-tags: cfoutput, cfquery,
  offer-list-item,
  loading-indicator
new-empty-tags: cfelse
```
Excel > 7個のデータから上下2個ずつを省いた平均 > AVERAGE(LARGE(C2:I2, {3,4,5}))

```txt:動作環境
Excel 2013 on Windows 8.1 pro (64bit)
```

| C | D | E | F | G | H | I |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 3  | 2 | 1  | 4  | 7  |  6 | 5  |

セル`C2`から`I2`に上記のように値が入っているとする。

上記のデータセットから「上下２個ずつを省いた平均」を求める方法。

```
=AVERAGE(LARGE(C2:I2, {3,4,5}))
```

- LARGE()関数を用いて、インデックス(1始まり)の3,4,5番目を取る
  - 1,2と6,7を省く
- LARGE()関数の戻り値をAVERAGE()する

上記の例の場合、(3+4+5)/3となり4が返る。

関連 http://qiita.com/7of9/items/9948c7f4b4efd90fdc36
異なるアカウント間でS3のデータを同期する

# 概要

アカウント移行する必要があったので、S3のデータの移行手順のまとめ

# 権限設定

旧アカウントのS3のbucketに対してpolicyを設定する

```
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "GetObject",
			"Action": [
				"s3:GetObject"
			],
			"Effect": "Allow",
			"Resource": "arn:aws:s3:::${OLD_BUCKET_NAME}/*",
			"Principal": {
				"AWS": [
					"#{NEW_AWS_ACCOUNT_NUMBER}"
				]
			}
		},
		{
			"Sid": "ListBucket",
			"Action": [
				"s3:ListBucket"
			],
			"Effect": "Allow",
			"Resource": "arn:aws:s3:::${OLD_BUCKET_NAME}",
			"Principal": {
				"AWS": [
					"#{NWE_AWS_ACCOUNT_NUMBER}"
				]
			}
		}
	]
}
```

# CLIでsyncする

GUIコンソールからは作業できないので、CLIを使ってsyncする

```
$ aws s3 sync s3://${OLD_BUCKET_NAME} s3://${NEW_BUCKET_NAME}
```
httpie を使ってみる。

#httpieを使ってみる。

##自分用のメモ

まずhttpieをインストール

```
brew install httpie
```

実際にjsonを送ってみる。

```
http -v POST url key=value
```

例

```
http -v POST http://... title=foo body=bar answer=example created_by=example
POST /problem/problems/create HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 77
Content-Type: application/json


{
    "answer": "example",
    "body": "bar",
    "created_by": "example",
    "title": "foo"
}

HTTP/1.1 200 OK
Cache-Control: max-age=0, private, must-revalidate
Content-Type: application/json; charset=utf-8

Transfer-Encoding: chunked

X-Runtime: 0.017670
X-XSS-Protection: 1; mode=block

{
    "answer": [
        "can't be blank"
    ],
    "body": [
        "can't be blank"
    ],
    "created_by": [
        "can't be blank"
    ],
    "title": [
        "can't be blank"
    ]
}
```

参考 http://qiita.com/yuku_t/items/5df06d50c4c349cc0c1b
　　　　　　　　　https://github.com/jkbrzt/httpie
強制ログアウトしたときのflashが表示されない


デフォルトの動作として、ログアウトするとセッションが切り替わるため、flashの内容がログアウト後の画面に引き継がれない。

そのため、強制ログアウト時に設定したflashはログイン画面に表示されない。

これを表示するようにするためには、config/initializers/devise.rb で以下のように設定を変更する

```
-  # config.sign_out_all_scopes = true
+  config.sign_out_all_scopes = false
```
ubuntu 14.04 + CUDA

- downgrade kernel to 3.13

```bash
sudo apt-get install linux-generic
sudo apt-get autoremove
sudo reboot
```

- select old kernel at GRUB Option and boot ubuntu

- delete new kernel

```bash
sudo aptitude remove --purge linux-headers-4.4.0-36 linux-headers-4.4.0-36-generic linux-image-4.4.0-36-generic linux-image-extra-4.4.0-36-generic linux-signed-image-4.4.0-36-generic
sudo reboot
```

- downgrade X server

```bash
sudo aptitude install xserver-xorg-core-lts-wily
sudo reboot
```

- install cuda

```bash
wget http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda_7.5.18_linux.run
chmod +x cuda_7.5.18_linux.run
sudo sh cuda_7.5.18_linux.run
```

- install gnome-session

```bash
sudo apt-get install gnome-session-fallback
```

- reboot

change login session to GNOME
nodist0.8.5でnpmをアップデートする

# nodistでnpmをアップデートする
nodistを使うことでNode.jsのバージョン管理が出来る。
nodistの説明はいろいろなところにあるので割愛。
今回はnpmのアップデート方法について説明する。

## Node.jsを単体でインストールした場合
```npm -g update npm```とか```npm -g install npm```
でアップデートが出来る。
今までもnodistを使っていてもこれでアップデートできていた気がする・・・
しかしnodist0.8.5にアップデートしたところ、
npmがこの方法だとアップデート出来なくなった。

#nodistを使ってNode.jsをインストールした場合
nodistではNode.jsのバージョン管理以外にもnpmの管理もしている。
### バージョン確認
```nodist npm```
### バージョン追加
```nodist npm add バージョン
例： nodist npm add 3.10.8```

### 使用するnpmバージョンを指定（追加されてなかったら自動で追加して指定）
```nodist npm バージョン
例： nodist npm 3.10.8```

これでnpmの更新が出来る。
ちなみに```latest```も出来るが、npmのv2も取ってきてしまうのでお勧めしない。
（2016/09/09 latestだとv2.15.11が落ちてくる）
Word2013 プログラムにコマンドを送信しているときにエラーが発生しました

##環境
Windows10 
Word2013

##現象
2013で作成した*.docxファイルを、エクスプローラ上からダブルクリックしたときに「プログラムにコマンドを送信しているときにエラーが発生しました」というメッセージが表示される。
メッセージが表示されるのがうざいだけで、その後のファイル操作は可能。

とにかくうざいのでどうにかしたい。

##やったこと
Google先生に問い合わせたところ、各種方法があるっぽい。だけどどの方法を試しても直らなかった。
以下、やったけど出来なかったこと。

- [Microsoft Fix it 9815935](https://support.office.com/ja-jp/article/PC-%e3%81%8b%e3%82%89-Office-2016%e3%80%81Office-2013%e3%80%81%e3%81%be%e3%81%9f%e3%81%af-Office-365-%e3%82%92%e3%82%a2%e3%83%b3%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=ja-JP&rs=ja-JP&ad=JP) を使用して削除を実施後に再インストール
- 普通にアンインストールして再インストール
- クイック修復
- オンライン修復
- スタートのWordショートカットを右クリック＞ショートカットタブの詳細設定から「管理者として実行」にチェック
- ↑「管理者として実行」のチェック外す
- Excelの詳細設定から「DDEを使用する～なんちゃら」のチェック外す
- winword.exe /safe　でセーフモード起動
- winword.exe /a　で起動
- 次のレジストリを削除　HKEY_CLASSES_ROOT\Word.DocumentMacroEnabled.12\shell\Open

##で、最終的にできた
ここまでやって出来なかったのですが、削除するレジストリに別のがあったみたいです。
↓のレジストリを削除したら解決しました。上で削除しているレジストリとは別のやつ。

<Font color="red">HKEY_CLASSES_ROOT\Word.Document.12\shell\Open\ddeexec</font>

お前か。お前だったのか。
設定画面生成ライブラリのBohrを試す


UITableViewで設定画面とかを作るのが面倒なので、githubにていつくかピックアップして試したみた。
まずは　[Bohr](https://github.com/DavdRoman/Bohr)というのを試してみる。
使用したバージョンは3.0.0。スター数はこれを書いている時点では938。

##実現したい事
- プロフィールとかアカウントの設定等の画面を、簡単に構築したい。
- 表示するデータはAPIサーバー等やリモートから取得して表示する

## ざっくりとまとめ
- セクションを追加して、その中にセルを追加という流れを、ブロックを使用して簡単に記述できる。視覚的にも見やすい。
- セル追加時に指定するキー名を使用してNSUserDeaultとセルの表示内容がバインディングされる。
 - UIでデータを変更すると、指定したキー名でへ自動的に保存
 - 指定したキー名のデータがUIに反映される
- 各セルはNSUserDefaultにバインドされるので、任意のデータを画面に反映したい場合はNSUserDefaultを介して行う。
- NSUserDeaultを介して値を設定する設計のため、使用するキー名を考慮しないとまずい。保存されるデータも考慮する必要あるかも。

##基本的な使い方
インストールはcocopodsを使用した。インストール後は、ブリッジヘッダを作成して下記の記述を追加する

```
#import <Bohr/Bohr.h>
```

サンプルはgithubからクローンすればデモプロジェクトがあるので、それを見ればすぐ理解できるとおもう。

- 追加したセルのプロパティを変更したい場合は、ハンドラでセルのオブジェクトを受け取れるのでそこで設定。
- 幾つかのプロパティはBohrが追加したプロパティで上書きされるので注意。updateAppearanceを検索すると、上書きされているプロパティがわかる

```
import UIKit

class SettingViewController: BOTableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // 1つめのセクション
        self.addSection(BOTableViewSection(headerTitle: "セクション1", handler: { section in
            section.addCell(BOSwitchTableViewCell(title: "タイトル1", key: "key_1", handler: { (cell:AnyObject!) in
            }))
            section.addCell(BOSwitchTableViewCell(title: "タイトル2", key: "key_2", handler: { (cell:AnyObject!) in
                guard let switchCell = cell as? BOSwitchTableViewCell else {
                    return
                }

                // ここでプロパティ等にアクセスできる
                switchCell.toggleSwitch.tintColor = UIColor.lightGrayColor()

                // スイッチセルの場合はonTintColorはsecondaryColorプロパティで上書きされる
                switchCell.secondaryColor = UIColor.redColor()
            }))
        }))

        // 2つめのセクション
        self.addSection(BOTableViewSection(headerTitle: "セクション2", handler: { section in
            section.addCell(BOTextTableViewCell(title: "テキスト入力", key: "text_1", handler: { (cell:AnyObject!) in
                guard let textFieldCell = cell as? BOTextTableViewCell else {
                    return
                }
                // ここでプロパティ等にアクセスできる
                textFieldCell.textField.backgroundColor = UIColor.darkGrayColor()

                // テキストセルの場合はonTintColorはsecondaryColorとうプロパティで上書きされる
                textFieldCell.mainColor = UIColor.redColor()
                textFieldCell.secondaryColor = UIColor.whiteColor()
            }))
        }))


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
```

###生成結果
上記の例だと以下のような画面ができあがる。プロパティ変更の結果をわかりやすくするため適当な色を設定した。
![スクリーンショット.png](https://qiita-image-store.s3.amazonaws.com/0/4361/6c1ce77d-7aab-4dec-9578-8d9b16715cbf.png)


## 非同期のデータを画面に反映する
セルの生成時に指定したキー名でNSUserDefaultを監視されていて変更があれば、セルのUIパーツにデータが反映とテーブルのリロードも行われる。(NSUserDefaultの監視はBOSettingクラスで行っている)
例えば上記の例で2つめのセクションのテキストフィールドに、データを設定した場合は以下のようにする
```
NSUserDefaults.standardUserDefaults().setObject("this is test", forKey: "text_1")
```
GradleでAsciiDoc文書 with PlantUMLをPDF出力する (その1)

# 前段
下記ページがとても参考になりました。

* http://qiita.com/tokumoto/items/d37ab3de5bdbee307769

これに加えて、出力されるPDFのthemeカスタマイズに向けた環境を準備する話です。

# 概要
[IntelliJ IDEAでPlantUMLを書く](http://qiita.com/ot-aoyagi/items/d2bfbff219c592822d53)に続き、今回はマークアップ言語[AsciiDoc](http://www.methods.co.nz/asciidoc/)とPlantUMLを組み合わせた文書作成環境を準備します。

# 構成

シンプルなGradleプロジェクトです。

```
$ tree
.
├─build.gradle   // PDF生成のためのビルド定義をここに記述
├─docs           // 出力先
└─src
    └─docs
       └─asciidoc  // AsciiDoc(*.adoc)
           └─theme // 独自themeファイル

(Gradle Wrapperは省略)
```

今回作成するのは、`build.gradle`と`*.adoc`だけです。
独自themeはデフォルトのものをコピーして使います。

# 設定
## build.gradle

```
plugins {
    id 'org.asciidoctor.convert' version '1.5.3'
}
apply plugin: 'org.asciidoctor.convert'
apply plugin: 'org.asciidoctor.gradle.asciidoctor'

dependencies {
    asciidoctor 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.3'
    asciidoctor 'org.asciidoctor:asciidoctorj-diagram:1.3.1'
    asciidoctor 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.11'
}
asciidoctorj {
    version = '1.5.4'
}

asciidoctor {
    backends = ['html5', 'pdf']
    requires = ['asciidoctor-diagram']
    outputDir = file('docs')
    attributes (
            'imagesdir' : "$rootDir/docs/images",
            'toc-title' : '\u76EE\u6B21',  // 「目次」
            'numbered' : true,
            'pdf-stylesdir' : "theme",     // 独自テーマ格納ディレクトリ
            'pdf-style' : 'custom',        // テーマ名
    )
}
defaultTasks 'asciidoctor'

```

## *.adoc

(省略)


## theme

gradleプラグイン`asciidoctorj-pdf`に同梱されているデフォルトのthemeファイルを取り出します。
まずは下記jarを展開すると...


* $HOME/.gradle/caches/modules-2/files-2.1/org.asciidoctor.asciidoctorj-pdf/1.5.0-alpha.11/{ハッシュ値}/asciidoctorj-pdf-1.5.0-alpha.11.jar

下記場所から`asciidoctor-pdf`のthemeファイルが取り出せます。

* gems/asciidoctor-pdf-1.5.0.alpha.11/data/themes/default-theme.yml

これをプロジェクトフォルダ`src/docs/asciidoc/theme`に、`custom-theme.yml`という名前で配置しましょう。
名前の`custom`の部分は`build.gralde`で`pdf-style`として設定した名前です。

# 実行

[Gradle Wrapper](http://gradle.monochromeroad.com/docs/userguide/gradle_wrapper.html)で実行します。

```
$ ./gradlew

# もしくは

$ ./gradlew asciidoctor
```

`src/docs/asciidoc/*.adoc`がPDFに変換され、`docs/pdf`に出力されます。

# その他
* 日本語ファイル名のadocは、PDF化するとファイル名が文字化けしてしまいました。
* IntelliJを、AsciiDocとPlantUMLのエディタとして使っています。文書作成からPDF生成(Gradle実行)までこの中で実現できるので中々快適です。
* 今後はthemeファイルのカスタマイズを進めていきます。

# 参考
* https://github.com/asciidoctor/asciidoctor-gradle-examples
* https://github.com/asciidoctor/asciidoctor-pdf/blob/master/docs/theming-guide.adoc
fish_right_prompt

[fish](http://fish.rubikitch.com) をイジイジしています。
プロンプトのカレント・ディレクトリの略記がイイですね。ああいうのは短い方が好みです。
でも zsh 好きとしては右側に表示させたいな、と……思ったら、[サポートされていました](https://github.com/fish-shell/fish-shell/issues/80)。

で、俺の`~/.config/fish/functions`を見てやー。

```shell-session:fish_right_prompt.fish
function fish_right_prompt --description '右側にカレント・ディレクトリを表示'
  prompt_pwd
end
```

```shell-session:fish_prompt.fish
# ほとんどデフォルトです
function fish_prompt --description 'Write out the prompt'
  # Just calculate this once, to save a few cycles when displaying the prompt
  if not set -q __fish_prompt_hostname
    set -g __fish_prompt_hostname (hostname|cut -d . -f 1)
  end

  set -l color_cwd
  set -l suffix
  switch $USER
  case root toor
    if set -q fish_color_cwd_root
      set color_cwd $fish_color_cwd_root
    else
      set color_cwd $fish_color_cwd
    end
    set suffix '#'
  case '*'
    set color_cwd $fish_color_cwd
    set suffix '>'
  end

  # (prompt_pwd) を消してます
  echo -n -s "$USER" @ "$__fish_prompt_hostname" ' ' (set_color $color_cwd) (set_color normal) "$suffix "
end
```

でまあ、こんな感じになるワケです。
![名称未設定.jpg](https://qiita-image-store.s3.amazonaws.com/0/28376/ac2ccdc1-fee5-653d-05c4-972711edbba4.jpeg)

git のブランチ表示はどうしようかなあ……。`fish_config`のサンプルはどれも今ひとつで……。

### 追記
これでイイや……。

```shell-session:fish_right_prompt.fish
function fish_right_prompt --description '右側に pwd と git status を表示'
  prompt_pwd
  __terlar_git_prompt
end
```
![名称未設定.jpg](https://qiita-image-store.s3.amazonaws.com/0/28376/9af7249e-87bd-e1f6-4b65-90793a6c84d3.jpeg)
`__terlar_git_prompt` は `/usr/local/Cellar/fish/2.3.1/share/fish/functions/__terlar_git_prompt.fish` で定義してあります。

---

### 追記の追記
version 2.7.2 に上げたら、なんか git status の表示がおかしくなったので、 `__fish_git_prompt` に変更……。

```fish_right_prompt.fish
function fish_right_prompt --description '右側に pwd と git status を表示'
  prompt_pwd
  __fish_git_prompt
end
```

```config.fish
set __fish_git_prompt_showdirtystate 'yes'
set __fish_git_prompt_showstashstate 'yes'
set __fish_git_prompt_showupstream 'yes'
set __fish_git_prompt_showuntrackedfiles 'yes'
set __fish_git_prompt_show_informative_status 'yes'
set __fish_git_prompt_showcolorhints 'yes'
```

以下を参考にしました。

- [fishで手間をそこそこに使えるLinuxのシェル環境を作る - お菓子食べる部](http://nbisco.hatenablog.com/entry/2017/02/19/223410)
learning Redux from todo


- [learning Redux from todo[1]](http://qiita.com/xiangzhuyuan/items/a26e97c6cac476369e37)
- [learning Redux from todo[2]](http://qiita.com/xiangzhuyuan/items/86c5c6508e8481c2dd3a)
- [learning Redux from todo[3]](http://qiita.com/xiangzhuyuan/items/9ce23a8c9f3b26c48838)
- [learning Redux from todo[4]](http://qiita.com/xiangzhuyuan/items/c082e97c3b863602fccf)
- [learning Redux from todo[5]](http://qiita.com/xiangzhuyuan/items/4e6f61a27c068b4f33e7)
[C++Builder 10Seatle] TWebBrowserコンポーネントで起きた3つの困ったこと

## はじめに
　タイトルどおり、めっちゃ困ったことが3つありましたので、困ったこととその対処法を残しておきます

## Visible
　TWebBrowserには一応Visibleプロパティがありますが、これは意味がありません。
　もし隠したり表示したりするのであれば、他の手段が必要です。

　→　対策）SetBoundsで画面外に逃がすことにしました。

```cpp:01.cpp
WebBrowser->SetBounds(-100, -100, 1, 1);
```

## Parent
　Parentプロパティはdi_IDispatch型になっていて普通にTForm型を入れることはできません。
　static_castしてもきっと怒られて終わります

　→　対策）TWinControlでキャストしましょう

```cpp:02.cpp
static_cast<TWinControl*>(MyForm->WebBrowser)->Parent = SecondForm;
```

## SetBounds(x, y, width, height)
　難関です。なんとこいつ、他のコンポーネントと動きが違います。笑えません。
　どこが違うかというとwidthかheightに0以下を入れて関数を動かしてしまうと、
　動かしたが最後、二度と出てきません。マジかよって思いますよね。マジです。

　もしそんなことないって方教えてください。
　当方の環境は Win10 C++Builder 10Seatleです。

　→　対策）WidthとHeightは1以上の整数にしましょう

```cpp:03.cpp
WebBrowser->SetBounds(-100, -100, 1, 1);
```

## 結論
　TWebBrowserを使うのはやめましょう。
　使ってもTCppの方がいいです。
　それでもスクロールバー消せませんしね。何じゃそりゃ。
　もうこりゃWebKitとかから自力でビルドした方がいいんでしょうね。

## 追記
　C++Builder XE4でも再現を確認いただきました
Windows 10シャットダウン不能の対処法

この間Windows 10シャットダウンできないとのケースはよく現れます。どうすればWindows 10シャットダウン不能エラーを解決できるのでしょうか。次はシャットダウンできない対処法を皆さんに紹介します。

<strong>プロパティでドライブツールを使用してエラーをチェック</strong>

「エクスプローラー」＞「PC」＞スキャンしたいHDD/ SSDを右クリック＞ 「プロパティ」＞「ツール」＞エラーチェックの「チェック」をクリック＞「ドライブのスキャン」でスキャンが完了したら、「詳細の表示」を押すと、chkdskログが表示されます。
![aa.png](https://qiita-image-store.s3.amazonaws.com/0/124905/a3623da8-9223-5360-f46a-27edea494ff2.png)
![bb.png](https://qiita-image-store.s3.amazonaws.com/0/124905/93aac059-e8a4-93d1-eae7-9f9d26fdc683.png)
![cc.png](https://qiita-image-store.s3.amazonaws.com/0/124905/dea4e753-7804-f0aa-8860-1aeb2939e40e.png)
![dd.png](https://qiita-image-store.s3.amazonaws.com/0/124905/cb252347-75f5-5dc5-90f5-4c2d542338cd.png)


<strong>無料ソフトを使ってドライブのエラーをチェック</strong>

<a href="https://jp.easeus.com/partition-manager-software/free.html">EaseUS Partition Master Free</a>は、Windows10環境でハードディスク/パーティションの不良セクタ、ファイルシステムエラー、および他のディスクエラーを検出し修正できます。
![ee.png](https://qiita-image-store.s3.amazonaws.com/0/124905/31766510-6c06-4d36-39b3-8c677cd9667d.png)
・ファイルシステムエラーをチェックするため、「パーティションのプロパティをチェックする」にチェックを入れます。
・「WindowsのChkdsk.exeを使用して検出したエラーを修正する」：検出されたエラーを修正します。
・「サーフェーステスト」：セクターエラーのあるディスクやパーティションの検出を行います。テストが完了した後、レポートが生成されます。
Docker for MacのProxy設定

# やりたいこと
Proxy環境下でDocker for Macを使いたい。

# 結論
ステータスバーにあるDockerアイコンから設定する。

# ハマったこと
環境変数http_proxyを設定すれば動くと思ってた。

# 設定方法
ステータスバーのクジラアイコン > Preference... > Advancedタブにある「HTTP proxy settings:」を設定

# 備考
検索ドメインは機能しないっぽい。
Bash on Ubuntu on Windows

# Overview
Windows10 Anniversary Updateから、公式にBash(UbuntuのBashシェル)がWindowsに取り入れられた。（但しまだBeta）

![BoW.png](https://qiita-image-store.s3.amazonaws.com/0/138821/f9a58442-8df8-240d-5580-1e16fdfda9d8.png)

技術的なことについては、以下にいろいろ書いてある。

Bash on Ubuntu on Windowsとは？ そのインストールと使い方
http://www.buildinsider.net/enterprise/bashonwindows/01

# インストール&初期設定
[このあたり](http://www.google.com/url?q=http%3A%2F%2Fqiita.com%2FAruneko%2Fitems%2Fc79810b0b015bebf30bb&sa=D&sntz=1&usg=AFQjCNGMtI3LqQzoQFPnIgW6-_7X1u9L2Q)を参考に。
大前提として「Windows10 Anniversary Update(Version 1607)」が適用済みであること。
なお、Anniversary Updateは1時間ぐらいかかるので注意が必要。
また、Windows Updateでうまく適用できない場合はMicrosoftのサイトから直接Updateファイルを落としてきたほうが早い。

Windows 10 の更新履歴
https://support.microsoft.com/ja-jp/help/12387/windows-10-update-history

Bash on Ubuntu on Windowsをインストールしてみよう！
http://qiita.com/Aruneko/items/c79810b0b015bebf30bb

【シェル芸人への道】Bash on Windowsを探検する
http://qiita.com/t_nakayama0714/items/9d7cfc5029a9b2ea423d

# 不具合関連
## 日本語表示

2016/09の時点で日本語の表示がいまいちなので、
インストール後に下記のコマンドで言語設定を「en-US.UTF8」にしたほうが便利。

`$ sudo update-locale LANG=en_US.UTF8`

## ネットワーク関連
ネットワーク回りがまだいまいちでNETLINK Socketの対応などもまだ。
また、pingを打つには管理者権限でbashを起動する必要がある。

Add NETLINK Socket support.
https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/14605521-add-netlink-socket-support

WSL - Frequently Asked Questions
https://msdn.microsoft.com/commandline/wsl/faq

> **Why does the ping command require bash to be started with admin privileges?**
>
>This is a known issue that has to due with differences between the way the Linux and the Windows kernel handle the ICMP request that makes ping possible. We plan to address this in future releases.  


# Tips
## パスワードを忘れたのでリセットしたい
久しぶりに起動してsudoしようとしたりすると、パスワードを忘れていたりする。。
その場合には、以下のようにしてリセット可能。

１. コマンドプロンプトから下記を実行し、BoWのデフォルトユーザをrootにする。

```bash:cmd
lxrun /setdefaultuser root
```

２. BoWを起動するとrootになっているので、自分のユーザのパスワードをリセットする。

```bash:BoW
# passwd [パスワードを忘れたユーザ名]
```

３. 再度コマンドプロンプトからBoWのデフォルトユーザを元に戻す。

```bash:cmd
lxrun /setdefaultuser [パスワードを忘れたユーザ名]
```
[Sphinx] #4 基礎編 (ロール for Web)

# 前提条件

- Sphinxの利用環境が準備できていること
    - 参考: http://qiita.com/tcsh/items/ce758fd45f748463c4b9#%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89-%E5%8F%82%E8%80%83
- ドキュメントプロジェクトを作成してあること
    - http://qiita.com/tcsh/items/b102d70212d97aede46f


0. 事前作業
===========

プロジェクトディレクトリの決定
------------------------------

```bash:変数の設定:
DIR_HANDSON="${HOME}/$( date +%Y%m%d )-handson" \
     && echo ${DIR_HANDSON}

FILE_HANDSON="${DIR_HANDSON}/main/index.rst" \
     && echo ${FILE_HANDSON}
```


プロジェクトディレクトリへの移動
--------------------------------

```bash:コマンド:
cd ${DIR_HANDSON}/main/
```


1. ロールとは
=========================

## ロール (:で囲まれているもの)


インラインで特殊な機能を実現するものです

使う頻度は高くないですが、使いこなしできるとドキュメントの利便性がかなり向上します。
(クロスリファレンス、ダウンロードなど)

```text:ロールの書式:
文字列\ :ロール名:`文字列 <パラメータ>` \文字列
```


2. ダウンロードリンク
=========================

:download:ロールを利用します。

```bash:コマンド:
touch download.txt

cat << \EOF >> ${FILE_HANDSON}

- :download:`テキストファイルのダウンロード <./download.txt>`

EOF
```

```bash:コマンド(更新):
echo '---(ここから)---' \
  && cat ${FILE_HANDSON} \
  && echo '---(ここまで)---'
make html
```


任意: バージョン管理ツールへの登録とコミット
============================================

```bash:コマンド(Mercurialの場合):
hg commit -m 'created repository.' \
  && hg log
```

完了
======
新しいマシンやスマフォで Slack の各種チームに入るのが面倒くさい！！！という時

新しいマシンやスマフォで Slack App で各種チーム(たくさんある)にログインがすこぶる面倒くさい･･･面倒くさい･･･面倒くさい･･･。という経験したことありませんか。私は4回ぐらいあります。1password 使ってるからパスワードもバラバラだしね･･･。

そんなときは

- https://slack.com/signin/find

のページから Find Another Team を押して自分のメールアドレスを入力すると、そのアカウントに紐付いてるすべての Team アカウントにログインできるマジックリンクがメールで送られてくる･･･！

あとは各種メーラーで、そのリンクをクリックしていくと、Slack app が立ち上がり自動でそのチームにログインできます。PCでもスマフォでも使えるし、うおー便利、マジックリンクが出来た当初から知っておきたかった･･･！！
unkown parts in webpack


1. index.html

```
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Redux Todos Example</title>
  </head>
  <body>
    <div id="root"></div>
    <!--
      This HTML file is a template.
      If you open it directly in the browser, you will see an empty page.

      You can add webfonts, meta tags, or analytics to this file.
      The build step will place the bundled scripts into the <body> tag.

      To begin the development, run `npm start` in this folder.
      To create a production bundle, use `npm run build`.
    -->
  </body>
</html>

```
there is no script tag which would use redux&react.

2. start by `react-script`
3. check the source code when running page:

![Kobito.fsJmfn.png](https://qiita-image-store.s3.amazonaws.com/0/56713/d17f6136-46ce-9580-e6b5-631de7da816f.png "Kobito.fsJmfn.png")


actually there is a injection which append the redux&react function into page body.

so now I check the `react-script`, which maybe use `webpackdevserver` to implement the web server part job, but how can I find the logic code that **inject** the script into page content?

as I know about this, maybe many things just follow some conventions stuff, like from `webpack.config.js` file.

```
...

output: {

  fileanem: 'static/js/bundle.js'
  ...
}

...

```

like the above config section.


#check this one:

this `HtmlWebpackPlugin` could read a **template** from a html file to generate a final html output stream.

> /node_modules/react-scripts/config/webpack.config.dev.js

```
...
  plugins: [
    // Generates an `index.html` file with the <script> injected.
    new HtmlWebpackPlugin({
      inject: true,
      template: paths.appHtml,
    }),
    
    
    ...
```
[Emacs] magit-blame紹介


~~犯人探しするときに~~ 便利な`git blame`のmagit上での使い方を紹介

## magit-blameモード

`git blame`を見たいファイルを開いた状態で`M-x magit-blame`でmagit-blameモードになる。

[magitチュートリアル](http://qiita.com/maueki/items/70dbf62d8bd2ee348274)で作ったリポジトリ上で実行するとこうなる。

![magit-blame_tut1.png](https://qiita-image-store.s3.amazonaws.com/0/39647/6ff7d3d9-6738-598b-ff1d-5f7ccc87a84f.png)

<kbd>q</kbd>でmagit-blameモードを終了できる。

## 基本動作

| キー | 動作 |
| :--: | :--: |
| <kbd>n</kbd> | 次のチャンクへ |
| <kbd>p</kbd> | 前のチャンクへ |
| <kbd>N</kbd> | 同一コミットの次チャンクへ |
| <kbd>P</kbd> | 同一コミットの前チャンクへ |

## ファイルを遡りたい場合

例えば上の例でEを追加する前のファイルに遡りたい場合は、Eにカーソルを合わせて<kbd>b</kbd> <kbd>b</kbd>でその時点のファイルに遡ることが可能。

![magit-blame-tut2.png](https://qiita-image-store.s3.amazonaws.com/0/39647/f6e1c1ff-8eab-f7cb-47bd-e99650d5ec53.png)

<kbd>q</kbd>で遡るまえに戻ることができる。
Git管理外のディレクトリからGitリポジトリを操作する方法

コマンドラインで操作している分には必要になるケースは少ないけど、スクリプトの中で使おうとした時に必要になったので。

Gitコマンドで例えばログを見ようとした時、カレントディレクトリがそのリポジトリディレクトリ下であれば、問題なく ``git log`` できる。

これが、別のリポジトリディレクトリから ``git log`` しようとすると、

```bash
 % git log ../hoge-repo
fatal: ../hoge-repo: '../hoge-repo' is outside repository
```

って言われたり、Git管理下のディレクトリでなければ、

```bash
 % git log /path/to/hoge-repo
fatal: Not a git repository (or any of the parent directories): .git
```

って言われたりする。

カレントディレクトリに関係なくgitコマンドを発行する場合は、以下のようにする。

```bash
git --work-tree=/path/to/hoge-repo --git-dir=/path/to/hoge-repo/.git log
```

Gitのバージョン次第では使えないみたいなので、使っているGitのバージョンに注意する必要あり。

### 参考
[How can I use full paths in git? - Stack Overflow](http://stackoverflow.com/questions/8560618/how-can-i-use-full-paths-in-git)
サードパーティライブラリにユーザデータにアクセスするコードが含まれていてリジェクトされる件

Xcode8GMでビルドしたアプリをsubmitしたところ以下の様なメールが届き、iTCからsubmitしたバイナリが削除されました。

```
Title: iTunes Connect: Your app "<app name>" has one or more issues

Dear developer,
We have discovered one or more issues with your recent delivery for "<app name>". To process your delivery, the following issues must be corrected:

This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCalendarsUsageDescription key with a string value explaining to the user how the app uses this data.

This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.

This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

Once these issues have been corrected, you can then redeliver the corrected binary.

Regards,

The App Store team
```

iOS10からユーザデータにアクセスする際の説明文をplistに組み込むことが必須になりましたが（[参考](http://dev.classmethod.jp/smartphone/iphone/ios10-privacy-data-purpose-description/)）、私のアプリではそのようなコードを書いた覚えがありません。

原因はサードパーティのライブラリにありました。nmコマンドを使って各ライブラリのバイナリをひとつずつチェックしてみたところ、以下が該当しました。

```
nm Pods/Google-Mobile-Ads-SDK/GoogleMobileAdsSdkiOS-7.5.0/GoogleMobileAds.framework/GoogleMobileAds  | grep OBJC_CLASS | grep EKEvent
                 U _OBJC_CLASS_$_EKEvent
                 U _OBJC_CLASS_$_EKEventEditViewController
                 U _OBJC_CLASS_$_EKEventStore
                 U _OBJC_CLASS_$_EKEventStore

nm Pods/FBAudienceNetwork/FBAudienceNetwork.framework/FBAudienceNetwork | grep UIImagePickerController
                 U _OBJC_CLASS_$_UIImagePickerController
```

今回の場合は、上記の広告系ライブラリにカレンダーやフォトライブラリにアクセスするようなコードが含まれていたようです。

とれる対応としては以下のいずれかでしょう。
- plistにまっとうな理由を書く
- ライブラリを使うのをやめる

Appleからの公式見解も出ています。
https://forums.developer.apple.com/message/176579#176579

前者に対応する場合、ライブラリ提供元に問い合わせて、どのような用途で上記コードを使っているかを問い合わせる必要がありそうです（そのうちアナウンスがあるかもしれません）。

当然上記以外にも該当するライブラリはおそらくたくさんあるはずなので、どこかで共有できればよいですね。

*2016/09/09 13:07追記*
AdMobは来週あたりに見解を出すそうです
https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/ios/y-IxErXawxg
systemd時代のDockerをProxy環境下で使う

# tl;dr

```
whywaita@client:~$ cat /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://YOUR_PROXY_SERVER:8080/" "HTTPS_PROXY=http://YOUR_PROXY_SERVER:8080/"
```

# 前提

```
whywaita@client:~$ cat /etc/issue
Ubuntu 16.04 LTS \n \l

whywaita@client:~$ docker --version
Docker version 1.12.1, build 23cf638
```

# 本題

sysV時代には `/etc/default/docker` にプロキシ設定を記載していましたが、systemd時代になってそちらは読み込まれなくなったので、適切な位置に記載しましょうという話でした。

`/etc/systemd/system/docker.service.d/http-proxy.conf` を用意してー

```
whywaita@client:~$ cat /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://YOUR_PROXY_SERVER:8080/" "HTTPS_PROXY=http://YOUR_PROXY_SERVER:8080/"
```

systemdに設定ファイルを読み込ませてー

```
whywaita@client:~$ sudo systemctl daemon-reload
```

ちゃんと読み込まれてるか確認してー

```
whywaita@kirihiko:~$ systemctl show --property=Environment docker
Environment=HTTP_PROXY=http://YOUR_PROXY_SERVER:8080/ HTTPS_PROXY=http://YOUR_PROXY_SERVER:8080/
```

dockerデーモンを再起動！

```
whywaita@client:~$ sudo systemctl restart docker
```

LGTM!!

[![LGTM](https://lgtm.in/p/oYgl7aETp)](https://lgtm.in/i/oYgl7aETp)

```
whywaita@client:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/
```

# 参考

https://docs.docker.com/engine/admin/systemd/#/http-proxy
英語リスニング力を高めたいRubyistに贈るRuby英語Podcastまとめ

rubykaigi 2016に出て、やっぱり英語リスニング力上げたいなぁ〜と思い直したので書いてみた。**追記編集リクエスト大歓迎**。

個人的にはRuby Roguesをよく聴いてる。

- [The Ruby Rogues](https://devchat.tv/ruby-rogues)
- [Ruby5](https://ruby5.codeschool.com/)
- [Ruby on Rails Podcast](http://5by5.tv/rubyonrails)
- [etc](https://www.netguru.co/blog/top-7-ruby-on-rails-podcasts)
  - 他にもpodcastアプリでrubyでググれば色々出てくるはず
  - 他の言語も含めるとgithubの[awesome-geek-podcasts](https://github.com/guipdutra/awesome-geek-podcasts)も良い
CloudFrontでHTTP2対応する方法とChromeでの確認方法

AWSのCloudFrontがHTTP2に対応しました。
https://aws.amazon.com/jp/about-aws/whats-new/2016/09/amazon-cloudfront-now-supports-http2/


## HTTP2対応

CloudFrontの設定項目に```Supported HTTP Versions```というのが増えています。

![Group.png](https://qiita-image-store.s3.amazonaws.com/0/7132/2d56736e-7426-017d-8248-cf8526fe93f8.png)

```HTTP/2, HTTP/1.1, HTTP/1.0```の方を設定して保存すれば設定完了です。


## 確認方法

ChromeでDevToolsを開いてもデフォルトでは確認ができないので少し設定を加えます。

Networkタブでヘッダーカラムを右クリックして、表示項目を選択します。
![Group2.png](https://qiita-image-store.s3.amazonaws.com/0/7132/5754f41c-d350-ab83-ec50-ad803c4f813a.png)

ここでPriorityとProtocolにチェックを入れると、２つ表示されます。

![Group3.png](https://qiita-image-store.s3.amazonaws.com/0/7132/c5e3c51b-b5da-05ea-ccc7-0414484ac060.png)

Protocolが```ｈ２```となっていればhttp2でのアクセスができています。
またPriorityでhttp2の優先順位が確認できます。
RTX1200 静的DNSの設定メモ

## はじめに
Yamaha RTX1200の設定時のメモになります。

## 概要
RTX１２００に静的DNSの設定を行う必要があったのでそのメモになります。
基本GUIでできますが、こちらはコマンドのみでしか登録できませんでしたので自分のメモとして残しとこうかと。

## 詳細
----
#### 1. 静的DNSを登録

ip host FQDN IPアドレス

----
#### 2. キャッシュのクリア

clear dns cache

## その他

http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/dns/ip_host.html

http://www.rtpro.yamaha.co.jp/RT/manual/rt-common/operation/clear_dns_cache.html
ポエム > 精神と時の部屋 > 仕様が破綻するまで 

関連 http://qiita.com/acro5piano/items/d18114b34f6ebc7a0d8b
関連 http://qiita.com/acro5piano/items/d18114b34f6ebc7a0d8b#comment-8ca3c99922971072394d

## 仕様 v0.1

- 仕様
  - 入所者が365日過ごした時に外部では1日しか経過しないこと

- 顧客要求 (入所者)
  - 入所者が集中しながら快適にすごせるように

## 仕様 v0.2

- 仕様
  - 入所者が365日過ごした時に外部では1日しか経過しないこと
  - 入所者が集中しながら快適にすごせること
     - 快適な椅子を追加

- 顧客要求 (入所者)
  - 長期滞在中(1年の間)に技術情報も更新されていくこと
     - Qiitaの内容が更新されていくこと
     - 他の技術情報が更新されていくこと

## 仕様 v0.3
     
- 仕様
  - 入所者が365日過ごした時に外部では1日しか経過しないこと
  - 入所者が集中しながら快適にすごせるように
     - 快適な椅子を追加
  - 長期滞在中(1年の間)に技術情報も更新されていくこと
     - 入所者の仕事だけ外部でゆっくりした時間経過すること
     - それ以外は外部で通常の時間経過すること
     - space-time continuumの不連続面が発生
        
破綻した。
[Git] 古いリモートリポジトリから新しいリモートリポジトリへブランチ等も含めて引っ越し

備忘録

```
$ git clone --mirror OLD_REPO_URL
$ git remote add new NEW_REPO_URL
$ git push --mirror new
```

上記コマンドでブランチ, タグも含めて引っ越しできる
[Unity5.4]Unityでクロマキー合成シェーダーを作成

ViveでのVRコンテンツを製作している際にクロマキー合成を行うシェーダーを作成することになったのですがなかなか綺麗に抜ける
クロマキー合成のソースコードが見当たらなかったので自分で関係する記事を探して作成しました。
※Unityのシェーダーはこれが初めてなので至らないとこが多々あると思います…。

↓参考記事
[クロマキー合成 + 立体視が可能な Ovrvision SDK v0.6 を試してみた ](http://tips.hecomi.com/entry/2014/05/08/004521)
[RGBからHSVへの変換と復元](http://hooktail.org/computer/index.php?RGB%A4%AB%A4%E9HSV%A4%D8%A4%CE%CA%D1%B4%B9%A4%C8%C9%FC%B8%B5)
#ソースコード
```Chromakey.shader
Shader "Custom/Chromakey" {
		Properties{
			_MainTex("Base ( RGB ) Trans ( A )", 2D) = "white" { }
			_MaxHue("Max Hue", Range(0, 1)) = 1
			_MinHue("Min Hue", Range(0, 1)) = 1
			_MaxSaturation("Max Saturation", Range(0, 1)) = 1
			_MinSaturation("Min Saturation", Range(0, 1)) = 1
			_MaxValue("Max Value", Range(0, 1)) = 1
			_MinValue("Min Value", Range(0, 1)) = 1

		}
		SubShader{
				Tags{ "Queue" = "Overlay+1" "RenderType" = "Overlay" }
				LOD 200
				Pass{
					Lighting Off
					ZWrite Off
					Ztest Always
					Blend SrcAlpha OneMinusSrcAlpha

					CGPROGRAM
					#pragma vertex vert
					#pragma fragment frag
					#include "UnityCG.cginc"

					sampler2D _MainTex;
					float _MaxHue;
					float _MinHue;
					float _MaxSaturation;
					float _MinSaturation;
					float _MaxValue;
					float _MinValue;

					struct v2f {
						float4 pos : SV_POSITION;
						half2 uv : TEXCOORD0;
						float2 uv_MainTex : TEXCOORD0;
					};

					//  RGB値をHSV値に変換
					float3 RGBtoHSV( float3 rgb) {
						float hue = 0;
						float minValue = min(rgb.r, min(rgb.g, rgb.b));
						float maxValue = max(rgb.r, max(rgb.g, rgb.b));
						if (minValue == maxValue) {
							hue = 0;
						}
						else if (minValue == rgb.b) {
							hue = 60 * (rgb.g - rgb.r) / (maxValue - minValue) + 60;
						}
						else if (minValue == rgb.r) {
							hue = 60 * (rgb.b - rgb.g) / (maxValue - minValue) + 180;
						}
						else if (minValue == rgb.g) {
							hue = 60 * (rgb.r - rgb.b) / (maxValue - minValue) + 300;
						}
						hue /= 360;
						float value = maxValue;
						float saturation = maxValue - minValue;
						float3 hsv = float3( hue, saturation, value ); 
						return hsv;
					}

					v2f vert( appdata_img v ) {
						v2f o;
						o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
						o.uv = v.texcoord;
						return o;
					}

					//  HSV値で判定
					float4 frag( v2f i ) : COLOR0 {
						float3 colors = tex2D( _MainTex, i.uv_MainTex ).rgb;
						float3 hsvcolor = RGBtoHSV(colors);
						if (hsvcolor.r >= _MinHue && hsvcolor.r <= _MaxHue) {
							if (hsvcolor.g >= _MinSaturation && hsvcolor.g <= _MaxSaturation) {
								if (hsvcolor.b >= _MinValue && hsvcolor.b <= _MaxValue) {
									discard;
								}
							}
						}

						return float4(colors, 1.0);
					}
					ENDCG
			}
	}
	FallBack "Tranparent/Diffuse"
}
```

#使用感
個人的には綺麗に抜けているとは思いますがちょっと抜けているとろろがジャギってしてしまっているので対象の輪郭を綺麗に抜けるような工夫が必要だなと思っています。
![chromakey.PNG](https://qiita-image-store.s3.amazonaws.com/0/139388/f1743a5f-eec5-85b8-a6b0-76b7e1d7c399.png)
↑試しに黄緑色のグリーンバックを抜いてみた

あと抜く色の指定も少しコツがいるので改善点だと考えています。
有名ライブラリのXcode8 GM対応ブランチ早見表

GM版が出て着々とiOS10対応を進めていることかとおもいますが、特にCocoapodsやCarthageなどを使っている人にとってどうすれば使っているライブラリを即対応できるかというのは死活問題だと思います。

僕も自作の[Imagenius](https://itunes.apple.com/us/app/imagenius/id1089595726?l=ja&ls=1&mt=8)というアプリをXcode8で動かそうとして少しハマったので共有させていただこうと思います。

## 早見表
大半はswift3というブランチを作ってくれているのですが、中にはissueをたどらないとどのブランチにあるのかわからないものもあったので共有します。

|ライブラリ|Xcode8 GM対応ブランチ|備考|
|:-----|-----|-----:|
|Alamofire||ver.4.0が正式リリースしSwift3に完全対応しました|
|SwiftyJSON||https://github.com/IBM-Swift/SwiftyJSON が対応|
|RxSwift/RxCocoa||ver.3.0.0.alpha.1で正式対応|
|Swifter|master|対応したようです|
|RealmSwift|master|RealmとRealmSwiftの両方をsubmodulesをtrueにして入れる必要があります。|

とりあえず自分の使っているところのみなのでSwifterなども混ざってますが汗
なにか他にもあれば追記します。

## おまけ
### Carthageでのブランチ指定方法
以下のように書けます。

```
github "名前" "ブランチ名"
```

submodulesをtrueにするには

```
$ carthage update --use-submodules
```

です。

### Cocoapodsでのブランチ指定方法
以下のように書きます。

```
pod 'Podでの名前', :git => 'Gitへのアドレス', :branch => 'ブランチ名'
```

また、submodulesをダウンロードするにはさらに

```
pod 'Podでの名前', :git => 'Gitへのアドレス', :branch => 'ブランチ名', :submodules => true
```

と`:submodules => true`を付け足してあげます。

#### 注意点
Podでは確かにSwiftで書かれているライブラリに関して上のようにブランチを指定してあげればSwift3.0版のコードがダウンロードされますが、それだけではビルド失敗してしまいます。Podfileの一番最後に以下のコードを付け足して、これらのライブラリをSwift3でビルドするというように指定してあげましょう。

```
post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['SWIFT_VERSION'] = '3.0'
        end
    end
end
```

なお、後からBuild Settingsの`Use Legacy Swift Version`を`NO`にしてあげるという方法もあります。
[AWS]ワンライナーでRoute53の情報を取得そして整形

自己満です。
引き続き前回のRoute53の出力を整形して管理画面のような形にしてみました。

```aws --profile ${_title} --region ${_region} route53 list-resource-record-sets --hosted-zone-id $zoneid | jq -r -c '.ResourceRecordSets[] | { Name: .Name, Type: .Type, Value: .ResourceRecords, Aliases: .AliasTarget.DNSName }' | jq -r 'if .Type == "NS" then {Name: .Name, Type: .Type, Value: select(.Value !=null).Value[]?.Value?} else empty end' | jq -r -c '.Name + "\t" + .Type + "\t" + .Value' | xargs printf "%-50s%-20s%s\n" ```

>Domain　RecordType　Value

の形で出力されます

もっと綺麗に整形できる方法があれば教えて下さい。
Xcode7にてiOS10GMの実機デバッグをする方法

DeviceSupportが存在しないために実機デバッグができない。よって
```
sudo ln -s /Applications/Xcode_GM.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/10.0\ \(14A345\)/ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
```
で、Xcode7のDeviceSupportのフォルダにiOS10GMのDeviceSupportを追加してやればよい
mongoDBよく使うコマンド集（随時更新）

# 概要

すぐ忘れてしまうmongoDBのコマンドを自分用にメモ


# 接続系

```
# 自サーバにデフォルトで接続
$ mongo

# 自サーバのmongoDBをport指定で接続
$ mongo --port 30000

# mongoDBに認証をかけている場合のid/pass指定で接続
$ mongo -u admin -p password --authenticationDatabase admin

# 外部サーバにあるmongoDBへ接続
$ mongo serverhostname:27017

```

# ユーザ管理系

## DBユーザの作成

```
# mongoDB管理者ユーザの作成
> use admin
> db.createUser({user: "admin", pwd: "password", roles: [{ role: "root", db: "admin" }]})

# 各DB管理者ユーザの作成
> use admin
> db.createUser({user: "dbowner", pwd: "password", roles: [{ role: "dbOwner", db: "somedb" }]})

```

# データベース操作系

## 全般

```
# 作成されているデータベースの一覧表示
> show dbs

# データベースの切替
> use somedb

# コレクション(テーブル)の一覧
> show collections

```

## find系

```

# コレクションの全件取得
> db.[collection name].find()

# 条件つき取得
> db.[collection name].find({column: 'aa'})

# and条件つき取得
> db.[collection name].find({column: 'aa', column2: 10})

# or条件つき取得
> db.[collection name].find({column: 'aa'}, {column2: 10})

# 否定条件(indexに注意)
> db.[collection name].find({column: {$ne: 'aa'}})

# greater than
> db.[collection name].find({column2: {$gt: 10}})

# greater than or equal to
> db.[collection name].find({column2: {$gte: 10}})

# like
> db.[collection name].find({column: /^aa/})

# sort asc
> db.[collection name].find().sort({column2: 1})

# sort desc
> db.[collection name].find().sort({column2: -1})

# count
> db.[collection name].count()

# limit
> db.[collection name].limit(2)

```

## 更新系

```
# insert
> db.[collection name].insert({column: 'aa', column2: 10})

# update
# 第１引数が条件、第２引数がset内容
> db.[collection name].update({column: 'aa'}, {$set: {column2: 20}})

# delete
> db.[collection name].remove({column: 'aa'})

```

## インデックス操作

```
# インデックス作成
> db.[collection name].ensureIndex({column:1})

# インデックス作成（インデックス名をつける）
> db.[collection name].ensureIndex({column:1}, {name: 'index name'})

# unique制約
# sparse: trueをしないとnullもuniqueの制約対象になってしまう
> db.[collection name].ensureIndex({column:1}, {unique: true, sparse: true})

# インデックス削除
> db.[collection name].dropIndex('index name')

```
Raspberry Pi で USB メモリを使う


USB ポートに USBメモリを差し込むと、"リムーバルメディアの挿入" の画面が表示された。
"ファイルマネージャで開く" が選択された状態で "OK" をクリックすると、ファイルマネージャが起動し、USBメモリの中が参照できた。

マウントの作業が必要だと思っていたので、拍子抜けである。

USB メモリを取り外すときには、画面右上の時刻表示の右にあるアイコンをクリックし、取り外すメディアをクリックする。
その後、USB メモリを取り外せばよい。
Excel > 前のセルに戻る > F2 / Enter / 移動後に / Ctrl + z

```txt:動作環境
Excel 2013 on Windows 8.1 pro 64bit
```

複雑怪奇なEXCELシートを資料としている。

計算を細かく見るときにセル間を移動する。その時にやりたいことは「前のセルに戻る」機能。

linuxでのpushd, popdに相当するもの。

以下とすればいいと思った。

- @ 戻りたいセル
  - F2
  - Enter
    - 編集したことにする (実際は変更ない)
- 別のセルに移動
  - Ctrl + G 
  - セル指定
  - OK
- Ctrl + z
  - 戻りたいセルに戻る

戻れるセルは1つだけ。

と思ったら、F2+Enterの処理をしたセルがスタックにつまれていくので、複数のセルに順番に戻れる。popdしているような感じ。
Qiitaのタグのアイコンは自由に設定できる

今日初めて知ったのでメモ。

## タグページ
タグのページに行きます。(http://qiita.com/tags/RethinkDB)
<img width="363" alt="Screen Shot 2016-09-09 at 10.59.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/77614/c4dbe0ef-4bd3-f203-a651-7137209f867f.png">

## タグ編集ページ
アイコンをクリックして、編集ページに行きます。（http://qiita.com/tags/RethinkDB/edit）
<img width="270" alt="Screen Shot 2016-09-09 at 10.59.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/77614/c3a08463-2bba-1323-48e5-f9f58bd49d81.png">
お好きなアイコン画像をアップロードします。


## 変更後
こんな感じに。
<img width="369" alt="Screen Shot 2016-09-09 at 11.00.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/77614/11f0938c-d124-9a6e-37e4-e9c2bed138ad.png">

ついでにRethinkDBとゆかりのあるHorizonにも設定。
<img width="317" alt="Screen Shot 2016-09-09 at 11.02.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/77614/0ab9ce6e-0966-a5f7-d04f-b4699b5cae79.png">

じゃーん。
<img width="499" alt="Screen Shot 2016-09-09 at 11.03.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/77614/2e4921fb-dcd0-681b-9b45-6186a65cf516.png">


マイナージャンルのタグにはアイコンが設定されていないことが多いですよね。アイコンを設定すれば、より多くの開発者の目に留まるかもしれませんね。