OmniAICreator/Qiita-1.07M huggingface dataset:
Reactive Programmingの勉強をPerlではじめる (1)

Reactiveってなに？って方は [Reactive とは何か？](https://speakerdeck.com/okapies/reactive-tohahe-ka-number-reactive-shinjuku) を読んでください。

この記事ではちょっとずつ加筆修正しながらReactive Programmingを試していきたいと思います。
一緒に勉強して下さる方とかいたら Twitter::[PitneS](https://twitter.com/ChisSinclar) まで連絡下さるとうれしーです。

#1. Ping, Pong
## emit
[参考資料2](http://search.cpan.org/~rcaputo/Reflex-0.099/lib/Reflex.pm)では次のようなソースがExample Codeとして記載されています。

```perl:Echoer.pm
package Echoer;

use Moose;
extends 'Reflex::Base';

sub ping {
	my ($self, $args) = @_;
	print "echoer was pinged!\n";
	$self->emit( -name => "pong" );
}
```

Mooseは、完全なオブジェクトシステムをPerl5に提供するライブラリです。Mooseで使用されるAttributesは[こちら](http://perldoc.jp/docs/modules/Moose/Manual/Attributes.pod)で参照できます。
一例を挙げると、例えば型は`Var is a Str`のように`isa`を用いて定義され、属性は`Var is read-only`のように`is`を用いて設定されます。
また、`extends`はよくあるオブジェクトの継承に利用される関数です。Mooseをuseしているので使えています。


```perl:Example_of_Moose
  package User;
  use Moose;
  extends 'Person';
  has 'password' => (
      is  => 'rw',
      isa => 'Str',
  );
```

Example CodeによるとEchoerはping関数を持ち、そこでは `Reflex::Role::Reactive`で定義されるemit関数が使われています。
emitとは何か。[ここ](https://metacpan.org/pod/Reflex::Role::Reactive)によれば、`watch() allows one object (the watcher) to register interest in events emitted by another.`とあり、watcherによって観測されるeventの一種だということが分かります。

#react
ところでPinger側のExample Codeでは、型が`Echoer`のデフォルト値`sub { Echoer->new() }`の読み書き可能な（`has`ではなく`watches`を用いているため）echoerを宣言しています。

```perl:Pinger.pm
package Pinger;

use Moose;
extends 'Reflex::Base';

use Reflex::Trait::Watched qw(watches);

watches echoer => (
	isa => 'Echoer',
	default => sub { Echoer->new() },
);

sub BUILD {
	my $self = shift;
	$self->echoer->ping;
}

sub on_echoer_pong {
	my $self = shift;
	print "Pinger got echoer's pong!\n";
	$self->echoer->ping();
}
```

宣言されたechoerはPingerのBUILD時に呼ばれ、結果としてpingが実行されます。
その場合、冒頭でも記したようにpingはpongをemitするため、Pingerの`on_(オブジェクト名)_(当該オブジェクトがemitしたイベント名) { ... }`が呼び出されることになります。

結果として、

```shell-session
PitneS$ perl -e "use Pinger; use Echoer; Pinger->new()->run_all();"
echoer was pinged!
Pinger got echoer's pong!
echoer was pinged!
Pinger got echoer's pong!
echoer was pinged!
Pinger got echoer's pong!
echoer was pinged!
...
```

という結果が得られます。なお `run_all();` は[こちら](https://metacpan.org/pod/Reflex::Role::Reactive)によれば `run_all(): Run all active Reflex objects until they destruct.` 、つまり生成したReflexオブジェクトを実行する関数です。

#参考資料
##URL
1. [Reactive とは何か？](https://speakerdeck.com/okapies/reactive-tohahe-ka-number-reactive-shinjuku) 18Aug2015, by @okapies.
- [Reflex - Class library for flexible, reactive programs.](http://search.cpan.org/~rcaputo/Reflex-0.099/lib/Reflex.pm) 21Apr2013, by Rocco Caputo.
- [Moose - A postmodern object system for Perl 5](http://search.cpan.org/~ether/Moose-2.1600/lib/Moose.pm) 2006, by Infinity Interactive, Inc.
- [Moose::Manual - Mooseとはなにか、どうやって使うのか](http://perldoc.jp/docs/modules/Moose/Manual.pod) 2008-2009 by Infinity Interactive, Inc.
Kitematicで/homeをMacのローカルフォルダに割り当てているとX転送ができない

* `.Xauthority`がvboxsf上だと問題がある様子

```bash:~/.bash_profile
export XAUTHORITY=/tmp/.Xauthority_$USER
```

としてもダメだった。

## 現状

![スクリーンショット 2015-08-23 17.49.53.png](https://qiita-image-store.s3.amazonaws.com/0/25728/74e47cdf-8ce2-20dd-ac0b-704d4cc56456.png)


## /home をvboxsfでマウント

![スクリーンショット 2015-08-23 17.50.24.png](https://qiita-image-store.s3.amazonaws.com/0/25728/28a5e7a8-5aa4-e5f1-5cd3-9845d3f61dfe.png)


## ssh -X 

> Warning: untrusted X11 forwarding setup failed: xauth key data not generated
> /usr/bin/xauth:  error in locking authority file /home/vagrant/.Xauthority

## /homeをマウント指定しなければ動作する

![スクリーンショット 2015-08-23 17.53.16.png](https://qiita-image-store.s3.amazonaws.com/0/25728/bb6bde0b-9671-f83c-1d5b-0d25cd8cb074.png)

### 権限がroot:rootになってしまう

![スクリーンショット 2015-08-23 17.54.55.png](https://qiita-image-store.s3.amazonaws.com/0/25728/0273f59c-fc9c-00d2-1113-6d61e683e681.png)

```bash:
sudo chown vagrant:vagrant /home/vagrant
```

sshを抜け、再接続

### X転送

 ![スクリーンショット 2015-08-23 17.56.28.png](https://qiita-image-store.s3.amazonaws.com/0/25728/8b379f8e-d512-d9e7-395b-91cfd78b2eac.png)
Windows10 をアップデートしたら「システムで予約済みのパーティションを更新できませんでした。」と怒られた

# Windows10にアップグレードしようとしたら怒られた

友達からアップグレードを依頼され普通にできるだろうと思っていたら、「システムで予約済みのパーティションを更新できませんでした。」とおこられた編。

どうやら Cドライブの先頭に予約パーティション が Windows 7では100MB、Windows 8では350MBがインストール時に作成されるのだけど、Windows10 では 350MB 以上ないから怒られるっていうオチ。

> [Windows8.1にアップデートするまでの苦労と対処法](Windows8.1にアップデートするまでの苦労と対処法)

を参考にすればよい。
だけど、この「EaseUS Partition Master Free」が気つけてインストールしないと、Hao123 を勝手にインストールしちゃう点。

まあパーティション＆update が終わったら、EaseUS のアンインストールと hao123 がいないことを気つけたほうがいいです。

> [EaseUS Partition Master - 窓の杜ライブラリ](
http://www.forest.impress.co.jp/library/software/easeuspart/)

窓の杜ライブラリでも注意喚起してるね。
YouTube-Player-iOS-Helperを使ってvevoの動画を再生


無知すぎてiOSでのyoutubeのvevo動画が再生ができずに、適当にぐぐった結果、上手くいったので備忘録。
日本語での情報源を探せなかったのでqiitaに投稿。

iOSでyoutube動画を再生するためのライブラリ「YouTube-Player-iOS-Helper」を使ってvevoの動画を再生。
恐らく、ライブラリ使わずともUIWebviewを用いるとできそうな？気がする。

##youtubeでの解説ページ
https://developers.google.com/youtube/v3/guides/ios_youtube_helper

##GitHub
https://github.com/youtube/youtube-ios-player-helper

因みにGitHubのページだと

```
pod "youtube-ios-player-helper", "~> 0.1.4"
```
上記だと自分の環境ではインストールできず

```
pod "youtube-ios-player-helper", "~> 0.1.3"
```
でいけました。cocoapodsだと0.1.4は対応していない。

##コード

```
#import "YTPlayerView.h"

```

```
NSString *videoId = @"IxxstCcJlsc";//適宜、動画IDを設定

NSDictionary *playerVars = @{
                             @"playsinline" : @1,
                             @"autoplay" : @0,                             
                             @"origin" : @"https://www.youtube.com/" //これを設定しないと再生できない
                             };

YTPlayerView *playerView = [[YTPlayerView alloc] initWithFrame:CGRectMake(0, 0, 320, 180)];
playerView.center = self.view.center;//中央配置(画面回転の考慮なし)
[self.view addSubview:playerView];

[playerView loadWithVideoId:videoId playerVars:playerVars];
```

##バックグラウンド再生
https://github.com/youtube/youtube-ios-player-helper/issues/38

実際、申請していないので、どうなるかは不明。
なんかグレーそうで怖い。
Atomを始めるときに知りたい、シンプルなコマンド集

vimを1年くらい使っていましたが、今朝からatom始ました.
頻繁に使えそうで早く覚えたいコマンドを主に備忘録としてメモ.

# atom導入

### 開く

`atom <filepath>`

`atom .` (自分のいるところで開く)

### ツリー

* ツリー開閉
  - `cmd-\`

* ツリーにフォーカスを移動

  - `ctl-0`

* 変更ファイル/新規ファイルが色でわかる

  - 変更: オレンジ
  - 新規: ミドリ

### ファイル

- 追加 `a`
- 移動 `m`
- 削除 `delete`


### 検索

- ファイル検索 `cmd-t`
- 開いているファイル検索 `cmd-b`
- gitでまだトラッキングしてないファイル検索 `cmd-shift-b`
- ファイル内検索と置換 `cmd-f`
- プロジェクト全体からファイル内検索 `cmd-shift-f`
- シンボルへのジャンプ `cmd-r`

### terminal

- `ctrl+alt+t`
- `ctrl+alt+t+矢印`

### パネルの分割

- `cmd-k`の後に上下きー
- `cmd-k`の後にcmd-矢印でpanel間移動できる

### マークダウンプレビュー

- ctrl+shift+m

### コマンド

- タブ入れる減らす/ `cmd-[or]`

### コメントアウト
- 選択して `cmd+/`
- 選択は `ctrl+a`

### コードブロックのfolding

- `alt+cmd+[or]`

### かゆいところ

- 予測変換のスクロールもctrl-fからの検索結果もctrl+nでできる
- vimのinsertモードで移動できない
rasberry piで水温測定

# 配線
防水の温度計をラズパイへそれぞれ以下のように配線

* 白ケーブル → GPIO4 (Pin09)
* 黒ケーブル → Gnd (Pin07)
* 赤ケーブル → 5V (Pin02)

# 認識

`$ sudo apt-get update
$ sudo apt-get upgrade
$ echo "dtoverlay=w1-gpio-pullup,gpiopin=4" | sudo tee -a /boot/config.txt
$ sudo reboot
`

## カーネルモジュール
`$ sudo modprobe w1-gpio
$ sudo modprobe w1-therm
$ sudo shutdown -r now
`

# 結果取得
`$ cd /sys/bus/w1/devices
$ ls
28-01146560e2ff  w1_bus_master1
$ cd 28-01146560e2ff
$ grep t=  w1_slave | awk -F"t=" '{print $2}'
`

![P8230551.JPG](https://qiita-image-store.s3.amazonaws.com/0/88184/79c9f581-68ca-c868-52f3-48d82f35a15a.jpeg)
canvasサイズをjsから変更するとマウスでのlineToなどの描画がずれる問題

createJSを使ってcanvasでマウスの位置にshapeを表示するコードを書いていた時の話

ページ読み込み時のウィンドウサイズに応じてcanvasの大きさをjQueryで変更し，

```js
  document.getElementById("demoCanvas").addEventListener("mousemove", mouseMoveHandler, false);

function mouseMoveHandler(e) {
   var rect = e.target.getBoundingClientRect();
   shape.x = e.clientX -rect.left;
   shape.y = e.clientY -rect.top;
}
```
というようにshapeの位置をマウスの位置に応じて変更するようなコードを書いていたが，マウスイベントでは正しいポジションを返しているにもかかわらず，どうあってもマウスの位置にshapeが描画されない．

## canvasはCSSでサイズを指定してはいけない

canvasの要素でwidth、heightを指定していないとデフォルトの300px - 150pxになるらしい．それを単にCSSで引き伸ばし/縮小した状況になる.

そのため，もともとは

```js

// これは動かない!!
$("#deomoCanvas").width(w);
$("#deomoCanvas").height(h);
```

で指定していたがこれでは描画がおかしくなるので，

```js
$('#canvas').attr('width', w);
$('#canvas').attr('height', h);
```

で指定する必要がある．
NCBI BLASTをローカルでコンパイル


手元の環境でバイナリの実行時にエラーがでて動かせないので仕方なくローカルでコンパイル。
# 実行環境
- OS: CentOS 5.1
- gcc : 4.4.6
- NCBI BLAST: 2.2.31+

# コンパイル
```bash
tar xvf ncbi-blast-2.2.31+-src.tar.gz 
cd ncbi-blast-2.2.31+-src/c++
./configure --without-debug --with-mt --with-build-root=ReleaseMT --with-64 --with-static 
make
```
これでReleaseMT/binにblast関係のバイナリができている。

# 注意点
原因はわかっていないがmakeのあとにmake installをするとatic.aがないといわれる。ただ、現状makeblastdbとblastxは動いているようなので調査は保留
コードでAutoLayout中央配置（Objective-C）


AutoLayoutのコード設定を覚えるのが面倒なので備忘録。
今回は中央配置。

```
ex:UILabelを中央配置

//UILabelの作成
UILabel *centerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 20)];
centerLabel.text = @"centerLabel";

//autoresizingMaskをoff
[centerLabel setTranslatesAutoresizingMaskIntoConstraints:NO];

//水平値の制約
NSLayoutConstraint *xConstraint = [NSLayoutConstraint constraintWithItem:centerLabel
                                                               attribute:NSLayoutAttributeCenterX
                                                               relatedBy:NSLayoutRelationEqual
                                                                  toItem:self.view
                                                               attribute:NSLayoutAttributeCenterX
                                                              multiplier:1
                                                                constant:0];

//垂直値の制約
NSLayoutConstraint *yConstraint = [NSLayoutConstraint constraintWithItem:centerLabel
                                                               attribute:NSLayoutAttributeCenterY
                                                               relatedBy:NSLayoutRelationEqual
                                                                  toItem:self.view
                                                               attribute:NSLayoutAttributeCenterY
                                                              multiplier:1
                                                                constant:0];

[self.view addSubview:centerLabel];
[self.view addConstraint:xConstraint];
[self.view addConstraint:yConstraint];

```
unity > androidアプリ > 解像度を変更する > Screen.SetResolution (width, height, false);

```txt:動作確認
Unity 5.1.2-f1 on MacOS X 10.8.5
```

androidにアプリを転送してみたが、UI>Buttonなどがすごく小さく表示されてしまった。

## try01

とりあえず、以下のようにしてButtonなどの表示を大きくできる。

```csharp
	void Start () {
		float screenRate = 4.0f;
		int width = (int)(Screen.width / screenRate);
		int height = (int)(Screen.height / screenRate);
		Screen.SetResolution (width, height, false);
	}
```

参考
http://tamilabo.blog.fc2.com/blog-entry-14.html


## try02
どうもtry01のコードで実装すると Application.LoadLevel()で別シーンから再度戻ってきた時にも再度解像度を変更してしまう。

以下のようにmyButtonの幅がスクリーンの50%になるようにすると、シーン間の遷移による問題は避けることができる。

```csharp:MainCameraControl.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class MainCameraControl : MonoBehaviour {
	
	public Text msgText; // set Text to show message
	public Button myButton; // set UI>Button whose width is used as standard

	void Start () {
		float aspect = (float)Screen.height / (float)Screen.width;
		float buttonRatio = 0.5f; // 50%
		int buttonWidth = (int)myButton.GetComponent<RectTransform> ().rect.width;
		float newWidth, newHeight;

		newWidth = buttonWidth / buttonRatio;
		newHeight = newWidth * aspect;

		Screen.SetResolution ((int)newWidth, (int)newHeight, false);
		msgText.text = newWidth.ToString () + "x" + newHeight.ToString ();
	}	
}
```
play フレームワークが起動しない

windows環境でのお話。ちょっとしたメモです。

activator ui を実行すると
Found previous process id: xxxx
となってTypesafe Activatorが起動しない場合

アプリフォルダにある、RUNNING_PIDファイルを消してやると動くようになる

参考ＵＲＬ
http://stackoverflow.com/questions/24706790/activator-ui-failing-to-start
[Elixir]ファイルの自動生成を行うカスタムタスクを作成する

#Goal
ファイルの自動生成を行うカスタムタスクを作成する。

#Dev-Environment
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4

#Wait a minute
mixのコマンドからファイルを自動生成させる一例です。

#Index
My mix command
|> Preparation
|> Automatic generation of file

##Preparation
準備は以下の記事を見て下さい。
前の記事: [Mixのカスタムタスクを作成する](http://qiita.com/darui_kara/items/5a4ae13e7c8699e56674)

##Automatic generation of file
mixのコマンドからファイルの自動生成を行うカスタムタスクを作成します。

####ファイル: lib/mix/tasks/sample.ex

```elixir
defmodule Mix.Tasks.Sample do
  use Mix.Task
  import Mix.Generator

  @shortdoc "My custom task sample"

  def run(_args) do
    app_module = Mix.Project.config[:app] |> Atom.to_string |> Mix.Utils.camelize
    assigns = [app_module: app_module]

    # template
    create_file(
      Path.join(["lib", "test_template.ex"]) |> Path.relative_to(Mix.Project.app_path),
      test_template(assigns))

    # text
    create_file(
      Path.join(["lib", "test.ex"]) |> Path.relative_to(Mix.Project.app_path),
      test_text)
  end

  # template
  embed_template :test, """
  defmodule <%= @app_module %>.Test do
  end
  """

  # text
  embed_text :test, """
  defmodule MyMixCmd.Test do
  end
  """
end
```

Result:

```elixir
>mix sample
* creating lib/test_template.ex
* creating lib/test.ex
```

Description:

`embed_template/2`で渡している引数内の`@app_module`部分は、
assignsの内容に変換されて出力されています。

Phoenix-Frameworkでよく使う、
`.html.eex`の埋め込みコードのようなことをやっていますね。
実際にこれEExの機能です。

`embed_text/2`は、渡している引数の通り出力されていますね。

#Speaking to oneself
`Mix.Generator.embed_template/2`を使う場合、
`Mix.Generator.create_file/3`の第二引数に渡す値がさっぱり分からなかった。

お陰様で大分時間を消費してしまった。

#Bibliography
[Github - ma2gedev/breadcrumble_ex implement generator for the Phoenix application](https://github.com/ma2gedev/breadcrumble_ex/commit/369424969d38bfc8ee7c4d929a98c8372ceceeb3)
[A Custom Mix Task for Phoenix App](http://learnelixir.com/blog/2014/11/04/custom-mix-task-for-phoenix-app/)
[hexdocs - v1.0.5 Elixir Mix](http://elixir-lang.org/docs/v1.0/mix/Mix.html)
[hexdocs - v1.0.5 Elixir Mix.Task](http://elixir-lang.org/docs/v1.0/mix/Mix.Task.html)
[hexdocs - v1.0.5 Elixir Mix.Generator](http://elixir-lang.org/docs/v1.0/mix/Mix.Generator.html)
[hexdocs - v1.0.5 Elixir Mix.Utils](http://elixir-lang.org/docs/v1.0/mix/Mix.Utils.html)
[hexdocs - v1.0.5 Elixir Mix.Project](http://elixir-lang.org/docs/v1.0/mix/Mix.Project.html)
関数の語源

ここ最近、関数型言語や関数型プログラミングといったキーワードをよく目にするようになりました。
関数型言語などで検索していくと、雑学のようなものが目に留まります。
その中の1つとして、「関数」の語源があります。
[関数(数学)のWiki](https://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0_(%E6%95%B0%E5%AD%A6))には表記の歴史が下記のように書かれております。※引用は一部抜粋
>日本語としての関数はもともと「函数」（旧字体では函數）と書く。函数という語は中国語から輸入されたもの。
>「函」が漢字制限による当用漢字に含まれなかったことから、1950年代以降同音の「関」へと書き換えがすすめられた。この他、「干数」案もあった。
>「函数」の中国語における発音は(拼音: hánshù) であり、志賀浩二や小松勇作によればこれはfunctionの音訳であるという。

このように「関数」の字体からは、functionの本来の意味である「機能」がイメージ出来ないのは音訳だったからである。同じように幾何学(geometory)も音訳(geo（ジーホ） → キーホ → 幾何)からきている。
【追記 2017/05/27】
函数の音訳は間違い(含むの意味)というブログ「[「函数」は意訳か音訳か - だめブログ](http://kirara0048.blogspot.jp/2015/09/blog-post.html)」」がある。詳細は[コメント](http://qiita.com/yaju/items/d9b8de8414e495f9e289#comment-eff02ca159e1658f36b2)にて。
【追記 2017/05/25】
幾何学の音訳は間違い(数学的対象の量一般を意味)という論文「[満洲語資料からみた 「幾何」 の語源について](http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1444-4.pdf)」がある。


ここで疑問に思うのが、読み方が「ハン」ではなく「カン」になっていることである。
もう少しネットで調べていくと、日本語の歴史が見えてきます。
参照：[「はひふへほ」の歴史](http://shouyouki.web.fc2.com/tenkoon.htm)

は行である「はひふへほ」が出来てくるのは意外にも江戸時代であり、五十音図が出来たとされる十世紀後半の平安時代には存在しなかったようである。
奈良時代のヤマト言葉には「ぱぴぷぺぽ」があり、それが平安時代までに「ふぁふぃふぅふぇふぉ」という風に変わっていき江戸時代はじめに「はひふへほ」になっていった。その証拠に沖縄には今でも「花」をパナと呼ぶ発音が残っている。
「は」行がなかったことで、中国から漢字が入った頃の「Ｈ」の発音が「Ｋ」に読み替えられた。
(日本語の「は」行と「か」行の発音を口の中の状態を比べてみるとよく似ているので、入ってきた当時の日本人にはそのように聞えたのかもしれない。)
その証拠として上海（シャンハイ）の「海」の音読みが現在も残っています。

また、[写像 - 数学 | ++C++; // 未確認飛行 C](http://ufcpp.net/study/math/set/map/)には余談に下記が書かれておりました。
>余談ですが、関数という言葉は function を音訳したものです。 （中国語では「関」は「ファン」と読みます。 もともとは「函」と書いていましたが、この文字は常用漢字ではないので、次第に「関」に置き換えられるようになりました。） 古来の日本語には「h」や「f」の音はなく、は行の音は「p」の音で読まれていました。 そのため、「函」は「ハン」や「ファン」ではなく、「クワン」と読まれ、後に「カン」になったそうです。 （現在でも辞書などには「くわん」という読み方が書かれています。）

函数の「函」は古来の読み方を継承しており、「ハン」ではなく「クワン」 → 「カン」と読まれるようになったわけです。
私のいる静岡県の東部には函南町がありますが、読み方は「カンナミチョウ」です。

さて、「函数についての初出は1874年の『微積遡源』で、もともとはヨーロッパの宣教師が中国においてfunctionの訳語としてあてたもの」という記述を見つけた。その頃には既に「は」行があったはずだが、読み方は古来のまま残ったのかも知れません。

日本で「関」の音読みが「クワン」kwanから「カン」kanに変更された。「関」は北京語でguān、朝鮮語でkwanであり、「函」とは読みが異なる。
ちなみにアメリカのChina系スケート選手・ミ（ッ）シェル・クワン（Michelle Kwan）の姓は「関」Guānである。

このような経緯であるから「関数」は中国と朝鮮では採用されていない。
Taskwarrior 良い

[Taskwarrior](http://taskwarrior.org/) というツールを使い始めて、 1 ヶ月くらい安定して使えているので備忘録として書き留めて置きます。
なんでもコマンドラインで済ませたい気質の者には便利です。

# 簡単に説明

[ここにブラウザ上で動かせるデモがあります](http://wbsch.de/jswarrior/)

- コマンドラインで操作できる TODO リストです。
- さらに Vit という Vi-like なキーバインドで操作ができるものがあります。こちらも便利です。
- データは JSON 形式で保存されています。 RESTful API を持つ他の TODO ツールと連携しやすいでしょう。

# インストール

OS X では Homebrew でインストールできました。なのでとても楽でした。

```console
$ brew install task vit
```

# 使い方

以下の例で示す "タスクの番号" は、動的に変わります。
厳密に指定したい

## タスクの追加

```
$ task add '洗濯洗剤の替えを購入する'
```

## タスクの表示

```
$ task list
```

## タスクの依存性の追加

```
$ task $ID1 modify depends:$ID2
```

## タスクの完了

```
$ task [タスクの番号] done
```

## タスクの削除

```
$ task [タスクの番号] delete
```

## マニュアルの表示

```
$ man task
```

# さらなる使い方

- もちろんタスクには所要時間や優先度を設定できます。 ```$ man task``` で読んでいってください。
- タスクの番号は動的に変わりますが、 uuid は変わりません。 ```$ task uuids``` で確認できます。
- [既に大量の互換ツールがあります](http://taskwarrior.org/tools/)
AjaxでSame-Origin Policyを越えてXMLなWebAPIやRSSの情報を取得する

# やりたいこと
WebAPIを叩きたい。[Yahoo! JAPAN 日本語形態素解析API](http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html)とか
RSSを読み込みたい。[Yahoo!ニュース RSS](http://headlines.yahoo.co.jp/rss/list)とか
// 残念ながらYahoo!ニュースAPIは無い...

これを手っ取り早く**Ajax**でやりたい。
主にハッカソンとかハッカソンとかまずはアイディアを形にするのが大事なとき。

# 悲しいこと
こいつらXMLしか返さない。（RSSはそもそもそういうもんですが）
 => **Same-Origin Policyでコケる**

悲しい

# 回避してみた
https://gist.github.com/kotatsu360/ca797c2b77989a2f5a11

## 日本語形態素解析API
コピペして、`YOUR_APP_ID`を書き換えてブラウザに放り投げるとこんな感じ。
![api.png](https://qiita-image-store.s3.amazonaws.com/0/62601/4d391ad8-a24a-607c-a8f9-f8a232a42112.png)

とれた！

## Yahoo!ニュース RSS
RSSの中からトピックスを選んでURL差し替え

```diff
diff --git a/call_webapi_which_return_xml_with_ajax.html b/call_webapi_which_return_xml_with_ajax.html
index 822831e..af8c10b 100644
--- a/call_webapi_which_return_xml_with_ajax.html
+++ b/call_webapi_which_return_xml_with_ajax.html
@@ -20,14 +20,7 @@
        $.ajax({
          // [NOTE] 使いたいAPIのURI, ここではYahoo! JAPAN 形態素解析API
          // http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html
-         url: 'http://jlp.yahooapis.jp/MAService/V1/parse',
-         data: {
-           // [NOTE] APIに渡したいパラメータ
-           // APPIDはhttps://e.developer.yahoo.co.jp/dashboard/ から取得
-           "appid": "<YOUR_APP_ID>",
-           "results": "ma,uniq",
-           "sentence": "庭には二羽ニワトリがいる。"
-         },         
+         url: 'http://news.yahoo.co.jp/pickup/rss.xml',
          type: 'GET',
          dataType: "xml",
          cache: false, // キャッシュOFF
```
![xml.png](https://qiita-image-store.s3.amazonaws.com/0/62601/1fda019f-24a5-f1f0-9ba8-ddfc6384a670.png)

とれた！

# 使ったもの
* jQuery
* jquery.xdomainajax.js
* jquery.xml2json.js（XMLをJSONに変換しないなら不要）

# 補足
Q. どうやってるの
[YQL](https://developer.yahoo.com/yql)というWebリソースをSQLライクに取得できるプラットフォームがありバックエンドを経由する形になるのでSame-Origin Policy関係なくなる。
jquery.xdomainajax.jsがjQueryのajaxメソッドをYQL経由になるようラップしてくれている

jsonだったりgetメソッド以外だったりするとラップしないajaxメソッドが呼ばれるよう
[jquery.xdomainajax.js#L29](https://github.com/padolsey-archive/jquery.fn/blob/master/cross-domain-ajax/jquery.xdomainajax.js#L29)

Q. なんでjQuery?
最初にこの問題に直面していたコードがjQuery使ってたから。
YQLのエントリポイントにURLを投げれば良いので自前実装も十分可能。

Q. gistのはライブラリ？
ライブラリではない。ほぼ、「jquery.xdomainajax.jsを使ってみた」。

Q. 別のAPIでも使えるか
urlとdataを書き換えれば何でも使えるはず。少なくともgetメソッドなら。

Q. CORSとかいうやつ
サーバサイドが対応してないとダメだし、そもそもそういうの考えたくない時用。

# まとめ
YQLをラップしたjquery.xdomainajax.jsでSame-Origin Policy問題を回避してみた。
まじめに作るサービスで使えるかはともかく、まずは動かしたいって時には役立つんじゃないかと。
Cyberfox(Waterfox)で簡単にメニューを日本語化するAdd-on

64bit版 FirefoxとしてWaterfoxがバージョンアップしなくなっていたので、PaleMoon を使っていました。

最近、PaleMoonもバージョンアップしないので、他のものを探していたらCyberfoxと言うのを見つけました。こいつを使ったら鼻血が出るほど早かったのですが、
日本語化もCybefox謹製のAdd-onを使うと簡単でした。

https://8pecxstudios.com/Forums/viewtopic.php?f=11&t=246
データのhistogramと確率密度関数を同時に描きたい

# Q.
histogramと確率密度関数を同時に描きたいのですが。

# A.
## 縦軸を確率密度にする（確率密度関数にあわせる）場合
以下のように書きます。

```OK_example1.R
library(ggplot2)

dens <- density(faithful$waiting)
bw <- diff(range(faithful$waiting))/20

ggplot(faithful, aes(x=waiting)) +
  geom_histogram(aes(y=..density..), binwidth=bw, fill='white', color='black') +
  geom_density(fill='black', alpha=0.3) +
  xlim(range(dens$x))
```

![OK_example1.png](https://qiita-image-store.s3.amazonaws.com/0/12869/b3919fcd-288c-0807-2a5e-d5232620f6bd.png)


## 縦軸をcountにする（histogramにあわせる）場合
以下のように書きます。

```OK_example2.R
library(ggplot2)

dens <- density(faithful$waiting)
bw <- diff(range(faithful$waiting))/20

ggplot(faithful, aes(x=waiting)) +
  geom_histogram(binwidth=bw, fill='white', color='black') +
  geom_density(eval(bquote(aes(y=..count..*.(bw)))), fill='black', alpha=0.3)+
  xlim(range(dens$x))
```

`bquote`は`.()`で囲われたものを除いてquoteする関数です。他の方法としては`substitute`やEPTイディオム（`eval(parse(text=))`）を使う方法があるようです。

![OK_example2.png](https://qiita-image-store.s3.amazonaws.com/0/12869/a35b02bf-ee17-6a0e-147c-0f143a56e504.png)


# 参考資料
http://stackoverflow.com/questions/5688082/ggplot2-overlay-histogram-with-density-curve
http://stackoverflow.com/questions/11404531/r-ggplot2-adding-count-labels-to-histogram-with-density-overlay
http://stackoverflow.com/questions/27661852/adding-a-density-line-to-a-histogram-with-count-data-in-ggplot2

その他、[slack](https://r-wakalang.slack.com/messages/ggplot2/)で@kohskeさんに教えていただきました。
unity > 自作 > csvビューワ (途中)

```txt:動作確認
Unity 5.1.2-f1 on MacOS X 10.8.5
```

CSVファイルの中身を見るとき、各列の文字列長さが異なると、ある列の数値を読むのが難しい。
列の左側をあわせて表示するものを以下に紹介する。


## サンプルデータ

MainCameraControl.cs内でusingで使われるもの。
data1の中から４列目が円周率でないものを見つけるのは時間がかかる。

```SampleData.cs
using UnityEngine;
using System.Collections;

namespace NS_SampleData
{
	public static class SampleData
	{
		public const string data1 =
			 "111,BBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"222,B,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"333,BBBBBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"444,BB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"555,BBBBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"666,BB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"777,BBBBBBBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"888,BB,CCC,3.132564,2.7182,6.022"  + "\r\n"
			+"999,BBBBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"AAA,B,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"BBB,BBBBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"CCC,BB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"DDD,BBBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"EEE,BB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"FFF,BBBBBB,CCC,3.141592,2.7182,6.022"
			;
	}
}
```

##MainCameraのスクリプト

```MainCameraControl.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using NS_SampleData;
using System; // for StringSplitOptions.RemoveEmptyEntries

public class MainCameraControl : MonoBehaviour {

	public Text Row0;
	public Text Row1;
	public Text Row2;
	public Text Row3;
	public Text Row4;
	public Text Row5;

	private string extractCsvRow(string src, int idx)
	{
		string[] splitted = src.Split(new string[] { System.Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);
		string res = "";
		foreach(string each in splitted) {
			string [] elements = each.Split(',');
			res = res + elements[idx] + System.Environment.NewLine;
		}
		return res;
	}

	void Start () {
		Row0.text = extractCsvRow (SampleData.data1, /* idx=*/0);
		Row1.text = extractCsvRow (SampleData.data1, /* idx=*/1);
		Row2.text = extractCsvRow (SampleData.data1, /* idx=*/2);
		Row3.text = extractCsvRow (SampleData.data1, /* idx=*/3);
		Row4.text = extractCsvRow (SampleData.data1, /* idx=*/4);
		Row5.text = extractCsvRow (SampleData.data1, /* idx=*/5);
	}
	
	void Update () {
	
	}
}
```

Row0..Row5は UI>Panelで以下のリンクのようにTextを子に持つもの。
http://qiita.com/7of9/items/0308cd96ffba48c14751

##実行例
![Scene_unity_-_150823_csvViewer_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/a87e0897-d311-a95b-5325-4e8b4665001d.jpeg)

これでエラーのデータなどをcsvファイルの中から見つけやすくなる。
上記の例では１つだけ円周率からずれているデータが入っているのが分かる。

\---
これをAndroidで動かすとマスクなどがおかしくなった。
unity/csharp > csv文字列(改行つき)の指定の列を抜き出す処理

```txt:動作確認
Unity 5.1.2-f1 on MacOS X 10.8.5
```

```csharp
using System; // for StringSplitOptions.RemoveEmptyEntries
...
	private string extractCsvRow(string src, int idx)
	{
		string[] splitted = src.Split(new string[] { System.Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);
		string res = "";
		foreach(string each in splitted) {
			string [] elements = each.Split(',');
			res = res + elements[idx] + System.Environment.NewLine;
		}
		return res;
	}
```

以下のように使う。

```csharp
	void Start () {
		Row0.text = extractCsvRow (SampleData.data1, /* idx=*/0);
		Row1.text = extractCsvRow (SampleData.data1, /* idx=*/1);
		Row2.text = extractCsvRow (SampleData.data1, /* idx=*/2);
		Row3.text = extractCsvRow (SampleData.data1, /* idx=*/3);
		Row4.text = extractCsvRow (SampleData.data1, /* idx=*/4);
		Row5.text = extractCsvRow (SampleData.data1, /* idx=*/5);
	}
```

## 検索用キーワード

- extract
- csv
- extractCsvLine


### 間違い
(追記 2017/06/11)

row: 行
column: 列

本来はextractCsvColumn()が正しい命名。
extractCsvRow()で多くのコードを実装してしまい、失敗。
Unboundの設定


Ubuntu 14.04でローカルネットワーク内の名前解決をさせるための設定

# インターフェース

* すべてのインターフェースでリクエストを受け付け

```/etc/unbound/unbound.conf.d/interface.conf
server:
        interface: 0.0.0.0
        interface: ::0
```

# アクセスコントロール

* ローカルネットワークからのリクエストは許可

```/etc/unbound/unbound.conf.d/access-control.conf
server:
        access-control: 0.0.0.0/0 refuse
        access-control: 10.0.0.0/8 allow
        access-control: 172.16.0.0/12 allow
        access-control: 192.168.0.0/16 allow
```        

# リクエストのフォワード

* 特定ドメインはローカルＤＮＳにフォワード

```/etc/unbound/unbound.conf.d/forward-zone.conf
forward-zone:
        name: "example.org."
        forward-addr: 192.168.10.5
```


* 自己解決できなければ「Google Public DNS」にフォワード

```/etc/unbound/unbound.conf.d/forward-zone.conf
forward-zone:
        name: "."
        forward-addr: 8.8.8.8
        forward-addr: 8.8.4.4
```
確率密度関数を線で描いて95%区間を塗りつぶしたい

# Q. 
確率密度関数を線で描いて95%区間を塗りつぶしたいのですが。

# A.
## 確率密度関数が正規分布など数式で与えられている場合
[正規分布など好きな関数の曲線を描きたい](http://qiita.com/berobero11/items/a6522a6e6561f8ca7b96)を参考に以下のように書きます。

```OK_example1.R
library(ggplot2)

q <- qnorm(c(0.025, 0.975))

p <- ggplot()
p <- p + geom_path(data=data.frame(X=x<-seq(-4,4,len=101), Y=dnorm(x)), aes(x=X, y=Y))
p <- p + geom_ribbon(data=data.frame(X=x<-seq(q[1],q[2],len=101), Y=dnorm(x)), aes(x=X, y=Y, ymin=0, ymax=Y))
```

![OK_example1.png](https://qiita-image-store.s3.amazonaws.com/0/12869/690a76af-526d-924a-c0e0-77fa22ad09e3.png)



## 確率密度関数がデータから計算される場合
以下のように書きます。

```OK_example2.R
library(ggplot2)

q <- quantile(iris$Sepal.Length, prob=c(0.025, 0.975))
dens <- density(iris$Sepal.Length)
d <- data.frame(X=dens$x, Y=dens$y)

p <- ggplot()
p <- p + geom_line(data=d, aes(x=X, y=Y))
p <- p + geom_ribbon(data=subset(d, X>=q[1] & X<=q[2]), aes(x=X, ymin=0, ymax=Y))
```

![OK_example2.png](https://qiita-image-store.s3.amazonaws.com/0/12869/15bcd9a3-1e1e-c558-2dc0-b4cba4f10348.png)

しかしながら、データの分位点と確率密度関数の分位点が必ずしも一致しないので、あまり好ましい図ではないと思います。

# 参考資料
http://stackoverflow.com/questions/26266246/ggplot2-stat-function-can-we-use-the-generated-y-values-on-other-layers
http://stackoverflow.com/questions/4542438/adding-summary-information-to-a-density-plot-created-with-ggplot
http://stackoverflow.com/questions/3494593/shading-a-kernel-density-plot-between-two-points
unity/csharp > 複数行の文字列を持つstringを使って各行に対して処理する > string[] splitted = data.Split(new string[] { System.Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);

```txt:動作確認
Unity 5.1.2-f1 on MacOS X 10.8.5
```

複数行を持つstring文字列(string data)に対して、各行での処理をしたい時、以下のようにSplitを使う。

http://stackoverflow.com/questions/1547476/easiest-way-to-split-a-string-on-newlines-in-net

```csharp
using System; // for StringSplitOptions.RemoveEmptyEntries
...

	string sampleProc() {
		string data = "AAAAAAAAAAA" + "\r\n"
			+ "BBBB" + "\r\n"
			+ "CCC" + "\r\n"
			+ "DDD" + "\r\n"
			+ "EEE" + "\r\n";

		string[] splitted = data.Split(new string[] { System.Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);
		string res = "";
		foreach(string eachline in splitted) {
			res = res + eachline + System.Environment.NewLine;
		}
		return res;
	}

```

リンク元では

```
for( int i = 0; i < splitted.Count(); i++ )
{
```
でまわしていたが、`.Count()`が使えなかったので`foreach`で代替した。
unity/csharp > 改行付き文字列をあるファイルで定義しておく > namespace

```txt:動作確認
Unity 5.1.2-f1 on MacOS X 10.8.5
```

ある一定の長さの文字列などを別ファイルで定義しておきたいことがある。

以下の方法を用いる。
http://qiita.com/7of9/items/4a502162c9dacb645c9c

```csharp:SampleData.cs
using UnityEngine;
using System.Collections;

namespace NS_SampleData
{
	public static class SampleData
	{
		public const string data1 =
			 "111,BBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"222,BBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"333,BBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"444,BBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"555,BBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"666,BBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"777,BBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"888,BBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			+"999,BBB,CCC,3.141592,2.7182,6.022"  + "\r\n"
			;
	}
}
```

NS_SampleDataのNSはNameSpaceの意味。

ちなみに`"\r\n"`の部分は`System.Environment.NewLine`に置き換えたら`A constant ... of reference type string can only be initialized with null`エラーが出たので、上記のままとしている。

定義したstring data1の使用方法は

```csharp:MainCameraControl.cs
using NS_SampleData;
...
	void Start () {
		Row1.text = SampleData.data1;
	}
```
のようにするとRow1.Textに文字列が書き込まれる。

![Scene_unity_-_150823_csvViewer_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/72ee757f-461e-0c24-5394-ce2ec0d550e4.jpeg)
pip install したパッケージをimport できないときの対応

環境：OSX Yosemite 10.10.3
Python : 2.7

機械学習のライブラリscikit-learnを利用しようとしたとき

`$ pip install -U scikit-learn`
`（省略）`
`Successfully installed sklearn
Cleaning up...`

で見事インストール成功かとおもいきや

`$ python`
`Python 2.7.6 (default, Sep  9 2014, 15:04:36) `
`[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin`
`Type "help", "copyright", "credits" or "license" for more information.`
`>>> from sklearn import datasets`
`Traceback (most recent call last):`
`  File "<stdin>", line 1, in <module>`
`ImportError: No module named sklearn`

エラー、、

調べてみるとOSXではpythonは標準で搭載されている方のライブラリを見に行ってるっぽいことが判明

**参考**
[Cannot import scikits-learn even though it seems to be installed
(stackoverflow)](http://stackoverflow.com/questions/13212987/cannot-import-scikits-learn-even-though-it-seems-to-be-installed)

標準の方のパスが
`/Library/Python/2.7/site-packages/ `
pipでインストールした方のパスが
`/usr/local/lib/python2.7/site-packages/`

確かに`/usr/local/lib/python2.7/site-packages/`にはちゃんとscikit-learn入ってるじゃんということでパスを通す

##パスの通し方##
```lang:~/.bashrc
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages/```
```

**参考**
[ImportError: No module named sklearn.datasets](
http://stackoverflow.com/questions/26932445/importerror-no-module-named-sklearn-datasets)


PYTHONPATHなんていう環境変数があったのか。
これで無事importしたパッケージが使えるようになったので一安心
2015-08-23 unity > uGUI > scrollbar付きtext > Layout>ContentSizeFitter / UI>Mask / UI>ScrollRect

```txt:動作確認
Unity 5.1.2-f1 on MacOS X 10.8.5
```

http://evilonedeath.blog.fc2.com/blog-entry-125.html?sp
に記載されている手順でできる。

以下は、上記からの抜き書き。

- TextのAnchorを左上にあわせる
- TextにAdd Componentで Layout>ContentSizeFitter を追加する
- >> そのVerticalFitをPreferredSizeにする
- PanelにAdd Componentで UI>Mask を追加する (Panel外のはみでたTextを非表示するため)
- PanelにAdd Componentで UI>ScrollRect を追加する
- >> Contentに Textを関連づける (Textがマウスでスクロールできるようになる)
- UI>Scrollbarを追加
- UI>Scrollbar をPanel>Scroll Rect (Script) > Vertical Scrollbar に関連付ける (ScrollbarでTextをスクロールできるようになる)

![Scene_unity_-_150823_textWithScrollbar_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/4a97de5b-b0e3-600a-1af2-cb96c1696b49.jpeg)

複数のTextのスクロール同期もできる。
![Scene_unity_-_150823_textWithScrollbar_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/9dd5b794-f7a4-3783-8f08-7326bc51e42d.jpeg)

ということはアレが作れそう。
Alamofireで"HTTPステータスコードが204+レスポンスが空"について

サーバ連携ありのiOSアプリ(swift)をプライベートで開発していて、サーバサイドは同僚の @fukuiretu が開発しています。
通信周りは[Alamofire](https://github.com/Alamofire/Alamofire)を使っているのですが、サーバ側とのやりとりで知らなかったこと（基本的なこと）があったのでメモっておきます。

## 問題

データの削除系なんかのAPIで`Alamofire`がエラーを出しているのに気づきました。ただしDB等をみてもデータの削除自体は成功しているようです。レスポンスの処理あたりでコケているのでしょうか。

ということでレスポンスをみてみると・・・**ステータスコードが204**で**レスポンスbodyは空**だった。

愚かな自分はサーバサイド担当の同僚に「レスポンスが空だからエラーになっている。なんでもいいのでよしなにデータ返してほしい」と伝えた。

## 同僚からの指摘

それに対する同僚からのリアクションは「そんなバカな・・・」といった感じだった。不審に思った彼はそれから`Alamofire`を調べ出した。そして`slack`上でメッセージが届く。

> https://github.com/Alamofire/Alamofire/issues/510 
これ違う？

issueのタイトルは、**head :no_content (204 status code) returns error**で、確かに今回の話と同じ問題のようだ。

## やってみる

`Cocoapods`でライブラリの管理をしているのですが、しばらく`pod install`していなくて、使っていた`Alamofire`に上のissueが対応されたものが含まれていなかった。

最新のものにして動かしてみると・・・あれ、エラーだ。というのは、

```swift
let alamofireRequest = Alamofire.request(mutableURLRequest)
                                .validate(statusCode: 200..<300)
                                .validate(contentType: ["application/json"]) // ココ
                                .responseJSON { (req, res, result, error) -> Void in
    
    //...

}
```

`contentType`を`json`でバリデーションしていたからというプチメモで、問題なく動いた！！感謝。

## RFCに書いてある

HTTPのステータスコード204、実はこれまで業務で扱ったことなかったので知らなかったのですが、`RFC2616`にもある通り（上のissueのやりとりにも出てくる）

[http://tools.ietf.org/search/rfc2616#section-10.2.5](http://tools.ietf.org/search/rfc2616#section-10.2.5)

> The 204 response MUST NOT include a message-body, and thus is always
   terminated by the first empty line after the header fields.

ステータスコードが204のときは、レスポンスbodyを含んでは**ならない**、とのこと。

知らなかった、、、とはいえAlamofireでもこのissueが対応されたのが2015/8上旬だし、一度はissueもクローズされかかった経緯もあるようだし。ということで書いておきました。
Elixirでパフォーマンス測定

# 概要

- 特定の処理に何秒かかっているか測定する方法
- `:timer.tc`を使って測定する
- `:timer.tc(function)`、`:timer.tc(function, arguments)`、`:timer.tc(Module, function, arguments)`の3種類
- 戻り値は`{time, functionの戻り値}`のタプル

# コード

MapとHashDictの作成とアクセス時間の測定

```ex
defmodule Measure do
    @size_list [10, 100, 1_000, 10_000]

    def start do
        map_list = create Map
        access(map_list, Map)
        map_list = create HashDict
        access(map_list, HashDict)
    end

    def create(dict_mod) do
        IO.inspect "#{dict_mod} create"
        IO.inspect "-------------"
        res = for size <- @size_list do
            # 指定サイズのDict(Map or HashDict)を作成する無名関数
            f = fn ->
                for key <- 100_001..(100_000 + size), into: dict_mod.new do
                    # keyをatom化
                    {Integer.to_string(key) |> String.to_atom, key}
                end
            end
            # 無名関数を格納した変数をtimer.tcに渡す
            {time, dict} = :timer.tc(f)
            IO.inspect "size: #{size}"
            IO.inspect "time: #{time} μs"
            IO.inspect "-------------"
            dict
        end
        res
    end

    def access(dict_list, dict_mod) do
        IO.inspect "#{dict_mod} access"
        IO.inspect "-------------"
        for dict <- dict_list do
            size = dict_mod.size(dict)
            f = fn ->
                # Dictサイズ分ループする度にkeyの値にアクセス
                for key <- 100_001..(100_000 + size) do
                    dict_mod.get(dict, key)
                end
            end
            # 無名関数を格納した変数をtimer.tcに渡す
            {time, _} = :timer.tc(f)
            IO.inspect "size: #{size}"
            IO.inspect "time: #{time} μs"
            IO.inspect "-------------"

        end
    end
end

Measure.start

```

# 結果
- サイズが大きくなるほどHashDictの方が作成・アクセスともに早い

### Map
||10|100|1_000|10_000|
|---|---|---|---|---|
|create|24 μs|133 μs|7677 μs|594045 μs|
|access|25 μs|45 μs|1973 μs|107783 μs|

### HashDict
||10|100|1_000|10_000|
|---|---|---|---|---|
|create|37 μs|113 μs|1236 μs|17074 μs|
| access|25 μs|42 μs|1236 μs|4637 μs|
PHP で JUMAN を扱う（改良）

以前、このような投稿をしました。
http://qiita.com/SOJO/items/a13ea90e63340802fa52

しかし、この方法では以下のような入力をして場合、同じ単語でも別の意味があるときは @ が付いて別の行で出力され、この結果をそのまま受け取ることになります。

```
$ juman
国立図書館
国立 こくりつ 国立 名詞 6 普通名詞 1 * 0 * 0 "代表表記:国立/こくりつ カテゴリ:抽象物 ドメイン:教育・学習;政治"
@ 国立 くにたち 国立 名詞 6 地名 4 * 0 * 0 "代表表記:国立/くにたち 地名:日本:東京都:市"
図書 としょ 図書 名詞 6 普通名詞 1 * 0 * 0 "代表表記:図書/としょ カテゴリ:抽象物 ドメイン:文化・芸術"
館 かん 館 名詞 6 普通名詞 1 * 0 * 0 "代表表記:館/かん 漢字読み:音 カテゴリ:場所-施設"
```

もしも、同じ単語として処理をする場合に後々面倒です。なので、同じ単語のものは同じ文字列にするように処理を加えました。
（2015/9/4 @mpyw さんに前の記事で指摘を受けたので，こちらも改良しました）

# proc_open を使う方法

```php
  function juman($text) {
    $descriptorspec = array(
       0 => array("pipe", "r"),  // stdin は、子プロセスが読み込むパイプです。
       1 => array("pipe", "w"),  // stdout は、子プロセスが書き込むパイプです。
    );

    $process = proc_open('/usr/local/bin/juman', $descriptorspec, $pipes);

    if (is_resource($process)) {
      // $pipes はこの時点で次のような形を取っています。
      // 0 => 子プロセスの stdin に繋がれた書き込み可能なハンドル
      // 1 => 子プロセスの stdout に繋がれた読み込み可能なハンドル
      // すべてのエラー出力は /tmp/error-output.txt に書き込みされます。

      fwrite($pipes[0], $text);
      fclose($pipes[0]);

      $output = stream_get_contents($pipes[1]);
      fclose($pipes[1]);

      // デッドロックを避けるため、proc_close を呼ぶ前に
      // すべてのパイプを閉じることが重要です。
      proc_close($process);

      
      // 単語に別の意味が含まれる場合、
      // 同じ単語でも @(atmark) が付いて行が別れてしまうので、
      // それを合わせる処理
      // 配列を逆順にしてから処理することで、複数行に及ぶものにも対応
      $output = array_reverse(preg_split("/EOS|\n/", $output));
      foreach ($output as $out_key => $out_value) {
        if (isset($out_value[0]) && $out_value[0] == "@") {
          $output[$out_key+1] .= " " . $output[$out_key];
          $output[$out_key] = "";
        }
      }
      $return_value = array_filter(array_reverse($output), 'strlen'); // 空の要素を取り除く
 
      return $return_value;
    }
  }

```

# shell_exec を使う方法（こちらの方が簡単）
```php
function juman($text) {
  // jumanのコマンドを実行
  // EOSを除去し，改行で区切
  $output = shell_exec(sprintf('echo %s | /usr/local/bin/juman', escapeshellarg($text)));
  $output = array_reverse(preg_split("/EOS|\n/u", $output));

  // 単語に別の意味が含まれる場合、
  // 同じ単語でも @(atmark) が付いて行が別れてしまうので、
  // それを合わせる処理
  // 配列を逆順にしてから処理することで、複数行に及ぶものにも対応
  foreach ($output as $out_key => $out_value) {
    if (isset($out_value[0]) && $out_value[0] == "@") {
      $output[$out_key+1] .= " " . $output[$out_key];
      $output[$out_key] = "";
    }
  }
  $return_value = array_filter(array_reverse($output), 'strlen'); // 空の要素を取り除く

  return $return_value;
}
```
arduinoでLCD その２


オークションで手に入れた、LCDをarduino unoにつないで見ました。
##写真
![MVC-019S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/3de83358-b812-bc93-3106-350dc831d31f.jpeg)
##回路図
![lcd4567.PNG](https://qiita-image-store.s3.amazonaws.com/0/18104/b30b1f4b-cbba-2a80-329d-c2ab0c3dc33b.png)
##ライブラリ作ってみました。
https://github.com/ohisama/Lcd4567
##サンプルコード
```
#include <Lcd4567.h>

Lcd4567 lcd;

void setup()
{
	pinMode(13, OUTPUT);
	lcd = Lcd4567();
	lcd.begin(20, 4);
	lcd.print("hello, world!");
}
void loop()
{
	digitalWrite(13, HIGH);
	delay(1000);
	digitalWrite(13, LOW);
	delay(1000);
}
```
unity > 分からない > Anchorの表示 > mac版の問題かもしれない / win版 5.1.3-f1では表示される

```txt:動作確認
Unity 5.1.1-f1 on MacOS X 10.8.5
```

Unityを使っていて、ずっと分からないのがAnchorの表示方法。

http://docs.unity3d.com/Manual/UIBasicLayout.html
を見ると 4つの三角からなるAnchorが表示されているが、それをこちらの環境で表示することができない。

以下はCanvas > Panelを選択している状態。

![Scene_unity_-_150821-panelPanesWindows_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/22591d12-ef26-9724-421c-7099eacd958a.jpeg)

どこかのページのちょこっとしたところに表示のための設定があるのかもしれないけど、今のところ検索に成功していない。

以下も同様の症状のようだ。
http://answers.unity3d.com/questions/875908/recttransform-anchor-gizmos-not-visible-in-scene-e.html

上記では表示できない問題について未解決。

http://forum.unity3d.com/threads/anchor-widget-not-showing-up-in-rect-transform-inspector.267446/
> However, as its parent Game Object doesn't have a RectTransform too, there is no parent rect to anchor to, which means the anchors are pointless and aren't shown.

Buttonの親であるCanvasのRectTransformのインスペクタにて `Some value driven by Canvas`という表示で値を変更できないことと関係あるのだろうか？


<hr>
(追記 2015/09/01)

Windows版を再度インストールしてみたところ、Anchorが表示された。
Windows版は5.1.3f1 on Windows 8.1 pro (64bit)

Mac版の問題なのかもしれない。


![anchor.png](https://qiita-image-store.s3.amazonaws.com/0/32870/5a7cb375-7435-9578-ac39-f699b307ac5d.png)
[MAMP] Apache, MySQLのログの場所

何かエラーになったときは必ずログを見たい。
MAMPの場合、/Applications/MAMP/logs以下に記録される

Apache

```
/Applications/MAMP/logs/apache_error.log
```

MySQL

```
/Applications/MAMP/logs/mysql_error_log.err
```

PHP

```
/Applications/MAMP/logs/php_error.log 
```
unity > ファイルのDrag&Dropは対応していないようだ

UnityにてファイルのDrag&Dropをしてファイルパスを取得できれば、WindowsやMac, WebPlayer上でファイルを開くのが楽になるかと思った。


以下を見ると、対応していないようだ。

http://answers.unity3d.com/questions/189577/drag-and-drop-files-into-unity3d-window.html

> Am pretty sure that Unity applications do not respond to the WM_DROPFILES windows message, so, no, I don't think you can do that.
elf > symbol table > binding > #define ELF32_ST_BIND(info) ((info) >> 4) > 局所シンボル / 大域シンボル / ...

symbol tableから得られるinfoからbind(binding)が得られる。

http://docs.oracle.com/cd/E19253-01/819-0391/chapter6-79797/index.html

> st_info
シンボルの種類および結び付けられる属性。値と意味のリストを、表 7–18 に示します。次のコードは、値の処理方法を示します。sys/elf.h を参照してください。

```
 #define ELF32_ST_BIND(info)          ((info) >> 4)
```

[表 7–18 ELF シンボルのバインディング、(ELF32_ST_BIND、ELF64_ST_BIND)](http://docs.oracle.com/cd/E19253-01/819-0391/6n2qq2n7p/index.html#chapter6-tbl-21)

> STB_LOCAL
局所シンボル。
STB_GLOBAL
大域シンボル。
elf > symbol > stringの取得? > You should use the first field in "Section Header Table" as the index in section header to obtain the real string from this string section.


Symbolのvalueから実際のstringを取得する方法のサーチ中。

以下のコメントが気になった。

http://stackoverflow.com/questions/12255555/accessing-elf-symbol-table-in-c

>For Name, there is another section which contain all strings. You should use the first field in "Section Header Table" as the index in section header to obtain the real string from this string section. You can find many articles about this with google.

first fieldはおそらく以下のvalueなのだろう。

```bash
Symbol Table Section:  .dynsym
 index    value      size      type bind oth ver shndx          name
   [0]  0x00000000 0x00000000  NOTY LOCL  D    0 UNDEF          
   [1]  0x00025c0c 0x00000000  FUNC GLOB  D    2 UNDEF          .udiv
   [2]  0x00025e00 0x00000140  OBJT WEAK  D    1 .bss           _iob
   [3]  0x00025b24 0x00000000  OBJT GLOB  P    1 .got           _GLOBAL_OFFSET_TABLE_
   [4]  0x00013a44 0x0000001c  FUNC GLOB  D    1 .init          _init
...
```
elf > section > .dynsym > The dynsym is a smaller version of the symtab that only contains global symbols. 


https://blogs.oracle.com/ali/entry/inside_elf_symbol_tables

> .symtab and .dynsym

...

> Sharable objects and dynamic executables usually have 2 distinct symbol tables, one named <font color=red>".symtab"</font>, and the other <font color=red>".dynsym"</font>. 

...

> The <font color=red>dynsym</font> is a smaller version of the <font color=red>symtab</font> that only contains global symbols. The information found in the dynsym is therefore also found in the symtab, while the reverse is not necessarily true.
uim-fep

## 参考

* [fatdog64 「未だ見ぬ fcitx-anthy」を回避して　日本語 : fatdog64 日本語](http://blog.livedoor.jp/hatahatajavq-fatdog64/archives/14739464.html)

## インストール

```bash:
sudo apt-get install -y \
  uim-fep uim-anthy
```

* ubuntu15.10では uim-mozc はまだない。

## Control + Spaceでon/off切り替え

```el:~/.uim
(define default-im-name 'anthy)
(define-key generic-on-key? '("<Control> " "`"))
(define-key generic-off-key? '("<Control> " "`"))
```

## 起動

```bash:~/.bashrc
export XMODIFIERS=@im=uim
```

```bash:uim起動
uim-fep
```

* ctrl+spaceで切り替え、変換候補は ctrl+n,pで切り替え

![fep.png](https://qiita-image-store.s3.amazonaws.com/0/25728/87c704ad-b245-0bd8-fb45-cc85e30dd56b.png)
linux > readelf -s (Symbol table) > NDX: >  Readelf identifies each section by an integer index (=Ndx).


```bash
readelf -s Test.elf | less

Symbol table '.symtab' contains 12323 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000bc0     0 NOTYPE  LOCAL  DEFAULT  ABS $m
     2: 00100000     0 NOTYPE  LOCAL  DEFAULT    4 $a
     3: 00100140     0 NOTYPE  LOCAL  DEFAULT    4 $d
```

上記で出てくるNdxはなにかというと以下の記載を見つけた。

[what-are-the-meanings-of-the-columns-displayed-by-readelf @ SO](http://stackoverflow.com/questions/3065535/what-are-the-meanings-of-the-columns-displayed-by-readelf)
>Readelf identifies each section by an integer index (=Ndx).

上記の例の場合、Name==$aの値を読むには Section No.==4を読むことになりそう。

以下のようなreadelf実行結果例もあり、Section No.==6は現在作業しているファイルでは`RAM rw`に対応していた。

```bash
6202: 009c107c     4 OBJECT  LOCAL  DEFAULT    6 s_sramsize
```
つまりはs_sramsizeは読み書き可能なRAM領域に格納されているLOCAL変数であることが分かる。
Deep Security 9.6 がやってきた！(まずはreadmeから)

こんにちは、ひろかずです。

2015/8/12(米国時間)にDeep Security 9.6 が米国サイトで公開されました。
[Trendmicro Software Download Center](http://downloadcenter.trendmicro.com/index.php?regs=NABU&clk=latest&clkval=4781&lang_loc=1)

今回は基本に則り、[readme](http://docs.trendmicro.com/all/ent/ds/v9.6/en-us/DSM_9.6_readme.txt)から新機能を読み取って行きたいと思います。

※注意※
VMWare等のAWS環境に直接関係のない部分については省略します。
VMWareクラスターの人はゴメンナサイ

#Deep Security Manager
##1.Deep Security Managerの対応OSにRHEL7が追加
9.5sp1でDSAがRHEL7対応していましたが、DSMもRHEL7に対応しました。
Windows Server CoreとRHEL Xen Hyperviserはサポートしませんのでご注意を。

```
Not Supported: 

       Red Hat Enterprise Linux (RHEL) Xen Hypervisor
       Windows Server 2012 Core 
       Windows Server 2008 Core 
       As of Deep Security 9.0, Deep Security Manager is no longer 
          supported on 32-bit versions of the Windows platform.
```

##2.Deep Security Managerのインストール環境
- 現在Deep Security 9.0、9.5または9.5 SP1を稼働させている場合(アップグレード)
- 新規インストールする場合

間もなくEOLを迎える8からのアップグレードはできませんね。

##3.Deep Security Managerのアップグレードの注意点
###3-1.Agentの下位互換
Deep Security Managerは、Agentの下位互換をしますが、9.6へのアップグレードの時点で、Deep Security 9.0より前(要はDeep Security 8以前)のAgentをサポートしません。
AgentがDeep Security 8の場合は、アップグレードパスに注意してください。
###3-2.MSSQL利用時の通信の暗号化
データベースにMSSQLを使用しており、Manager-MSSQL間の通信を暗号化している場合は、`暗号化をOFFにしてから` アップグレードしてください。
アップグレードにおけるManager-MSSQL間の通信を暗号化は、サポートされません。
詳しくは[readme](http://docs.trendmicro.com/all/ent/ds/v9.6/en-us/DSM_9.6_readme.txt)参照。
###3−3.アップグレード中はManager、およびDatabaseが使えません
アップグレードには相応の時間がかかります。
サービス提供時間外に行ってくださいとのことです。
事前にデータベースバックアップを取得し、切り戻しプロセスを確立させてください。
なお、Agentは稼働を続けるので、アップグレード中もAgentを導入しているシステムは保護されます。

##4.新機能！

- Deep Security ManagerのデータベースとしてOracle Databese 12cに対応
- Deep Security Managerのsyslog出力フォーマットとして、IBM QRadar向けのLEEF2.0に対応
- ログインをActive Directoryと同期
大喜びしそうなアカウントが社内に居そうですね。

- レポートにコンピュータグループとインスタンスサイズを追加(AWSのみ)
- オンラインヘルプを自動アップグレード
現在は日本語版のオンラインヘルプは提供されていませんが、10月には`自動更新`されるそうです。
- RelayがManagerのダウンロードセンターにアクセス出来ない時は、Trendmicro Download Centerに取りに行きます

- SAP Protection For Linux
RHELとSuSE環境におけるSAPアダプターと連携するようになったそうです。

#Deep Security Agent
##1.新機能！

- 不正プログラム対策機能のリアルタイムスキャンに CloudLinux 7 が対応しました。
Amazon Linuxはまだ来ないようです。残念。

- 対応プラットフォーム追加
以下プラットフォームが対応追加になりました。

```
Debian 6 & 7
Windows 2012 Server Core
Cloud Linux 7
Oracle Linux 7
SUSE Enterprise Linux 12
```

#所感
readmeを見る限り、個人的には `ログインをActive Directoryと同期` が目を引くくらいですね。
`オンラインヘルプの自動更新` も地味ですが便利だと思います。

実はこっそりDeep Security as a Service (以下、DSaaS)のManagerは既に9.6に切り替わっております。
気になるインタフェースが追加されているので、実際に弄くり回してみるとまだまだ出てきそうです。

今日はここまでにします。
お疲れ様でした。
技術英語 > when curiosity strikes

http://www.tricorderproject.org/about.html#models

> might have access to a small device that can easily be kept close in a pocket or bag, and quickly pulled out <font color=red>when curiosity strikes</font>

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

> strike a good balance between work and play

<hr>

関連して思い出したのは2

> curiosity kills the cat