OmniAICreator/Qiita-1.07M huggingface dataset:
IoTHub デバイスからの送信時間

デバイスから、Azure IoT Hubへの送信時間を測定しました。

#前提
* デバイスは、Surface Pro 2。
* デバイスのOSは、Windows 10 1511。

#測定方法
Console Application(.NET4.6)に、nugetでMicrosoft.Azure.Devices.Clientを追加して、DeviceClient.SendEventAsyncメソッドで送信しました。

CloseAsyncすると、SendEventAsyncでフリーズしたことから、DeviceClientインスタンスが再利用できないと判断。毎回、DeviceClientをインスタンス化することにしました。

DeviceExplorerで見ていると、OpenAsyncではなく初回のSendEventAsyncでConnectしているようなので1回目の送信時間から2回目の送信時間を引いた値を、接続にかかる時間としました。

#コード

```csharp
    class Program
    {
        private const string DeviceConnectionString = "xxx";

        static void Main(string[] args)
        {
            MyTask().Wait();

            Console.WriteLine("Hit any key.");
            Console.ReadKey();
        }


        static async Task MyTask()
        {
            for (int count = 0; count < 30; count++)
            {
                var sw0 = new System.Diagnostics.Stopwatch();
                var sw1 = new System.Diagnostics.Stopwatch();

                Message eventMessage1st = new Message(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()));
                Message eventMessage2nd = new Message(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()));

                using (DeviceClient deviceClient = DeviceClient.CreateFromConnectionString(DeviceConnectionString, TransportType.Mqtt))
                {
                    sw0.Restart();
                    await deviceClient.SendEventAsync(eventMessage1st);
                    sw0.Stop();

                    sw1.Restart();
                    await deviceClient.SendEventAsync(eventMessage2nd);
                    sw1.Stop();

                    await deviceClient.CloseAsync();
                }

                Console.WriteLine($"{count},{sw0.ElapsedMilliseconds},{sw1.ElapsedMilliseconds}");
                await Task.Delay(1000);
            }
        }

    }
```

