OmniAICreator/Qiita-1.07M huggingface dataset:
LabVIEW Tips: PCのIPアドレスを取得する


# 実行中のPCのIPアドレスを取得する

SystemExec関数を使って、ipconfigコマンドを実行するのが手っ取り早い方法です。
LabVIEWもいまやほとんどのユーザがWindowsで使っているでしょうから、これで大抵の人は間に合うよね、ということにしときましょう。

以下、LabVIEW 2014で作成したVIスニペットを貼っておきます。
![GetMyIPAddressList.png](https://qiita-image-store.s3.amazonaws.com/0/43526/28365bca-0874-41cc-f6d8-3d3a4c22414e.png)

上記のVIスニペットファイルをダウンロードして、そのファイルを新規VIのダイアグラムにドラッグ＆ドロップして実行すれば、IP[]文字列配列に実行したPCの全てのネットワークアダプタのIPv4アドレスが出力されるはずです。
Windows7で作りましたが、Windows10でもたぶん動くはず。
ipconfigの出力が日本語でも英語でも通るように工夫はしてみましたが、どうでしょうかね?
（SystemExec関数の実行時のコードページをCP437とか英語モードにできるようにパラメータ指定できるようになるといいのですが...）
AWSのElactiCacheでRedisを導入してみた

ElastiCache(×Elastic Cache)にはmemcachedとRedisの2種類がありますが、今回はRedisの導入を取り上げます。

#Redisのクラスター構築
##Redisのクラスター設定
1. コンソールからElastiCacheを選択
2. Get Started Nowを押す
3. Step 1でSelect EngineでRedisを選択してNextを押す
4. Step 2でSpecify Cluster DetailsでRedisを構成するクラスターの設定を行う
    Port番号は特になければデフォルト設定のままで、Replication Group Nameでクラスターの名前とReplication Group Descriptionで説明は必須項目
    ※Multi-AZを選択しているとNode Typeでt2.micro,t2.small,t2.mediumが選択できないので注意
5. Step 3でNetwork&SecurityたBackup, Maintananceの設定をしてNextを押。
    Network&Securityの設定で、レプリケーションの配置はPrimaryなど互いに分散するようにAvailability Zoneに配置するようにする


6. Step 4のReviewで設定が正しいかを確認したらLaunch Replication Groupを選択する。Successを表示されれば、クラスターの設定が完了したこととなり、Closeで設定画面を閉じる。もし、設定に誤りがあればPreviousで戻って設定をし直す

##Redisのエンドポイントの確認
ElastiCacheのElastiCache Clustersの項目上で表示される先ほど立ち上げたクラスターの状態のSatusがCreatingから状態が変わり作成が完了したら、Nodesの項目の1 nodeという項目を選択しエンドポイントを確認する
※Cache Clustersの画面じょうのClusterの選択で確認できるConfiguration EndpointはRedisではN/Aとなるので注意する

##ファイアウォールの設定
セキュリティグループの設定でInbound Ruleを追加するなどの設定を行う。セキュリティグループでは例えば以下のような設定を行う。

タイプ: カスタムTCPルール
プロトコル: TCP
ポート範囲: 6379
送信元: 10.0.0.0/16(各自VPCの設定などに合わせる)


#EC2インスタンスにRedisをインストールする
EC2インスタンス上に、remiレポジトリでRedisをインストールする。

```bash
# remiレポジトリでインストール
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo yum --enablerepo=remi install redis
```

(参考) epelレポジトリでもインストールできるが、バージョンは古い。

```bash
$ sudo yum --enablerepo=epel install redis
```

PHP用のRedisをインストール

```bash
$ sudo yum install php-redis
```

Redis設定ファイルの編集をする

```bash
vim /etc/redis.conf
```

```redis.conf
# - bind 127.0.0.1
# + bind 0.0.0.0
```

サービスの起動とその設定をする

```bash
$ sudo service redis start
$ sudo chkconfig --level 35 redis on
$ sudo chkconfig --list | grep redis
```

以下の入力でRedisにログインできることを確認する

````bash
#ローカルでの接続テスト
redis-cli

#ElastiCacheへの接続テストは
redis-cli -h <エンドポイント>
```

#PHPからElastiCache上のRedisに接続する

Redisには以下のようなデータ型があります
1. String
2. List
3. Set
4. Sorted Set
5. Hash

その中でSorted Setを用いた接続例を以下に示す。このSored Setは順序付き集合のことで順位を維持しながら集合を持つことができる

```php
<?php
$redis = new Redis();

$server = '<エンドポイント>';//ローカルでテストする場合は'127.0.0.1'を指定する
$port = 6379;
$timeout = 2.5;

$redis->connect($server, $port, $timeout);
$redis->zAdd('new-order' , 20, 'aaa');
$redis->zAdd('new-order' , 10, 'ccc');
$redis->zAdd('new-order' , 15, 'fff');
$redis->zAdd('new-order' , 24, 'yyy');
$ranking = $redis->zRevRange('new-order', 0, -1);

var_dump($ranking);
```

以上です。
AWS EC2 WebRick Nginx ブラウザ アクセス方法

検索キーワード
aws ec2 webrick ブラウザ アクセス

参考サイト
http://a-auto50.blogspot.jp/2015/11/awsruby-on-rails.html
https://gist.github.com/honjo2/5023446

Nginxの状態を確認
sudo service nginx status
Webサイトに自作Botを埋め込む その1 -WebChatを使う-


**【告知】**
「チャットボット Advent Calender 2016」つくりました！
ボットにご興味ある方、年末Qiitaで語ってませんか？！
もちろん私も参加します！　ゆる〜くご参加、お待ちしておりまーす♪

**:christmas_tree: チャットボット Advent Calender 2016 :christmas_tree:**
http://qiita.com/advent-calendar/2016/chatbot

*(2016.10.27追記)*

----

:candy: &nbsp; :candy: &nbsp; :candy: &nbsp; :candy: &nbsp; :candy: &nbsp; :candy: &nbsp; :candy:
**※このシリーズは、BITAデジマラボ様での連載という形に移行しました。
この記事の続編は、BITAデジマラボ様でお楽しみください！**
https://bita.jp/dml/author/okada-takenori
:candy: &nbsp; :candy: &nbsp; :candy: &nbsp; :candy: &nbsp; :candy: &nbsp; :candy: &nbsp; :candy:

----

WebサイトにBotがあったら素敵ですよね。
最近ですと、こんな記事が話題になったりしました!

[LOHACOのAI「マナミさん」すごすぎ。6.5人分の人件費を削減した実例公開 - BITAデジマラボ](https://bita.jp/dml/lohaco_manami)

#じつは「WebChat」で簡単にできる！


じつはMicrosoft Bot Frameworkだと、
マナミさんのように
**WebサイトにBotを埋め込む事が、簡単に可能です！**

スクリーンショットがこちら！

![QavvpyBot_WebChat_と_static_webchat_html__qavppy-bot-test-123__—_Brackets.jpg](https://qiita-image-store.s3.amazonaws.com/0/124249/d4c42fdc-d465-5d80-6cd4-54cc4453b4c1.jpeg)


Microsoft Bot Frameworkには、
Skype,FacebookMessenger,Slack,kik... など
さまざまなChannelが用意されています。
(2016年5月現在)

そして、そのなかに**WebChat**という
iframeタグでBotを埋め込める仕組みが用意されてるのです！


#準備しよう！

まずBotを作ります。

(HelloWorldやってみた！記事は既にいっぱいあるので、
今回はBotの作り方・登録の仕方は割愛します！)
個人的には、こちらの記事がとてもわかりやすかったのでお薦めです♪
[Microsoft Bot Framework BotConnector BotをSlackから利用する | hrendoh's memo](http://blog.hrendoh.com/microsoft-bot-framework-how-to-connect-botconnectorbot-to-slack/#Slack)

Microsoft Bot Frameworkのサイトへログインし、
「My Bots」をクリック、
サイトに埋め込みたいBotを選択して、Botの管理画面へ。


Add another channelから、「WebChat」を追加します。

![qavppy_bot_test_🔊.jpg](https://qiita-image-store.s3.amazonaws.com/0/124249/c632b93f-7e6d-a174-f2ab-c43cd0d8904b.jpeg)


secretキーを発行します。

![Configure_qavppy_bot_test_on_Web_Chat.jpg](https://qiita-image-store.s3.amazonaws.com/0/124249/9a955c16-40b3-3a7c-7c76-fd322cc7f05a.jpeg)

できました！設定を完了します！

![Configure_qavppy_bot_test_on_Web_Chat 2.jpg](https://qiita-image-store.s3.amazonaws.com/0/124249/e4a7fd52-2c6c-706b-42c6-a932c07333ba.jpeg)


#さぁ、埋め込んでみよう！

埋め込みコードを取得します！

![qavppy_bot_test.jpg](https://qiita-image-store.s3.amazonaws.com/0/124249/07622f1f-652f-88df-8c29-6b4a6fcecfa9.jpeg)

ソースとSecretキーが表示されるので、コピペしましょう！

![qavppy_bot_test 3.jpg](https://qiita-image-store.s3.amazonaws.com/0/124249/883f70a4-7223-2ef7-6b69-f2eda1f47d57.jpeg)

#でたー！(ﾟдﾟ)

おめでとうございます！これで完了です！

![QavvpyBot_WebChat 2.jpg](https://qiita-image-store.s3.amazonaws.com/0/124249/915af0de-3237-c601-faa2-a1b7f38da255.jpeg)


あとは話しかけるだけ！

![QavvpyBot_WebChat_と_static_webchat_html__qavppy-bot-test-123__—_Brackets.jpg](https://qiita-image-store.s3.amazonaws.com/0/124249/5378de99-43ac-e328-0a47-3f2dd3f76673.jpeg)

##実際のURL

実際にWebChatを置いてあるURLは下記になります！
あそんであげてね！
http://qavppy-bot-test-123.azurewebsites.net/webchat.html


#UIを自分で作りたいんだけど、どうすればいい？

「ちがう、ちがう。そうじゃ、そうじゃなーーーいーーーー♪」
とコレジャナイ感をいだく方は、BotをREST APIとして使える
**Direct Line API**を使いましょう！

REST APIとして使えるので、
いろんなプログラムにも組み込む事ができますね。

Direct Line APIのご紹介はまた次回の予定です！
それでは！♪

**-追記-**
続編はこちらからどうぞ！↓
[Microsoft Bot FrameworkのDirect Line API × お馴染みjQueryで、WebブラウザからBotと対話してみる - BITAデジマラボ](https://bita.jp/dml/directlineapi_jquery_bot)
El Capitan(10.11.5)更新後、samba接続不可、認証エラーが発生した時の１つの対応策


## 朝から障害

やってくれました。深夜の知らぬ間に、どういったわけか、`El Capitan` 10.11.4 → 10.11.5 へ自動更新して、勝手に再起動されてました。タイミング見計らって、いつも更新をしているのに、こんなことになって、親に見せる顔がないので、またしばらく会わないつもりでいます。

そうしたらば、どうも `samba` で構成されている共有ファイルへアクセスができない模様。朝もはよからトラブルシューティングで目が覚めました。お陰様で、まだ19時前なのに疲労度MAXです。

# 環境について

発生した環境は次のとおりです。似たような環境であれば、１つの解決策になるかも知れません。みなさまのご助力となれば。

## クライアント

- iMac (27-inch, Mid-2011) 古いですな
- OS X `El Capitan` 10.11.5

## ファイルサーバ

- Linux 3.2系列 これまた古いですな
- samba 3.6系列
	- WORKGROUP 利用
	- tdb 認証

追記必要なら、随時

# 発生した事象とログ

事象は

- El Capitan 10.11.5 → samba 3.6 へアクセスすると認証エラー
- 該当のディレクトリへアクセスすると 'host is down' 表記

## クライアント側ログ

`console` または、`mount_smbfs` から、次のログが出力されます

```bash:console
mount_smbfs: mount error: /xxx/xxx: Authentication error
```

## サーバ側ログ

`loglevel` によって出力される該当箇所が異なりました。対象は `/var/log/samba/log.xxx` (xxx は対象のクライアントホスト名)

### loglevel = 0

```bash:samba/log.xxx
[2016/05/25 05:51:59.390493,  0] param/loadparm.c:8843(check_usershare_stat)
  check_usershare_stat: file /var/lib/samba/usershares/ owned by uid 0 is not a regular file
```

朝のはやさが目にしみます。このエラーは直接、アクセスできたことと関係があるのかないのかは、実は分かってません。(ぉぃ)

### loglevel = 1 以上

1〜5 で試しましたが、該当のエラーはこれっきりでした。

```bash:samba/log.xxx
[2016/05/25 07:07:52.459585,  2] smbd/smb2_server.c:2558(smbd_smb2_request_incoming)
  smbd_smb2_request_incoming: client read error NT_STATUS_PIPE_BROKEN
```

なんとなく、protocol おかしいのかなと、サーバ側の設定見直しです。

# 障害の原因

リリースノートみても「(´ε｀；)ｳｰﾝ…」みたいな感じになってしまったので、完全な原因究明していませんが、10.11.5 になったときに、smb2 protocol のやりとりが、きっと変わった模様。samba3.6で実装している smb2との相性問題と言ってしまえば、はいそれまでよの感じです。

何したねん。誰か情報求む。

## 対処方法

よけいなお節介な設定にしていなければ発生しない問題です。

```bash:問題のあるsmb.conf
        max log size = 10000
        max protocol = SMB2
        load printers = No
```

↓

```bash:修正したsmb.conf
        max log size = 10000
;        max protocol = SMB2
        load printers = No
```

なんてこったい。`max protocol` の指定とはね。samba4.0 では、また話はちがうと思いますし、これが大正解ではなく、一時しのぎな気はします。

とっとと、samba4.0 にしろってことは分かりましたので、そろそろ更新しますね...。
InfluxDBのデータをbackup，restoreする（ubuntu, OSX）

# InfluxDBデータのbackup，restore

[Influxdb](https://influxdata.com/)は，時系列データベースの１つです．時系列データを格納するのに適したデータベースで，メトリクスやイベントの保存や解析が便利になっています．インストール方法や基本的な使い方については各所に分かり易記事がでているので，本エントリーではデータのbackup，restoreについて記載します．基本的には[公式のBackup and Restore](https://docs.influxdata.com/influxdb/v0.13/administration/backup_and_restore/)の要約です．

## backup

influxDBデータには，metaデータと実データがあります．metaデータにはユーザデータ，database名，continuous queries等が入っています．

これのバックアップは，以下のコマンドで可能です．

```
$ influxd backup /path/to/backup
2016/02/01 17:15:03 backing up metastore to /tmp/backup/meta.00
2016/02/01 17:15:03 backup complete
```

問題なければ，上記のようなログがはかれて，`/tmp/backup/meta.00`にmetaデータが保存されます．`/tmp/backup/`がない場合は新しいdirectoryが作成されます．

実データ（データベース）のバックアップは，

```
$ influxd backup -database mydatabase /path/to/backup
```

で行います．オプションとしてretention policyやshard ID，時間指定が可能です．

```
$ influxd backup -database telegraf -retention default -since 2016-02-01T00:00:00Z /tmp/backup
```

問題なければ，`/tmp/backup`内にmetadataとdatabaseファイルが作成されます．

## restore

restoreする際にはまず，`service influxsdb stop`等でInfluxDBを一時停止してください．

metadataのrestoreは

```
$ influxd restore -metadir /var/lib/influxdb/meta /tmp/backup
```

にて行います．
また，databaseのrestoreは，

```
$ influxd restore -database telegraf -datadir /var/lib/influxdb/data /tmp/backup  
```

にて行います．

一度restoreをすると，shardのパーミッションが変更されてしまう場合があるので，

```
$ sudo chown -R influxdb:influxdb /var/lib/influxdb
```

で設定し直し，最後に

```
$ service influxdb start
```

でInfluxDBを再起動します．

### **OSXの場合**

上記の，`/var/lib/influxdb/meta`や`/var/lib/influxdb/data`はlinuxの場合のmetadata,databaseの保存場所です．OSXの場合はどこになるのかの記載がなく大分迷いましたが，
[公式のDatabase Configuration](https://docs.influxdata.com/influxdb/v0.13/administration/config/#meta)をみるとデフォルトではそれぞれ**`/Users/<username>/.influxdb/meta`，`/Users/<username>/.influxdb/data`**になっているようです．
pyvenvとは何か


#pyvenv とは

* 開発に必要なライブラリセットを、用途に応じて別々に持つ仕組み

#使用例

１つの開発機で２つのプロジェクト(ProjectAとProjectB)を開発するケースの例

* プロジェクトAでは、libray A の ver.1.0 と、library B のver.1.0 を使いたい
* プロジェクトBでは、libray A の ver.2.1 を使いたい

同じ開発機でプロジェクトAとプロジェクトBを開発したいが、それぞれの開発で環境を使い分けたい。

###使い分ける理由の例

* library A は ver違いをプロジェクトごとに使い分ける
* プロジェクトB ではlibrary B をインストールしたくない（不要なものをインストールして処理を重くしたくない、プロジェクトのコードと競合する、などの理由）

###環境（必要なライブラリセット）を分けるためにpyvenvを使う

`pyvenv prj_a_env`

(プロジェクトAに必要なライブラリたちをpip install)

`pyvenv prj_b_env`

(プロジェクトBに必要なライブラリたちをpip install)

###作った仮想環境でそれぞれのプロジェクトを開発

![virtualenv.PNG](https://qiita-image-store.s3.amazonaws.com/0/53352/5aa88e59-f93c-9d8d-659c-e6c5f651f8d6.png)

※pyvenv　を利用しない大本のPython環境にインストールした librayr C の ver.3.0は、全ての仮想環境に反映されてしまうので注意

###pyvenv で pip install した時のライブラリインストール先

prj_a_env/Lib/site-packages/ の下
Wifi取得メモ①

とりあえずWifi接続状況を取得したいんや！！

##初期設定
マネージャーの初期設定せんと！

````
WifiManager manager = (WifiManager)getSystemService(WIFI_SERVICE);
WifiInfo info = manager.getConnectionInfo();
````

パーミッションも変えな！

````AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
````

##データ取得

ようやく値の取得の時間や！

### SSID
まずはSSIDの取得やで！

````
String ssid = String.format("SSID : %s", info.getSSID());
````

###IPアドレス
次はIPアドレスを取得やで！

````
int ipAdr = info.getIpAddress();
String ip = String.format("IP Adrress : %02d.%02d.%02d.%02d", (ipAdr>>0)&0xff, (ipAdr>>8)&0xff, (ipAdr>>16)&0xff, (ipAdr>>24)&0xff);
````

###MACアドレス
やったるで！MACアドレスを取得や！

````
String mac = String.format("MAC Address : %s", info.getMacAddress());
````

### 受信信号強度
最後に受信信号強度&信号レベルを取得やでえ！！

````
int rssi = info.getRssi();
int level = WifiManager.calculateSignalLevel(rssi, 5);
String rssi = String.format("RSSI : %d / Level : %d/4", rssi, level);
````
        
とりあえずこれで終わりや！あとはStringを煮るなり焼くなり好きにしてえや！
Unixコマンドの略語を調べてみた

[Linux初心者の基礎知識](http://www.linux-beginner.com/linux_command.html)を参考に調べました


|コマンド|元の表現|意味|
|:-----|:---------------------------------------------|:----------------|
|apt-get|Advanced Package Tool get|Debian系（Ubuntuなど）のパッケージ操作・管理。パッケージのインストールに使用。[Link1](http://webkaru.net/linux/apt-get-command/)　[link2](http://qiita.com/white_aspara25/items/723ae4ebf0bfefe2115c)|
|bg   |background|バックグランド、後面|
|cat |concatenate|1つ以上のファイルを結合して表示|
|cd   |change directory|ディレクトリ変更|
|chgrp|change group|ファイル・ディレクトリの所有グループを変更|
|chmod|change mode|モード変更|
|chown|change owner|オーナー変更|
|cmp |compare|2つのファイルを文字ごとに比較|
|cp   |copy|コピー|
|df   |disk free|ディスク空き容量を表示|
|diff |diffefence|2つのファイルの差分を表示|
|dirs |directory stack|ディレクトリスタックを表示|
|dmesg|display message|システムのメッセージを表示|
|du   |disk usage|ディスク使用量を表示|
|fg   |foreground|前面|
|find|find|ファイル・ディレクトリの検索|
|free|free|メモリの使用状況を表示|
|fsck|file system consistency check||
|grep |Globally search a Regular Expression and Print<BR>Global Regular ExPressionとも|全体から正規表現に一致する行を検索|
|history|history|コマンドの実行履歴を表示|
|ifconfig|interface configuration|ネットワーク・インタフェースの参照・設定・起動・停止|
|last|last|ログインしたユーザーの履歴を表示|
|ln|link|ファイルやディレクトリにリンクを張る|
|ls   |list|リスト|
|man |manual|マニュアルを表示|
|mkdir|make directory|ディレクトリ作成|
|mv   |move|移動|
|passwd|password|ユーザのパスワードを変更|
|popd |pop directory|ディレクトリスタックをポップ|
|ps   |processstatus|プロセスステータス|
|pstree|process status tree|実行中のすべてのプロセスを詳細に表示|
|pushd |push directory|ディレクトリスタックをプッシュ|
|pwd  |print working directory|リスト|
|rm   |remove|削除|
|rmdir|remove directory|ディレクトリ削除|
|sed |stream editor|ストリームエディタ|
|startx|start X windwow|Xウィンドウシステムを起動|
|su |substitute user|ユーザを切り替える<BR>super userの略ではない|
|sudo |super user do|root権限でコマンドを実行|
|touch||ファイルのタイムスタンプの更新<BR>ファイルの作成|
|tr |translate|文字の置換、削除を行う|
|umask||ファイル作成時のパーミッションを指定|
|umount |unmount|アンマウント（なぜunmountにしなかったんだろう？）|
|uname|unix name|システムの情報を表示|
|uniq |unique|重複する行を削除|
|useradd|user add|新規ログインユーザ用の<BR>アカウントを追加|
|vi |visual editor|テキストエディタを起動|
|wc |word count|文字、単語、行を数える|
|yum|Yellowdog Updater Modified|Yellow Dog系（CentOS,Fedoraなど）のパッケージ操作・管理、パッケージのインストールに使用[Link](http://webkaru.net/linux/yum-command/)|
簡単にBGMやSEを作れるアプリの紹介


ゲームなどを作る上でBGMが欲しくなることがあると思うのですが、以下のアプリを使うと比較的ライトに作ることができます。

# BGM編
## KORG Gadget
簡単さ：★★★☆☆
完成度：★★★★☆

- 使いこなせばかなり本格的なものも作れる。オススメ。
- http://www.korg.com/jp/products/software/korg_gadget/

## figure
簡単さ：★★★★☆
完成度：★★☆☆☆

- 操作方法は一種独特だが結構それっぽいのが作れる。
- http://ascii.jp/elem/000/000/890/890943/

## iELECTRIBE
簡単さ：★★★☆☆
完成度：★★★☆☆

- http://www.korg.co.jp/Product/Dance/iELECTRIBE/

## CHORDANA TRACKFORMER（コーダナトラックフォーマー）
簡単さ：★★★★☆
完成度：★★★☆☆

- 簡単だけどできるものが単調
- http://world.casio.com/app/ja/trackformer/functions.html

## DM1 for iPhone
簡単さ：★★★★☆
完成度：★★★☆☆

- リズムマシンとして使う分にはそれなり
- http://apptoi.com/archives/92

# ボカロ編
## iVOCALOID-VY1
簡単さ：★★★☆☆
完成度：★★★☆☆

- ボカロ。使いこなせばそれなり。
- https://itunes.apple.com/jp/app/ivocaloid-vy1/id396081265?mt=8

## VOCALOID first
簡単さ：★★★★☆
完成度：★★★☆☆

- ボカロをライトに触りたいならこれ
- http://gigazine.net/news/20131114-vocaloid-first/

# SE編
## sfxr
SEを作りたいときはこれ。
ベースの音を選んで少し調節していく作り方がよいです
http://www.drpetter.se/project_sfxr.html
Jenkins文字化け対応

# 顛末
## 事象
* Jenkinsそのものは、文字化けたりすることはなく使えている。
* JenkinsのジョブでChatworkAPIを叩いてメッセージを投稿したら、投稿された内容が文字化けして読めない。

## 原因
* Jenkinsの文字コードが正しく設定されていない。
* OSの文字コードが正しく設定されていない。

## 対応
* OSの文字コードを変更した。方法は以下のリンクに記載。
	* [OSの文字コード設定方法](http://qiita.com/LowSE01/items/711aed71348999ee97fd)


* [参照] OSの文字コードを変更せずに、Jenkinsの文字コードのみ変更したい場合は以下。
	* [Jenkinsの文字コードを確認・設定する方法](http://qiita.com/LowSE01/items/3e39bf6f86e6884d69b1)
Crystal Reports の出力が、開発環境以外だと遅い(サブレポートを使用)

#はじめに
Crystal Reports関連の**日本語**情報が少ないので、ここにメモを残す。

#現象
Crystal Reportsにて、サブレポートを使用したレポートファイルをRefresh()すると、時間がかかる。
開発環境では2-3秒で起動するが、本番環境や別の開発環境で実行すると20秒近くかかる。

ネットを調べると、初回起動の高速化に「発行証明書の取得の無効化」が挙がっているが、実際これで問題解決しない。
*CrystalReportの初回起動が遅い場合の対処*
http://www.kuzilla.co.jp/20101208crystalreport

おそらく、以下のリンク先と同一の現象。リンク先では、結果解決できていない。
*Re[4]: Crystal Reportを使用したAPの起動時間 - C# と VB.NET の質問掲示板*
http://bbs.wankuma.com/index.cgi?mode=al2&namber=45735&KLOG=77

#原因1
サブレポートのパスが見つからないため。
Reports Designerで[参照]ボタンを使用して、ファイルを指定すると絶対パスが設定され、かつ、サブレポートのパスが見つからなくてもレポートが表示されてしまうため、気付きにくい。

サブレポートのパスの確認方法：
1. メインレポートを開き、サブレポートを選択して右クリック
2. [オブジェクトの書式設定]を開く
3. [書式エディタ]ウインドウが開くので、[サブレポート]タブの[ファイル名]に記述あり
![WS000001.JPG](https://qiita-image-store.s3.amazonaws.com/0/47696/8eb17e15-f417-00a3-f9fa-3ca76301f890.jpeg)

#対策1
サブレポートのパスにファイルを配置すると、素早く起動する。
~~サブレポートのパスを相対パスで記述。
相対パスの基準となるパスは、実行プログラムの配置してあるパスが、基準となる。~~
上記：検証したが、対応策を調査中

#原因2 & 対策2
デフォルトのプリンタ設定を読みにいっているため。
デフォルトのプリンタ設定をなしorローカルプリンタにすると改善。
原因1に比べると、効果が薄い。

対応とかは以下を参照
*かなりヤバイ状況に！！*
http://plaza.rakuten.co.jp/mashpen/diary/200701160000/

#情報源
元ネタは以下を参照
*Crystal 10: Reports Load Slowly*
http://support.resortdata.com/Customers/Knowledge/KB-RDPWin/KWin0007.htm
CentOSの文字コードを設定する方法

# /etc/sysconfig/i18nを編集する
* 以下の例ではUTF-8に設定。

    ``` bash
    sed -i -e "s/LANG=.*/LANG=ja_JP\.UTF-8/g" /etc/sysconfig/i18n && source /etc/sysconfig/i18n
    ```

    ``` /etc/sysconfig/i18n
    LANG="ja_JP.UTF-8"
    SYSFONT="latarcyrheb-sun16"
    ```

* 正しく設定しておかないと、[こんなこと](http://qiita.com/LowSE01/items/e6f83a7e47cca6b7ef37)でハマったりする。
docker push してるのに Repository does not exist: が出てpushできない

```
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              xxxxxxxxxxxx        23 minutes ago      787.2 MB
centos              centos6             xxxxxxxxxxxx        7 days ago          194.5 MB
```

REPOSITORYとTAGが<none>のやつが多分今pushしたいやつだ。名前をつける。

```
$ docker tag <image-id> <repository>
$ docker push <repository>
```

これでいいはず！下記が参考になりました。

https://forums.docker.com/t/docker-push-error-fata-0001-respository-does-not-exist/1309/26
セクション区切りとページ番号

Wordを利用していて、ページ番号がうまく振れず困って解決したときの覚え書き。

Wordには「セクション区切り」という「改ページ」に似たような「区切り」があって、ページ番号を分けたり、振りなおしたりしたい場合に使ったりする。

そこで、「セクション区切り」を入れた後に、削除したくてもわからなかったので覚え書き。

まずは、「段落」メニューから「→↓」こんなようなアイコンボタンを押す。

![section02.png](https://qiita-image-store.s3.amazonaws.com/0/3184/3636d310-e7ff-2ea5-f2ff-df7f2f4b9d4c.png)

すると、文面に下記のような、表示されなかった記号類が表示される。
後は、こいつを選択してあげて削除するだけ。

![section03.png](https://qiita-image-store.s3.amazonaws.com/0/3184/6a010b06-bbc7-2eea-64eb-71c03912f665.png)

Wordは苦手意識があるだけに、調べるのも苦痛です。
[JMeter]beanshellでsha256を動的に作成する。


# JMeterでsha256ハッシュを作成する。

環境:
Windows7 + JMeter2.13

JMeterで時間経過で変わるハッシュを都度生成したい。
前処理からBeanShell PreProcessorを選択し、下記の処理を記述した。
<pre>
import java.security.MessageDigest;
import java.util.*;
import java.text.*;

//csv data set config等で設定したパラメータを取得する。
String id = vars.get("id");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
String d = sdf1.format(new Date());
String str = d+id;
//現在時刻とあわせてハッシュ化
byte[] bytes = MessageDigest.getInstance("SHA-256").digest(str.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
//String.formatが使えないので頑張る。ffffffがなぜか大量に出ていたので消去
	String hexStr = Integer.toHexString(b).replaceAll("ffffff","");
	String hex = (hexStr.length() == 1) ? "0" + hexStr : hexStr;
	sb.append(hex);
}
String hash= sb.toString();
//
vars.put("hash",hash);
</pre>

更に子要素に追加したBeanShell PreProcessor内では上記で作成したhashパラメータを読み込めなかったので注意が必要。

MD5・sha-1等MessageDigestで扱えるものであれば他にも作成可能と思われる。
Show, Attend and Tell を動かす，キャプション生成

読み込んだ画像からキャプションを生成するモデルの一つ Show, Attend and Tell の動かし方を書いておきます．
https://github.com/kelvinxu/arctic-captions
(Issueみると結構困ってる人が多いのと自分も最初ちょっと躓いたので)

おそらくほとんどの人はデータセットの作り方がわからないのだと思うのでそのあたりに触れます．
![Ci0S0LkU4AE5DjK_orig.jpg](https://qiita-image-store.s3.amazonaws.com/0/127010/235b8ea5-2612-62d3-b4ac-0b47094e8b3e.jpeg)
キャプション生成例，馬が2匹見えてるっぽい

## まず実行してみる
https://github.com/AAmmy/show-attend-and-tell-8x512
を使用します．Readmeにあるライブラリが必要です．Caffeは必要ありません．

画像の特徴とキャプションを
http://cs.stanford.edu/people/karpathy/deepimagesent/
(COCO 750MB) からダウンロードし，coco.py の下のほうに記述されている場所に配置し，
scripts.py のメモにあるように
`THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32 python evaluate_coco.py`
を実行すれば学習が開始されます．

250 update ごとにキャプション例と生成されたキャプションが表示されます．最初のうちは何も出力されませんが徐々に文が出来上がっていきます．
TITAN X で3時間程度で BLEU 値が論文と同じくらいになります．15時間程度で early stop になり学習が終了します．

## 何か画像を入れてみる
あとで(generate_capsとneraltalkのextract feature py つかえばできる)

## 画像の特徴
ダウンロードしたファイルが含む画像の特徴は4096次元で，これを coco.py で 8x512 にして使用しています．
論文では 196x512 に取り出したものを使用していますが，4096次元でもうまくいっています．attention の可視化はそのままではできません．

## align.pkl
本来のコードでは事前にデータセットと辞書を学習，開発，テストにまとめたものを作っておくのですが，私のコードでは coco.py で学習開始時に作っています．
データの形式は，

```python:
train = [
            [["a dog is running.", 0], ...], # キャプション
            [[000000000000], ...] # 特徴
        ]
```

のようになっています．キャプションは文と数字がリストになっており，数字はその文を持つ画像の特徴ベクトルが特徴リストの何番目に入っているかを意味しています．

## 辞書
全キャプションの単語数を数えて頻度順に数字を出力するようにしているだけです．collectionsうまく使えばもっと楽に作れるみたいですが．

```python:coco.py
from collections import OrderedDict
dict_count = {}
for cs in cap_:
    for c in cs:
        for w in c.split():
            if w in dict_count:
                dict_count[w] += 1
            else:
                dict_count[w] = 1
dict_ordered_by_count = OrderedDict(sorted(dict_count.items(), key = lambda x:x[0]))
dict_ordered_by_count = OrderedDict(sorted(dict_ordered_by_count.items(), key = lambda x:-x[1]))
worddict = {k:i+2 for i,k in enumerate(dict_ordered_by_count.keys())}
```

例えば "a" が最も多く出現した単語であった場合は，
`worddict['a'] = 2`
次に多く出現した単語が "on" であった場合は，
`worddict['on'] = 3`
と出力されます．0 と 1 は \<eos> と UNK に開けておきます．

## 経緯
最初に Show, Attend and Tell を触ったときにうまく動かなかった (入力データの形式がわからなかった) ので newraltalk を使ってみた．https://github.com/karpathy/neuraltalk
なんとなく理解したので Show, Attend and Tell を使う．特徴抽出は時間がかかるので newraltalk の人たちが使用していたものを流用．Flickr8k では学習は失敗．30k は試してない．
その後 attention を表示してみたくなったので画像から CNN で特徴抽出を行うが，BLEU値が低い．
Issue を見ると BLEU 値が低いと言っている人が何人かいる．

どうも特徴抽出の方法が良くないらしい．(Issue にいる人たち含め)
http://www.statmt.org/wmt16/multimodal-task.html
試していないのがここに論文と同じ形式の Flickr30k のデータがおいてある．

## まとめ
入力データができればすぐに動く．
特徴ベクトルうまく抽出してないといい BLEU でない．
学習パラメータは capgen.py の train() に書いてあるのが flickr8k 用，evaluate_coco.py に書いてあるのが coco用．flickr30k はcocoのパラメータの隠れ層を 1300 とかにするとよいらしい．
Xcode7.3.1にアップデートする時に、待機中から進まない場合の対処法

# 症状
App StoreアプリでXcodeにアップデートをしたが、「待機中」のまま進まなかった。

# 対処法
Finderでアプリケーションフォルダを開き、「Xcode.app」アプリの名前を「Xcode_7_2.app」に変更したら、アップデートが進みだした

# 参考

http://chalife.tokyo/2016/02/09/xcode721-update/
お手軽netflow

#インストール
`$ sudo apt-get install nfdump -y`
最新はこっち https://github.com/phaag/nfdump

#使い方
##Capture Start
`$ nfcapd -w -t 3600 -D -l ~/netflow -p 5000`

`w`:ファイルに書き出す
`t`:ファイルに書き出す間隔 ※毎時0分からの間隔
`D`:デーモンモードで起動
`l`:書き出すディレクトリ
`p`:受信ポート ※環境に合わせて変更

##Dump
###リスト表示
`$ nfdump -r nfcapd.current`

###raw表示
`$ nfdump -o raw -r nfcapd.current`

###リスト表示をSourceIPでソート
`$ nfdump -r nfcapd.current -n 20 -s srcip/bytes`

###IP Rangeでフィルタ
`$ nfdump -r nfcapd.current 'net 192.168.0.0/16'`

###特定ASとの通信をリスト
`$ nfdump -r nfcapd.current 'as hoge' -n 20 -s srcip`

##Capture Stop
`$ ps aux | grep nfcapd`
`$ kill pid`

##rotate
`crontab -e`
`0 0 * * * find /home/hoge/netflow/ -name "nfcapd.*" -mtime +3 -delete`

#参考資料
http://enog.jp/wp-content/uploads/2010/08/enog4-takasima-0827.pdf
http://knqyf263.hatenablog.com/entry/2014/02/27/005353
tmuxを自力ビルドしてインストールする

[先人](http://qiita.com/makisyu/items/d6b32d88cdd97b01a00f)が既に書いていますが、足りなかったので自分のメモがてら。

まず最初に、以下のソースコードをwgetとかでダウンロード＆解凍しておく

* [tmux](http://tmux.github.io/)
* [libevent](http://libevent.org/)
* [ncurses](https://ftp.gnu.org/pub/gnu/ncurses/)


```bash
# 先にlibeventをビルド＆インストール
cd libevent
mkdir build
../configure
make
sudo make install

# 次にncursesをビルド＆インストール
cd ncurses
mkdir build
../configure
make
sudo make install

# 最後にtmuxをビルド＆インストール
cd tmux
mkdir build
../configure
make
sudo make install
```
Logstashのoutput-emailでgmailを使ってメールを飛ばす

# LogstashでEmail通知をGmailのSMTPサーバでやりたい

ぐぐっても古い情報だと、--configtestは通るのに実行時にエラーとなるので、何とか試したよという話。

レガシーなWebhookもないシステムがあるけど、何とか本体には手を入れずに通知する部分が欲しい！という人には役立つかもしれない。

## 環境
- Logstash 2.3.2


## 設定ファイル記載例

標準入力に入力した文字列をメールで飛ばす、という例。

```rb

input {
    stdin {
    }
}

output {
    stdout { codec => "rubydebug" }
    email {
        #送信元アドレス
        from => "*********@gmail.com"
        #本文
        body => "%{message}"
        #宛先
        to => "*********@abc.jp"
        
        codec => "plain"
        contenttype => "text/plain; charset=UTF-8"
        
        #SMTPサーバ
        address => "smtp.gmail.com"
        #ポート指定
        port => "587"
        authentication => "plain"
        #認証設定 
        username => "***************@gmail.com"
        password => "パスワード"
        use_tls => true
        #デバッグ設定
        debug => true
    }
}
```

## 参考


本家サイトを見ても、Gmailの場合に、何をどう設定したらいいか分からなかったが、ここが非常に参考になった。
[Gmail を使って Net::SMTPAuthenticationError が出力される場合の解決法](http://karur4n.hatenablog.com/entry/2015/03/07/234600)


[本家サイトのoutput/email](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-email.html)


## 参考2

本家のQAサイトに[Help config plugin output mail](https://discuss.elastic.co/t/help-config-plugin-output-mail/26259)というのがあるものの、
logstash2.3.2ではoptionsの設定が変わっているため、この中で紹介されている書き方では実行時にエラーとなった。

```rb
email {
  to => "fabioebner@gmail.com"
  codec => "plain"
  contenttype => "text/html; charset=UTF-8"
  options => {
    smtpIporHost => "smtp.gmail.com"
    port => 465
    userName => "user@gmail.com"
    password => "mypass"
    starttls => true
  }
}
```
javascriptでクロスドメインを越える

Google皇帝に従ってSSL化しろよと思いますが
残念ながらなかなかそうはいかない場合もあって。

以前は

```php:api.php
echo file_get_contents($_GET['url']);
```

こんな感じで経由してたけど
~~なんかできなくなった気がするのと~~
めんどくさいので
jsでできないかなーと思って探してたらありました。

[jquery.fn/cross-domain-ajax at master · padolsey-archive/jquery.fn]
(https://github.com/padolsey-archive/jquery.fn/tree/master/cross-domain-ajax)


```html:https.html
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery.colorbox/1.6.4/jquery.colorbox-min.js"></script>
<!-- <script type="text/javascript" src="https://raw.githubusercontent.com/padolsey-archive/jquery.fn/master/cross-domain-ajax/jquery.xdomainajax.js"></script> -->
<script type="text/javascript" src="https://rawgit.com/padolsey-archive/jquery.fn/master/cross-domain-ajax/jquery.xdomainajax.js"></script>

<script>
$(function() {
	$.ajax({
		type: 'GET',
		url: "http://6oolab.com/license.txt",
		dataType: 'html',
		success: function(data) {
			$.colorbox({html:data.responseText, width:"80%", height:"80%"});
		}, error:function(e) {
			console.log(e);
		}
	});
});
</script>
```

colorboxをつかう場面だったのでこうなりました。
スクレイピングするときも活躍しそう。

#### 動作サンプル
<a href="(httpからhttp用) http://6oolab.com/xdomainajax" target="_blank">(httpからhttp用) http://6oolab.com/xdomainajax</a>
<a href="https://6oolab-com.ssl-netowl.jp/xdomainajax" target="_blank">(httpsからhttp用) https://6oolab-com.ssl-netowl.jp/xdomainajax</a>
ブラウザによって色々あるもよう。


*追記*
<a href="http://redv40.blogspot.jp/2014/09/jqueryxdomainajaxjs.html" target="_blank">クロスドメインアクセスの最近 jquery.xdomainajax.js 読めないサイトあり？</a>
htmlの構造によっては読めないものもあるみたい。


*続・追記*
raw.githubusercontent.comはtext/plainで読んでまうので
rawgit.comを使わせてもらう※注
<a href="http://qiita.com/futoase/items/39cb4b7d704b1e53e7f6" target="_blank">CDN代わりにgithubを使いたい場合は外部サービスrawgithubを利用しよう</a>
MonoDevelopで閉じ括弧を自動補完してくれるようにする設定

MonoDevelopを使っていてメソッドを作成する際などに、閉じ括弧が補完されなくてイライラしていた。

# 理想
一般的なIDEだと`void Hoge () { `まで打つと、自動で閉じ括弧を補完してくれたり

```
void Hoge () {}
```

エンターキー押すと、良い感じの位置に閉じ括弧を入れてくれたりする。

```
void Hoge () {
}
```


#現実
それがMonoDevelopでは閉じ括弧の補完をしてくれない。

```
void Hoge () {
```
ありのまま終わる。

（#^ω^）ﾋﾞｷﾋﾞｷ
# 閉じ括弧を自動補完する設定
[Preferences]  - [Text Editor] - [Behavior] の "Insert matching brace" にチェックを入れる。
<img width="820" alt="スクリーンショット_2016-05-25_14_38_37.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/6380/7c5c4669-284d-d658-d2a9-e75d64bed5a2.jpeg">
これで閉じ括弧を自動補完してくれるようになる。

# 参考
[Mono - MonoDevelop IDE - How to auto close braces in MonoDevelop](http://mono.1490590.n4.nabble.com/How-to-auto-close-braces-in-MonoDevelop-td4656650.html)
今開いてる Excel ファイルを別ウィンドウで開き直すマクロ


Excel2010 は複数ファイルを開くと、一つのウィンドウ内に複数のファイルを開く。
2つの表を見比べるときに、時折鬱陶しい。


```vbnet
Sub openWithNewWindow()
    Dim filePath As String
    Dim wshShell
    filePath = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
    ActiveWorkbook.Close
    Set wshShell = CreateObject("WScript.Shell")
    wshShell.Run ("""" & Application.Path & "\excel.exe"" """ & filePath & """")
End Sub
```

1. マクロに登録
3. ```%appdata%\Microsoft\Excel\XLSTART``` に ```hoge.xlsm``` で保存
4. Excelファイルを開くと自動的に ```hoge.xlsm``` が非表示で立ち上がる
5. マクロから ```CTRL-q``` にでも登録
6. 別ウィンドウで開きたい Excel で ```Ctrl-q``` すると、別ウィンドウで開く
7. 幸せ

今は ```Ctrl-q``` する度に ```hoge.xlsm``` が表示状態で開くのが悩みです。
docker: Error response from daemon: rpc error: code = 2 desc = "oci runtime error: exec format error".

`docker run`に`docker: Error response from daemon: rpc error: code = 2 desc = "oci runtime error: exec format error".`エラーが出ました。


調べたところ、｀ENTRYPOINT`はShellファイルの場合、先頭の行は`#!/bin/sh`ようなシェバン (shebang)でなければなりません。


`ENTRYPOINT`となったファイルに一行目を`#!/bin/sh`を追加してから無事に起動できました。
JavaScriptランダム乱数

#Math.randomとは？
Math.randomは0から1の間のランダムな数字をリターンするJSの関数です。

##Math.randomの使い方
Math.random();

##Math.randomの例
document.write("Math.random() : " + Math.random());
結果：Math.random() : 0.3482240167419748

##Math.randomの例２
1から5の間の値がランダムに表示されるコード
document.write("結果：" + Math.ceil(Math.random() * 5));
結果：2
JavaScriptブラウザのサイズ

#■ブラウザサイズ
JSからブラウザのサイズを調べる方法は２つあります。
１．スクロールを含んだサイズ
２．純粋なブラウザのサイズ
※こちらはIEのみです。

##■ブラウザの全体サイズ
→IE 8以下
document.body.offsetWidth

→IE 8以上
window.outerWidth

→Chrome, Firefox, Opera, Safari
window.innerWidth
window.outerWidth

##■ブラウザの高さ
→IE 8以下
document.body.offsetHeight
document.body.clientHeight

→IE 8以上
window.outerHeight
window.innerHeight

→Chrome, Firefox, Opera, Safari
window.outerHeight
window.innerHeight
Mac覚書 TimeMachineでNASを使用する方法

#概要#
開発環境をまるっと保存する為、TimeMachineを使ってバックアップすることに。
自分のMBAでは、USB接続のHDDを使用してTimeMachineを運用している為、
NASでの設定方法が分からなかったので調査。

新しいNASならばTimeMchineに対応している(と思う)ので、外付けHDDとあまり変わらない感じで
使えるのかもしれませんが…今回使用したNASはちょっと古いから非対応(？)だったので、
BUFFALOさんが用意してくれているTimeMachine用の設定ができなかったことが問題でした。
（新しいNASでも下記のNo.1の工程は必要なのかも…)
#参考サイト#
http://keroctronics.web.fc2.com/timemachine.html
http://d.hatena.ne.jp/Kazzz/20111214/p1
#設定方法#
以下は、Mac側での設定になります。
今回、NAS(BUFFALO LinkStation LS-320GL)側での設定変更は特にしませんでした。
すでにWindows環境で使うための設定が済んだ状態だったので、真っ新な状態であれば
何か設定が必要だったのかもしれません（曖昧な情報で、ごめんなさい）
##1.バックアップ先をネットワーク共有しているボリュームも対象にする##
　通常だとバックアップ先としては「内蔵ストレージ」「USB接続された外付けストレージ」
　「Time Capsule」の３種類しか使用できないそうで、その中に「ネットワーク共有している
　ボリューム」を追加するためにターミナルから下記のコマンドを入力する

　*sudo defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1*

　意味としては、設定ファイルの「com.apple.systempreferences.plist」の　　
　「TMShowUnsupportedNetworkVolumes」という設定値を「１」に変更すると
　ネットワーク共有しているボリュームも対象に出来るそうな。
##2.ホスト名とMACアドレスを調べる##
　次の工程のイメージ作成で設定するファイル名を下記の仕様にする為、
　Macのホスト名とMACアドレスを調べる

　*ホスト名＋"_"＋MACアドレス(:は除く)*

　ホスト名：リンゴマーク⇒システム環境設定⇒共有⇒コンピュータ名
　　　　　　※今回は編集押下で表示されるダイナミック・グローバル・ホスト名を使用しました。

　MACアドレス：リンゴマーク⇒このMacについて⇒システムレポート
　　　　　　　　⇒(右)ネットワークのWi-Fi⇒(左)MACアドレス
　　　　　　　　※有線LANの場合は違うMACアドレスになるらしい
##3.イメージ作成##
　ディスクユーティリティーでイメージを作成する。
　まずはヘッダーメニューの「新規イメージ」をクリック。
　下記の内容を入力します。

　名前(上部):２で決めた名前を入力
　名前(下部):任意
　サイズ：後で変更するので、初期値のままでＯＫ
　フォーマット：MaxOS拡張(ジャーナリング)
　暗号化：なし
　パーティション：ハードディスク
　イメージフォーマット：スパースハンドル・ディスクイメージ

　最後に「作成」をクリックして終了。
　その後、作成したイメージを取り出してアンマウントし、ローカルからNAS上へファイルをコピー。
##4.イメージファイルのサイズ変更##
　NAS上のイメージをクリックし、マウントします。
　その後、ディスクユーティリティーを開いて、取り出し「イメージのサイズを変更」をクリックし
　イメージファイルサイズを変更します。
　今回は、参考サイト様同様150GBにしました。
　（Macのストレージが500GB・使用容量は約100GBの状態で、最終的に必要な容量は105GBでした)
##5.イメージファイルのフォーマット##
　ディスクユーティリティーのパーティションメニューで1パーテーションに設定しフォーマット。
　フォーマットが完了したら、パーティションを選択して、下部のマウントポイントをメモしておきます。
##6.バックアップの保存先をスパースディスクイメージにする##
　3～5で作成したイメージをバックアップの保存先に設定するため、ターミナルから下記のコマンドを入力
　※今回マウントポイントが「/Volumes/TimeMachine」だったので、下記のコマンドとなった

　*sudo tmutil setdestination /Volumes/TimeMachine*
##7.TimeMachineを起動##
　起動するも…バックアップ先が開けないとかでエラー(泣)

　何が悪いんだろうと模索しつつ、参考サイト様で紹介されいた「イメージの自動マウント」の設定を
　足してみたいり、もう一度イメージファイルを作り直したりやってみましたが、
　最終的には、ディスクユーティリティの「ディスクを検証」を行ったら動き始めました…
　
　何が原因で、何をきっかけに動き出したのか分かっていませんが…
　とりあえずTimeMachineでNASが使えるようになりました
　(もやっとした結末で、ごめんなさい)
#最後に#
　他のサイト様でも書かれていましたが、すごく時間かかりそうです。
　現在「残り約１０時間」という案内が表示されています(汗)　

![スクリーンショット 2016-05-25 13.07.05.png](https://qiita-image-store.s3.amazonaws.com/0/67341/f2a6e026-4a5a-52fc-2617-58f7e35e4a9a.png)
私が学習したい機械学習のユースケース

# 機械学習の一般的なユースケース
* 不正検出：不正の可能性がある小売取引の特定
* チャーン分析：小売顧客離れの予測モデルを構築するための手順を示しています
    * [Retail Churn Template](http://gallery.cortanaintelligence.com/Experiment/Retail-Churn-Template-Step-1-of-4-tagging-data-1 )
* 小売店のための予測分析モデル
   * [Retail Forecasting Template](http://gallery.cortanaintelligence.com/Collection/Retail-Forecasting-Template-1 )

# [Machine Learning アルゴリズム](https://azure.microsoft.com/ja-jp/documentation/articles/machine-learning-algorithm-choice/)

[Microsoft Azure Machine Learning 日本語版アルゴリズムチートシートを公開しました（非公式） - 吉田の備忘録] : (http://ty-memo.azurewebsites.net/azure/microsoft-azure-machine-learning-%e6%97%a5%e6%9c%ac%e8%aa%9e%e7%89%88%e3%82%a2%e3%83%ab%e3%82%b4%e3%83%aa%e3%82%ba%e3%83%a0%e3%83%81%e3%83%bc%e3%83%88%e3%82%b7%e3%83%bc%e3%83%88%e3%82%92%e5%85%ac/)
三大 クラウド機械学習サービスと最小実行サンプル

# azure
* [Microsoft Azure Machine Learning Studio](https://studio.azureml.net/)
* チュートリアル：調査中
* 本格的なフローチャートスタイルのデータフローを提供している。
* 複数のアルゴリズムを提供している。
* RとPythonのコードが使えるのに加え、パッケージも使用できる。

# google
* [PREDICTION API (Google Cloud Platform)](https://cloud.google.com/prediction/)
* 6 ヶ月間は、制限付きで無料
* 最初のチュートリアル [Hello Prediction!] (https://cloud.google.com/prediction/docs/hello_world#query)
* UIはない（開発者用）
* 複数のアルゴリズムを提供している。

# amazon
* [Amazon Machine Learning](http://aws.amazon.com/jp/machine-learning/)
* チュートリアル：調査中
* 1つの（不透明な）アルゴリズムのみ
* アルゴリズムとUIの制約はあるものの、ウィザードを使って使用でき、非常に使いやすい。
JavaからKotlinに変換したコードが落ちるときがあるという話


### JavaのコードをKotlinに変換

IntelliJ IDEA（およびAndroid Studio）にKotlinプラグインを入れると、メニューの[Code]に[Convert Java File to Kotlin File]というのがはえて、これでJavaのクラスを一気にKotlinに変換できます。

### Nullable or NonNull

Javaには、NullableとNonNullの区別がないので、変換の際にコンバーターが考えてどっちかにしてくれるのですが、そのとき、なるべくNonNullにしようとするようです。

それでも、未初期化の非プリミティブ型の変数は、Nullableで初期値がnullになります。これは、それしかやりようがないですからしょうがないですね。

### 何処で落ちたか

さて、表題の変換後のコードが落ちる件ですが、AndroidのAdapterインターフェースのgetView()を実装しているところで頻発します。

Adapterインターフェース自体、使用頻度が高いのでやっかいです。

```Hoge.java
class HogeAdapter extends BaseAdapter {
    ...
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ...
    }
}
```

これが、

```Hoge.kt
class HogeAdapter : BaseAdapter() {
    ...
    
    override fun getView(position: Int, convertView: View, parent: ViewGroup): View {
        ...
    }
}
```
こんな感じに変換されます。

Androidアプリの開発者ならわかると思うのですが、このconvertViewはNullableです。
なので、実行すると、getView()に入ってくる前（ユーザコードを実行する前にKotlinが生成したコードでnullチェックが入ります）に落ちます。

変換後に修正してもいいのですが、ついうっかり修正するのを忘れてしまって、動作確認時に落ちて、「やっちまった。orz」となることもしばしばです。

そうならないために、

```Hoge.java
class HogeAdapter extends BaseAdapter {
    ...
    
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        ...
    }
}
```

というように、アノテーションをつけておくと、

```Hoge.kt
class HogeAdapter : BaseAdapter() {
    ...
    
    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        ...
    }
}
```

というように、ちゃんとNullableな型に変換されます。

### まとめ

* Kotlinを使うつもりがあるのなら、こまめに、@Nullable、@NonNullアノテーションをつけておきましょう。
* Nullableにしたくない変数は、キチンと初期化しておきましょう。
RecursiveASTVisitorの使い方

Clangでなにかやろうとしたときには`RecursiveASTVisitor`を使うことが多いと思う。簡単な使い方の説明を書く。

* http://clang.llvm.org/doxygen/classclang_1_1RecursiveASTVisitor.html

`RecursiveASTVisitor`には`VisitFoo`と`TraverseFoo`が定義されている。他に`WalkUpFromFoo`もあるけど、前二つに比べると利用頻度は下がるだろう。

サンプルプログラム。意味はない。

```objc
@interface Hello : NSObject
@end

@implementation Hello

- (NSString *)hello:(NSString *x) {
  if (x) {
    return x;
  } else {
    return @"";
  }
}

@end
```

僕はClang初心者なので、Clangの流儀としてこれで合っているのか良くわかりません。とりあえず意図通りに動いてはいる。

# プログラム中のすべての要素を処理したい場合

これは簡単で、単純に`VisitFoo`を実装すれば良い。

`VisitExpr`を定義しておけば、`if`の条件の`x`と`return`の`x`と`@""`に対する処理が実装できる。

# 特定の要素に含まれる要素を処理したい場合

メソッド定義の中の式だけ処理したい場合がある。しかもその処理には式を含むメソッド名が必要だったりする。

この場合は、

1. メソッド定義だけ取り出すVisitor
2. 式を処理するVisitor

に分ける。1.のために`Visit`を使うと、全部の部分式を処理してしまうので、ここで`Traverse`を使う。

```cpp
class MethodBodyProcessor : public RecursiveASTVisitor<MethodBodyProcessor> {
  ...
};

class ProgramProcessor : public RecursiveASTVisitor<ProgramProcessor> {
public:
  bool TraverseObjCMethodDecl(ObjCMethodDecl *decl) {
    std::string name = decl->getNameAsString();
    MethodBodyProcessor bodyProcessor(name);
    return bodyProcessor.TraverseStmt(decl->getBody());
  }
};
```

`RecursiveASTVisitor`の`TraverseFoo`には、再帰的にvisitする処理が含まれているので、`TraverseFoo`を自分で実装してしまうことで、部分式を処理しないようにすることができる。この場合、式の処理が必要なら、別のVisitorを作って委譲する。

# 式のクラスによって場合分けしつつ、結果をreturnしたい場合

多分`RecursiveASTVisitor`ではなく、`ExprVisitor`とかを使って、手でrecursionするしか無いと思う。悲しい。
macで容量の無駄を可視化するアプリ


常に容量問題に四苦八苦している僕が使っている
容量確認Application等を紹介します

## 容量確認

### [GrandPerspective (無料)](http://grandperspectiv.sourceforge.net)
![1_0-FoldersBujumbura.png](https://qiita-image-store.s3.amazonaws.com/0/96971/a768a29e-2732-006b-411c-722f6ea2977d.png "1_0-FoldersBujumbura.png")
各ファイルの容量をタイルの大きさで表示してくれるアプリ
個人的にはコレが一番好き
使い方はシンプルだけど、リクエストが有れば解説します。

___

### [DaisyDisk (記事公開時:￥1,200)](https://daisydiskapp.com)
![スクリーンショット_2016_05_25_12_39.png](https://qiita-image-store.s3.amazonaws.com/0/96971/3a258d81-4682-3c8c-9231-e257a05c15b3.png "スクリーンショット_2016_05_25_12_39.png")
こんな感じで表示してくれる。
ドンドンクリックして潜っていく感じ
評判が良かったのでセール時に買ってみたものの
あまり使えなかった

___

### [DiskWave (無料)](https://diskwave.barthe.ph)
![MainWindow.png](https://qiita-image-store.s3.amazonaws.com/0/96971/90935743-d242-91f1-9e19-ed085bf1439c.png "MainWindow.png")
容量に特化したFinderってイメージ
容量が色分けされて出て来るのが割と便利
初期の頃はコレを使っていた

___

## クリーンアップ
### [CleanMyMac (記事公開時:￥3,980)](http://www.cleanmymac.jp)
![screen-1.png](https://qiita-image-store.s3.amazonaws.com/0/96971/e64c0552-34b5-2f3f-ddd7-18ead89f1546.png "screen-1.png")
macのキャッシュ等ジャンクファイルを削除してくれたり
El Capitanから再起動に埋め込まれたアクセス権限の修復なども出来る
chrome等の拡張機能の削除機能が付いているのは驚いた
これも大セール時に購入

___

### [MacClean (無料)](https://www.imobie.jp/macclean/)
![screenshot1.png](https://qiita-image-store.s3.amazonaws.com/0/96971/bc382cc1-621f-689e-12e7-207f8e099fad.png "screenshot1.png")
有料アプリ並のクオリティを誇るクリーニング&メンテナンスソフト
cleanmymacと同じこと　いやそれ以上ができたりする。
だが旧versionで必要な書類が消されたという報告もある。

___

とりあえず自分が使ったことあるものを挙げてみた。
クリーンアップには必要な物が消されないか多少ドキドキするが
「エイッ」っと押して見るのが吉です(笑)

## 今回紹介したもの

* [GrandPerspective (無料)](http://grandperspectiv.sourceforge.net)
* [DaisyDisk (記事公開時:￥1,200)](https://daisydiskapp.com)
* [DiskWave (無料)](https://diskwave.barthe.ph)
* [CleanMyMac (記事公開時:￥3,980)](http://www.cleanmymac.jp)
* [MacClean (無料)](https://www.imobie.jp/macclean/)
onlineTool > VHDLの実行

VHDLを実行できるOnlineTool
http://www.edaplayground.com/

- googleアカウントかFacebookアカウントが必要
- VHDLのcode exampleもある

使い勝手の評価はこれから。

<hr>
(追記 2016/05/27)

- 波形が見れるのは便利
- コード補完機能が欲しい
- 作成したものをpublicで公開できるのはいい
- fork機能が欲しい

おおむね満足している。
PCを変えても作業が継続できるのは良い。
pip について

## pip とは何か
pythonのライブラリをインストール・管理する仕組み
代表的なライブラリ例

* django
* flake8
* openpyxl などなど

## 主なコマンド
* pip install ライブラリのインストール
* pip uninstall ライブラリのアンインストール
* pip freeze インストールされているライブラリとバージョンの確認

## ライブラリインストール元

### PyPI 
* インターネット上のライブラリ置き場
* 世界中の開発者がここにライブラリを公開している
https://pypi.python.org/pypi
* pip install <ライブラリ名> で指定したライブラリをPyPIからダウンロードして、インストールする

(例) pip install django

![pip_install.PNG](https://qiita-image-store.s3.amazonaws.com/0/53352/5eaba661-6e43-4c78-d5fc-8f6f66120be2.png)

### ローカルに置いたファイル
* ローカルに置いたファイルも pip install でインストールできる
* pip install (ローカルに置いたファイル)

### ライブラリインストール先
* 通常は、(python install directory)/Lib/site-packages の下に各種ライブラリがインストールされる
gitでindex.lockがありpull出来ないよと言われた

gitで*pull*や*add*した時に

```
fatal: Unable to create '/hogehoge/.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.
```

index.lockがあるよ！っというエラーが出たので

```:Gemfileなどがあるディレクトリで
$cd .git
```

lsコマンド打つと中に***index.lock***が存在しているはずです
これを消します！！！

```:hogehoge/.git
$rm index.lock
```

おそらく中身は空だと思うので-rfオプションは付ける必要ないかと..

これで*pull*なり*add*なり出来ると思います！！
Rubyでinclude?メソッドを使った時によく出る'undefined method `include?' for nil:NilClass'エラーの対処法

include?メソッドはよく使うが、僕みたいな初心者が使うと良く'undefined method `include?' for nil:NilClass'エラーが出る。

```hoge.rb
array = ["hoge", "hogehoge", "hogehogehoge", nil]
array.each do |ary|
 p ary.include?("hoge")
end

#=> true
#=> true
#=> true
#=> NoMethodError: undefined method `include?' for nil:NilClass
```
こんな感じ。これで良く処理が止まっちゃう。
こう書くと便利。

```hoge.rb
require 'active_support/core_ext/object/try'

array = ["hoge", "hogehoge", "hogehogehoge", nil]
array.each do |ary|
 p ary.try(:include?, "hoge")
end

#=> true
#=> true
#=> true
#=> nil
```

止まらないで動いたー。
Xcode覚書　複数のXcodeを共存させる方法

#概要#
開発環境を構築するにあたり、Xcodeを複数の異なるバージョンで共存させる事となった為、調査。
#参考サイト様#
http://qiita.com/k_kuni/items/522719637f2c3f7c2b67
http://egg-is-world.com/2015/04/10/xcode-version-install/
http://hacknote.jp/archives/14577/
#手順#
##1.Xcodeのダウンロード##
　今回は、すでにv6.1がインストールされている状態で、そこにver7.3.1をインストールするため
　app.storeからではなく、下記のサイトから対象バージョンのdmgファイルをダウンロードしました。
　https://developer.apple.com/downloads/

![スクリーンショット 2016-05-23 12.12.11.png](https://qiita-image-store.s3.amazonaws.com/0/67341/80f8502b-11cb-2b92-af0a-71e63b2b7e4f.png)
##2.インストール##
　ダウンロードしてきたファイルを展開したら、Xcodeが使えなそうな画像が…
![スクリーンショット 2016-05-25 11.46.56.png](https://qiita-image-store.s3.amazonaws.com/0/67341/30fd525b-f34c-fc75-f43f-4a44749a0349.png)
　開いてみたら、「OS X 10.11以降が必要」とのメッセージが表示された(泣)

　OSのバージョンの影響で、今の状態だとVer6.4が限界と判明。
　その辺りの事は、別で書こうと思いますが、今回はOSのバージョンを上げて
　Ver7.3.1.1をインストールすることに。

　マウントされたXcodeを一度、作業用のワークフォルダにコピーしてきて、名前を変更。
  「Xcode」→「Xcode3.7.1」
　それをアプリケーションに移動して完了。
#最後に#
これで共存する環境になりました。
今回は、古いバージョンのXcodeはそのままにして、新しい方の名前を変えました。
（逆の方がいいという意見もありますが…今回はお客様ルールで新しい方の名前を変えました)
Drupal8 入門の入門（キャッシュについて）

## Drupalのキャッシュについての資料

ここの図でキャッシュのイメージがなんとなく。。。

- [renderviz: tool visualizing Drupal 8's render tree](http://wimleers.com/blog/renderviz-prototype)

キャッシュのプロセスについて

- [Cacheability of render arrays](https://www.drupal.org/developing/api/8/render/arrays/cacheability)

Drupal8で追加されたに「Dynamic Page Cache」ついての説明

- https://www.drupal.org/documentation/modules/dynamic_page_cache

Render API

- https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21theme.api.php/group/theme_render/8.1.x

### Contextキャッシュとは

urlやuserなど、文脈(直訳だと)に応じたキャッシュ(キー?)の事

- [Cache contexts](https://www.drupal.org/developing/api/8/cache/contexts)

> Contexts are automatically replaced with the value for the current request (e.g. the current language) and combined with the keys to form a cache ID. The cache contexts, tags, and max-age will be propagated up the render array hierarchy to determine cacheability for containing render array sections.

参照：Core\Cache\Context\CacheContextInterface
参照：Core\Cache\Context\UserCacheContext

PHPStormを利用している場合、CacheContextInterfaceを開いて、Subtypes Hierarchyでどんなコンテキストがあるのか確認出来る
(Type Hierarchy → Subtypes Hierarchy.)

たとえば、user別にキャッシュするためのキーはUserCacheContextを確認すると
> Cache context ID: 'user'.
となっている

#### その他、coreに定義されているキーの例
- site : サイト全体でのキャッシュ
- url.query_args : パラメータも含めたurl(ページャーモジュールはこれを使用している)のキャッシュ
- user.permission : ユーザの権限ごとのキャッシュ
など

独自にコンテキストキャッシュのキーを作ることも可能？
## **TIPS**

### **TIPS.** 特定のブロックのキャッシュ設定を変更する(おそらくバッドノウハウ)

例：ラベルで判定して、キャッシュのコンテキストに'url'を追加する

```mymodule.module.php
function mymodule_block_build_alter(array &$build, \Drupal\Core\Block\BlockPluginInterface $block)
{
    /**
     * 例ではブロックの"ラベル"で判定しているが、管理画面上から変更可能な部分なので危険
     * core/modules/block/block.api.php
     * https://api.drupal.org/comment/60564
     */
    if ($block->getConfiguration()['label'] === 'xxxxxx') {
        $build['#cache']['contexts'][] = 'url';
    }
}
```
ncompatibleClassChangeError getNoBackupFilesDir com.google.android.gms.iid.zzd.zzeC で苦しんでいる貴方に


Android Studio 2.1.1で確認しています。

いつものようにASを立ち上げ、いわれるままにアップデートし実機でテストしようとしたところ突如エラー発生。

# エラー

```sh
Caused by: java.lang.IncompatibleClassChangeError: The method 'java.io.File android.support.v4.content.ContextCompat.getNoBackupFilesDir(android.content.Context)' was expected to be of type virtual but instead was found to be of type direct (declaration of 'com.google.android.gms.iid.zzd' appears in /data/data/jp.co.isao.android.hoge/files/instant-run/dex/slice-com.google.android.gms-play-services-gcm-8.4.0_87dc0faeb9f8eb1097c93a30b91cc5980f2ad50c-classes.dex)
    at com.google.android.gms.iid.zzd.zzeb(Unknown Source)
    at com.google.android.gms.iid.zzd.<init>(Unknown Source)
    at com.google.android.gms.iid.zzd.<init>(Unknown Source)
    at com.google.android.gms.iid.InstanceID.zza(Unknown Source)
    at com.google.android.gms.iid.InstanceID.getInstance(Unknown Source)

```




**オイオイ...ヾ(°∇°)**


困った時はggksということで検索しまくりました。
結果としては安定のStackOverFlowで解決


# 解決方法

> *Android Google Cloud Messaging (GCM) token generation crash after Firebase-related Google Play Services update
http://stackoverflow.com/questions/37337393/android-google-cloud-messaging-gcm-token-generation-crash-after-firebase-relat*

使用しているsupport libraryが古いために発生している模様。やっかいなのが、そのsupport libraryのバージョンが利用しているライブラリの中で定義されてる可能性があること。

というわけでバージョンを強制指定するために以下を追加

```build.gradle
configurations.all {
    resolutionStrategy {
        force 'com.android.support:design:23.4.0'
        force 'com.android.support:support-v4:23.4.0'
        force 'com.android.support:appcompat-v7:23.4.0'
    }
}
```

~~これで丸1日無駄にしてしまった。~~
Android Studio 2.0でTest Artifactの設定が消えてしまったとき


Android Studio 1.5まではBuild Variantの設定のところに以下のようにTest Artifactの設定がありましたが、

![RxCaptureSession_kt_-_RxCamera2_-____github_RxCamera2_.png](https://qiita-image-store.s3.amazonaws.com/0/8308/98084ecf-17d0-04ff-4dc6-afeeed2ca68d.png "RxCaptureSession_kt_-_RxCamera2_-____github_RxCamera2_.png")


Android Studio 2.0では以下のように消えてしまい、UnitTestが正しく実行できなくなってしまいました。

![RxCaptureSession_kt_-_RxCamera2_-____github_RxCamera2_.png](https://qiita-image-store.s3.amazonaws.com/0/8308/c90ef88e-86f3-6796-83fb-100598418785.png "RxCaptureSession_kt_-_RxCamera2_-____github_RxCamera2_.png")


そんなときは[Preference]から
- Build, Execution, Deployment
	- Experimental
		- Enable all test artifacts (Unit Test and Instrumentation Test) in Android projects

のチェックを外すと、元通りTest Artifactの設定が見えるようになります。


![Preferences.png](https://qiita-image-store.s3.amazonaws.com/0/8308/c98f5c81-5cec-3ee5-55d1-b92ee3c9a3d5.png "Preferences.png")
brew upadateできない

#brew update できない

##エラー内容
```
Cannot pull with rebase: Your index contains uncommitted changes.
Please commit or stash them.
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
```


###以下の記事を読んで解決！
[Homebrewのアップデート（brew update）でエラーが出た場合の対処法 - HAM MEDIA MEMO](https://h2ham.net/brew-update-error)


## /use/local/に移動

```
cd /usr/local
```

```
git fetch origin
git reset --hard origin/master

```
[git resetとは](http://qiita.com/annyamonnya/items/d845597606fbabaabcad)


この後、「brew upadate」できるようになりました
Imagemagickを使用してRGBのjpg画像からCMYKのEPS画像に変換する方法について

Imagemagickを使用してRGBのjpg画像からCMYKのEPS画像への変換をされたことがある方に質問です。
色空間の指定やカラープロファイルを使用しても、sRGBのEPS画像が生成されてしまうという事象が発生している。Imagemagickを使用してCMYKのEPS画像へ変換できるかご存知の方がいらっしゃればご教示いただけないでしょうか。
rake db:seedを使ったデータの投入

#個別のデータの呼び込み

データを追加するテーブルに対応したモデルのクラスを用意します
クラスで用意されているcreateメソッドを使ってデータを追加していきます

~1行ずつ書く場合~

```ruby:seeds.rb
Model.create(name: "Railsの基礎知識", position: 1)
Model.create(name: "Rubyの基礎知識", position: 2)
```

~まとめて記述する場合~

```ruby:seeds.rb
5.times do |i|
     Page.create(name: "テスト #{i}", model_id: 1)
end
```

```:Gemfileなどがまとまっているディレクトリで
$rake db:seed
```

これで記述したコードが実装されてテーブルにデータが追加されます！

RubyだとCSVデータも読み込めるらしいですね

```ruby:seeds.rb
require "csv"

CSV.foreach('db/sample.csv') do |row|
  Model.create(name: row[0], sales_date: row[1], price: row[2])
end
```