OmniAICreator/Qiita-1.07M huggingface dataset:
[ActiveDirectory dsaddコマンドでユーザ追加

#はじめに

AD環境内に数百人分のユーザ追加をするミッションに挑戦。
そこで！バッチファイルでの実行をおこなうことになりました。
その前に、dsaddコマンドが実行できるか検証です。

登録するユーザ情報
ドメイン名：proudit.intra
ユーザーアカウント名：テスト太郎
所属グループ：testG

この情報を各項目に当てはめていきます。

それぞれのオプションが実際にどこの情報になるのかはこちら。
![dsadd_00.png](https://qiita-image-store.s3.amazonaws.com/0/174392/05a5398f-c9e8-4c14-1043-e49f21faa8a6.png)

![dsadd_02.png](https://qiita-image-store.s3.amazonaws.com/0/174392/420b48d0-3ba4-e695-470e-6cfea3c85e82.png)




```
成功したコマンド：
dsadd user “CN=テスト太郎,OU=![dsadd_02.png](https://qiita-image-store.s3![dsadd_01.png](https://qiita-image-store.s3.amazonaws.com/0/174392/d8cea27e-4758-665b-f4fb-f839bd4e5734.png)
.amazonaws.com/0/174392/fa7fa727-f941-9684-d2e7-77e96edd1258.png)
Users,OU=proudit,DC=proudit,DC=intra” -samid testtaro -fn 太郎 -ln テスト -display テスト太郎 -upn testtaro@aproudit.intra -memberof “CN=testG,OU=Users,OU=proudit,DC=alim,DC=intra” -pwd Ma57tUgv -disabled no
```


```
失敗したコマンド
dsadd user “CN=テスト太郎,OU=Users,DC=proudit,DC=intra” -samid testtaro -fn 太郎 -ln テスト -display テスト太郎 -upn testtaro@alim.intra -pwd Ma57tUgv  -disabled no
```
はじめのうちは、エラーばかり。。
```
dsadd 失敗:CN=テスト太郎,OU=Users,DC=proudit,DC=intra:サーバーにそのようなオブジェクトはありません。
```

既に登録済みのーユーザ情報がどのようなオブジェクトで登録されているのかをチェック！

①全てのADアカウント情報をファイル出力

```
csvde -u -f export.csv

CN=testuser01,OU=Users,OU=proudit,DC=proudit,DC=intra,user,"CN=testuser01,OU=Users,OU=alim,DC=alim,DC=intra"......
```
失敗したコマンドでは、OUの指定の仕方が間違っていたようです。
```
CN=テスト太郎,OU=Users,DC=proudit,DC=intra
```

OU=Usersと合わせて、OU=prouditが必要でした。

```
CN=テスト太郎,OU=Users,OU=proudit,DC=proudit,DC=intra
```

#エクセルでコマンドを一括作成
無事dsaddコマンドでの登録に成功したので、Excelを使ってユーザ分のコマンドを作ります。
↓の数式をセルに貼り付け。

```
="dsadd user "CN="&B15&",OU=Users,OU=proudit,DC=proudit,DC=intra" -samid "&E1&" -fn "&D15&" -ln "&C15&" -display "&B15&" -upn "&E15&"@proudit.intra -pwd "&Z1&" -disabled no"
```
ここではまったこと。

##“”でくくると数式エラーになる
値の中に文字列がが入っているので、
"CN="&B15&",OU=Users,OU=proudit,DC=proudit,DC=intra"
とするとエラーになってしまうようです。

なんとかオブジェクト部分のダブルコーテーションを文字列としようと悪戦苦闘しましたが、最終的にダブルコーテーションをシングルコーテーションに変換して、解決。

コマンドラインでもダブルコーテーションでなくシングルコーテーションで動作に問題はありませんでした。

#バッチファイルの作成
作成したコマンドをコピペしてバッチファイルを作成。

この時まず気をつけること。

* 文字コードはShift-Jis
* mac環境の場合は、AD環境下でファイルを作成する

ここでのはまりごと。

* バッチファイルを介してのコマンドを実行する場合、シングルコーテーションはエラーになる
 
* 知らぬ間にスペースが入ってしまい、エラーになる。

エディタの置換機能で、シングルコーテーションをダブルコーテーションへ。
不要スペースを削除。

これでバッチファイルの完成。ファイルを実行して完了です。


#おわりに
さらっとまとめましたが、
ちょっとしたスペース(空白)やシングルコーテーション、ダブルコーテーションに翻弄され、完了までに結構な時間が掛かりました・・・。
ということでまた次回。
馬鹿の一つ覚え: UbuntuでNTPサーバ設定

Ubuntu 16.04.2 LTSでNTPサーバをインストールし、設定、起動してみた。最近のUbuntuではchkconfigの代わりにsysv-rc-confを使うようなので、これもインストール。ファイアウォール設定はコマンドufwで比較的簡単に行うことができる。このufwは、uncomplicated firewallの略だと思われる。

```
$ ps -ef | grep ntp
glire    23285 23190  0 10:10 pts/21   00:00:00 grep ntp
$ sudo apt-get -y install ntp
$ ls -l /etc/ntp.conf
-rw-r--r-- 1 root root 2424 Apr  5 22:28 /etc/ntp.conf
$ sudo cp -p /etc/ntp.conf /etc/ntp_20170405.conf
$ sudo vi /etc/ntp.conf
$ sudo systemctl start ntp
$ ntpq -p
$ sudo apt-get -y install sysv-rc-conf
$ sudo sysv-rc-conf --list ntp
ntp          1:off	2:on	3:on	4:on	5:on
$ sudo ufw allow ntp
Rule added
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere                  
123                        ALLOW       Anywhere                  

$ ps -ef | grep ntp
ntp      24365     1  0 10:10 ?        00:00:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 122:129
glire    27735 23190  0 11:15 pts/21   00:00:00 grep ntp
$ ntpq -p
```
pip, npm, gemのパッケージマネジメントでインストールするときにproxyにより通信エラーがでたときの対処

#コマンドラインからのパッケージインストール時に通信エラーがでたときの対処方法をメモしておく
##Proxy設定があることによりエラーが発生しているようだったので、設定する方法を調べた。
proxyはInternet Explorerのインターネットオプション->接続->LANの設定で以下のようになっていた

- [x] 自動構成スクリプトを使用する
http://proxy.-----.co.jp/proxy.pac

(-----は伏字)


-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
#pythonのpip
##コマンドに--proxy=を加える
--------------------------------------------------------------
例
pip install --proxy=http://proxy.------.co.jp/proxy.pac --upgrade google-api-python-client
--------------------------------------------------------------
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
#Node.jsのnpm

##npm config setでproxy及びhttps-proxyを設定する。

--------------------------------------------------------------
例
npm config set proxy http://proxy.-----.co.jp/proxy.pac
npm config set https-proxy http://proxy.-----.co.jp/proxy.pac
npm install googleapis --save
--------------------------------------------------------------
--------------------------------------------------------------
configで設定された内容は以下で確認できる。
npm config list

詳細は
npm config ls -l
--------------------------------------------------------------

-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
#Rubyのgem
##コマンドに-pを加える
--------------------------------------------------------------
例：
gem install mechanize -r -p http://proxy.-----.co.jp/proxy.pac
--------------------------------------------------------------	
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
DynamoDBでアイテムがある場合は上書きしない


こんにちはsekitakaです。

DynamoDBを使っていてアイテムが既に存在する場合は、putItemしたくない場合があるかと思います。

そんなときは`Expected`で「プライマリーキーの属性が無いこと」を条件にすれば、エラーになり書き込まれません。
以下にサンプルコードを載せておきます。

```python
# coding:utf-8
# !/usr/bin/python
import boto3
import botocore.exceptions

REGION = 'us-east-1'
client = boto3.client('dynamodb', region_name='us-east-1')
try:
    client.put_item(
        TableName='table_name',
        Item={
            "primary_key": {"S": "key_23"},
            "some_value": {"S": "foo"}
        },
        Expected={
            "primary_key": {
                "Exists": False
            }
        }
    )
except botocore.exceptions.ClientError as e:
    if e.response['Error']['Code'] == 'ConditionalCheckFailedException':
        print "DUPLICATE"
    else:
        # 重複以外のエラーなのでraise
        raise
```

`except`で直接`ConditionalCheckFailedException`を指定したかったのですが、うまく行かなかったので重複の場合を検知するのに、一手間かかってしまいますが、getItemするよりアトミックなのでよい方法だと思います。
マストドン(Mastodon)で最速でボットを作る方法


先人たちが記録を残してくれているのでとても参考になる。

- [Rubyで完全自動Mastodon botを作成する](http://qiita.com/fjustin/items/afe21c00dc50c23cd109)
- [[Python]Mastodon botを作ってトゥート!してみた!!](http://routecompass.net/mastodon/)

直接プログラミングして作るのもありだが、急いでる場合はこれが便利だった。マストドンボットを作るウェブサービス。

## [マストボット | マストドン(mastodon)用ボットサービス](https://mastbot.net)
<img width="500" alt="スクリーンショット 2017-05-25 10.30.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/41068/c47838c4-6058-7ffd-5fac-1d23326f52f1.png">

定期投稿、自動投稿、twitterと連動ができる。
Mac(Homebrew)でPython(pyenv/virtualenv)開発環境を作る

# はじめに

Pythonの開発環境を作る上で、macにすでにインストールされているPythonを汚したくない人のために、この記事では以下の目的を達成する方法を記載しています。

- ディレクトリ毎にPythonのversionと環境（インストールされているpip module）を切り替える
- pip moduleをコード管理する

## 注意
- この記事ではなるべく簡単にするために、一番最初のインストールにHomebrewを利用しています。[Homebrewを予めインストールしておいてください。](https://brew.sh/index_ja.html)
- たぶんもっとイカした方法があると思います。
- 確認方法は書くのがめんどくさいので各自調べてください。

# Homebrewで`pyenv` `pyenv-virtualenv` をインストール

```bash
brew install pyenv pyenv-virtualenv
echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.bash_profile
echo 'export PATH="${PYENV_ROOT}/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
source ~/.bash_profile
```

# `pyenv` でPythonをインストール

```bash
pyenv install 3.5.0
```

# virtualenv でインストールしたPythonの仮想環境を作る

```bash
pyenv virtualenv 3.5.0 hoge_env
```

# 開発用のホームディレクトリを作って、そのディレクトリと仮想環境を紐付ける

```bash
mkdir dev_home
cd dev_home
pyenv local hoge_env
```

# pip moduleを管理するため、 `pip-tools` をインストール

```bash
pip install pip-tools
```

# インストールしたいpipモジュールを記載する

```bash
mkdir requirements
vim requirements/bash.in
```

```text:requirements/bash.in
mysqlclient
simple-db-migrate
```

`requirements/*.in` の書き方は http://qiita.com/ryu22e/items/ad3f8f3df30886d23661 参照

# `requirements/*.in` で記載したmoduleをインストール

```bash
pip-compile requirements/base.in
pip-sync requirements/*.txt
```

※ `pip-compile` はワイルドカードが使えません。
Ｇｉｔブランチを分かりやすく見れるように


homeダイレクトリーにある .gitconfig に下のコードを入力して

``` .gitconfig
[alias]
    lg = !"git lg1"
    lg1 = !"git lg1-specific --all"
    lg2 = !"git lg2-specific --all"
    lg3 = !"git lg3-specific --all"

    lg1-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'
    lg2-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
    lg3-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset) %C(bold cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n''          %C(white)%s%C(reset)%n''          %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'
```

このようにブランチを見える

`git lg/git lg1`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/183289/d1f03146-0488-f5ff-df20-81ed9dd153c2.png)
Ubuntuのバージョン確認

#### Ubuntuのバージョン等を確認
```shell-session
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
$ 
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.4 LTS
Release:	16.04
Codename:	xenial
$ 
$ uname -a
Linux tigress 4.4.0-127-generic #153-Ubuntu SMP Sat May 19 10:58:46 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ 
$ cat /proc/version
Linux version 4.4.0-127-generic (buildd@lcy01-amd64-023) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9) ) #153-Ubuntu SMP Sat May 19 10:58:46 UTC 2018
$ 
$ echo $BASH_VERSION
4.3.48(1)-release
```
mantisの選択項目を増やす方法

お世話になっております。

件名の通り
mantisの選択項目を増やす方法を調査しております。

現在
登録＞OS＞でWindows7までしかない……


これって観測者では出来ないのでしょうか？
と思って管理者でも追加出来る場所が見つけられない……

うーん((+_+))
Bash キーボードから文字列を受け取り、確認するシェル関数

Bash でツールを作成する際、良く直面するキーボード入力処理を再利用できる様にメモの替わりです。
キーボードからの入力を受け付けて、表示して確認をする、間違っていれば、再入力のチャンスを与える Bashシェル関数です。

## 入力受取りと確認のシェル関数

~~~lang:bash
#!/bin/bash                                                                                                          
#                                                                                                                    
# 文字列のインプットを受け取りと確認の関数                                                                           
#                                                                                                                    

function confirmation() {
    MSG="Yes または No をインプットしてください? [yes/no] : "
    echo -n $MSG

    while read response; do
        case $response in
            'yes' | 'Yes' | 'y' | 'Y' )
                echo "受け付けました。"
                return 1 ;;
            'no' | 'No' | 'n' | 'N' )
                echo "もう一度おねがいます。"
                return 0 ;;
            *)
                echo "yes/no y/n で、もう一度おねがします。"
                echo -n $MSG
        esac
    done
}

function keyboard_input() {
    while true
    do
        echo -n $1 " "
        read input_data
        echo $input_data " で良いですか？"
        confirmation
        if [ $? -eq 1 ]; then
            RESULT=$input_data
            return 0
        elif [ $? -eq 0 ]; then
            continue;
        fi
    done

}

#                                                                                                                    
# メインの処理                                                                                                       
#                                                                                                                    
keyboard_input "データをインプットしてください : "
if [ $? -eq 0 ]; then
    echo "RESULT = " $RESULT
fi
~~~

## 実行結果

~~~
$ ./t4_input
データをインプットしてください :  ブルーミックス
ブルーミックス  で良いですか？
Yes または No をインプットしてください? [yes/no] :n
もう一度おねがいます。
データをインプットしてください :  Bluemix
Bluemix  で良いですか？
Yes または No をインプットしてください? [yes/no] :yes
受け付けました。
RESULT =  Bluemix
~~~
プログラミング無しでandroidゲームが作れるGameSaladを調べてみた

あと数日で評価版の期限が切れるので、現時点で分かったことをまとめてみた。
※日本語情報が少なくかつ古いので、私が間違って理解している部分も多々あるはずです。この情報は参考としてください。

#Q:どんなツールなの?
ドラッグ&ドロップで機能を画面に配置してゲームを作るツール。プログラミング無しでゲームが作成できる。
ソースコードの編集機能はないので、GameSalad内でできないことはできない。
あと、情報はフォーラムも含め英語になるので、ストアに公開する場合は英語で手続きメールが来ると思われる。

#Q:2017/05/25時点で無料なの?
昔はあったが今はない。
以前は無料版とPro版に分かれていたが、2015年5月の発表でBasic版とPro版になることが決定し、評価版はBasicの機能を15日間限定利用となっているみたい。
評価が開始されるタイミングは未調査なので分からない。15日フルで試したい人は試す直前にアカウント作成した方がよさそう。

料金はフォーラムで発表されていた金額は
・Basic版:$19/月、$199/年
・Pro版  :$29/月、$299/年
となっている。

#Q:使い方は?
使い方の概念は[ここ][1]を参照
[1]:http://qiita.com/towtow/items/f3eebf019b7099d91a74

その他細かいことは私も分からん。

#Q:Basic版とPro版の違いは?
・Basic版→ゲーム作成用
・Pro版  →ゲーム作成と公開、販売用
という認識で良いと思う。機能面での違いはゲーム作成時においてはないと思っていいはず。

#Q:作られるゲームはandroid専用なの?
対象環境を切り替えるだけで？iOSでもできるらしい。ここは未確認。
少なくともiOS用、android用と作る必要はないはず。
ただし、Appleが「Macユーザでなければダメ」と言っているので、ストアに登録するには最低でも実機のMacがいるっぽい。
ここら辺はAppleの開発者ライセンスとかの話になる。
(今のところiOSで公開する気ないからどうでもいいけど・・・)

#Q:情報ないの？日本語で！
最新情報はネットにはない。本にもない。だいたい3～4年前の情報のみ
ただ、ツール自体が「誰でも作れる」を前提としているからかノリと勘で簡単なゲームなら作れそう。
あとは
・英語を勉強して公式フォーラムを使いこなす。
・英語のGameSalad解説動画をみてノリと勘で理解する。
・Qiitaやブログに日本語で有益な情報を投稿してくれる親切な人が現れるのを祈る。
ことで対応するしかない。
bitcoin-phpの使いかたメモ


[Bit-Wasp/bitcoin-php](https://github.com/aceat64/EasyBitcoin-PHP)というのが、Bitcoin-PHP界隈では結構メジャーみたいだけど、具体的な使い方の情報があまりないのでメモしていきます（随時更新）。

## BitcoinにおけるPHP事情

なんでも揃うPHPライブラリですが、Bitcoin周りは少し薄い感じがしますね。
[EasyBitcoin-PHP](https://github.com/aceat64/EasyBitcoin-PHP)というのも良く目にします。が、基本はbitcoin-cliのラッパーという感じ。

## インストール

基本的にはcomposerでインストールできるみたい。

```bash
composer require bitwasp/bitcoin
```

ですが、私の環境（Mac）だど、下記の理由で怒られました。

* ext-gmpが無い！
* phpが5.6以上じゃない！

どうせなら最新環境にしようと、PHP7.1とそれ用のgmpを入れてみました。

```bash
brew install homebrew/php/php71
brew install homebrew/php/php71-gmp
```

改めてcomposer installします。

```bash
composer require bitwasp/bitcoin
```

## アドレスの生成

何はなくともアドレスの生成です。以下の用にやればできました。

```php
<?php

	require_once 'vendor/autoload.php';

	use BitWasp\Bitcoin\Bitcoin;
	use BitWasp\Bitcoin\Network\NetworkFactory;
	use BitWasp\Bitcoin\Address;
	use BitWasp\Bitcoin\Key\PrivateKeyFactory;

	
	Bitcoin::setNetwork(NetworkFactory::bitcoinTestnet());
	$network = Bitcoin::getNetwork();

	$privateKey = PrivateKeyFactory::create(true);
	$publicKey = $privateKey->getPublicKey();
	$address = $publicKey->getAddress()->getaddress();

	echo $address;
```

## トランザクションの作成（とブロードキャスト）

調べて書きます。ブロードキャストはできるのかな？
無料CAは用途が限られてる、かな？

# iOSからのサイトアクセス要件であるhttpsスキーム化を、無償で実現したく、奮戦してるのですが。

一例として、設定が極めて完結でスマートな「クラウドフレアcloudflare」を例にしますと、ブラウザからのhttpsアクセスは可能に成るものの、iOSからアクセスすると、エラー発生。
クラウドフレアの設定を変えて1時間後に試しても、同じ結果。
ネットへの反映遅延の影響かもしれないので、本日夕方に、もう一度トライしてみます。

どなたか情報お持ちでしたら、共有ください。
宜しくお願いします。

ちなみにロリポップの共用SSLは、イケます。ブラウザアクセスもiOSアプリアクセスも問題なし。
Javaが使えない、とか、MySQLがリモートアクセス出来ない（いろいろあったので）など、いくつか不便。
しかしながら驚くほどコスパは、良。
これまで、初心者向けと侮っていたことを、深く反省。

エクスファ 浦本 http://x-fer.info


<img width="625" alt="クラウドフレア 2017-05-25 8.39.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/5135/8317a21c-0bb3-19e5-c3ee-148a0700fd1a.png">
SPRINT最速仕事術を読んでみた(月曜日編)

[SPRINT最速仕事術](http://amzn.to/2qY44Ga)を読んだのでまとめてみる．
長くなりそうなのでまずはざっくりとした全体像と月曜日のタスクについてまとめる．
火曜日編はこちら
http://qiita.com/masamasa/items/7f10eec2f440a1b8ffa4

# スプリントとは？
GV(Googleベンチャーズ)が活用しているプロセス．<br>
5日間のタイムボックスで1つの実験を行うことで，難しい問題に対して迅速に結果を得ることを目的としている．<br>
ここでの結果とは，アイディアの成功という結果や失敗という結果をさす．<br>
成功する素晴らしいアイディアを必ずしも得られるということではなく，本来的には長い時間かけないと成功するか失敗するかわからなかったような複雑な問題に対して
迅速に結果が得られるというところが利点．<br>
素早く市場から学びを得ることを目的としたプロセス．

# スプリントの大まかな流れ

* 月曜日：目標を固める
* 火曜日：思考を発散させる
* 水曜日：ベストを決める
* 木曜日：幻想をつくる
* 金曜日：テストする

# スプリントのメンバー
専門分野に精通し，課題に情熱を持っている人を集めて7人以下でチームを作る．<br>
その中には**決定権者**を絶対に含めるべき．<br>
これらのメンバーには5日間はそれ以外の仕事から外れてもらって，スプリントに完全集中できる状態を作ること．

# 月曜日：目標を固める
## プロジェクトの長期目標
目標は高く，ポジティブに，下記の長期目標を決める．

* プロジェクト完了時に何を成していたいのか？
* どうなっていたいのか？

## スプリントクエスチョンを書き出す
今度は逆に悲観的に，プロジェクトが失敗したと仮定した場合の原因を探す．<br>
敗北条件を定めるとも言い換えられる．<br>
同時に，長期目標達成のために満たされるべきポイントも洗い出す．<br>

洗い出したものを，「○○○は×××だろうか？」という疑問に置き換える．<br>
置き換えることでワクワクする興味深い疑問に変える効果がある．

## マップを作る
全体を俯瞰し，問題の構成を把握するために役立つマップを作る．<br>
マップは複雑な問題を人間が扱える程度の複雑さに変換する効果がある．<br>
マップは以下の要素で構成される．

* アクター
* 完了(例えばECサイトであれば購入など)
* 一言フレーズと矢印

ここでいう一言フレーズは「動詞」になりそうなきがする．<br>
アクターと完了をつなぐステップであり，アクターの動きを表すものが一言フレーズなのかもしれない．<br>

## 専門家に聞こう
スプリントで解決したいような大きな問題には様々な陰影がある．<br>
みる立場や方向によって色々な様相を呈する．<br>
なので多くのソースから情報を集めることが大切になる．<br>

特に以下の4つの軸で情報を集めることはとても大切である．

* 戦略
* 顧客の声
* 仕組み
* 過去の取り組み

これらをヒアリングし，マップの修正を行う．
また，同時に「どうすればメモ」を作成する．

### どうすればメモ
専門家の話から得られた情報やそこで生じた疑問，面白いと思ったことを「どうすれば」から始まる形で付箋に書き出していく．

チームみんなで書き出したメモをホワイトボードに張り出して，役に立ちそうな質問にみんなで投票する．<br>
得票数が多かったものについて，先ほど作ったマップを振り返り，疑問が該当する箇所にどうすればメモを貼り付ける．

これによってマップ上での対応関係がわかるようになる．


## ターゲットを決める
スプリントを通して取り組むべきターゲットを決定する．<br>
ターゲットは「最もリスクが高く，最も大きなことができそうなもの」を選ぶと良い．<br>
これはどうすればメモを見ると想像ができるはずなので，マップに貼り付けられたどうすればメモを参考にする．<br>
どうすればメモを参考にして，マップ上からターゲットとなるアクターと一言フレーズを最終的には決定する．<br>

これが決まったらスプリントクエスチョンを見直して，今回のターゲットで答えることができるものをピックアップする．

## 月曜日まとめ
長期目標でプロジェクトの達成すべきゴールを定めて，それに関連するスプリントクエスチョンを洗い出した．

全体を俯瞰するためのマップを作り，専門家の意見を取り入れてブラッシュアップした．

さらに，専門家の意見からどうすればメモを作り，チームの興味ある方向を共有した．

上記を受けて今回のスプリントでターゲットとなる瞬間を決定し，これによって答えが得られるスプリントクテスチョンが明らかになった．

残りの4日間はこれを明らかにするために頑張ろう．

とりあえず，月曜日のお仕事はこれにて完了．
RTAB-Mapで作った3D-MapをPotreeでWeb配信する。

###目的
RTAB-Mapで作った3D-MapをPotreeでWeb配信する。

![test.jpg](https://qiita-image-store.s3.amazonaws.com/0/73020/ece55eed-d334-5a82-7704-3a64a9dfae6a.jpeg)


###環境
-Ubuntu1604 x64  or Ubuntu1404 x64
-ROS:kinetic or indigo
-Kinect v1 (XBOX360)

###rtabmapとKinectv1のドライバーのインストール
ROS動作環境であれば下記コマンドでバイナリがインストールされる。

kinetic:

```
 sudo apt-get install ros-kinetic-freenect-launch
 sudo apt-get install ros-kinetic-rtabmap-ros
```

indigo:

```
sudo apt-get install ros-indigo-freenect-launch 
sudo apt-get install ros-indigo-rtabmap-ros
```

###Kinectv1の動作確認
カラー画像とデプス画像がとれることを確認する。

```
 roslaunch freenect_launch freenect.launch
 rosrun image_view image_view image:=/camera/rgb/image_color
 rosrun image_view image_view image:=/camera/depth/image_raw
```


###RTAB-Mapで地図を生成する

New DataBase→Startを実行後、周囲をぐるぐる回して3D-Mapを生成、
Stopで停止する。

File→Export 3D cloud(*.ply *.pcd *.obj)でplyファイルで保存する。
例えば、今回はcloud.ply。

```
$ rtabmap
```

![Screenshot from 2017-05-25 07-24-10.png](https://qiita-image-store.s3.amazonaws.com/0/73020/9924fc95-44fd-c20f-3a08-36815aadf1d0.png)


###Potree Converterのインストール 

plyファイルをPotreeというファイルフォーマットに変換する。
Potreeはプラウザでポイントクラウドを扱うファイルフォーマットである。
lastoolsとPotreeConverterをmake install する

lastools

```
cd ~/dev/workspaces/lastools
git clone https://github.com/m-schuetz/LAStools.git master
cd master/LASzip
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
sudo make install
```

PotreeConverter

```
cd ~/dev/workspaces/PotreeConverter
git clone https://github.com/potree/PotreeConverter.git master
cd master
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release - DLASZIP_INCLUDE_DIRS=~/dev/workspaces/lastools/master/LASzip/dll -DLASZIP_LIBRARY=~/dev/workspaces/lastools/master/LASzip/build/src/liblaszip.so ..
make 
sudo make install
```


###ウェブサーバの設置

```
sudo apt-get install apach2
```

###ウェブサーバへPotreeの設置

```
 git clone https://github.com/potree/potree.git potree
 cp -R potree /var/www/html/
```

プラウザで
http://127.0.0.1/potree/examples/
のアドレスにアクセスすると、下記のExampleが見られる。

```
annotations.html        lasmap.html    measurements.html
arena4d.html            lines.html     meshes.html
clipping_volume.html    lion.html      multiple_pointclouds.html
elevation_profile.html  lion_las.html  viewer.html
entwine_greyhound.html  lion_laz.html
```

###Potree ConverterでplyからPotreeへ変換

Potreeを設置しているディレクトリに、plyから変換したPotreeファイルを配置する。

```
PotreeConverter cloud.ply -o /var/www/html/potree --generate-page pageName --overwrite
```
###HTMLファイルの作成
サンプル（lion）のhtmlファイルを編集して、生成されたPotreeを選ぶ
```
 gedit /var/www/html/potree/examples/lion.html 
```


```
	// Sigeom
	Potree.loadPointCloud("../pointclouds/pageName/cloud.js", "pageName", function(e){
		viewer.scene.addPointCloud(e.pointcloud);
		viewer.fitToScreen();
	});
```

以下で表示される。
http://127.0.0.1/potree/examples/lion.html


###参考
-rtabmap_ros
https://github.com/introlab/rtabmap_ros

-rtabmap
http://introlab.github.io/rtabmap/

-PotreeConverter
https://github.com/potree/PotreeConverter

-potree
http://www.potree.org/
Bootstrapでボタンを使用する方法

![ボタン.png](https://qiita-image-store.s3.amazonaws.com/0/160563/3f2e1c71-211f-6031-d35f-309741e46cc8.png)


#基本的な記述方法

<a class="btn btn-default" href="#" role="button">Link</a>

* aタグやbuttonタグを使用
* クラスに"btn"を指定

```html:qiita.rb
<a class="btn" href="#" role="button">Link</a>
<button class="btn" type="submit">Button</button>
```

#オプション

様々なクラスを付与することで、ボタンに装飾を施すことができる

##カラー
![button_colortype.png](https://qiita-image-store.s3.amazonaws.com/0/160563/e0c73df9-bf4d-3d3e-bca6-e4e37077b06c.png)

|色|使用クラス|
|:---|:---|
|白|btn-default|
|青|btn-primary|
|緑|btn-success|
|水色|btn-info|
|橙|btn-warning|
|赤|btn-danger|
|色なし|btn-link|

```html:qiita.rb
<a class="btn btn-lg" href="#" role="button">Link</a>
```

##サイズ
![button_size.png](https://qiita-image-store.s3.amazonaws.com/0/160563/ec30344c-7b6c-5ad0-2bc2-79a41b728d4c.png)

|大きさ|使用クラス|
|:---|:---|
|大|btn-lg|
|中|サイズ指定なし|
|小|btn-sm|
|極小|btn-xs|

```html:qiita.rb
<a class="btn btn-lg" href="#" role="button">Link</a>
```

```html:qiita.rb
<!--「btn-block」を指定することで横幅いっぱいのサイズにしていることが可能 -->
<a class="btn btn-lg btn-block" href="#" role="button">Link</a>
```

##状態
![button_state-active.png](https://qiita-image-store.s3.amazonaws.com/0/160563/af93608c-390b-b8b8-c989-837830f489df.png)
![button_state-disabled.png](https://qiita-image-store.s3.amazonaws.com/0/160563/7679d1e9-d586-ff26-a7f1-e601e13f4ea7.png)


|状態|使用クラス|
|:---|:---|
|アクティブ|active|
|使用禁止|disabled|

```html:qiita.rb
<!-- アクティブ -->
<a class="btn active" href="#" role="button">Link</a>
<!-- 非アクティブ -->
<a href="#" class="btn disabled" role="button">link</a>
<button type="button" class="btn" disabled="disabled">button</button>
※aタグとbuttonタグで記述方法が違うので要注意
```

#参考
* [BootStrap公式サイト](http://getbootstrap.com/css/?#buttons)
Javaのファイルフォーマットごとのファイル読込方法のまとめ

# まとめ

Javaの外部ファイルの対応状況がよくわからなかったので、整理した。

| 拡張子  | 対応 | 利用法 |
|:-------|:------------------|:-------------------|
| *.csv  | ☓ | 簡易的にはString.split(",",-1)メソッドによってパースできるが、ダブルクオーテーションや文字列中のカンマなど、CSVの方言に応じた例外処理が必要。 |
| *.tsv  | △ | String.split("\t",-1)メソッドによってパースする。 |
| *.json | ○ | [JSON-P](https://docs.oracle.com/javaee/7/api/javax/json/package-summary.html) *1 または[JSON-B](http://json-b.net/) *2 を用いる。 |
| *.xml  | ○ | SAX APIまたはDOM APIを用いる。 |
○・・・ファイルに対応するクラスが用意されている。
△・・・ファイルに対応するクラスはないが、比較的ラクにパースできる。
☓・・・考えたくもないほどパースが辛い。

*1 Java7以降で対応している。
*2 Oracleが提供しているがJava標準ではないらしい。

# 参考資料

* CSV  
    * [CSVファイルをJavaで読み込んで文字コードを変換](http://dev.classmethod.jp/server-side/java/csv_read_java_char_trans/)
* XML  
    * [【詳しくわかる】JavaでXMLを扱う方法まとめてご紹介](https://eng-entrance.com/java-xml)
Docker | 既存イメージの CMD を確認する ( $ docker inspect )

# 問題

Dockerfile でいうところの CMDで何が走るかを、既存のイメージで確認したい。

```:Dockerfile
CMD ["/bin/sh"]
```

# 解決

`docker inspect` で可能。

```
$ docker inspect [イメージ名] --format='{{.Config.Cmd}}'
```

### 例:

```
$ docker inspect alpine --format='{{.Config.Cmd}}'
[/bin/sh]
```

このコマンドが面倒だったら grep しても良い。

```
$ docker inspect alpine | grep CMD
"CMD [\"/bin/sh\"]"
```

# 色んなイメージの CMD を見てみる

## alpine

bashさえ入っていない。shが起動する。

```
$ docker inspect alpine --format='{{.Config.Cmd}}'
[sh]
```


## ubuntu

bashが起動する。

```
$ docker inspect ubuntu --format='{{.Config.Cmd}}'
[/bin/bash]
```

## rails

pry が起動する。

```
$ docker inspect rails --format='{{.Config.Cmd}}'
[irb]
```

## python

python が起動する。

```
$ docker inspect python --format='{{.Config.Cmd}}'
[python3]
```

## インタラクティブモード

それぞれインタラクティブモードで実行すると、CMDで指定されたものが起動するのが分かる。

## sh

```
$ docker run -it alpine
/ #
```

## bash

```
$ docker run -it ubuntu

root@41490d5a88ce:/#
```

## pry

```
$ docker run -it rails

irb(main):001:0> 
```

## python

```
$ docker run -it python

Python 3.6.1 (default, May 11 2017, 22:14:44)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
```

# CMD の書き換え

よく例で出て来る `$ docker run -it [イメージ名] /bin/bash` という書き方は、CMDを書き換えて実行することが出来る。

## alpine

そもそも `/bin/bash` さえ入ってないので怒られる。

```
$ docker run -it alpine /bin/bash
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory".
```

## ubuntu

もともと `/bin/bash` なので動作変わらず。

```
$ docker run -it ubuntu /bin/bash
root@3ff997da5e74:/#
```

## rails

pry ではなくbashで接続するようになった。

```
$ docker run -it rails /bin/bash
root@e0494a68300d:/#
```

## python

python ではなくbashで接続するようになった。


```
$ docker run -it python /bin/bash
root@6892c2322999:/#
```

# 参考

- [How to find the CMD command of a docker image? - Stack Overflow](https://stackoverflow.com/questions/30441035/how-to-find-the-cmd-command-of-a-docker-image)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
google playのα版、β版公開について

※経験に基づく内容なので、すべて自己責任でお願いいたします。

#α版、β版の一般ユーザーストア公開について
α版、β版でリリース作業を行い「公開中」になった場合でも、下記画像の「テスト方法の選択」で
「オープン　アルファ版 テスト」「オープン β版　テスト」を選択し、保存をしない限り一般ユーザーが閲覧しているストアの検索には表示されない模様。
※バンドルIDをブラウザ直叩きされると恐らくOUT。未検証

<img width="939" alt="スクリーンショット 2017-05-25 3.04.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/14560/30abe87d-fdab-71ea-9b27-69fc0aba7218.png">
dying ReLU について学ぶ

シンプルなNNを実装し 重みの変化 を可視化した所、無反応になるパーセプトロンを観測しました。dying ReLU と呼ばれている現象の様です。

# dying ReLU
・活性化関数ReLUは負の領域では値が０＝勾配がない。
・学習時に大きく負側に重みが更新された場合、ReLU関数で活性化する事がなくなる可能性がある。


#現象の画像
## Weight の Epoch 毎の変化画像

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">MNIST 重み 可視化 100epoch 動画 <a href="https://t.co/7bs35SEKa1">pic.twitter.com/7bs35SEKa1</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/867431792004841472">2017年5月24日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

* 画像上に256個ある四角形それぞれが パーセプトロンの重み を示しています。
* 映像下段の Cnt はminibatch回数を示してます。 600cnt = 1epoch です。


## dW の Epoch 毎の変化画像

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">MNIST DW 可視化 100epoch <a href="https://t.co/Guy62oA3lH">pic.twitter.com/Guy62oA3lH</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/867434498463485952">2017年5月24日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

* 映像下段の B は、2epoch期間以上 $dw$の値がフラット(最大値=最小値)のまま変化なしのパーセプトロン の数です。
* 画像上に白四角でB の位置を示してます。 

## NNの構成
全結合 隠れ層１層 のシンプルなＮＮです。
![01_NN.PNG](https://qiita-image-store.s3.amazonaws.com/0/169589/4518b944-c171-e949-b5d0-1336202a4001.png)

* 上図の赤枠の Waight と 赤矢印の dw を可視化したものが、先の動画です。
* ガウス分布に用いる乱数の種値 は 先の映像のKで示しています。


## 正解率 
![NNL2_L1P256_AF0_20170523-161328-96.png](https://qiita-image-store.s3.amazonaws.com/0/169589/4c9ac418-e78e-71f7-679f-8e4d7e798161.png)

* 先の映像での測定データです。
* グラフ上側は 学習時とテスト時の正解率の推移です。
* グラフ下側は 先の画像での B の数の推移です。

## Wの初期値 ガウス分布に用いる乱数の種値を変えた場合
![Matome_RandKey.png](https://qiita-image-store.s3.amazonaws.com/0/169589/26e6fce4-cdd0-b4dc-fb4e-7b7526e7506d.png)

* 先の映像の種値は 20170523 です。
* グラフ上側は テスト時の正解率の推移、グラフ下側は B の推移です。
* 種値を変えると B の推移は変化します。　発生してない場合もあります。

## 考察
* B としてカウントするパーセプトロンは、dwがフラット化し、Wが変化しなくなっており、dying ReLU と解釈しています。 
* ReLUが１段のシンプルなNNでも、データや乱数種値によって発生するのですね...。
* MiniBatchSize で変化するか、LeakyReLU を用いるとどうなるかも 後日みてみます。→[dying ReLU について学ぶ (その２) Leaky ReLU](http://qiita.com/t-tkd3a/items/a8453368aae7813b2508) 

# おまけ: 種値を変えた場合の dw の推移映像 
## 種値 20100705
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">種値 20100705 <a href="https://t.co/IhVY8Zw5du">pic.twitter.com/IhVY8Zw5du</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/867457407445639168">2017年5月24日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

![NNL2_L1P256_AF0_20170523-145854-69.png](https://qiita-image-store.s3.amazonaws.com/0/169589/69358b07-1abc-67b1-e60e-81479aefe7c9.png)

## 種値 20120424
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">種値 20120424 <a href="https://t.co/XqK9W3Rctn">pic.twitter.com/XqK9W3Rctn</a></p>&mdash; t-tkd3a (@t_tkd3a) <a href="https://twitter.com/t_tkd3a/status/867459845640691712">2017年5月24日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

![NNL2_L1P256_AF0_20170523-142547-134.png](https://qiita-image-store.s3.amazonaws.com/0/169589/daeaeb77-8a70-59a6-0074-40415458c8c8.png)
macOSにphpbrewを入れてPHP7を導入する

[phpenv](https://github.com/phpenv/phpenv) の更新が止まってるため [phpbrew](https://github.com/phpbrew/phpbrew) をmacに導入する

# 手順
## インストール
```console
$ brew install homebrew/php/phpbrew
$ phpbrew init
$ echo "source ~/.phpbrew/bashrc" >> ~/.bash_profile && source ~/.bash_profile
```

##リモートのバージョン取得
```console
$ phpbrew known
```

## 7.1.5のインストール
*  `+default` でよく使うプラグイン(PDOとか)を取ってきてくれる

```console
$ phpbrew install 7.1.5 +default
```

## デフォルトPHPの指定
```console
$ phpbrew use php-7.1.5
```

## バージョンの確認
```console
$ php -v
PHP 7.1.5 (cli) (built: May 24 2017 22:04:27) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
```
X99 マザー + Linux + NV GPU 複数枚刺しで常時運用してはいけない

漢なら GPU 複数刺してレイトレーシング/機械学習で 24 時間稼働させたいですよね!

2017/05 時点では対応 CPU の PCI lanes が多く(up to 40 lanes), x16 スロットがフルで刺さるのは X99 マザー一択になります.
(X99-E WS とかは x16 x 7 スロット! あります)

そこで X99 マザー(Asus X99-E WS) + GTX 1070/1080 Ti 複数枚刺しで Ubuntu 16.04 で GPU レイトレーシング/機械学習をしようと思案しまして, まずは耐久性をはかるために仮想通貨のマイニングプログラムを走らせてみたのですが PLX エラーがでてつらい.

GTX 1080 Throwing Bad TLP PCIe Bus Errors
https://forums.geforce.com/default/topic/957456/geforce-drivers/gtx-1080-throwing-bad-tlp-pcie-bus-errors/post/4969345/

どうも X99 のエラッタのせいのようです. マザーボードの BIOS 最新にしても治りませんでした.

* `pci=nommconf` にしたら数時間は稼働するがその後カーネルパニック
* `pci=nomsi` にしたら PLX エラーは出なくなったが, やはり CUDA プログラムがたまに死にます. たとえば...

```
[ 1110.390678] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: SKEDCHECK02_LOCAL_MEMORY_LOW_SIZE failed
[ 1110.390684] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: SKEDCHECK03_LOCAL_MEMORY_HIGH_SIZE failed
[ 1110.390687] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: SKEDCHECK04_LOCAL_MEMORY_CRS_SIZE failed
[ 1110.390690] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: SKEDCHECK05_LOCAL_MEMORY_TOTAL_SIZE failed
[ 1110.390693] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: SKEDCHECK11_TOTAL_THREADS failed
[ 1110.390695] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: SKEDCHECK14_SHARED_MEMORY_SIZE failed
[ 1110.390698] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: SKEDCHECK16_CTA_THREAD_DIMENSION_ZERO failed
[ 1110.390701] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: SKEDCHECK18_L1_CONFIG_TOO_SMALL failed
[ 1110.390704] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: SKEDCHECK19_CTA_REGISTER_CONSUMPTION failed
[ 1110.390706] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: SKEDCHECK23_CONSTANT_BUFFER_SIZE failed
[ 1110.390719] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: ESR 0x407020=0x6a41e80 0x407028=0x1e00 0x40702c=0x221680c 0x407030=0x0
[ 1110.390926] NVRM: Xid (PCI:0000:0b:00): 13, Graphics Exception: ChID 0010, Class 0000c1c0, Offset 00000418, Data 0000000
```

となりました.

また, 別のケースでは, 10 時間くらい稼働させたところ hugepage エラー(ECC エラー?) + ATA エラーが出て, 再起動するとマザーボードの温度が高すぎて起動できない, のもありました(これはマザーボードを冷却すれば治るか?)

思い起こせば, 手元の別の Windows 環境も X99 でしたが, 複数 GPU を刺すと BSOD 出たりして不可解な挙動していたので X99 のエラッタが原因だったのかもしれませんね.

途中でプログラムが死んでも再スタートしても OK なプログラムでない場合は, X99 マザーは避けた方がよいです.

# TODO

* GPU 4~7 枚刺で安定して 24 時間稼働できるシステムを探す旅に出たい. AMD Naples or Intel X299?
* GPU cgroups, Docker, runC あたりと組み合わせて自動 suspend/resume できるような GPU プログラムを極めてくれるような優秀な GPU 仮想化若人を探す旅に出たい.
Firebaseイベント取得について（Swift3.0）

モバイル解析のためGoogle Analyticsを設定しようと思ったら既にトラッキング方法がFirebaseしか選べなくなっていました・・・
（2017/05/24時点）

<img width="1212" alt="スクリーンショット 2017-05-25 2.02.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/63214/2cc15595-6056-b719-c259-6aadf49aa876.png">

いい機会だったので、Firebaseで頑張ってみることに。

## Firebase Analytics for iOS を使ってみる
[公式ドキュメント](https://firebase.google.com/docs/analytics/ios/start?hl=ja)とほぼ同じ話です
### 1. podfileに下記行を追加し、pod installを実行

```
pod 'Firebase/Core'
```

### 2. .xcworkspaceを開きAppDelegate.swiftに、Firebaseモジュールのインポートと初期化を追記

```
import UIKit
import Firebase  <- Firebaseモジュールのインポート

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        FIRApp.configure() <- Firebase初期化
                
        return true
    }
（以下略）

```

### 3. イベントを取得したい場所にlogEventメソッドを記載

```
FIRAnalytics.logEvent(withName: "share_image", parameters: [
  "name": name as NSObject,
  "full_text": text as NSObject
  ])
```
* withNameの引数がイベント名
* "name", "full_text"はカスタムパラメータ

実際にanalyticsの画面でイベントが取得できていれば成功です。
（ただし、表示の反映が数時間後・・・）
<img width="982" alt="スクリーンショット_2017-05-25_0_24_45.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/63214/446458be-a988-b00d-b9e1-713d3c69d4d1.jpeg">


## カスタムパラメータの扱い
* logEventに追加したカスタムパラメータの値の集計をしたかったが、Firebase Analytics上ではあちこちいじってもそれらしい方法が見つからなかった
* どうやらlogEventの集計は、現状BigQueryを使用しないとできないらしい。改善方法を模索中とのこと。
    * 参考URL: https://developers-jp.googleblog.com/2017/02/firebase-analytics-quick-tip-value.html
    
```
（引用）
しかし、現在（BigQuery を使わずに）できないことの 1 つが、
Firebase Analytics イベントで送信したカスタム パラメータに設定されている値を確認することです。
```

# まとめ
BigQueryを使うほどではないデータ数のイベントであれば、Analyticsの画面上でパッと確認できると嬉しいです。続報に期待します。
【R】連続でデータを読み込み表に追加していく

#空の表を作る

table<-data.frame()

#wdを取得

for(i in 1:3){
  wd<-paste("C:/R/",i,"/test",sep="")
  setwd(wd)

#データ読み込み

  output_table<-read.table("emotion.txt",header = TRUE,sep = '\t')

#表を結合

  table<-rbind(table,output_table)

}
Juliaと要素１の行列

# 要素１の行列をスカラ値として扱うには？

最近Juliaをさわり始めているが、若干使いにくいところが１点ある。
それが、以下のStackoverflowの記事：

- [How should I convert a singleton Array to a scalar?](https://stackoverflow.com/questions/29159386/how-should-i-convert-a-singleton-array-to-a-scalar)
  
## Juliaでテスト

```jl:要素１の行列、わかりやすい例

# こちらが行列
julia> A = [1];
# スカラ値
julia> B = 1;

# 掛け算すると 1-element Array{*,1} と認識される
julia> A*B
1-element Array{Int64,1}:
 1

# スカラ値との演算もできる。やったぜ。
julia> A*B - 2
1-element Array{Int64,1}:
 -1
```

```jl:要素１の行列、めんどくさい例

# 要素５の縦ベクトルを作ってみる
julia> C = [1 2 3 4 5]'
5x1 Array{Int64,2}:
 1
 2
 3
 4
 5

# 行列の積の法則で m(1,x) * n(x,1) = m(1,1) になるはず。
julia> C'*C
1x1 Array{Int64,2}:
 55

# 1-element Arrayになってくれない…

```

まあ、要は `1x1 Array` であれば、他の要素との演算時に型がシュッと縮まって `1x1 Array{Int64,2}:` → `1-element Array{Int64,1}:` に変わってほしい所存（暗黙の型変換）。ざっと試しただけなので表現が曖昧ですが。。。

そして、今の所明示的に型を変換するには…

```jl:Stackoverflowの解答
# このようにしてC'*Cをスカラ値に直してる
julia> reshape(C'*C,1)[1]
55
```

~~他に方法ないのかなあ~~ @antimon2 氏からコメントいただきました

## Juliaでテスト（正しい記法を使う）

検証は [JuliaBox](https://juliabox.com/) で実施

```jl:要素１の行列、めんどくさい例をもう一度

# 要素５の縦ベクトルを作ってみる
julia> VERSION
v"0.5.2"

julia> C = [1, 2, 3, 4, 5]
5-element Array{Int64,1}:
 1
 2
 3
 4
 5

julia> C'*C
1-element Array{Int64,1}:
 55

# 1-element Arrayになったぞ、やったぜ

```
ブロックを回す


<del>座標二倍化です。</del>
rotate_pointの実装だけで1時間かかったんですが…
(図形は🙅)

## 170618追記

都合により方針変えました。(相対)平行移動と回転移動の組み合わせです。

```rb:henaf05.rb
#!/usr/bin/env ruby
#http://nabetani.sakura.ne.jp/hena/ordf05rotblo/
#http://qiita.com/Nabetani/items/a6ed674166a151fd0a0a
STDOUT.sync=true
#def rotate_point_old(a,cx,cy)
#	a.map{|x,y|
#		[-(y*2-cy)+cx,(x*2-cx)+cy].map{|e|e/2}
#	}
#end
def rotate_point(a,cx,cy)
	a.map{|x,y|
		[-(y-cy)+cx,(x-cx)+cy]
	}
end
H=W=5
while gets
	t,a=$_.chomp.split(':')
	b=[]
	H.times{|h|W.times{|w|b<<[w,h] if a[h*(W+1)+w]=='1'}}
	if t=='a'
		b=rotate_point(b,1,2)
	else
		#点群を回転点bの右上のマスからの相対座標とする。
		#右上のマスを右下に移動し、移動後の右下のマスを中心にして回転移動する。
		b=rotate_point(b.map{|x,y|[x,y+1]},2,2)
	end
	#b=rotate_point_old(b,*(t=='a' ? [2,4] : [3,3])) # 左上のマスの中心を原点とする
	if b.any?{|x,y|
		x<0||W<=x || y<0||H<=y
	}
		puts :-
	else
		a=H.times.map{['0']*W}
		b.each{|x,y|a[y][x]='1'}
		puts a.map(&:join)*'/'
	end
end
```
【R】ディレクトリの変更

ディレクトリを変更していく

for(i in 1:3){
  wd<-paste("C:/R/",i,"/test",sep="")
  print(wd)
  setwd(wd)
}

![1.PNG](https://qiita-image-store.s3.amazonaws.com/0/183229/80bcf16f-e2a5-416c-994d-467b0adf7d61.png)
ドコモなテストメアドがほしいかたへ

長い間Web会員サービスを運営してると、会員さんの中には、
o...rz.@docomo.ne.jp
とかRFCに反してるファンキーなメアドを登録してる人が結構いたりしますよね。
っでそろそろシステムが古くなってきたし最新のFrameworkでシステムリニューアルだ！Yo!ってやったら、Framework標準のメールライブラリが実はRFCに反しているメアドは送信できないなんて落とし穴にずっぽりはまってリニューアルからしばらくしてクレームの嵐になってたりしませんか？
そんなことがないように、カブいたメアドも送信できるようにテストはしっかりしたいものですよね。
だけど最近のフリーメールやレンタルサーバのメアドは、これらのアカウントの登録をゆるしてなかったり、キングドコモもメアド変更してもあのやんちゃなアカウントをつけさせてくれなくなりました。
https://www.nttdocomo.co.jp/info/spam_mail/change_add/index.html

だからってメールサーバ自前で用意するのも面倒ですよね。
そこで、そんなあなたのために、ステキなフリーメールサービスを見つけておきました。

http://zenno.com/

いつ登録できなくなるかわからないですが(^^;
予測モデル構築① 

需要予測的なアルゴを数式をいじりつつ少しずつ作ります。
色々な数学を触りつつ脱線しつつ最後は論文になるような物を目指します。

# Taylor展開でサインカーブ推定

Teylor展開は以下の式で表されます。

```math
f\left(x\right)=\sum_{n=0}\frac{f^{\left(n\right)}\left(a\right)}{n!}\left(x-a\right)^{n}
```

上式に$x=a+1$を仮定します。すると、以下の様に成ります。

```math

f\left(a+1\right)=\sum_{n=0}^{\infty}\frac{f^{\left(n\right)}\left(a\right)}{n!}\left(a+1-a\right)^{n}\\=f\left(a\right)+\sum_{n=1}^{\infty}\frac{f^{\left(n\right)}\left(a\right)}{n!}
```

これである関数$f$に$a$を与えると$a+1$の$f$を得る式になりました。
つまり前の時刻の値が得られると、次の時刻の値を予測するようなものです。
試しにサインカーブを与えます。以下の式に成ります。

```math
\sin\left(a+1\right)=\sin\left(a\right)+\cos\left(a\right)-\frac{\sin\left(a\right)}{2!}-\frac{\cos\left(a\right)}{3!}+\frac{\sin\left(a\right)}{4!}+\cdots
```

pythonでプロットしてみます。

```python
from numpy import *
from pylab import *
%matplotlib inline

x = arange(100) / 10 * pi
y = sin(x) # 現在


n = 1
z =0 # 予測
for i in range(10):
    if ((i + 2) // 2) % 2:
        op = 1
    else:
        op = -1
    
    n *= i if  i else 1
    if i % 2:
        z += op * cos(x) / n
    else:
        z += op * sin(x) / n
  
plot(x, y,"r",label="now");plot(x,z,"b", label="pred");legend();show()
```

![Unknown.png](https://qiita-image-store.s3.amazonaws.com/0/85968/744b91f1-88d1-fa42-77ff-65459f25848b.png)

現在(赤:now)の時点で未来(青:pred)を
予測しているので、赤より青が少し左にずれた感じになっています。

この位相のズレは1なはずなので、1だけ青をずらしてみます。

```python
x2 = arange(100) / 10 * pi + 1 #位相を1ずらす
plot(x, y,"r",label="now");plot(x2,z,"b", label="pred");legend();show()
```

![Unknown.png](https://qiita-image-store.s3.amazonaws.com/0/85968/479f1bb3-7f34-c902-36f0-3cbd3d190c5a.png)

ぴったり重なりました。予測ができています。
**関数形**さえ定義できていれば任意の精度(ただし、連続で微分可能なのもに限る)で
予測ができそうです。でも金融データも購買データも事前に関数系が得られていないので
(得られていたらうれしい)、
何らかの予測モデル(数式)を作る必要があります。
AWSアカウントのMFAの解除依頼をしたログ

AWSのMFAを引き継ぎ忘れた
=======
スマホを買い換えてGoogle認証システムアプリで、Googleアカウントの二段階認証だけ置き換えて前のスマホのアプリを消すという愚かな行為をしてしまったため、AWSのMFAを引き継ぎ忘れました。。

AWSのMFAにはGoogleの二段階認証にあるような、電話番号やSMS、バックアップコードによるログインという逃げ道が用意されていません。

依頼の仕方
=======
MFAを解除してもらうように依頼をしないといけないのですが、

[AWSアカウントに連携したMFA（２段階認証）端末が故障・紛失した場合の復旧について \- Qiita](http://qiita.com/saku/items/a6ea19ca0acddefda2e9)

を見る限り、英語で会話しないといけない。。。

一方的に話すだけならできなくはないがヒアリング、特に電話越しはきつい。
それでもなんとかなったので会話ログを残しておきます。

依頼フロー＆会話ログ
=======

1. MFA解除のリクエストを送る
-------

https://aws.amazon.com/forms/aws-mfa-support

MFAが利用できない理由と電話番号、国を選んで送信

2. 米国のサポートから電話がかかってくる
------

書かれていたとおり１０分ほどで電話がかかってくる（日本時間平日２３時ごろ）

```
※英語がちゃんと聞き取れていないので相手側の発言も勝手に省略＆翻訳しています

AWS: ○○○○○○○○○○○○　
    （さっそく英語でなにか言っているが聞き取れない、MFA解除の依頼云々言っていたと思うが）
me : I can only speak a little English.
    (電話は厳しいからなんとかメールにならないかなと思い先制攻撃)
AWS: OK, ○○○ ○○○ ○○○ ○○○ ○○○
    (片言でしゃべってくれた)
me : ...
    (理解と返事を脳内で処理していた)
AWS: OK, メール送るから読んで
    (マジ有能)
```

こんなメールがAWSのログインアカウントのメアドに送られてくるので、電話口から口頭でOTPを伝えよう。

```
Hello,

I'll be calling you shortly in response to your request for assistance with your MFA. For security purposes, please provide the following One Time Password (OTP) to me over the phone:

XXXX XXXX

I look forward to helping you soon.

Best regards,


http://aws.amazon.com
```

```
AWS: メール送ったから確認してね
me : OTP is XXXX XXXX
AWS: OK, 確認できました
　　　　　　　　（あとなにか言っていたけど覚えてない）
AWS: MFA解除したのでログインしてみてね
me : I will try login, now.
    (ID/PWでログインを試みる -> ログインできた！！！)
me : I was able to log in to AWS.
     Thank you very much!
     You helped me a lot. Thank you.
AWS: OK, Have a nice day!
```

AWSのサポートの方はこっちが無言でも辛抱強く待ってくれるし勝手に切られることもないので、安心してかけるといいと思います。サポートは24時間年中無休らしいです。
リフローとリペイント


デモ：https://codepen.io/mo4_9/pen/Omdqjz

append()処理が重かったのでその原因調査
まずダメな例

```javascript:処理が重い(DOMツリーにappendするのは1000回)
function createNumber(num){
  const elm = document.createElement('li');
  elm.textContent = num;
  $('.list').append(elm)
}
for(let i = 0; i < 1000; i++){
  createNumber(Math.random()*1000);
}
```

DOMノードが更新されると、リフロー（要素の大きさ、位置などの再計算）とリペイント（描画）が行われる。
故に[DocumentFragment](https://developer.mozilla.org/ja/docs/Web/API/document/createDocumentFragment)(描画に利用されるDOMツリーには現れないDOMノード)を使用して、DOMノードを更新する回数を最小限にすれば良い。

```javascript:処理が軽い(DOMツリーにappendするのは1回)
const docfrag = document.createDocumentFragment();

function createNumber(num){
  const elm = document.createElement('li');
  elm.textContent = num;
  $(docfrag).append(elm)
}
for(let i = 0; i < 1000; i++){
  createNumber(Math.random()*1000);
}

$('.list').append(docfrag)
```



> 参考
[ブラウザ動作の理解－リフローとリペイント及びその最適化](http://tokkono.cute.coocan.jp/blog/slow/index.php/web-technology/reflow-and-repaint-in-browser/)
画像屋は夢想する　画像認識に関わる書籍の紹介 「昆虫―驚異の微小脳」


[水波誠 著「昆虫―驚異の微小脳」](http://www.chuko.co.jp/shinsho/2006/08/101860.html)

「昆虫―驚異の微小脳」は、**「ヒトの脳に比べてなきに等しい昆虫の脳。ところが、この一立方ミリメートルにも満たない微小脳に、ヒトの脳に類似した構造が見られることが明らかになってきた。」**ことを述べている。
　最近よく知られてきているように、顕花植物と昆虫とは[共進化](https://ja.wikipedia.org/wiki/%E5%85%B1%E9%80%B2%E5%8C%96)してきた。顕花植物は、花をつけ蜜を出すことで、昆虫に受粉の仲立ちをさせることで相互に依存する関係を作り上げてきた。植物が、蜜を出す花を、昆虫には見つけてもらう必要がある。しかもやみくもにいろんな花の蜜を集めてもらうよりは、その植物の蜜だけを集中的に集めてもらうことの方が、その植物の受粉に役立つ可能性が高まる。そのためには、花が昆虫にとって見つけやすく、種類を区別しやすい特徴をもっていることがのぞましい。この本では、昆虫がどのような視覚をもっているのかについて、どのような実験によってあきらかにされてきたのかを示している。
　昆虫は、[エピソード記憶](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%94%E3%82%BD%E3%83%BC%E3%83%89%E8%A8%98%E6%86%B6)を持つこと、場所に関する記憶を持つことなども、同様に実験に基づいて語られている。
 昆虫の視覚としての特性については、次のような興味深い指摘があった。
・体の大きさを基準に視力を換算すると、人と同程度になること
・昆虫の視覚の応答時間は、哺乳類の視覚の応答時間よりも短い。ヒトには自覚できない蛍光灯の高周波のon/offが昆虫には認識できる。
・複眼による視覚のほかに、[単眼](https://ja.wikipedia.org/wiki/%E8%A4%87%E7%9C%BC%E3%81%A8%E5%8D%98%E7%9C%BC#.E5.8D.98.E7.9C.BC)による視覚もあり、用途が違っている。

・トンボのオス・メスによって目のつくりが違う例があり、立体視が重要性を持つかどうかが関係しているとのこと。
・「オプティカルフロー（画像の流れ）をみる」
    OpenCV [Optical Flow] (http://docs.opencv.org/trunk/d7/d8b/tutorial_py_lucas_kanade.html)
・「側抑制による輪郭線の強調」
　[網膜における側抑制の概念図] (http://gc.sfc.keio.ac.jp/class/2005_14453/slides/05/89.html)
　[エッジ検出・エッジ強調・ぼかし](http://koujinz.cocolog-nifty.com/blog/2009/05/post-200b.html)
・図形の対象性の有無を認識できること
・全空での太陽光の偏光を認識できるので、太陽が雲に隠れている場合でも、太陽の方向を知ることができること。


哺乳類の視覚でも実現できていない機能も含んでいる。
このような視覚が昆虫の微小な神経系で実現されていることに驚きを感じる。

このような微小な脳で、少ないエネルギー消費で、視覚機能を実現している。

画像屋として夢想するのは、これら昆虫の微小な脳で実現しているように、ディープラーニングがFPGAや専用の回路で小さく、少ないエネルギー消費で実現できるのではないだろうかということだ。

昆虫の脳で実現しているということは、物理的には不可能ではないということを意味する。

イメージセンサーと信号処理回路部分を積層した構造のデバイスが作られだしている。これが並列性の高い画像処理を可能にし、ディープラーニングなどの成果をイメージセンサに対して与えることを期待する。

[「高速ビジョンセンサー、毎秒1000フレームで検出」](http://eetimes.jp/ee/articles/1705/18/news034.html)


付記：
　昆虫の視覚についての記載は、上記の本の中にもっと詳しい記載がある。新書本であり、購入しやすい価格ですから、興味を覚えた人はぜひ買って一読することを勧める。


[ 単眼による飛行安定装置](https://invbrain.neuroinf.jp/static/IVBPF/Engineereing/Ocellar_based_flight_controller.html)
Docker | 初心者のための Docker 用語集

docker 関連の用語がありすぎて分からない！ 逐次更新予定。

# コンテナ関係

## $ docker run とは

イメージを元にコンテナを走らせるコマンド。

## $ docker exec とは

実行中のコンテナに対してコマンドを実行できるコマンド。

## Docker Compose とは

複数のコンテナをいちどに走らせるための仕組み。

# イメージ関係

## イメージとは

コンテナを作るための母体。
いちど作ったイメージは不変であり、固定。

## Dockerfile とは

自前のイメージを作るための手順を書いたファイル。

## $ docker build とは

Dockerfile を元にイメージを作るためのコマンド。


## Docker Hub とは

docker のイメージがたくさん置いてある場所。
`docker pull` とか `docker run` すると、自動的にレポジトリからイメージをクローンしてきてくれる。

公式イメージと、非公式イメージがある。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/d4493702-6390-c601-0cda-291c0cbe5f52.png)

# その他

## $ docker inspect とは

イメージやコンテナの詳細を調べるコマンド。

# 環境

## Docker for Mac とは

Mac のアプリケーション。
Mac で Docker を始めるのに一番良い方法。(2017年5月現在)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/1ab995a9-3c6e-a1c1-fc42-a80f9819692a.png)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
【R】読み込んだ列名の変更

emotion<-read.table("emotion.txt",header = TRUE,sep = '\t')

![2.PNG](https://qiita-image-store.s3.amazonaws.com/0/183229/a00370b3-8450-19cc-3309-d19f5359d15a.png)


colnames(emotion) <- c("posi","nega","neu")

![1.PNG](https://qiita-image-store.s3.amazonaws.com/0/183229/78c4b006-ad7d-e02c-6d7f-8614c5fc019f.png)


列に名前が入る
わたしの、最高のヒアドキュメント

# これが私のいのり、私のねがい :pray:

Ruby の `<<~` のように美しいヒアドキュメントを Python でも生み出したい！

[Ruby 2.4.0 リファレンスマニュアル » リテラル » ヒアドキュメント (行指向文字列リテラル)](https://docs.ruby-lang.org/ja/latest/doc/spec=2fliteral.html#here) より

> 開始ラベルを `<<~識別子` のように `~` を付けて書くことで、以下のような ヒアドキュメントを書くことができます。
> (略)
> 最もインデントが少ない行を基準にして、全ての行の先頭からから空白を取り除きます。 インデントの深さを決定するために主にタブやスペースで構成された行は無視されるので、注意してください。 しかし、エスケープされたタブやスペースは、通常の文字と同じように扱われます。

```rb:ruby
sayaka = '美樹 さやか'
kyoko = '佐倉 杏子'

str = <<~HEREDOC
  <div>
    <ul>
      <li>#{sayaka}</li>
      <li>#{kyoko}</li>
    </ul>
  </div>
HEREDOC

puts(str)
```
```html:stdout
<div>
  <ul>
    <li>美樹 さやか</li>
    <li>佐倉 杏子</li>
  </ul>
</div>
```

**さあ！叶えてよ、インキュベーター！！**

# ヒアドキュメントへの願いがエントロピーを凌駕した結果 :innocent: 

```py:python
def heredoc(str):
  from textwrap import dedent

  return dedent(str).strip()


if __name__ == '__main__':
  sayaka = '美樹 さやか'
  kyoko = '佐倉 杏子'

  str = heredoc(f'''
    <div>
      <ul>
        <li>{sayaka}</li>
        <li>{kyoko}</li>
      </ul>
    </div>
  ''')

  print(str)
```
```html:stdout
<div>
  <ul>
    <li>美樹 さやか</li>
    <li>佐倉 杏子</li>
  </ul>
</div>
```

[textwrap.dedent()](https://docs.python.jp/3/library/textwrap.html#textwrap.dedent) も、[str.strip()](https://docs.python.jp/3/library/stdtypes.html#str.strip) も、あるんだよ！

# わたしの、最高の参考記事 :sparkling_heart:

* [Python のヒアドキュメントを見やすくする小技
](http://qiita.com/hoxo_m/items/23e45f5fe480bcb9a29c)
  * ヒアドキュメントを前後のコードに合わせてインデントする場合、この記事とコメントで紹介されている方法に加えて
 `textwrap.dedent()` が必要でした。
MicrosoftのLogParserでIISのログ解析をする方法

SharePointにユーザー毎の最終アクセス日時を吐き出す機能が見当たらないので、IISのログを解析して表示することにした。

LogParserはログ解析に特化したMSのツール。

ユーザー別の最終アクセス日時と、リクエスト数を一覧として出力するクエリは次のとおり。
```
select cs-username as User, max(date) as LastAccessDate ,COUNT(*) as Hits from  '[LOGFILEPATH]' group by cs-username
```