#結果
![20160612A.png](https://qiita-image-store.s3.amazonaws.com/0/109634/954103da-dd03-79a1-edfe-edf869a50de0.png)

![20160612B.png](https://qiita-image-store.s3.amazonaws.com/0/109634/78123783-4b03-68a5-9f98-e3fd9a11bbee.png)
cocoapods1.0.1を使ってみた


# はじめに

最近、[cocoapods](https://cocoapods.org/)が1.x系のアナウンスをしてくるので、[WWDC2016](https://developer.apple.com/wwdc/)まえにアップデートしたみました。

# 環境

- OS X El Captian 10.11.5
- Xcode7.3.1
- Swift2.2
- cocoapods-1.0.1

# 違い

バージョンの古い記述のPodfileで```pod install```仕様としても、コマンドの実行自体は行えますが、以下のようなメッセージが表示され、ライブラリがインストールされません。

```
$ pod install
Analyzing dependencies
Downloading dependencies
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There are 0 dependencies from the Podfile and 0 total pods installed.

[!] The Podfile does not contain any dependencies.
```

ちなみにcocoapods0.x系のPodfileはこのような形でした


```
# Uncomment this line to define a global platform for your project
# platform :ios, '8.0'
# Uncomment this line if you're using Swift
# use_frameworks!

target 'ClipCast' do
  pod 'Firebase'
end

target 'ClipCastTests' do

end

target 'ClipCastUITests' do

end
```

こちらが、cocoapods1.x系です

```
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0' 
target 'ClipCast' do
  # Comment this line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for ClipCast
  pod 'Firebase'

  target 'ClipCastTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'ClipCastUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end
```
cocoapodsの[Blog](http://blog.cocoapods.org/CocoaPods-1.0/)でもあるように

>
Defines a CocoaPods target and scopes dependencies defined within the given block. A target should correspond to an Xcode target. By default the target includes the dependencies defined outside of the block, unless instructed not to inherit! them.

とあり、デフォルトでは、メインのブロックのそとで定義した依存関係が含まれるとあります。
cocoapods1.0系では、pod initすると	
```use_frameworks!``` がメインブロックになかに記述されている事がわかります。

# おわりに

詳しい実装は、ソースコードを追っていないためよく理解はしていませんが、なには無くとも```pod init```をしていれば、そこまでハマる事もないかと思いますので、ツールのドキュメントに沿って、使用する事が望ましいと思いました。

# 謝辞

- [cocoaPods.org](https://cocoapods.org/)
- [CocoaPods 1.0](http://blog.cocoapods.org/CocoaPods-1.0/)
- [Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#post_install)
vendor/bin/phpunitの代替手段

## composerでインストールしたdevツールの実行方法について

例えばPHPUnitの場合。
https://phpunit.de/

```bash
$ composer require --dev 'phpunit/phpunit'
```

こんな風にインストールしたとしたら、phpunitコマンドは通常`vendor/bin/phpunit`に生える。
当然、そこにPATHは通ってないのが普通なので`phpunit`と言う風にコマンド実行できない。

## vendor/bin/phpunit

まあ、こうすれば実行できる。

```bash
$ vendor/bin/phpunit
```

しかしコマンドが長くなるし、イマイチ格好良くない。
そもそも、`vendor/bin`はcomposerの設定によって変更可能であり、ハードコードするのも行儀が悪い。

## `$(composer config bin-dir)/phpunit`

vendor/binのハードコードをなくすとしたら、こう書ける。しかし大変ダサい…。vendor/binよりもタイプ数増えてるし。

```bash
$ $(composer config bin-dir)/phpunit
```


## composer-scriptsで生やす

composer.jsonにscriptsという項目を追加すると、composerに任意のコマンドを生やすことができる。

例えばこんなふうに書いておくと、

```json
{
// ...
  "scripts": {
    "test": "phpunit"
  }
}
```

```bash
$ composer test
```

でvendor/bin/phpunitが実行されるようになる。
vendor/bin/を書いていないことに注目。PATHの先頭にvendor/bin/を追加してくれるので、意識しなくてもいいようになってる。npmにも似たような機能あるよね。

短く書けるし、何回も実行する場合はコマンドを生やしておくといいと思う。

なお、この状態でphpunit自体にオプションを渡したい場合は`--`を挟む必要がある。

```bash
$ composer test -- --colors=always
```

まあ面倒くさいので、いつも指定するオプションならばcomposer.json側に書き込んでしまったほうが良い。

## composer exec コマンドを使う

RubyのBundlerに似たような機能があるが、composerにもexecコマンドが追加された(2016年2月頃)。古いcomposerを使ってる人はself-updateしてみよう。

これを経由すると、割とスッキリ書ける。

```bash
$ composer exec phpunit
```

何回も実行するのであればscriptsで生やしてもいいと思うけど、execの方がお手軽ではある。
ちなみに、今試した感じだと「--」によるオプション渡しがうまく動作していないようだった。。今はまだscriptsの方が安定してるかなあ。。
Windows 10 に scikit-learn をインストールしてみる

Windows 10 Pro (64bit) に scikit-learn をインストールしたので、そのときの手順を記録しておきます。

# やること
Win10 に scikit-learn とそれに必要なライブラリ群をインストールし、動作確認をします。

# インストールするパッケージ
順に以下のとおりです。
1. Python 3.5.1 (64bit版)
2. wheel
3. numpy
4. scipy
5. scikit-learn
6. pandas

# インストールしてみる

## Python をインストール
Python のダウンロードページから "Windows x86-64 executable installer" をダウンロードして、インストールします。"Add Python to environment variables" にチェックを入れてインストールしてください。
https://www.python.org/

## Wheel のインストール
Wheel形式のパッケージをインストールできるようにします。
Windows のコマンドプロンプトを起動して、下記コマンドを実行します。

```shell-session
pip install wheel
```

## numpy, scipy の Wheel 形式パッケージをダウンロードしてインストール
numpy は下記URLの "numpy-1.11.0+mkl-cp35-cp35m-win_amd64.whl" をダウンロードします。
http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

scipy は下記URLの "scipy-0.17.1-cp35-cp35m-win_amd64.whl" をダウンロードします。
http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy

```shell-session
pip install C:\Users\<PathToFile>\numpy-1.11.0+mkl-cp35-cp35m-win_amd64.whl
pip install C:\Users\<PathToFile>\scipy-0.17.1-cp35-cp35m-win_amd64.whl
```

## scikit-learn, matplotlib, pandas をインストール
お目当ての scikit-learn とそれに必要な グラフ描画パッケージ matplotlib, データ解析パッケージ pandas をそれぞれインストールします。

```shell-session
pip install scikit-learn
pip install matplotlib
pip install pandas
```

## 動作確認
インストールが一通り終わったので、scikit-learn がちゃんと動くか確認します。下記URLに scikit-learn のサンプルコードがあるので、"plot_multioutput_face_completion.py" をダウンロードします。

http://scikit-learn.org/stable/auto_examples/plot_multioutput_face_completion.html#example-plot-multioutput-face-completion-py

そしたら、早速実行。

```shell-session
python <PathToFIle>\plot_multioutput_face_completion.py
```

しばらくしてこんな結果が表示されたらOKかな。

<img width="960" alt="faces.png" src="https://qiita-image-store.s3.amazonaws.com/0/128323/c47b550e-12ea-c313-490f-279cbfe1054d.png">

以上です。
Macの覚え書き


# はじめに

自宅Macの覚書です。 
El Capitan(Mac OS 10.11)のショートカットやキーボード周りを記載します。 
キーボードはUS仕様です。

# キーボード表記

>「^」= control
>「⇧」= shift
>「⇪」= caps lock
>「⌥」= Option = Alt
>「⌘」= Command
>「fn」= 地球儀キー

# コマンド一覧

アクション          |              コマンド
:------------- | ----------------:
切り取り           |             ⌘ + X
コピー            |             ⌘ + C
ペースト           |             ⌘ + V
取り消し           |             ⌘ + Z
全て選択           |             ⌘ + A
検索             |             ⌘ + F
保存             |             ⌘ + S
閉じる            |             ⌘ + W
終了             |             ⌘ + Q
アプリ一覧の表示|             F3
画面全体のスクリーンショット |     ⇧ + ⌘ + 3
選択範囲のスクリーンショット |     ⇧ + ⌘ + 4
画面フルスクリーン |    ^  + ⌘ + F
強制的再起動         | ^ + ⌘ + 電源
mbed シリアル通信クラス

mbedオフィシャルのシリアル通信クラス（Serial, RawSerial）は、ソフトウェアによるバッファリングが実装されていません。
なので、通信手順によってデータ欠落が発生します。

ユーザーが、いくつかバッファリング機能を実装した公開しているので、インポート数の多いものを試しました。

#折り返し通信テスト

9600,8,N,1で、折り返し通信。

##mbed
* mbed LPC1768を使用。
* 受信バッファは8192。
* 受信データを配列に貯める。
* 改行コードが来たら配列を送信。

```cpp
#include "mbed.h"
#include "BufferedSerial.h"

int main()
{
    BufferedSerial pc(USBTX, USBRX, 8192);
    pc.baud(9600);
    
    char data[1100];
    int data_index = 0;
    
    while(1) {
        if (!pc.readable()) continue;
        
        char c = pc.getc();
        data[data_index++] = c;
        if (c == '\n')
        {
            data[data_index] = '\0';
            pc.puts(data);
            data_index = 0;
        }
        
    }
}
```

##母艦PC
* 100～1000バイトの文字列（長さはランダム）を送信。
* 改行コードまでを受信。
* 送信と受信が一致するか確認。


#MODSERIAL by Andy
* [ライブラリページ](https://developer.mbed.org/users/AjK/code/MODSERIAL/)
* インポート数　5133回
* 最終変更　2014/1/8（←更新止まってる？）
* 親クラス　Serial

親クラスがSerialなので、LPC1114などuLibだとアレな感じ。
GPDMAによるバルク送信が実装されているみたい。なかなかパワフルですね。

後述のMODSERIAL by Erikが継承しているようなので、そちらで試すことにします。

#BufferedSerial by Sam
* [ライブラリページ](https://developer.mbed.org/users/sam_grove/code/BufferedSerial/)
* インポート数　1677回
* 最終更新　2016/3/7
* 親クラス　RawSerial

折り返し通信テストは、、、折り返しデータが送られてこないorz

#MODSERIAL by Erik
* [ライブラリページ](https://developer.mbed.org/users/Sissors/code/MODSERIAL/)
* インポート数　1398回
* 最終更新　2015/11/17
* 親クラス　Serial

親クラスがSerialなので、LPC1114などuLibだとアレな感じ。

折り返し通信テストは良好！
115200bpsにすると、時々、データが化ける。1204705バイトのうち、7バイト。

#結論
* [MODSERIAL by Erik](https://developer.mbed.org/users/Sissors/code/MODSERIAL/)がオススメ。
* 115200bpsの場合は、通信エラーの考慮が必要。

>mbedライブラリをrev.121より新しくすると、MODSERIAL by Erikはコンパイルエラーになりますorz
【ionic】デバイスの向きに合わせてアプリの向きを変更する

ionicでアプリを作成した初期状態では、デバイスの向きでアプリ向きは変更されず、固定的になっています。デバイスの向きに合わせてアプリの向きを変更させるには、config.xmlに以下の行を追加します。

■iOSの場合

```xml:config.xml
<platform name="ios">
<preference name="Orientation" value="all" />
</platform>
```

■Andoroidの場合

```xml:config.xml
<platform name="android">
<preference name="Orientation" value="all" />
</platform>
```

■参考URL
- [Device Rotation](https://forum.ionicframework.com/t/device-rotation/37206)

※（動作確認はしていませんが）上記の設定はcordovaでも有効です。ionicでの動作確認は1.7.15で行いました。
よく使う strace のオプション

Linux で strace を使ってシステムコールのトレースを調べる時によく使うオプションをメモ。

### システムコールを詳細に追う

- tt: 行頭にタイムスタンプをマイクロ秒単位で出力
- T: 行末にシステムコール内での所要時間を出力
- ff: 子プロセスのシステムコールもトレースし、-o との併用でプロセス（スレッド）毎に別ファイルに出力
- o: 指定したファイルに出力。-ff と併用すると、ファイルパス.<PID> に出力
- s: 出力文字数を指定。I/Oサイズが1MBなど大きい場合で、読書きした内容を確認したい場合は、大きくする。
- p: プロセスIDを指定。

```bash:
$ strace -Ttt -ff -s 1500000 -o <ログ出力先ファイル名> -p <PID>
もしくは
$ strace -Ttt -ff -s 1500000 -o <ログ出力先ファイル名> <コマンド>
```

同じプロセスが生きている間に /proc/[pid]/fd でファイルディスクリプタ番号とファイルパスの対応を確認しておくと、strace で read(17, ... などと出力されている場合に、17 のファイルパスかわかります。
 
```bash:
$ ls -l /proc/[pid]/fd
```

### システムコールの種類別に集計（時間・回数）する
```bash:
$ strace -fc -o <ログ出力先ファイル名> -p <PID>
もしくは
$ strace -fc -o <ログ出力先ファイル名> <コマンド>
```

[コマンドの実行例などは ablog 参照](http://d.hatena.ne.jp/yohei-a/20160612/1465701692)
IoT縛りの勉強会! IoTLT vol.15に参加しました

# 勉強会の基本情報

* 【日　時】
    * 2016年05月31日 19:00~22:00
* 【会　場】
    * 日本IBM本社
* 【参加費】
    * 無料
* 【主　催】 
    * リレーションズ株式会社 土屋敬
    * 株式会社LIG 菅原のびすけ
* 【申し込み】 
    * http://iotlt.connpass.com/event/31396/

# 概要
* いろいろなLTを聞いたが、以下の三つのLTが一番面白いと思う
 * LT: GR-SAKURAとXBeeでTEDのアレ作ってみた
 * LT: 鍋のインターネット

# 内容
## LT: GR-SAKURAとXBeeでTEDのアレ作ってみた

### GR-SAKURAとは
* Arduino対抗の電子工作マイコンキット
* 仕様
 * http://sakuraboard.net/gr-sakura.html
* ![grsakurajumpertop.jpg](https://qiita-image-store.s3.amazonaws.com/0/13451/e84710ba-8db4-5f98-544b-c154d7482b0d.jpeg)

### XBeeとは
* 短距離無線通信の規格の一つ(ZigBee)
* このZigBee規格に基づいて通信を行ってくれるモジュールの「XBee」を使ってみること
* ![08665-03-L.jpg](https://qiita-image-store.s3.amazonaws.com/0/13451/ce8cf7f4-ab6c-d217-5c2e-dab3e6579e44.jpeg)

### アレは、何？
* プレゼンページ遷移をコントロールできるリモート

### 結果
* ![スクリーンショット 2016-06-12 13.41.18.png](https://qiita-image-store.s3.amazonaws.com/0/13451/6d2179e9-2064-2ca0-6388-c63bb5bb293d.png)



## LT: 鍋のインターネット
### アイディアについて
* 趣味：料理 + 仕事：SE
* なんでいうが、デバイスをインタネットに繋がりたい
* 鍋？　温度？
* 鍋の温度をコントロールできれば嬉しい

### 材料
* スロークッカー（電気鍋）
* 電源をON/OFFでコントロールできる
* 温度計
* raspberry pi

### 結果
* ![スクリーンショット 2016-06-12 13.58.33.png](https://qiita-image-store.s3.amazonaws.com/0/13451/da588f85-9f4a-d379-0665-dc0ccb81a43b.png)







## 感想
* ぐぐるして、実際は、プレゼントリモートコントロールがいっぱいある
* エンジニアとして、自分は好きな、欲しいものを作ることが、一番うれしい
* 趣味+仕事（技術）で、実現したものが素晴らしい
dein.vimをインストールする

dein.vimインストールするときに少し躓いたので覚書。

最初に注意点が１つ！
dein.vimはvimのバージョンが7.4以上でないと使えません！
ということでvimのバージョンアップから！

**1. vimをアップデート**

```
$ vim --version | grep clipboard
```
このままだと古いバージョンのvimが読み込まれるのでシェルの設定ファイルに以下を記述。

```ruby:.zshrc
export PATH=/usr/local/bin:/usr/bin
```

あとはターミナルで読み込ませるだけ！

```
$ source ~/.zshrc
# バージョンを確認
$ vim
```

あとは.vimrcに以下を記入するだけ！

**2．dein.vimのインストール**

.vimrcに以下を記入するだけでdeinがなければ自動でインストールしてくれる。

```ruby:.vimrc
if !&compatible
  set nocompatible
endif

" reset augroup
augroup MyAutoCmd
  autocmd!
augroup END

" dein settings {{{
" dein自体の自動インストール
let s:cache_home = empty($XDG_CACHE_HOME) ? expand('~/.vim') : $XDG_CACHE_HOME
let s:dein_dir = s:cache_home . '/dein'
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
if !isdirectory(s:dein_repo_dir)
  call system('git clone https://github.com/Shougo/dein.vim ' . shellescape(s:dein_repo_dir))
endif
let &runtimepath = s:dein_repo_dir .",". &runtimepath
" プラグイン読み込み＆キャッシュ作成
let s:toml_file = fnamemodify(expand('<sfile>'), ':h').'/.dein.toml'
if dein#load_state(s:dein_dir)
  call dein#begin(s:dein_dir, [$MYVIMRC, s:toml_file])
  call dein#load_toml(s:toml_file)
  call dein#end()
  call dein#save_state()
endif
" 不足プラグインの自動インストール
if has('vim_starting') && dein#check_install()
  call dein#install()
endif
" }}}

" 引数なしでvimを開くとNERDTreeを起動
let file_name = expand('%')
if has('vim_starting') &&  file_name == ''
  autocmd VimEnter * NERDTree ./
endif

"End dein Scripts-------------------------
```

環境によっては絶対パスで記入しないと以下のエラーが出る。

```E117: 未知の関数です: neobundle#begin```


**3．dein.tomlの作成**
プラグインはここに記述します！
ちなみにホームディレクトリに```.dein.toml```を作成してもらうと読み込むように設定してあるので作成してください！


```ruby:dein.toml
# 基本は github.com のレポジトリーを指定するだけ
[[plugins]]
repo = 'Shougo/dein.vim'

[[plugins]]
repo = 'Shougo/vimproc.vim'

[[plugins]]
repo = 'delphinus35/typescript-vim'
rev  = 'colorize-template-strings'

[[plugins]]
repo = 'elzr/vim-json'
if   = '''! has('kaoriya')'''

[[plugins]]
repo    = 'vim-airline/vim-airline'
depends = ['vim-airline-themes']

[[plugins]]
repo = 'vim-airline/vim-airline-themes'

[[plugins]] 
repo = 'osyo-manga/vim-precious'
depends = ['context_filetype.vim']

[[plugins]] repo = 'Shougo/context_filetype.vim'

[[plugins]] # toml syntax
repo = 'cespare/vim-toml'
on_ft = 'toml'

[[plugins]]
repo = 'scrooloose/nerdtree'

[[plugins]]
repo =  'evidens/vim-twig'

[[plugins]]
repo =  'w0ng/vim-hybrid'
```

書いたのにインストールしてくれない、反映してくれないってときは:dein#clear_state()してね！
C側でインスタンス(ブロック)が設定されているかを調べるには

# 背景

ブロックが指定されていたら、特定の処理をC側で行いたい。

# ブロックを受け取り、保持するruby側の実装

```rb
class Webcam
  attr_accessor :face_cb

  def face(&blk)
    @face_cb = blk
  end
end
```

## 呼び出すコード例

```rb
cam = Webcam.new
cam.face {|img|
   File.open("#{Time.now.to_s.gsub!(' ','').gsub!(':','')}_face.jpg","wb") {
     |f| f.write img
   }
 }
```

# C側でブロックが設定されているかを判定

```c
mrb_value faceBlock = mrb_iv_get(mrb, self, mrb_intern_lit(mrb, "@face_cb"));
mrb_nil_p(faceBlock)) {
  printf("ブロックが未設定です。\n");
}
```

このように、mrb_nil_pをmrb_value型に対して行えば、判定できた。

特に、今回はブロックが設定されているか？ということを判定したかったが、
このmrb_nil_pを使う方法なら、ブロックでなくとも、汎用的に判定が可能な模様。
Pythonを使って学ぶデリバティブ-(1)フォワード為替レートの算出-



金融ITの会社にいて、デリバティブを扱っているのに、あまりデリバの理論まわりのことを勉強してこなったので、
復習と教育資料の作成をかねて解説とPythonでのプログラムをメモっていく。
ちなみに書籍など一般的に公開されている情報をもとにやっていく。
そのため、仕事のノウハウとは一切関係ありません。

### Pythonを使って学ぶデリバティブシリーズ

[第1弾: フォワード為替レートの算出-](http://qiita.com/katzhide/items/5ca18db202d4070adb6b)
[第2弾: イールドカーブを引く(JPYLiborカーブ)](http://qiita.com/katzhide/items/f606129250786f86690f)



## フォワード為替レートの計算方法
フォワード為替とは、将来のとある時点での為替の交換レートのこと。

フォワード為替レート(FwdFX)は現在の為替の交換レートであるスポット為替レート(SpotFX)と両通貨の金利から算出ができる。

例えば、ドルと円の換算レートを算出する場合、

`FwdFX(USD/JPY) = SpotFX(USD/JPY) × DF(USD) / DF(JPY)`

で算出できる。

金利といいながら金利が出て来ず、代わりにDFなるものが出てきているが、
DFとはディスカントファクターのことで、
将来のとある時点の価値を現在の価値で割り引くときに使う掛け目みたいなもの。
将来の100万円と現在の100万円は金利があるため、等価値ではなく、
じゃぁ将来の100万円の価値っていくらなの？ってときに100万円かけるDFで価値を算出することができる。
そして、DFは金利から算出できる。
DFまわりの話は主旨が違うのでここではこれ以上話さない。わかっている前提で話をすすめる。


## 解説


現在の為替レートをS(1ドルS円), 期間をT(年), T年間の連続複利ベースの円スポット金利をRy, 同じくドルスポット金利をRdとする。

(1) 現時点で手持ちの円資金S円をドルに替えてT年間運用した場合、

```math
S \times \frac{1}{S} \times e^{RdT} = e^{RdT}(ドル) 
```
となる。

(2) T年間円のまま運用した場合、

```math
S \times e^{RyT}(円)
```
となる。

ここで、T年後の為替レートをX(1ドルX円)とおく。

円をドルに替えて運用する(1)と円で運用してドルに替える(2)は同じ結果(※)になるため、
※仮に差があっても経済的に等価になるようにすぐに収斂される

```math
S \times e^{RyT} \times \frac{1}{X} = e^{RdT}
```
が成り立つ。

よって、フォワード為替レートであるXは

```math
\begin{align}
X &= S \times e^{-RdT} \times \frac{1}{e^{-RyT}} \\
&= S \times \frac{Dfd}{Dfy}
\end{align}
```
となり、スポット為替レート×DF(ドル) / DF(円)で算出される。

## サンプルコード
```py
# -*- coding: utf-8 -*-


import numpy as np

# 諸データ
SFX= 120 # スポット為替レート
ry = 0.01 # 円のスポット金利
rd = 0.05 # ドルのスポット金利
T = 1 # 期間

# 1年の連続複利ベースの金利(R)をスポット金利(r)から算出する。
"""
e^RT = (1+r)^T
RT = ln(1+r)
R = ln(1+r) / T
"""
Ry = np.log(1 + ry) / T
Rd = np.log(1 + rd) / T

# ディスカントファクターはe^RTで算出されるため
DFy = np.exp(-Ry * T)
DFd = np.exp(-Rd * T)

# フォワード為替はスポット為替レート×DF(ドル) / DF(円)で算出されるため
FFX = SFX * DFd / DFy
print(FFX)

```
[Swift] 一度だけ実行したい処理をクロージャでスマートに書く


# はじめに
ViewControllerにおいて、`viewWillAppear`または`viewDidLayoutSubviews`などのタイミングで一度だけ実行したい処理をたまに書きたいことがあると思います。（`viewDidLoad`に記述できるのであればもちろんその方がスマートですが）

# dispatch_once は使えない
GCDの`dispatch_once`はマルチスレッドを考慮したシングルトン生成のパターンによく利用されますが、アドレスを指定した処理であるため静的に配置される変数（static変数）に対してしか正しく処理できません。（アプリケーション実行中に本当に一度だけ実行したいケースにしか利用できない）

言い換えると、今回のようなViewControllerが生成された後で一度だけ処理したい、というようなケースには対応できません。

# シンプルに書くと
以下の様な処理になるでしょうか？

```swift
var isFirst = true // 最初の処理かどうか

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    
    // 最初の処理だったら実行して、フラグ用の変数はfalseに落とす
    if isFirst {
        isFirst = false
        // 一度だけ実行したい処理
    }
}
```

シンプルではありますが、以下のような欠点があるように感じます。

- 状態管理のための変数が追加されている。
- 判定処理やフラグ更新処理のために、本質的な処理が埋もれがちになる。

アプリケーションの規模が小さければ大したことありませんが、大きくなってくると見過ごせない問題になってきます。

# クロージャで書いてみる
いくぶん実験的ではありますが、以下のように書いてみました。

```swift
typealias ExecuteOnce = () -> ()

// 一度だけ引数にしていされたクロージャを実行するクロージャを返す関数
func executeOnce(execute: () -> ()) -> ExecuteOnce {
    var first = true
    return {
        if (first) {
            first = false
            execute()
        }
    }
}

class ViewController: UIViewController {
  
    // 一度だけ実行したい処理
    var someInitialize: ExecuteOnce = {}

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        // 処理を定義（selfキャプチャが不要であれば定数プロパティとして宣言可能）
        someInitialize = executeOnce { [unowned self] in
            // 一度だけ実行したい処理
        }
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        someInitialize() // 何度呼びだされても実行されるのは一度だけ
    }  
}
```

多少コード量は増えましたが、フラグ変数を追加することなく一度だけ処理することを実現できました。また、全体的に宣言的でスッキリとしたコードに出来たような気がします。

# 最後に
最初は、`dipatch_once`のようなイメージでBool変数のアドレスを渡すような以下のコードを思いつきました。

```swift
executeOnce(&isFirst) {
    // 一度だけ実行したい処理
}
```

フラグ変数を自分で更新するよりはいくぶんスッキリしますが、フラグ変数を宣言する必要があるのは変わりません。

ということで、クロージャを活用した処理を考えてみたわけですが・・・他にスマートな方法をご存じの方がいましたら教えて下さい。
ネットワークアナリストの問題点


以下のようなケースを考える。
施設…〇
インシデント…□
ルート…線

以下のような場合を考える
![qiita用2.JPG](https://qiita-image-store.s3.amazonaws.com/0/123321/4ef88e5b-46e9-070d-9d62-22dae66ab3ff.jpeg)

※対象部分は水色のオブジェクト


ネットワークデータに従うと最短距離は1.295156mとのこと。実際はそんなはずはないのに…


###まとめ

このような場合はポイント間距離を用いて最短距離を求めるしかないのだろうか。ネットワークデータの2本のラインを1本の太い道路として認識する方法があればよいのだが
tmux

### tmuxの設定
ホームディレクトリに「.tmux.comf」がなければ作成。

```ruby:.tmux.conf
#キーバインドをvi風に
set-window-option -g mode-keys vi


# 5000行さかのぼれるように変更
set-option -g history-limit 5000

set-option -g mouse on

# 'v' で範囲選択開始 'y'でコピー（クリップボード）
# 'Enter'で範囲選択解除 + コピー（クリップボート）
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "iconv -s -t SJIS | putclip"; \
unbind -t vi-copy Enter
bind-key -t vi-copy enter copy-pipe "iconv -s -t SJIS | putclip"; \

# 1行コピー
bind-key -t vi-copy Y copy-line
 
# 異なるサイズの端末からアクセスした時にリサイズ
setw -g aggressive-resize on

#マウススクロール反映
set-window-option -g mouse on

#Prefix q ⇒ Pane に番号を表示。”3” キーを押すと移動。数字キーの入力有効な時間を 5 秒に延長。
set-option -g display-panes-time 5000

# | でペインを縦分割する
bind | split-window -h

# | でペインを縦分割する
bind - split-window -v

```

### コピーモード

デフォルトのコピーモードのコマンド

| コマンド | 動作 |
|:-:|:-:|
| Ctrl-b + [  | copy モード開始  |
| Space  | copy 開始位置決定 |
| Enter  | copy 終了位置決定  |
| Ctrl-b + >  | Clipboard への書き出し  |
| Ctrl-b + ]  | copy モード終了  |


tmuxのコピーモードからクリップモードにコピーしたかったがはまったのでメモ！
クリップボードへのコピーコマンドはOSによって異なる

| $OS | コマンド |
|:-:|:-:|
| Linux  | xsel,xclip |
|  Mac | pbcopy |
| Cygwin  | putclip  |

なのでOSごとのクリップボードへのコピーの仕方は以下になる。

```ruby:.tmux.conf
### for Linux
  bind-key -t vi-copy y copy-pipe "xsel -ib"; \
  bind-key -t vi-copy enter copy-pipe "xsel -ib"; \

### for Mac (持っていないので未確認)
  bind-key -t vi-copy y copy-pipe "pbcopy"; \
  bind-key -t vi-copy enter copy-pipe "pbcopy"; \

### for Cygwin
  bind-key -t vi-copy y copy-pipe "iconv -s -t SJIS | putclip"; \
  bind-key -t vi-copy enter copy-pipe "iconv -s -t SJIS | putclip"; \
Windows10ではじめるcygwin

### まずはCygwinをインストール
1. https://www.cygwin.com/ から「setup-x86_64.exe」をダウンロード。
2. 「setup-x86_64.exe」をインストール。パッケージを選ぶのがめんどくさいのでフルインストール（5時間くらいかかった...）。<br>
フルインストールにすると各プログラミン言語やtmuxなど最初からすべて入った状態から始められるので楽！


「.bashrc」がホームディレクトリに作成されない場合は「.bash_profile」をホームディレクトリに作成して以下を記述。

```ruby:.bash_profile
if [ -f $HOME/.bashrc ]; then
source $HOME/.bashrc
fi
```
c++ builder XE4, 10.2 Tokyo > Error: 不正な浮動小数点演算命令が出る理由

```txt:動作環境
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/008c311f-2d9d-1f66-e694-a01f20c2b111.png)

## code

```Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}

float __fastcall TForm1::TestFunc(void)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	TestFunc();
}
//---------------------------------------------------------------------------
```

```Unit1.h
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE で管理されるコンポーネント
	TButton *Button1;
	void __fastcall Button1Click(TObject *Sender);
private:	// ユーザー宣言
	float __fastcall TestFunc(void);
public:		// ユーザー宣言
	__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
```

## 理由

TestFunc()は間違ってfloat型で宣言している (void型でなく)。

float型で宣言している関数を以下のようにコールすると「不正な浮動小数点演算命令」が出るようだ。知らなかった。

```
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	TestFunc();
}
```

## float型関数にreturnがない時
(追記 2016/09/13)

```
float __fastcall TForm1::TestFunc(void)
{

}
```

float型の関数においてreturnを定義していない。
この状態でTestFunc()がコールされると「不正な浮動小数点演算命令」が出るようだ。

反対に、このエラーが出た時は、関数のどこかでreturnを忘れている可能性がある。
論理ボリューム分割(ext4)

# 環境
CentOS 6.7

# VG(ボリュームグループ)確認

    vgdisplay
    --- Volume group ---
    VG Name               centos
    System ID
    Format                lvm2
    Metadata Areas        1
    Metadata Sequence No  4
    VG Access             read/write
    VG Status             resizable
    MAX LV                0
    Cur LV                2
    Open LV               2
    Max PV                0
    Cur PV                1
    Act PV                1
    VG Size               31.51 GiB
    PE Size               4.00 MiB
    Total PE              8066
    Alloc PE / Size       8066 / 31.51 GiB
    Free  PE / Size       0 / 0
    VG UUID               gG0KE6-Go5I-VTsj-bROL-DIpP-1Fnb-7yUHMi

# LV(論理ボリューム)縮小

VG確認で表示されたFree PE以上の論理ボリュームを作成しようとすると、以下のメッセージが表示されて作成できない。

    lvcreate -L 5G -n Test centos
    Volume group "centos" has insufficient free space (0 extents): 1280 required.

論理ボリュームを縮小させる為、インストールディスクを入れてレスキューモードで立ち上げる。
(ルートに割り当てていない論理ボリュームの場合はumountして作業すれば問題ない。)

![rescue_1.png](https://qiita-image-store.s3.amazonaws.com/0/74163/f1173f56-1bd2-6f9d-8c45-ae5114a774f7.png)

「Rescue installed system」を選択する。

![rescue_2.png](https://qiita-image-store.s3.amazonaws.com/0/74163/5970e9c8-fb56-727a-2be2-09bea3092d1c.png)

「English」を選択する。

![rescue_3.png](https://qiita-image-store.s3.amazonaws.com/0/74163/1075e534-38c3-63e3-81ff-80c9a4df9f8a.png)

「jp106」を選択する。

![rescue_4.png](https://qiita-image-store.s3.amazonaws.com/0/74163/2764eb22-d9ba-ab9f-95b2-079ac86e1ea6.png)

「No」を選択する。

![rescue_5.png](https://qiita-image-store.s3.amazonaws.com/0/74163/89356317-c0dc-4475-5eca-6e3268560926.png)

「Skip」を選択する。

![rescue_6.png](https://qiita-image-store.s3.amazonaws.com/0/74163/5044d337-0b03-a0b8-9510-a8fbfa2ea37c.png)

「shell Start shell」を選択する。

シェルが立ち上がるので以下のコマンドを実行する。

VGを有効にする。

    lvm vgchange -a y   

縮小するLVのファイルシステムをチェックする。

    fsck.ext4 -f /dev/centos/lv_root

縮小するLVのファイルシステムを縮小する。

    resize2fs /dev/centos/lv_root 10G

LVのサイズを変更する。

    lvm lvreduce -L10G /dev/centos/lv_root

シェルを終了する。

    exit

インストールディスクを除けて起動しサイズが変更されているか確認する。
(LV Sizeが縮小時に設定したサイズになったか確認)

    lvdisplay /dev/centos/lv_root
    --- Logical volume ---
    ...
    LV Size 10.00 GiB

VGを確認して空が出来たか確認する。
(Free PEが増えているか確認)

    vgdisplay
    --- Volume Group ---
    ...
    Free PE / Size 4687 / 18.31 GiB

#LV作成

VGに空ができたのでLVを作成する。

    lvcreate -L 5G -n Test centos

Free全ての容量を割り当てる場合は以下のコマンドを実行する。

    lvcreate -l 100%FREE -n Test centos

#ファイルシステム構築

ext4フォーマットで構築する。

    mkfs.ext4 /dev/centos/Test

#マウント

作成したLVをマウントする。

    mount -t ext4 /dev/centos/Test /mnt/Test

起動時に自動マウントするように/etc/fstabに以下を記述する。

    /dev/centos/Test    /mnt/Test ext4 defaults 1 2
Vim の置換で正規表現の後方参照


`\(\)` でキャプチャして（エスケープが必要）、`\1`, `\2`, ... で参照できます。

例えば `Array<Foo>` などを `Foo[]` の形式にしたいときは:

```
:%s/Array<\([^>]*\)>/\1[]/g
```
【Java】ResultSetの変数名による不具合

会社でMySQLを用いての開発で、同僚が

```java:sample
ResultSet rset = stmt.executeQuery(sql);

while (rset.next()) {
    list.add(rset.getString("フィールド名"));
}
```

のようなコードを書いて走らせると、
本来取得されるべき行(レコード)のうち、一部の行しか返ってこないという不具合が起きました。

しかし同じSQLをクエリブラウザに入れて走らせてみると、すべてのレコードを取得することができました。

原因箇所を特定するため、一つ一つのロジックや変数名を一部だけ変更しては実行させ、結果を確認しては元に戻す、という検証を行っていました。

その中で、変数名```rset```を```rs```に変えた場合に、すべての結果が正常に取得できましたので、
取り急ぎその点を、ここに報告させていただきます。

原因をご存じの方はご教示ください。

当方の環境はJava6の何か、MySQL 5.1.14です。
R言語が学べるオンライン学習サイトをググってみた

# Background

 - 機械学習のサンプルプログラムを動かすために、R言語を学ぼうと思った。
 - 他の言語はそれなりに使えるが、R言語は考え方にちょっと癖があると感じたので、基礎をしっかり知りたかった。
 - 本を買うとお金がかかる＆本が厚くて読み終わるまで時間がかかるので、オンライン教材で、まずさらっと学びたいと思った。

# Summary

オンライン学習サイトをググってみて、まとめサイトや、直接見つけた学習サイトで、R言語が学べるか試してみた。
結果、R言語が使えたサイトは以下３つ。（R言語を学べるサイトはあまり多くない。2016年6月現在）

### R言語を学べるオンライン学習サイト

Codeschool （英語・インタラクティブ）
http://tryr.codeschool.com/levels/1/challenges/1
dotinstall （日本語・動画視聴）
http://dotinstall.com/lessons/basic_r
udemy （英語/日本語・動画視聴）
https://www.udemy.com/courses/search/?ref=home&src=ukw&q=R&price=price-free

オススメ
 - 英語（文書）にアレルギーなくて、ある程度他の言語（CとかRubyとか）ができて、手を動かしながらざっと学びたい人は、Codeschoolがおすすめ。
 - 絶対日本語 or 授業を受けたい人は、dotinstall

References...１つだけ読むなら
3. http://techacademy.jp/magazine/938
でも、Codeschoolは出ていないので、Codeschoolもおすすめ。

# Details

### 調べ方
Googleに聞いてみたら、出てきたオンライン学習サイトで、
良さそうなものを順番に見ていった。

### １つ目
１０個のサイトが紹介されている。サイト画面とコメント付き
http://kojima1992.com/プログラミング無料_独学学習サービス

- dotinstallが紹介されている

### ２つ目
５個のサイトが紹介されている。「こんな人にオススメ」「勉強出来ること」「何がいいの？」が短くまとまってコメントされている。
http://www.sejuku.net/blog/796
（codemonkeyのURLが間違っているので、Googleで直接探してください）

- dotinstallが紹介されている

### ３つ目
１０個のサイトが紹介されています。短くまとまったコメントと、体験レポートがわかりやすい。
http://techacademy.jp/magazine/938

- dotinstallが紹介されている
- udemyが紹介されている

### ４つ目
紹介サイトではなく、直接検索して見つけた学習サイト
http://tryr.codeschool.com/levels/1/challenges/1

- インタラクティブに学べる。

# References

1. http://kojima1992.com/プログラミング無料_独学学習サービス
2. http://www.sejuku.net/blog/796
3. http://techacademy.jp/magazine/938
4. https://www.codeschool.com/
ruby クラス 自分用 メモ

'''
def sayHi(name = "tom") # 引数
  score = 80
  # puts "hi! #{name}"
  return "hi! #{name}"
end

# sayHi("taguchi")
# sayHi "taguchi"
# sayHi

# p sayHi
p score
'''

⇒クラス内で定義した変数には、外部からアクセス出来ない
⇒@scoreなら、同じインスタンス（同じエリア内で）内で可能
⇒  attr_accessor :name
# setter: name=(value)
  # getter: name

■クラス
主語
自分で作ることもできる

class User
end

■メソッド
述語
自分で作ることもできる

def sayHi!
　puts "Hi!"
end

■self
メソッドを受け取っているインスタンス自身
⇒何にでもなる

■クラスメソッド
def self.info 
 puts "User Class"
end

User.info
⇒技の省略、組み合わせが可能

■クラス変数
⇒よくわからん

わかりやすい
[Rubyにおけるスコープのおはなし](http://melborne.github.io/2013/09/24/rubys-scope/)
Hugoとgh-pagesで静的なblogを作ります

wordpressでブログを構築していて、wordmove+vccw+vagrantという組み合わせが楽ちんだと思っていたのですが、全然アウトプットしていなかったのでより手軽にできそうなHugoを使ってみました。

実際、めちゃはまりましたｗ

ですが、一応できたのでハマったポイントとかをメモしておきます。

ちなみにできたのは、[こちら](http://straysheep3.github.io/ "こちら")

ハマった点は、

生成される**publicフォルダのpostを必ず削除しないといけない**

テーマをいじる際に、テーマのexamplesiteを参考に作業したけど
テーマをいじってしまうと、Githubで**.submodules**がありません。と怒られること。

使用したテーマは、**icarus**を使用しました。
icarusのディレクトリ内に**exampleSite**というフォルダがあり、
そのフォルダの構成のように、**static**フォルダに画像フォルダ、画像ファイルを
配置すれば表示されました。

```bash
ルート
├── archetypes
├── config.toml
├── content
│   └── post
│       └── ◯◯.md
├── data
│   └── l10n.toml
├── deploy.sh
├── layouts
├── public
├── static
│   ├── banners
│   │   └── placeholder.png
│   ├── css
│   │   └── images
│   │       └── ◯◯.jpg
│   └── favicon.ico
└── themes
    └── hugo-icarus-theme　****いじるとめんどくさいことになりましたｗ****
```

このあたりは、Goを学ばないとですね。

あと、コメント機能の**Disqus**なんですが、

Disqusにサイトを登録して、設定(自分のアイコンの横)から、Admin、トップバーのsettingsで**shortname**
が表示されるのでそれを、config.tomlに記述するのですが...

上の方に記述しないとダメですｗ

[params]とかより下に記述すると、paramsとかの項目として認識されます。

そして、disqusShortname = "あなたのshortname"　は

disqus_short_name とか
disqus-shortname　にしてはいけませんw

shortnameは、ダブルクオーテーションで囲みます。

コピペで、"[ショートネーム]"　とかにして、カッコをつけるとダメでした。


今のところ、ハマっちゃった点でした。

Hugoいざ触ってみると面白いです。
幾何学 > 2つのベクトルのclockwiseの角度計算 > Link:python実装 / C実装

関連 http://qiita.com/7of9/items/dd241297a7231485767d

あるベクトルと別のベクトルの間の角度を計算する。
角度はclockwise方向をとる。

以下にpython実装がある。
http://stackoverflow.com/questions/31735499/calculate-angle-clockwise-between-two-points

determinantが出てくる。2x2の場合はad-bc。3x3の場合はサラスの公式を使う。
http://www.mathsisfun.com/algebra/matrix-determinant.html

<hr>
上記のpython実装を自分が必要としているC実装にした。
namingはかなり適当。

http://ideone.com/CWu8Z1

```c
#include <stdio.h>
#include <math.h>

float get_length(float vs[2])
{
	return sqrt( pow(vs[0],2) + pow(vs[1],2) );
}
float get_dot_product(float vs[2], float ws[2])
{
	return vs[0]*ws[0] + vs[1]*ws[1];	
}
float get_determinant(float vs[2], float ws[2])
{
	return vs[0]*ws[1] - vs[1]*ws[0];	
}
float get_inner_product(float vs[2], float ws[2])
{
	float cosx = get_dot_product(vs,ws);
	cosx = cosx / (get_length(vs) * get_length(ws));
	float rad = acos(cosx);
	return rad * 180.0 / acos(-1.0);
}
float get_angle_clockwise(float As[2], float Bs[2])
{
	float inner = get_inner_product(As, Bs);
	float det = get_determinant(As, Bs);
	if (det < 0.0) {
		return inner;
	} else {
		return 360.0 - inner;
	}
}

float get_angle_clockwise_wrapper(float x1, float x2, float y1, float y2)
{
	float Xs[2];
	float Ys[2];
	
	Xs[0] = x1;
	Xs[1] = x2;
	Ys[0] = y1;
	Ys[1] = y2;
	return get_angle_clockwise(Xs, Ys);
}

int main(void) {
	printf("%f \n", get_angle_clockwise_wrapper(0,1, 1,0));
	printf("%f \n", get_angle_clockwise_wrapper(1,0, 0,1));
	printf("%f \n", get_angle_clockwise_wrapper(0,1, 1,1));

	return 0;
}
```

```txt:結果
Success	time: 0 memory: 2156 signal:0
90.000000 
270.000000 
45.000000 
```

<font color=red>上記のpython実装(とそれに基づくC実装)では2つのベクトルが重なる場合は角度は0度でなく360度になる</font>
このあたりは適宜修正が必要。
Excel 2016 for Macの遅い動作を改善する

## Excel 2016 for Macが遅い → アニメーション切ろう

Macを使ってる皆さん、Excelを使ってますか？
私のMacにもExcel 2016がインストールされていて、資料なんかをExcelでもらうことがあり、Excelを起動することがあります。
そんなとき、あまりの動作の遅さにイライラしませんか？私はしてました。

調べてみるとどうやらWindows版ではアニメーションをオフにすることで、劇的に動作を改善できるんですって。
そしてなんと、2015年末のアップデートによってMac版でもアニメーションをオフにすることができるようになったんです！（今更知った）

※情報元：https://www.adventuresincre.com/disable-animations-excel/


![編集.png](https://qiita-image-store.s3.amazonaws.com/0/75613/0355d547-6524-4bf2-8310-d3d93cab7032.png)


さぁどうでしょう？オンオフで、ぜんぜん動作速度が違いませんか？

## そもそも落ちるんだけど・・・？

そんな方はこちらの記事もご参照ください。
MacのフォントとMSが喧嘩してるのが原因です。
http://qiita.com/foursue/items/81606a831863499fe3f8
Excelで佐々木希を描く with Node.js

#【環境】
　windows8.1
　Excel 2013
　node.js 4.4.5
　npm 2.15.5

#【概要】
　佐々木希の写真から色の情報を取得して、Excelのセルに塗りつぶします。

#【フォルダ構成】
|---sasaki_excel
　　　　　　|---sasaki_excel.js
　　　　　　|---sasaki.jpg（佐々木希の画像）

こちらの画像を使用しました。
![sasaki.jpg](https://qiita-image-store.s3.amazonaws.com/0/121997/0e1d3c4b-5808-8167-18dc-02d5aea5604e.jpeg)

#【プログラム】
　Pythonの時と比べると短くコーディングできるのがいいね！

```js:sasaki_excel.js
var Jimp = require("jimp");
var Excel = require("exceljs");

// 新しくExcel作成
var wb = new Excel.Workbook();
var ws = wb.addWorksheet("Nozomi Sheet");

Jimp.read("./sasaki.jpg", function (err, sasaki) {
    sasaki.scan(0, 0, sasaki.bitmap.width, sasaki.bitmap.height, function (x, y, idx) {
        // RGBA値を１６進数へ変換
        var r = this.bitmap.data[ idx + 0 ].toString(16);
        var g = this.bitmap.data[ idx + 1 ].toString(16);
        var b = this.bitmap.data[ idx + 2 ].toString(16);
        var a = this.bitmap.data[ idx + 3 ].toString(16);
        var nozomi_argb = a + r + g + b;

        var row = ws.getRow(y)
        row.height = 1.5;
        ws.getColumn(x+1).width = 0.3;

        // 塗りつぶし
        row.getCell(x+1).value = " ";
        row.getCell(x+1).fill = {
          type: 'pattern',
          pattern:'solid',
          fgColor:{argb: nozomi_argb}
        };
    });
    // Excel保存
    wb.xlsx.writeFile('sasaki_nozomi.xlsx');
});
```

#【結果】
<img width="453" alt="nozomi_excel.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/8b694a9c-9eab-b072-40c4-e0d2fdee614f.png">

#【問題点】
　赤や黄色の点があちこちに描画されてしまう。
　（改善点はありそうかな？・・・('_')）

#【参考サイト】
　[jimp-github](https://github.com/oliver-moran/jimp)
　[exceljs-github](https://github.com/guyonroche/exceljs)

#【他言語版】
　[Python版はこちら](http://qiita.com/Algebra_nobu/items/4e2b36bdb38434e183de)
　[Ruby版はこちら](http://qiita.com/Algebra_nobu/items/6d740ac3b58825431202)
Zybo > Chronicles blog 43 > XADC Alarms and Interrupts > Block Designが見にくい

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-43-XADC-Alarms-and/ba-p/496468

> With this in mind, I set about creating a simple project in Vivado which consists of the Zynq PS connected to the XADC via the AXI interface. For this example, I do not use any external analog inputs but do use the device’s internal temperature measurement, which is part of the Zynq XADC.

Blogの画像の解像度が悪くてどのようなBlock Designにするのか見にくい。

次回時間が取れた時に自分でやってみよう。

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

ZYNQ 7 Processing SystemのIPを追加後、XADC_WIZを追加して、Run Block Automation, Run Connection Automationを実行すると以下のようになった。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/d54c9aba-dbe8-6f61-a08a-fdab3d587f2b.png)

以下の2つは上記のAutomationで自動的に追加された。

- Processor System Reset
- AXI Interconnect
Zybo > Chronicles blog 43 > XADC Alarms and Interrupts > Alarmの有効化 / 割込みEnable

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-43-XADC-Alarms-and/ba-p/496468

> The XADC provides a number of alarm output signals that can be connected to other logic modules implemented in the Zynq SoC’s PL (programmable logic). These logic modules can initiate an action should an alarm occur. They can also drive external indicators—LEDs for instance—which could be located on a front panel to show equipment status. 

TRMのTable 30-1に7つのALM[]項目とOTが記載されている。

> These alarms (there are seven in total, see the table from TRM above) can be enabled using the function call with the appropriate mask, as supplied by xadcps_hw.h. If more than one alarm is required, then OR them together.
 
``` 
XAdcPs_SetAlarmEnables(XADCInstPtr, XADCPS_CFR1_ALM_TEMP_MASK);
``` 
 
>Once we’ve enabled the alarm, we enable the interrupt as well using the appropriate function call, again using the masks provided by xadcps_hw.h. To enable more than one interrupt at a time, OR them together:
 
``` 
XAdcPs_IntrEnable(XADCInstPtr,XADCPS_INTX_ALM0_MASK);
```
Zybo > Chronicles blog 43 > XADC Alarms and Interrupts > Alarm範囲の設定 > Vivado上 / XAdcPs_SetAlarmThreshold()

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-43-XADC-Alarms-and/ba-p/496468

XADCの測定項目に対するAlarmのかけ方

> he XADC has its own dedicated interrupt, shared by both processors on IRQ 39 as this extract from the Zynq TRM (Technical Reference Manual) shows:

Table 7-3

> These alarm parameters can be set during the configuration of the XADC within Vivado as show below:

Alarmを設定する画像があるが、Vivadoのどの設定かは未確認。

> They can also be set during execution of the software using the xadc_ps.h functions provided. For instance:

```
XAdcPs_SetAlarmThreshold(XADCInstPtr, XADCPS_ATR_TEMP_LOWER,(TempRawData));
```

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

Alarmの設定画面の出し方は以下であった。

1. ブロックデザインにてXADC Wizardをダブルクリック
2. Re-customize IP画面にてAlarmsタブを選択
NSSplitView のリサイズにおける優先度

例えばこのようなスプリットビューがあったとき、ウインドウのリサイズに合わせてどちらのペインを伸縮させるかという設定を行うことができます。

![](https://qiita-image-store.s3.amazonaws.com/0/3603/e451f51e-a8b5-8dfd-913c-413dcfa69183.png)

Interface Builder には Holding Priorities という設定項目が用意されています。標準値では 250 という値が設定されています。Auto Layout の制約とよく似ていますね。

![](https://qiita-image-store.s3.amazonaws.com/0/3603/49444189-7b30-c6ae-c5b7-c028b41f3441.png)

コードではこのようなメソッドを使用します。

```objc:NSSplitView
- (void)setHoldingPriority:(NSLayoutPriority)priority forSubviewAtIndex:(NSInteger)subviewIndex
```

仮にプライオリティの値が同一（Left = Right）の場合、いずれのペインも同じ割合で伸縮するようになります。プライオリティの値を大きくするとそのペインはなるべく大きさを保とうとします。

画像のようなサイドバーを持つ UI では、ウインドウリサイズ時にはサイドバー側はなるべく幅を保ち、右ペインを伸縮するようにしたいものです。そのような場合は Left のプライオリティを Right よりも高くしておけば望んだ動きになります。Right が250なので、+1した251で十分です。

ちなみにペインの最低サイズを決めるには Auto Layout でビューの幅を Greater Than or Equal で設定すれば良いです。
![](https://qiita-image-store.s3.amazonaws.com/0/3603/81601dd7-54b6-f730-c80b-84a5d22df88d.png)
技術英語 > At first, we thought it was [a sensor aberration], but they [were in perfect calibration] at that time.  

@ Star Trek Voyager > DEADLOCK

センサーの故障かと思ったKimが

> At first, we thought it was <font color=red>a sensor aberration</font>, but they <font color=red>were in perfect calibration</font> at that time.

http://eow.alc.co.jp/search?q=aberration
> 3.《光学》収差

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

http://qiita.com/7of9/items/0760b3d0f8bb59190175

> When is the last time we <font color=red>align(ed) the torque sensors</font>?
> They don't sound right.
めざせNode.jsライブラリマスター （9）jimp

#【ライブラリ説明】
　ピクセル単位で画像の色情報を取得
　画像のサイズ変更なども可能

#【プログラム】
```js:jimp.js
var Jimp = require("jimp");

Jimp.read("./sample.jpg", function (err, image) {
    image.scan(0, 0, image.bitmap.width, image.bitmap.height, function (x, y, idx) {
        var red   = this.bitmap.data[ idx + 0 ];
        var green = this.bitmap.data[ idx + 1 ];
        var blue  = this.bitmap.data[ idx + 2 ];
        var alpha = this.bitmap.data[ idx + 3 ];
    });
});
```

#【参考サイト】
　[npm](https://www.npmjs.com/package/jimp)
　[github](https://github.com/oliver-moran/jimp)
Mac標準のbashからzshに変えた時のメモ

普段macを使うときはbashを使っています
しかし、[wakatime](https://wakatime.com/)を使う上でzshも使えると聞いて、zshに変えてみることにしました
その際にインストールしたものや設定などのメモです

この[wakatime](https://wakatime.com/)を使う上で設定した内容を今後の自分のためにメモしておきます

# 1. brewのインストール
まずはzshのインストールのために[brew](http://brew.sh/index_ja.html)を使います

```zsh
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update; brew upgrade; brew doctor
```

これで、`Your system is ready to brew`と表示されれば準備完了です

2018/4/12追記
brew upgrade時に指定していた--allはdisableになりました。

# 2. 最新のzshのインストール
コマンドは下記のみを実行すればOKです

```zsh
brew install zsh zsh-autosuggestions zsh-completions zsh-syntax-highlighting colordiff reattach-to-user-namespace tmux
```

# 3. zshのプラグイン管理
世の中にはいろんなプラグインを管理するツールがあるのですが、[zplug](https://github.com/zplug/zplug)をお勧めします

Antigenを使っても良いのですが、フォルダ階層が深く、インストールがちょーっとめんどくさい感じでした
[zplug](https://github.com/zplug/zplug)はインストールも簡単(git cloneするのみ)で、[vundle](https://github.com/VundleVim/Vundle.vim)と同じ要領で扱えるものです

ということで、[zplug](https://github.com/zplug/zplug)のダウンロード、インストールですが

`git clone https://github.com/zplug/zplug.git .zplug`

# 4. .zprofileの設定

zshは`.zprofile`と`.zshrc`の二つを使い、設定を行います
なんとなく`.zprofile`がzshにまつわる設定っぽい感じにして、`.zshrc`を[zplug](https://github.com/zplug/zplug)の設定っぽい感じにしてみました

まずは`.zprofile`から記述します

```zsh:.zprofile
# 補完機能
autoload -U compinit
compinit

# prompt
PROMPT='%m:%c %n$ '

# コマンド履歴
HISTFILE=~/.zsh_history
HISTSIZE=6000000
SAVEHIST=6000000
setopt hist_ignore_dups     # ignore duplication command history list
setopt share_history        # share command history data

# コマンド履歴検索
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end

# alias
alias diff="coloddiff"
```

# 5. .zshrcの設定

`.zshrc`側で[zplug](https://github.com/zplug/zplug)を読み込むようにし、使用するプラグインを記述します

```zsh:.zshrc
source ~/.zplug/init.zsh

zplug "wbinglee/zsh-wakatime"

# syntax
zplug "chrissicool/zsh-256color"
zplug "Tarrasch/zsh-colors"
zplug "zsh-users/zsh-syntax-highlighting"
zplug "ascii-soup/zsh-url-highlighter"

# program
zplug "voronkovich/mysql.plugin.zsh"

# tools
zplug "marzocchi/zsh-notify"
zplug "oknowton/zsh-dwim"
```

# 6. bashからzshへの切り替え

`システム環境設定`から`ユーザとグループ`を選択し、鍵のチェックを外します
該当ユーザに対し、副クリック(Control+クリック)で、詳細オプションを表示します
ログインシェルを`/bin/bash`から ~~/bin/zsh~~ `/usr/local/bin/zsh`に切り替えます

2016/7/5 追記
`which zsh` やればわかる話ですが、pathが/usr/local/bin/zshでした！
一ヶ月近く気づかず放置してました（汗）
重ねてご指摘ありがとうございましたー！

# 7. terminalの再起動
terminalを再起動。
`Command + q` もしくは `exit`などでterminalを終了したら起動する

# 8. .zshrcに記述したプラグインのインストール

.zshrcに記述したpluginをインストールする
下記のコマンドを実行すれば一気にごっそりインストールできます

`zplug install`

終わり

面白いpluginや便利なplugin、好きな設定が見つかったら随時加筆修正していきます
やー、zplug考えた人はすごい！
めざせpythonライブラリマスター （53）psutil

#【ライブラリ説明】
　CPU、メモリ、ネットワーク、ディスクなどPCの様々な情報を取得できる

#【プログラム】
```py:psutil.py
# -*- coding: utf-8 -*-

import psutil

#######################################################
# CPU

print psutil.cpu_times()
# scputimes(user=6047.15625, system=2177.09375, idle=41990.640625, interrupt=209.78125, dpc=189.81250381469727)


for x in range(3):
    print psutil.cpu_percent(interval=1)
    '''
    23.0
    11.4
    3.9
    '''
    
#######################################################
# Memory

print psutil.virtual_memory()
# svmem(total=8506089472L, available=3694571520L, percent=56.6, used=4811517952L, free=3694571520L)

print psutil.swap_memory()
# sswap(total=9848266752L, used=5868003328L, free=3980263424L, percent=59.6, sin=0, sout=0)

#######################################################
# Disks

print psutil.disk_partitions()
# [sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed')]

print psutil.disk_usage('/')
# sdiskusage(total=249182547968L, used=204373192704L, free=44809355264L, percent=82.0)

print psutil.disk_io_counters(perdisk=False)
# sdiskio(read_count=2375955, write_count=2540319, read_bytes=45541818368L, write_bytes=45088102400L, read_time=10428518880L, write_time=2957835750L)

#######################################################
# Network

print psutil.net_io_counters(pernic=True)

#######################################################
# Windows services

print list(psutil.win_service_iter())
```

#【参考サイト】
　[pypi](https://pypi.python.org/pypi/psutil/3.4.1)
　[github](https://github.com/giampaolo/psutil)
　[document](http://pythonhosted.org/psutil/#)
Firefox を更新したら selenium が動作しなくなった件

#更新前の環境
**OS:** Ubuntu 14.04
**Firefox:** 46.0.1
**selenium:** 2.53.5(Python 版)

#更新後の環境
**Firefox:** 47.0
OS と selenium のバージョンは変更なし。

自作の Python コマンドを実行したら下記のエラーが出た。

```bash:seleniumエラーメッセージ
Traceback (most recent call last):
(略)......
    raise WebDriverException("The browser appears to have exited "
selenium.common.exceptions.WebDriverException: 
Message: The browser appears to have exited before we could connect. 
If you specified a log_file in the FirefoxBinary constructor, 
check it for details.
```

Firefox のアップグレード前までは正常に動作していたのだが......。

#処方箋
**選択肢 1: Firefox 46.0.1 へのダウングレード**
この記事を投稿した 6/12 時点までの選択肢。

**選択肢 2: Firefox 47.0.1 へのアップグレード**
この記事へコメントをいただいた yasunori さんからの情報だが、
47.0.1 へ更新すると Selenium が動くようになる。

#Firefox 46.0.1 へのダウングレード
下記のページから旧バージョンの Firefox を入手する。

* [以前のバージョンの Firefox をインストールするには | Firefox ヘルプ](https://support.mozilla.org/ja/kb/install-older-version-of-firefox)

##インストール
1. 圧縮ファイルを解凍する。
   ``tar jxf firefox*.tar.bz2 -C $HOME``

2. Firefox のプロセスを全て終了する。

3. ``~/firefox/firefox -ProfileManager`` を実行する。

4. 新しいプロファイルを作成 > 作成したプロファイルを選択 > 
   今後このプロファイルを使用する > Firefox を起動

5. ``sudo apt-get purge firefox`` を実行して
   Firefox 47.0 をアンインストール。

##PATH の設定
.bashrc へ下記を追記する。

```bash:~/.bashrc
export PATH=$HOME/firefox:$PATH
```

##Firefox の設定変更
設定 > 詳細 > 更新の確認は行わない(非推奨: セキュリティリスク)

これを忘れると結局 Firefox 47.0 へ更新されてしまい、
selenium が動かなくなる。

**Note:**
「更新の確認は行うが、インストールするかどうかを選択する」
という選択肢もあるが、これにしておくと Windows10 ばりに
「更新してください」と通知が出まくる。

無論、「更新の確認は行わない」のまま長期間放置するのは危険なので、
selenium が Firefox 47.0 に対応するまでの一時凌ぎであることを
忘れずに!!

#Firefox 47.0.1 へのアップグレード
7/29 私の環境(Ubuntu 14.04)で試してみた。
通常であれば ``apt-get upgrade`` で更新されるはずだが、
実行しても Firefox 47.0 のまま ......。
たぶん Linux の原則に従ってバージョンを固定しており、
Ubuntu 側でセキュリティアップデートとしては認知していないのだろう。

仕方がないので下記のページからパッケージをダウンロードすることにした。

* [Mozilla Japan — ブラウザ Firefox とメールソフト Thunderbird](https://www.mozilla.jp/)

##インストールと PATH の設定
ダウングレードする場合と同じ手順。

##副作用
Firefox が apt-get の管理下から外れてしまう。
Firefox そのものに自動更新機能が搭載されているので問題ないと思うが、
「それは困る!!」という人は [PhantomJS](http://phantomjs.org/download.html) へ乗り換えるべし。
Yet another 「php 5.6 で memcache をインストールする手順」

# 前置き

php での memcache のインストールは以下のコマンドだけで終わります。普通は。

    $ yum install php-pecl-memcache

が、環境によってはうまく行かない場合もあるようです。(php5.6環境なのに、古いバージョンのphpを求められたとか。)その時のための覚書です。

# 手順

1. `$ yum install php56-php-pecl-memcache` を実行。
2. `/opt/remi/php56/root/usr/lib64/php/modules/memcache.so` を、`/usr/lib64/php/modules/` へ、コピーする。
3. `/etc/php.ini`を修正し、`extension=memcache.so`を最終行などに追加する。
4. apache を再起動する。`/etc/init.d/httpd restart`

何の事はない。yum で入れた `memcache.so` を、 `php.ini` に登録するだけです。

# 確認

    [root@dev2-mng ~]# php -m | grep memcache
    memcache

確証ないですが、多分これでOKではないかと。お試しあれ。