OmniAICreator/Qiita-1.07M huggingface dataset:
食べ物関係のIT用語

#食べ物関係のIT用語

##android OS
http://gpad.tv/topic/android-os-version-matome/
###マシュマロ
Android 6.0
###KitKat ( キットカット )
Android 4.4〜4.4.4
###Jelly Bean ( ジェリービーン )
Android 4.1〜4.1.2
###Ice Cream Sandwich ( アイスクリームサンドイッチ )
Android 4.0〜4.0.2
###Honeycomb ( ハニカム: 蜂の巣)
Android 3.0
###Gingerbread ( ジンジャーブレッド )
Android 2.3〜2.3.2
###Froyo ( フロヨ : フローズンヨーグルト)
Android 2.2〜2.2.3
###Eclair ( エクレア )
Android 2.0
###Donut ( ドーナッツ )
Android 1.6
###Cupcake ( カップケーキ )
Android 1.5

##その他
###アップル
http://www.apple.com/jp/
###ペアー(洋なし)
https://pear.php.net/manual/ja/about.pear.php
###オレンジパイ
http://www.orangepi.org/
###ラズベリーパイ
https://www.raspberrypi.org/
###メープル
http://kunit.jp/maple/
###ショートケーキ
https://github.com/fusioneng/Shortcake/tree/master/css
###ドーナツ(アンドーナツ)
http://magic3.net/text/tabbrowser-donut.html
###モナカ
https://ja.monaca.io/
###CakePhp
http://cakephp.jp/

http://ameblo.jp/meringue-huwahuwa/entry-11191227040.html
FacebookのOAuthで、e-mailなどが取れない場合（リンクのみ）

http://paiza.hatenablog.com/entry/2015/07/22/2015%E5%B9%B47%E6%9C%889%E6%97%A5%E4%BB%A5%E9%99%8D%E3%81%ABFacebook%E8%AA%8D%E8%A8%BC%E3%81%A7%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%8C%E5%8F%96%E3%82%8C%E3%81%AA%E3%81%84
動物関係のIT用語

#動物関係のIT用語
IT用語の動物園編、的な

##MAC OS
###チーター
Mac OS X 10.0
###ピューマ
Mac OS X 10.1
###ジャガー
Mac OS X 10.2
###ヒョウ(Panther:体毛のベースが黒のヒョウ)
Mac OS X 10.3
###トラ
Mac OS X 10.4
###ヒョウ(Leopard:体毛のベースが黄で、黒の斑点があるヒョウ)
Mac OS X 10.5
###ユキヒョウ
Mac OS X 10.6
###ライオン
Mac OS X 10.7
###マウンテン・ライオン
Mac OS X 10.8

##その他
###イエティ
bootswatchの一種
https://bootswatch.com/yeti/
###ファルコン
phpフレームワーク
https://phalconphp.com/ja/
###タートルSVN
http://tortoisesvn.net/docs/release/TortoiseSVN_ja/index.html
###Cyberduck
http://cyberduck.softonic.jp/mac
###Mantis
http://www.alles.or.jp/~sogabe/mantis/
###grasshopper
http://www.grasshopper3d.com/page/download-1
AppiumでAndroidのTextViewやButtonを指定する方法

自分用メモも含め纏めました。
#AppiumでTextViewやButtonを指定する方法

##find_elementで階層的に指定する場合
Appium Inspectorを用いてUIから選択して行ったらこんな感じで指定できる
`find_element(:xpath, "//android.view.View[1]/android.widget.LinearLayout[1]/android.widget.Button[1]")
`
##idを指定する場合
わざわざ階層的に呼ばなくても、idを持っていたら（@+id/hogeのように指定されていたら)、idから直接指定できる
`find_element(:id, "hoge")`

##TextViewに入力されている文字列から指定する場合
TextViewの内容から引っ張ってきます。
`find_element(:xpath, 'find_element(:xpath, '//android.widget.TextView[@text="ツイート"]')`

##指定したボタンをタップする方法
先ほどの最後に.clickをつけるだけ
`find_element(:id, "button").click`

##TextViewに文字を入力する方法
指定したTextViewに.send_keysをつけて文字列を入力する
`find_element(:id, "textView").send_keys "hoge"`


#アプリのインストール・アンインストール方法
##アプリがそもそもインストールされているか確認する方法
true/falseで値が返されます。
`Android::Driver.driver.app_installed?("com.example.hoge")`
※Appiumの公式にはis_installedと書かれているが、GitHab上のコードを見る限りではapp_installedが正しそう…
(is_installedを使おうとすると「そんなメソッドねーよ」と怒られる）



#その他
少しずつ追加していこうと思ってます
詳解 NewRelic で監視＆性能改善〜その２

# 概要

前回の続きです。
タイトルを変えました。その2ですが、ケース番号は1から始めます。

[詳解 NewRelic で監視＆性能改善〜その１](http://qiita.com/wapa5pow/items/e3ef018af270cc2ad014)
[詳解 NewRelic で監視＆性能改善〜その２](http://qiita.com/wapa5pow/items/0a4132c62d807286af9d)

# ケース1: アプリケーションが正しく動いているのか知りたい

ようするに生存確認です。正しくやろうとすると、一通りのAPIにリクエストを投げてレスポンスを確かめます。
ただ、実際にはそこまでする必要はなくアプリケーションが動いているかどうかを１つの生存確認用のAPIに投げてレスポンスがただしいかどうか確かめればいいと思います。
その際に、どのようなAPIを作るかが大事です。echoサーバのようにただechoを返すのではなくMySQL, Redisなど繋がっているサービスにも軽いクエリをなげるといいです。
その様にすることによりMySQL, Redisの生存確認も同時にすることができます。

NewRelicでは以下で設定できます。

![ping_1.png](https://qiita-image-store.s3.amazonaws.com/0/30079/fe127b99-7cc6-30bd-d9d1-0c319975cd51.png)

設定したあとはAvailabilityでその結果を見ることができます。

![ping_2.png](https://qiita-image-store.s3.amazonaws.com/0/30079/d4a41c82-2ab0-ca58-e6ef-94642cb8c5ae.png)

Alertメールなども設定できるので、設定しておくとシステムダウンの際に素早く気づくことができます。
自分の所属しているチームでは、開発環境が接続できなくなったときなどチャットに通知がとどくので素早く気付き修正することができます。

# ケース2: 世界各国からの応答時間を知りたい

世界展開しているアプリは、各国からの応答時間がきになるものです。
NewRelicではSYNTHETICSを設定することによって以下の地域からの応答時間を調べることができます。
一定時間ごとに送ってくれるます。

![synthetics_1.png](https://qiita-image-store.s3.amazonaws.com/0/30079/93951f1a-40a2-98e4-c7ba-b82103709eb0.png)
![synthetics_2.png](https://qiita-image-store.s3.amazonaws.com/0/30079/5e27e7f1-3bec-ace7-7ac9-75c1a69e502e.png)

# ケース3: 例外が発生したときにそのプレイヤーIDが知りたい

NewRelicでは発生した例外はErrorsで表示されるのですが、自分で設定しない限りはアプリケーション特有の情報は含んでくれません。
例えば、player_idなどユーザを特定できるものが例外とともに記録されていればアプリケーションの管理画面などからそのユーザを検索し、例外のより詳しい状況がわかることができます。

NewRelicで正しく設定すると以下のように見れます。

![custome_attribute.png](https://qiita-image-store.s3.amazonaws.com/0/30079/fe9af4a4-42e1-0b1f-b85d-42c73476caf6.png)

ソースコード上では以下のように設定しています。
共通処理なので、decoratorとかviewの前処理などに仕込めばいい感じにしてくれそうです。(Djangoでのお話)

    # newrelicにplayer_idを追加する
    newrelic.agent.add_custom_parameter('player_id', player.id)

# ケース4: あるAPIを改善したので実際に早くなっているのか確認したい

改善したならば計測して実際に早くなっているか確認しないと意味がないですね。
NewRelicでその辺も確認できます。

![historical_performance.png](https://qiita-image-store.s3.amazonaws.com/0/30079/cbb2b94d-7347-75f6-e23c-e4c0f4a1517f.png)


# 結び

前回、Key Transactions, X-Rayを紹介するといっておりましたが、他のを紹介していたら時間切れになってしまいましたので次回にします。
次回は最初からKey Transactions, X-Rayを紹介します。
AndroidStudio よく使うショートカット


## 特殊キー記号

| 記号 | キー | 名前 | 英名 |
|:----------:|:------------:|:------------|:------------|
| ^ | control | コントロール | UP ARROWHEAD |
| ⌘ | command | コマンド | PLACE OF INTEREST SIGN |
| ⌥ | option | オプション | OPTION KEY |
| ⇧ | shift | シフト | UPWARDS WHITE ARROW |
| ⇪ | caps lock | キャップスロック | -- |
| ⎋ | esc / escape | エスケープ | BROKEN CIRCLE WITH NORTHWEST ARROW |
| ⏎ | return | リターン | LEFTWARDS ARROW WITH HOOK |
| ⌫ | delete | デリート | ERASE TO THE LEFT |
| ⌦ | forward delete | ホワードデリート | ERASE TO THE RIGHT |
| ↖ | home | ホーム | NORTH WEST ARROW |
| ↘ | end | エンド | SOUTH EAST ARROW |
ショートカットの前に、特殊キーのおさらい。
英語の名称で、なんとなく由来がわかりますね。


## ショートカット一覧表示
* AndroidStudio -> [Preferences...] -> "Keymap"



## ショートカット
### 実行

* "Main Menu" -> "Run"

| 名称 | ショートカット | 備考 |
|:-----------|:------------:|:------------|
| Debug | ^ + D | デバッグ実行 |
| Run | ^ + R | 実行 |

### 編集
* "Main Menu" -> "Edit"

| 名称 | ショートカット | 備考 |
|:-----------|:------------:|:------------|
| Undo | ⌘ + Z |
| Redo | ⇧ + ⌘ + Z |
| Cut | ⌘ + X |
| Copy | ⌘ + C |
| Paste | ⌘ + V |
| Find... | ⌘ + F | 文字列検索 |
| Replace... | ⌘ + R | 文字列置換 |
| Find in Path | ⇧ + ⌘ + F |


### 編集アクション
* "Main Menu" -> "Editor Action"

| 名称 | ショートカット | 備考 |
|:-----------|:------------:|:------------|
| Delete Line | ⌘ + ⌫ |

### リファクタ
* "Main Menu" -> "Refactor"

| 名称 | ショートカット | 備考 |
|:-----------|:------------:|:------------|
| Refactor This... | ^ + T |

### コード
* "Main Menu" -> "Code"

| 名称 | ショートカット | 備考 |
|:-----------|:------------:|:------------|
| Reformat Code... | ⌥ + ⌘ + L | インテントのズレを一括して修正 |

## Quick Fix（エラーの修正方法を表示）
| 名称 | ショートカット | 備考 |
|:-----------|:------------:|:------------|
| Quick Fix | ⌥ + ⏎ | エラーの修正方法を表示 |

網羅的に羅列しても覚えられないので、よく使いそうなものだけをピックアップしました。
腱鞘炎になる前に、積極的に使っていこうかと……。

AndroidStudioのQuickFixが秀逸で、提示される候補がきちんと文脈を考えているようで、人間の方が選択を誤らなければ、[候補の提示]->[選択]->[ビルド]で、ビルドが通らなくなるなんてことが、ほとんどなかったです。
Phoenix アプリケーションで Deploy to Heroku ボタンを作る

GitHub で見かける「Deploy to Heroku」ボタンって、ちょっと動作を確認してみたいときなどに便利ですよね。

Phoenix アプリケーションでもこのボタンは設置可能ですので、GitHub に公開した際には是非置いてみてください。

# app.json を作る

Deploy to Heroku ボタンは、リファラーからデプロイする GitHub リポジトリの URL を取得して、そこに含まれる **app.json** という設定ファイルをもとにデプロイするという仕組みで動いています。

この app.json のスキーマは Heroku の以下のサイトで確認可能です。

[app.json Schema | Heroku Dev Center](https://devcenter.heroku.com/articles/app-json-schema)

ほとんどの項目が *Optional* なんですが、キモとなるのは **buildpacks** です。
これはビルドの手順書のようなもので、Elixir/Phoenix の場合は以下の 2つ を**この通りの順番**で記載する必要があります。

```json
{
  ...
  "buildpacks": [
    {
      "url": "https://github.com/HashNuke/heroku-buildpack-elixir.git"
    },
    {
      "url": "https://github.com/gjaldon/heroku-buildpack-phoenix-static.git"
    }
  ]
}
```

その他の情報は必要に応じてご記載ください。

# エンドポイントの設定を調整する

上記の app.json だけでビルドはできるようになるのですが、アプリケーション側のエンドポイント設定が Heroku を考慮できていないため、起動に失敗してしまいます。

具体的には、Port と Host の情報を適切に設定する必要があります。

`config/prod.exs` ファイルを以下のように書き換えましょう。

```prod.exs
config :your_app, YourApp.Endpoint,
  http: [port: System.get_env("PORT")],
  # url: [host: "example.com", port: 80],
  url: [host: System.get_env("URL"), port: 443],
  cache_static_manifest: "priv/static/manifest.json"
```

Phoenix アプリケーションにはデプロイ先の URL を教える必要があります。
HerokuApp の URL は *{{ app_name }}.herokuapp.com* の形式でユーザが自由に決められるのですが、これは環境変数 **URL** から参照可能ですので、こちらを指定するように変えましょう。
あと、Heroku はデフォルトで https なので、ポートも 443 にしておきます。

ちなみに Heroku 以外のデプロイ環境も想定するような場合は、設定ファイルを分けるか、*or* を使うかをする必要があります。

以上で準備は完了です。

# ボタンを置く

README.md に以下の一行を追加すると、Deploy to Heroku ボタンが設定されます。

```md
[![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy)
```

![](https://www.herokucdn.com/deploy/button.png)

# 感想

* URL 設定などが微妙にはまりどころだった
* Heroku は https や WebSocket に対応していて素晴らしい
Rails 4 + PostgreSQL inet型でprefix length付きIPアドレス(192.0.2.1/24)を保存する

Rails 4からActiveRecordがPostgreSQLのinet型に対応し、IPAddr型に自動的に変換してくれるようになった。しかしこのRuby標準のIPAddr型、プレフィックス長付きのIPアドレス(例えば192.0.2.1/24とか2001:db8::1/64とか)だとうまく扱えず、結果としてDBに正しく保存出来ない。

Railsのissueにも随分前からあがっている: https://github.com/rails/rails/issues/14857

が、未だに対応されてない。今やっているプロジェクトでどうしても必要だったので、とりあえずIPAddr型をCIDR表記に対応させるモンキーパッチを書いて対応した。ついでにGem化しておいた。
https://github.com/s2ugimot/ext_ipaddr

書き換えている内容は lib/ext_ipaddr.rb を見て頂ければ分かるのだが、コンストラクタでかなり怪しげな処理をして強引に対応させている。これでActiveRecord経由でのデータ取得や保存はちゃんとできているが、==もoverrideしてデフォルトから挙動を変更しているので、ちょっと複雑な処理に突っ込むと何かおかしくなるかもしれない。
Eclipse Maven で「ネストできません」「srcから除外してください」と出たときの対応方法

Eclipse で Maven を使っていたときに、良くわからないエラーが出て解決した方法を書いておきます。

# エラーの内容と状況

`test/main/java はネストできません、 src　から除外してください`

のようなエラーメッセージ（メモしていないので正確では無い :sweat: ）が出て、プロジェクトに問題がある赤マークがついてしまいます。Eclipseの「問題」ビューに『pom.xmlが最新ではありません「Mavenのプロジェクトの更新」をしてください』のようなメッセージが出るので、プロジェクト選択してサブメニューから「Maven＞プロジェクトの更新」をしてみるのですが、一時的にエラーが消えるものの、pom.xml を更新すると同様のエラーがメッセージが出るようになります。とほほ

ただ、ただ、気持ち悪いです :anger: 

# 解決方法

1. プロジェクトを閉じる
2. プロジェクトを削除する（ただしコンテンツは消さない）
3. インポートから既存のプロジェクトとして取り込む

解決 :exclamation:
アルファベットキーのkeyCode定数(じゃないけど)を定義する

```js
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('').forEach(function (a) {
  window.__defineGetter__('KEY_' + a, function () {
    return a.charCodeAt(0);
  });
});
```

ES6やES7になるともっと簡潔なコードにできるかもしれませんが思い浮かびません(ご教授願います)。
Visual Studioでこのコードを記述すると、ちゃんと解釈してくれてインテリセンスに'KEY_A'～'KEY_Z'が出てきてくれます。
command prompt > ショートカットを実行できるようだ

```txt:動作確認
Windows 8.1 pro (64bit)
```

.exeのツールがあり、その実行は.exeを置いているフォルダでのみ可能だと思い込んでいたが、ショートカットそのものも実行できるようだ。

PortQry.exeというツールを例とする。

- `C:\PortQryV2\` に PortQry.exe の実体を保持
- `C:\Tool\` に PortQry.exeのショートカットを作成

上記の状況での実行例として以下

1. コマンドプロンプトでC:\Toolに移動 (またはエクスプローラから cmd 使用[参考](http://qiita.com/7of9/items/6bac8e1b98b7524218b8))
2. Pを入力
3. Tabを押して、`"PortQry.exe - ショートカット.lnk"`まで入力補完
4. 引数を設定 `"PortQry.exe - ショートカット.lnk" -n 192.168.10.5 -r 135:139`して実行する
[備忘録]Coredataをframeworkに入れる場合のメモ



普段は

    NSManagedObjectModel *nom =  [NSManagedObjectModel mergedModelFromBundles:nil];

と書くが、これは、xcdatamodelファイルがメインのプロジェクトの
リソースにある事、前提（と思う。。。）

Framework上で完結するにはリソースのURLを設定する。

モデルファイルが、HogeModel.xcdatamodelの場合

    NSURL *modelUrl = [NSURL fileURLWithPath:[[NSBundle bundleForClass:self.class] pathForResource:@"HogeModel" ofType:@"mom"]];
    NSManagedObjectModel *nom =  [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl];

（HogeModel.momはHogeModel.xcdatamodelのビルド結果生成される）


また、Framework内のリソースにアクセスする際

    [NSBundle mainBundle]

ではダメで、

Framework上のクラスのリソースとして取得する。

    [NSBundle bundleForClass:self.class]

多分、storyboadやxibも同じ？

TODO ググると拡張子が、"momd"になってる。違いを調べる。。。
iOS8以降はUISearchControllerを使え

TableViewに検索フォームを付ける場合は、UISearchDisplayControllerを実装していましたがiOS8からはUISearchControllerを使えとなってます。

古いプロジェクトを放置しっぱなしだと、この手の新しいAPIで作り変えるのは非常に萎える作業ですが、頑張ってついて行きたいと思います。

UISearchControllerですが、StoryBoardではなく、コードで実装します。
ViewControllerの中で、

```lang:ViewController.m
@property (strong, nonatomic) UISearchController *searchController;
```
とします。次にUISearchControllerをtableViewに追加します。tableViewはStoryboardで設置しておきます。

```lang:ViewController.m
- (void)viewDidLoad
{
    [super viewDidLoad];

    UISearchController *searchController = [[ UISearchController alloc ] initWithSearchResultsController:nil ];
    searchController.searchResultsUpdater = self;
    searchController.hidesNavigationBarDuringPresentation = false;
    searchController.dimsBackgroundDuringPresentation = false;
    searchController.searchBar.searchBarStyle = UISearchBarStyleProminent;
    [searchController.searchBar sizeToFit];
    self.tableView.tableHeaderView = searchController.searchBar;

    self.searchController = searchController;
}
```

```lang:ViewController.swift
override func viewDidLoad() {
    super.viewDidLoad()
        
    searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.dimsBackgroundDuringPresentation = false
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.searchBar.sizeToFit()

}
```

これだけで、表示はできますが、フォームをクリックすると落ちるので、下記を追加

```lang:ViewController.m
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
    
    // tableViewに表示する内容を抽出します。
　　// 入力されたテキストは、searchController.searchBar.text として取り出せます。
    // フィルタ作業ができたら、tableViewをreloadして終わりです

    [self.tableView reloadData];

}
```

各tableViewの中での処理は単にself.searchController.activeがtrueかfalseをみれば、検索結果を表示しているのかそうではないかが判断つきます。

```lang:ViewController.m
if ( self.searchController.active ) {
    // 検索結果表示
}
```
この辺のdelegate処理の話です。

```lang:ViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
```

UISearchDisplayControllerでも似たような感じで処理しますが、呼ばれるのがひとつだけなのでちょっと楽になった感じですね。
そうそう、検索結果を選択して何かしようとする場合は、
`self.searchController.active = false;`
とするのをお忘れなく。
Mac で時報


故あって、Mac で時報を鳴らす事に。
`afplay` を `launchctl` で自動再生させる。

単純なのでステップは二つ。

1. 音を用意する。
2. 設置する。

で、補足として、

- `ffmpeg` のインストール
- プロパティリストの内容について

だけ。


## 1. 音を用意する。

- [効果音　学校のチャイム](http://www1.nhk.or.jp/creative/material/5d/D0002011518_00000.html) （[NHKクリエイティブ・ライブラリー](http://www1.nhk.or.jp/creative/rule.html)）


上記 URL よりダウンロード。`.m4a` でも良いかとも思うが[^1]、`.mp3` に変換して適当な場所に保存。

```
$ ffmpeg -i bigben.mp4 bigben.mp3
```

`ffmpeg` のインストールは後述

[^1]: この場合は拡張子を `.mp4` から、 `.m4a` に手動変更するだけ。

## 2. 設置する。

```
$ mv bigben.mp3 /PATH/TO/SAVE
$ cd /Library/LaunchDaemons
$ sudo ls | grep chime
com.bunzaemon.chime.plist
$ sudo chown -R root com.bunzaemon.chime.plist
$ sudo chmod 0644    com.bunzaemon.chime.plist
```


`com.bunzaemon.chime.plist` の内容は後述。

## `ffmpeg` のインストール

`homebrew` を使って。

- `libvpx` は手元の mac ではコケた。
- yosemite で再度コマンドラインツールのインストールが必要だった。
	- `xcode-select --install` を叩くと GUI へ。

```
$ brew install automake fdk-aac git lame libass libtool libvorbis opus sdl shtool texi2html theora wget x264 xvid yasm libvpx
$ brew install ffmpeg
```


## プロパティリストの内容について

```xml:com.bunzaemon.chime.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>com.bunzaemon.chime</string>
    <key>WorkingDirectory</key>
    <string>/PATH/TO/SAVE</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/afplay</string>
        <string>bigben.mp3</string>
    </array>
    <key>StartCalendarInterval</key>
    <array>
      <dict>
          <key>Hour</key>
          <integer>8</integer>
          <key>Minute</key>
          <integer>30</integer>
          <key>Weekday</key>
          <integer>12345</integer>
      </dict>
      <dict>
          <key>Hour</key>
          <integer>12</integer>
          <key>Minute</key>
          <integer>0</integer>
          <key>Weekday</key>
          <integer>12345</integer>
      </dict>
      <dict>
          <key>Hour</key>
          <integer>17</integer>
          <key>Minute</key>
          <integer>30</integer>
          <key>Weekday</key>
          <integer>12345</integer>
      </dict>
    </array>
</dict>
</plist>
```

- ワーキングディレクトリを `/PATH/TO/SAVE` にしてるので、コマンドラインは、絶対パスが必要無い。
- 平日朝8時30分と、12時0分、そして 5時半にチャイムが鳴る。
	- Weekday の 12345 が月~金を意味する。
- 音量が大きい（小さい）場合は、 `-v` オプションを 0.5 に設定するとか。
- 曲をボレロあたりにすれば、自動スヌーズ付きの、止まらない目覚し時計にもなる。

```
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/afplay</string>
        <string>-v</string>
        <string>0.5</string>
        <string>bigben.mp3</string>
    </array>
```
CentOS 7 インストール記録 4. samba


イントラネット環境下で、mac の launchctl と、共有フォルダの代替を検討するために。


## ACL
ACL(Access Control Lists) を一応確認。

### フォーマット確認
```
$ df -T
```

ACL に対応してる xfs 。

### コマンド確認
```
$ which getfacl
/usr/bin/getfacl
$ which setfacl
/usr/bin/setfacl
```

# samba

```
$ yum update
$ yum list installed | grep samba
```

samba 一式がインストールされている事を確認。

## 設定

```
# mkdir /home/share 
# chmod 777 /home/share 
# cd /etc/samba
# cp smb.conf smb.conf.bak
```

編集後

```
# diff smb.conf smb.conf.bak
66,71c66
< dos charset = CP932
< unix charset = UTF8
< unix extensions = no
< unix password sync = yes
< passwd program = /usr/bin/passwd %u
< passwd chat = *new*password* %n\n *new*password %n\n *succes*fully*
---
> 
94,95c89
< 	workgroup = XXXXXX 
< 	hosts allow = XXX.XXX.XXX.
---
> 	workgroup = MYGROUP
288,292c282,285
< ;[homes]
< ;	comment = Home Directories
< ;	readonly = no
< ;	browseable = no
< ;	writable = yes
---
> [homes]
> 	comment = Home Directories
> 	browseable = no
> 	writable = yes
328,335d320
< 
< [Share]
< 	path = /home/share
< 	writable = yes
< 	create mode = 0777
< 	directory mode = 0777
< 
```

ワークグループとホストは伏せ字に。


## 有効化

```
# systemctl start smb 
# systemctl start nmb 
# systemctl enable smb 
# systemctl enable nmb 
```


```
# systemctl status smb 
```

で確認

### centos 6 では。

```
# /etc/rc.d/init.d/smb start
SMB サービスを起動中:                                      [  OK  ]
# /etc/rc.d/init.d/nmb start
NMB サービスを起動中:                                      [  OK  ]
```

サービスの自動起動

```
# chkconfig smb on
# chkconfig nmb on
```

## samba パスワード設定

ルートのパスワードを設定
ユーザのパスワードを設定

```
# smbpasswd -a root
New SMB password:
Retype new SMB password:
Added user root 
```

```
# smbpasswd -a XXXXXX
New SMB password:
Retype new SMB password:
Added user XXXXXX 
```

しかし、今一パスワード回りが同期してくれない感じなのだが、どうしたもんだろう、、、


## firewalld

firewalld を切る前にもちょこちょこ弄っていたので、 firewalld の備忘として。

### firewall が動いているか。
```
# firewall-cmd --state
running
```

### 今のゾーン
```
# firewall-cmd --get-active-zone
public
  interfaces: eno1
```

### 現在有効なサービス

```
# firewall-cmd --list-services
dhcpv6-client ssh
```

```
# firewall-cmd --add-service=samba
success
# firewall-cmd --permanent --add-service=samba
success
```

```
# getsebool samba_enable_home_dirs
samba_enable_home_dirs –> off 
```

これがOFFになっているとNG。

アクセスを許可する

```
# setsebool -P samba_enable_home_dirs 1 
# setsebool -P samba_export_all_rw 1
```
fswatch と、perl の -x


OS X。

`launchctl` がファイルの監視をすると言っても、存在の有無程度。
ファイルが更新されたかどうかなどの、細やかなチェックは別途考えなきゃならない。

ってんで、 [fswatch](https://github.com/emcrisostomo/fswatch)。
## インストール

brew。

```
$ brew install fswatch
```

## 使い方

```
$ fswatch FILE
```

で FILE が更新されたら、stdout にパスが表示される。

- `-o` を効かせたら、フラグ（1）だけを出力する事が可能。
- `-l` で告知までの待ち時間を指定出来る。
	- 対人では、変更直後に変更を繰替えす様な人に対応する為に、多めに取っとくのが吉か？

## プログラム

仕様上、`launchd` に優しくない。

以前のバージョンは、

```
$ fswatch FILE COMMAND
```

なる構文が可能で、これだと、 .plist の `ProgramArguments` にさくっと記載出来るものの、現在は廃止。

```
$ fswatch -o FILE | xargs -I {} COMMAND
```

を使えとの事。

`ProgramArguments` は、文字通りの引数であって、シェルじゃないから、パイプやらリダイレクションやらは一切効かない。てな訳で、上記の行を、 `.sh` にして、それを読み込むと言う、なんだかなーーな状況になる[^1]。

[^1]: `fswatch-run`  も今一、、、

ぼやいてても仕方ないので自作。


```exec_fswatch.sh
#!bin/sh

fswatch_exe=${HOME}/cmd/homebrew/bin/fswatch
file_path=/PATH/TO/FILE
$fswatch_exe -o -l 10 $file_path | xargs -I {} perl -x $0
exit 0


#!/usr/bin/env perl
print "changed\n" ;
```

perl で実行してみて挙動確認後[^2]、

[^2]: キモの `-x` は、`perldoc perlrun` にて確認を。

```
$ perl -x exec_fswatch.sh
```

モニタ開始。

```
$ sh ./exec_fswatch.sh
```

上手く監視出来てるのを確認したら、 .plist 書いてデーモン化。
顔画像の特徴点抽出で使えそうな学習データセット(随時更新)

研究で顔画像の特徴点抽出( face arrignment )を行うことになったので学習に使えそうなデータセットを紹介したいと思います．（随時更新）

**データセットに期待するもの**
特徴点付与の学習を行うためには，元の顔画像，顔画像の得点の位置が不可欠になります．よってその二つの情報が得られる学習データベースを紹介していきたいと思います．

#Labeled Face Parts in the Wild (LFPW) Dataset

**url**
http://neerajkumar.org/databases/lfpw/

**概要**
特定の環境下で撮影したものではなく画像検索などで検索できそうな画像群です．

**仕様**
csvファイルですがタブ区切りで格納されています．各行以下のように記述されています．
- imgurl
オリジナルの画像のurl
- worker
誰によって付与された特徴点であるか．このデータセットでは三人（worker_0,worker_1,worker_2）によって付与されています．また平均としてaverageという項目もあります．
- position
x,y,x,yの順番で特徴点な座標が列挙されています．

このように複数枚の画像に対して複数人が特徴点の付与を手で行った情報が記述されています．

#おわりに
顔画像の特徴点の付与の方法はたくさんありますが，特定の環境下で飲み効果を発揮するものがほとんどです．なので様々データセットに対応するような学習手法が発見されることを期待しています．
network > TCP/UDP135 > Active Directoryが利用できなくなる。

http://atnetwork.info/tcpip2/tcpip304.html

> 135,137～139,445を閉じる場合の留意事項
...
特に、TCP/UDP135番を遮断すると閉じるとActive Directoryが利用できなくなることがあるため注意が必要です。

security的には135, 137-139, 445などは閉じた方がいいとのこと。
ただし、Active Directoryやファイル共有などを行う際には結局開かないといけないのだろうか。
Rで前後の幅が自由に変更できる移動平均をつくる

# 移動平均を取るときに前後の幅を自由に変更したいが、ある程度のスピードは保証したい

猿みたいにforで移動平均を取ることもできますが、それはあまりに遅い為、なるべくベクトル演算でやります。
とはいえ適当なコードなので、もっと良い移動平均があったらぜひ教えてください。※変数名はくそコードと言われても仕方がないレベルです。
ちなみにNAは無いものとして扱います。（平均を取るときの母数にも含めない）

```r:ma.r
ma.ba <- function(data, lmb=10, lma=10){
  length <- length(data)
  df.t <- ifelse(is.na(data),0,1)
  df.a <- ifelse(is.na(data),0,data)
  df.b <- df.a
  df.c <- df.t
  for(i in 1:lmb){ # before
    df.b <- df.b + c(rep(0,i), df.a[1:(length - i)])
    df.c <- df.c + c(rep(0,i), df.t[1:(length - i)])
  }
  for(i in 1:lma){ # after
    df.b <- df.b + c(df.a[(i + 1):length], rep(0,i))
    df.c <- df.c + c(df.t[(i + 1):length], rep(0,i))
  }
  df.b/df.c
}
```

使用例：

```r:usage.r
df <- data.frame(a=1:20000)
df$a <- ifelse((-1)^df$a==1, NA, df$a)
df$b <- ma.ba(df$a)
df$c <- ma.ba(df$a, 3, 1)
```
![df.png](https://qiita-image-store.s3.amazonaws.com/0/94255/9edd5a99-57b7-61ea-935a-ada8c047d312.png)

NAが混ざっていても安心ですね。
network > ファイル共有 > ポート UDP:137 / UDP:138  TCP:139

http://www.tsc.cskwin.com/products/winwrapper/Personal/NetBIOS/NetBIOS.htm

> Windowsファイル共有ではNetBIOS（UDPの137,138番ポート,TCPの139番ポート）を利用します。これらのポートを制御することによってWindowsファイル共有を制御します。

Windowsファイル共有を有効にするためのその他の設定も記載されている。


該当のポートが開いているかどうかは linuxなら以下で記載している方法で確認。
http://qiita.com/7of9/items/e70588e500894c278ee2
Rのループ内でベクトルの要素を一つ一つ処理した場合の遅さを体感する

# ループ演算とベクトル演算

一般的なプログラミング言語では、次のような構文がよく使用されます。
※例：a_1 = 1, a_2 = 2, ... という数列をつくり、a_1+a_2,a_2+a_3,...という数列を計算する

```csharp:コード断片(C#)
//初期化
int[] a = new a[20000];
for(int i = 0;i < 20000; i++){
    a[i] = i;
}
//計算
int[] b = new b[20000];
for(int i = 0;i < 19999; i++){
    b[i] = a[i] + a[i + 1];
}
```

これを、「愚直に」Rでやった場合には、次のようなソースになります。

```r:loop.r
#初期化
df <- data.frame(a=1:20000)
#計算(aには1でアクセスできる)
for(i in 1:19999){
  df[i,2] <- df[i,1] + df[i+1,1]
}
```
これは結構時間がかかります。
Rでは、配列についてforなどのループを明示的に記入するよりも、ベクトル演算を駆使した方が処理が速くなります。

```r:vector.r
#初期化
df <- data.frame(a=1:20000)
#計算
df$b <- df$a + c(df$a[2:20000],1)
```

ポイントは、
・ベクトル演算は同じ長さでないと行えない
・df\$aは(1列)20000行のベクトル
・df\$a[2:20000]はdf\$aの2行目の要素から20000行目の要素までのベクトル
・df\$a[2:20000]の後ろに要素を一つ追加するためにcを利用する
といったところです。

# 性能比較
性能の比較をするために、次のようなコードを実行してみます。

```r:test.r
df <- data.frame(a=1:20000)
print("for loop test")
date()
for(i in 1:19999){
  df[i,2] <- df[i,1]+df[i+1,1]
}
date()
print("vector test")
df$b <- df$a + c(df$a[2:20000],1)
date()
print("test was over")
```

```r:実行結果
[1] "for loop test"
[1] "Sat Oct 17 17:11:43 2015"
[1] "Sat Oct 17 17:11:45 2015"
[1] "vector test"
[1] "Sat Oct 17 17:11:45 2015"
[1] "test was over"
```
forでループする処理では2秒程度の処理時間がかかっていますが、vectorの場合は1秒未満であることがわかります。(core i5 4300U)
いまは20000個でテストしていますが、100000個になると、forのものは数分応答無し、vectorのものは相変わらず一瞬で応答があります。

ということで、ベクトル演算を有効活用しましょう。
Sassで色を調整する

sassでベースカラーを元に色の変更を行う関数を忘れがちなのでメモ

HSL［色相（Hue）、彩度（Saturation）、輝度（Lightness）］ベース

Photoshop等で使用されるHSB(HSV)［色相（Hue）、彩度（Saturation）、明度（Brightness・Value）］ではない
HSBで色を変換したいときは「[Sassで色空間『HSB』を扱う関数を作った話](http://creator.aainc.co.jp/archives/7447)」で関数を作成されています

# 色相の変更
`adjust-hue($color, $degrees)`
色相環の度数($degrees)を○○degで指定

```scss
// ベースとなる色
$base-color: #79a5e0;

.adjust-hue {
  color: adjust-hue($base-color, 60deg);
}
```

# 彩度の変更
`saturate($color, $amount)`
`desaturate($color, $amount)`
$amountを○○%で指定

```scss
// ベースとなる色
$base-color: #79a5e0;

// 彩度を上げる
.saturate {
  color: saturate($base-color, 15%);
}

// 彩度を下げる
.desaturate {
  color: desaturate($base-color, 15%);
}
```

# 輝度の変更
`lighten($color, $amount)`
`darken($color, $amount)`
$amountを○○%で指定

```scss
// ベースとなる色
$base-color: #999;

// 輝度を上げる
.lighten {
  color: lighten($base-color, 15%);
}

// 輝度を下げる
.darken {
  color: darken($base-color, 15%);
}
```

# 透明度の変更
`rgba($color, $alpha)`

```scss
// ベースとなる色
$base-color: #333;

// rgbaで透明度を変える
.rgba {
  color: rgba($base-color, 0.8);
}
```

# 色の反転
`invert($color)`

```scss
// ベースとなる色
$base-color: #333;

// 色の反転
.invert {
  color: invert($base-color);
}
```

# グレースケールに変更
`grayscale($color)`

```scss
// ベースとなる色
$base-color: #79a5e0;

// グレースケール
.grayscale {
  color: grayscale($base-color);
}
```

# 色相の補色(色相環の反対色)に変更
`complement($color)`

```scss
// ベースとなる色
$base-color: #79a5e0;

// 反対色
.complement {
  color: complement($base-color);
}
```

# 2つのカラーコードの中間色
`mix($color1, $color2, [$weight])`
$weightを○○%で指定

```scss
// ベースとなる色
$base-color1: #fff;
$base-color2: #000;

.mix {
  color: mix(#fff, #000);
}
```

# 作成される色の確認に便利なサイト

「[Sass Color Generator](http://scg.ar-ch.org/)」というサイトが彩度・輝度で変更される色の確認に便利です :smile: 

# 色を扱うサイト

- [0to255](http://www.0to255.com/)
- [Paletton](http://paletton.com/)
- [Material UI Colors](http://www.materialui.co/)
- [HUE/360](http://hue360.herokuapp.com/)
- [色見本と配色サイト](http://www.color-sample.com/)
- [Color-hex](http://www.color-hex.com/)
Vagrantで作成したサイトをスマホで確認する方法

#Vagrantで作成したサイトをスマホで確認する方法

##Vagrantファイルの編集
```lang:Vagrant
下記をコメントアウトから外す
config.vm.network "public_network"
```

##仮想環境の起動
```lang:
vagrant up
```

そのあとに、こんなのを聞かれるのでWi-Fiを選ぶ

```lang:
==> default: Available bridged network interfaces:
1) en0: Wi-Fi (AirPort)
2) en1: Thunderbolt 1
3) en2: Thunderbolt 2
4) bridge0
5) p2p0
6) awdl0
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
    default: Which interface should the network bridge to? 1
```



##仮想環境にログイン
```lang:
vagrant ssh
ifconfig
```
`ifconfig`するとこんなのが出てくる

```lang:
vagrant ssh
eth0      Link encap:Ethernet  HWaddr 08:00:27:C9:39:9E  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fec9:399e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:569 errors:0 dropped:0 overruns:0 frame:0
          TX packets:349 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:61343 (59.9 KiB)  TX bytes:49460 (48.3 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:DB:43:3A  
          inet addr:192.168.33.10  Bcast:192.168.33.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fedb:433a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:800 (800.0 b)  TX bytes:1945 (1.8 KiB)

eth2      Link encap:Ethernet  HWaddr 08:00:27:35:77:36  
          inet addr:192.168.11.13  Bcast:192.168.11.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe35:7736/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:53 errors:0 dropped:0 overruns:0 frame:0
          TX packets:43 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4731 (4.6 KiB)  TX bytes:3227 (3.1 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:95 (95.0 b)  TX bytes:95 (95.0 b)
```

##スマホでアクセス
`ifconfig`で表示されたやつの`inet addr`のIPをスマホでアクセスする
どれかにアクセスすれば表示される
拡張子の関連付け：ファイル名ごとにモードを設定する


Emacsは拡張子の関連付けのように、メジャーモード(major mode)と呼ばれる函数を起動すると、適した編集機能を利用できるように設計されてる。

`auto-mode-alist`でファイル名のパターンとメジャーモードを紐付けてやると、ファイルを開いたときに自動で判別してモードが起動されるようになる。

## 拡張子を指定する

「ファイル名の最後に特定の拡張子がついてたら」マッチする正規表現を書く。

```init.el
(add-to-list 'auto-mode-alist '("\\.rb\\'" . enh-ruby-mode))
(add-to-list 'auto-mode-alist '("\\.rake\\'" . enh-ruby-mode))
(add-to-list 'auto-mode-alist '("\\.m\\(ark\\)?do?wn\\'" . gfm-mode))
```

ありがちなミスとして、正規表現の最後は`$`ではなく`\\'`にする。

## ファイル名を指定する

「`/`の直後に期待する文字列で終る」ファイル名にマッチする正規表現を書く。

```init.el
(add-to-list 'auto-mode-alist '("/\\.jshintrc\\'" . js-mode))
(add-to-list 'auto-mode-alist '("/\\.jshintrc\\'" . js-mode))
```

## あなたがメジャーモードの作者なら

応用編。

```maruo.el
;;;###autoload
(define-derived-mode maruo-macro-mode prog-mode "[秀]macro"
  "Major mode for editing Maruo macro.")

;;;###autoload
(add-to-list 'auto-mode-alist '("\\.mac\\'" . maruo-macro-mode))
```

上の行に`;;;###autoload`を書いてやることで、利用者の`init.el`にわざわざ設定を書かせなくても自動であなたの作ったメジャーモードでファイル編集できるようになる。超べんり！

ちなみに私は[pixiv-novel-modeを作った](http://inside.pixiv.net/entry/2014/12/19/230810)の記事を書いたときに知りました。
fluentd で UltraMonkey-L7 のアクセスログを投げるための設定

## はじめに
Layer-7 ロードバランサ [UltraMonkey-L7](https://osdn.jp/projects/ultramonkey-l7/) のアクセスログを fluentd で外に投げる時の設定です．

## ログのフォーマットについて

UltraMonkey-L7 ではアクセスログ（どのクライアントから受け付けて，どの仮想サーバで受け付けて，どのリアルサーバに振ったか）を記録することができます．
下記の形式で記録されます．

`2015/10/18 07:52:10 [INFO] [ [AccessLog] (CL)192.168.0.1:1699 --> 192.168.0.116:8080 --UM-- 192.168.0.116:38320 --> (RS-DST)192.168.0.116:80 ] 0x7f7da77eb700`

それぞれ

`日時 [ログレベル] [ [AccessLog] (CL)クライアントエンドポイント --> 仮想サーバエンドポイント --UM-- 仮想サーバ内部エンドポイント --> (RS-DST)リアルサーバエンドポイント ] スレッドID`

これを fluentd で拾います．

## fluentd の設定

ログに色々と出ますが，ログレベル，AccessLog の文字列，スレッド ID は拾う必要はありません．
タイムゾーンは JST（+0900）を想定．異なる場合は timezone の値を適切に設定してください．

```text
<source> 
  type tail 
  path /var/log/l7vs/access_log 
  pos_file /var/log/td-agent/l7vs.access_log.pos 
  tag ultramonkeyl7.accesslog 
  format /(?<time>[^ ]\S+ \S+).*\(CL\)(?<client_ip>[^ ]\S+):(?<client_port>[^ ]\S+) --> (?<virtual_service>[^ ]\S+) --UM-- (?<vs_inner_ep>[^ ]\S+) --> \(RS-DST\)(?<realserver_ep>[^ ]\S+) \].*$/  
  time_format %Y/%m/%d %H:%M:%S 
  timezone +0900
</source>
```

これで下記のように投げられます．

| key | value |
|-----------|------------|
| time | 2015/10/18 07:52:10 +0900 |
| client_ip | 192.168.0.1 |
| client_port | 1699 |
| virtual_service | 192.168.0.116:8080 |
| vs_inner_ep | 192.168.0.116:38320 |
| realserver_ep | 192.168.0.119:80 |

次回はこれを Elasticsearch + Kibana で可視化してみます．
Spring Tool Suite(STS)をMacへ導入

# はじめに
Seasar2の終了もひがさんから宣言されたことだし、Spring frameworkへ移行しようと思う。
IntelliJはライセンス持ってないのでパス
Eclipseにプラグインを入れてもいいんだけど、あまり評判がよろしくないので
STS本体のインストールをすることにしたのでメモ。

# ダウンロード
https://spring.io/tools/sts
ここからダウンロード。
完了したら解凍する。おしまい。

# セットアップ
## ワークスペースの作成
初回起動時にはワークスペースの作成が必要。
初期パスで問題なければそのままOKを選択すればよい。
どこか指定したければ適当に選択する。

## 日本語化
STSは結局のところEclipseなので、日本語化はPleiadesで可能。
http://mergedoc.osdn.jp/
ここからPleiadesプラグインをダウンロードして解凍する。

STSのインストール先をFinderで開き、STS.appを右クリック。
「パッケージの内容を表示」を選択し、
Contents→Eclipseを開く。
ここにPleiades内のfeatureとpluginをコピーする。

同じディレクトリ内にあるSTS.iniに以下の1行を追加
> -javaagent:../Eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

これでSTSを起動すれば日本語化されるはず。
雑感 > タイトルだけでは何が書いているか分からない記事のストックは新聞を取っておくのと同じかもしれない

ふと思った雑感。

過去に自分がストックしたもので8割り程度はタイトルだけでは何が書かれているのか分からないものだ。そういうストックはほとんど再読しなくなっている。

一方で、タイトルがしっかり書かれている記事はストック一覧からタイトルにざっとを目を通して、その時に必要な情報だと分かれば再読をしている。

タイトルだけで内容（自分がストックしたいと思った理由）を引き出せない記事のストックは新聞を取っておくのと同じかもしれない。

2015年10月10日の新聞。10月11日の新聞。10月12日の新聞...というように新聞のストックはたまると、自分が情報が欲しい時にどの日の新聞を読めばいいのか分からない。結局、すぐに引き出せない新聞はストックしている意味がなく、探しものをする時の障害にもなる。

もちろん、その中で、ふとした時に読み直したいものを含んでいる記事はあるかもしれない。ただ、そういうストックが300を越したあたりから、ふとした時に読みたい記事を探すのが難しくなっている。

一番いいのは、新聞(記事)の切り抜きを作って自分が使いやすいタイトル付きの記事にすることだが、記事の切り抜きを作ることは元記事に対してどうなのだろう、という疑問を持っている。

限定公開の自分だけの切り抜き記事を作るのが無難なのかもしれない。
技術英語 > first among equals > A person or position that is formally equivalent to others in a group, but is superior in some attribute.

LOEを聞いていてひっかかったフレーズ。

http://loe.org/shows/shows.html?programID=12-P13-00004
>  it's first among equals. 

http://ejje.weblio.jp/content/first+among+equals
> (idiomatic) A person or position that is formally equivalent to others in a group, but is superior in some attribute.

http://eow.alc.co.jp/search?q=first+among+equals&ref=sa
> 同輩中の首席［代表者・リーダー］

上記のweblioとalcを読んで自分なりの理解では、「同じ能力を持つ集団の中で(ある特定の分野で)一番」というようなニュアンスだと思う。
ResolumeでSpout2を使用する

*Resolume 5 からは標準でSpoutがサポートされました！
※アクティブなSpoutSenderが存在する場合、**Sources**タブの**Spout**にSenderの名前が表示されます。*

## Spout2のダウンロード
http://spout.zeal.co/
Downloadより、SpoutSetup_V2.xxx.zipをダウンロードした後、インストール

Spout2フォルダがプログラムフォルダ内に生成される

## SpoutPanelアプリのコピー
Spout2¥SPOUTPANEL¥**SpoutPanel.exe**
を
プログラムフォルダ内の
**Resolume Arena x.x.x** フォルダ内にコピーする

## プラグインのコピー
Spout2¥FFGL¥**SpoutReceiver2.dll**
Spout2¥FFGL¥**SpoutSender2.dll**
を
Resolume Arena x.x.x¥plugins¥**vfx** フォルダ内にコピーする

## Resolumeの起動
### 受信
1. **Sources**タブの**FFGL Sources**から**SpoutReceiver2**を選択し、使用するレイヤーへドラッグ&ドロップ
![ResolumeSpout000.png](https://qiita-image-store.s3.amazonaws.com/0/35267/fa8f7a39-b7e3-05a7-032f-53ab4c214967.png)


2. **Clip**タブの**Parameters**で**SenderName**を入力し、**Update**を押すか、**Select**を押して、SpoutSenderを選択する
![ResolumeSpout001.png](https://qiita-image-store.s3.amazonaws.com/0/35267/f4e74b47-2539-4dc4-b842-cf280f7f809b.png)

### 送信
1. **Effects**タブの**SpoutSender2**を**Composition**にドラッグ&ドロップ
![ResolumeSpout004.png](https://qiita-image-store.s3.amazonaws.com/0/35267/d8b7e52e-e99d-e493-7efb-707c9337c5ba.png)



2. **SpoutSender2**から、任意の**Sender Name**を入力し、**Update**を押す.
![ResolumeSpout005.png](https://qiita-image-store.s3.amazonaws.com/0/35267/46325c5d-8912-16be-46c1-1f0d7272198b.png)
C++11プログラマが知っておくべき スレッドセーフなクラス構築


c++11 からマルチスレッドに関する標準ライブラリが本格的に整備されました。
マルチスレッドセーフなクラスを実装する方法は様々ですが、
「とりあえずこれだけ抑えておけ」的なクラス宣言サンプルを紹介します。



```ThreadSafe/SomeClass.cpp
#include <mutex>

// 任意のスレッドから new / delete / 全てのメンバ関数　の呼び出しが可能な
// スレッドセーフ・クラスの実装サンプル
class   SomeClass
{
    int Value;
    int Cnt;

	/*
		std::recursive_mutexクラスは
		std::mutex とは違って
		同一スレッドからの再帰的なロック取得を許可します。
	*/
	std::recursive_mutex _mutex;
	inline  std::unique_lock<std::recursive_mutex> Locker()
	{
		return  std::unique_lock<std::recursive_mutex>( _mutex );
	}

public:
	int	IncCnt()
	{
        std::unique_lock<std::recursive_mutex> locker = Locker();
		++Cnt;
		return	Cnt;
	}

    int GetValue()
    {
        std::unique_lock<std::recursive_mutex> locker = Locker();
		IncCnt();
        return  Value;
    }

    void SetValue( int v )
    {
        std::unique_lock<std::recursive_mutex> locker = Locker();
		IncCnt();
        Value = v;
    }

    SomeClass()
    {
		// コンストラクタでの排他制御操作は不要です。
		// コンストラクタで構築中のオブジェクトには、
		// 他スレッドから並行アクセスする手段が存在しないため、
		// コンストラクタ内処理が非staticメンバ変数への
		// アクセスのみならば排他制御の必然性がありません。
		Cnt = 0;
        SetValue(0);
    }
};

```


unique_lockテンプレートクラスは、std::mutex の lock() / unlock() を
コンストトラクタとデストラクタで確実に呼び出すための標準クラスです。

このサンプルではstd::mutexではなく、std::recursive_mutex を使用しています。
std::recursive_mutex は異なるスレッド間で使用するクラスメンバ変数の
Read/Writeを排他制御するためのクラスです。
std::mutexとの違いは、「同一スレッドで既にロックされている場合、そのまま通過させる」
という点です。

なぜ std::mutex を使わなかったのでしょうか？
ここでは、SomeClass::SetValue()を見てみましょう。

```
    void SetValue( int v )
    {
        std::unique_lock<std::recursive_mutex> locker = Locker();
		IncCnt();
        Value = v;
    }
```

SetValue()突入直後に recursive_mutex でlockしています。
自身のメンバ関数 IncCnt() を呼び出し後、
Valueの値をSetしています。

```
	int	IncCnt()
	{
        std::unique_lock<std::recursive_mutex> locker = Locker();
		++Cnt;
		return	Cnt;
	}
```

::IncCnt() はユーザに公開するpublicメンバ関数のため
当然、::SetValue() の突入直後も Locker() でロックしてます。
もし std::mutex を使っていた場合、既にロックされているため
ここで無限待機に陥ってしまいます。
また「正常無限待機」のため、デバッガなどでも捕捉しにくいです。


「複数スレッド間 排他制御だけをしたい」という当初の目的を達成したい場合、
std::recursive_mutex　のほうが使い勝手が良いのです。
ただし、「同一スレッドチェック」が挿入されている分、
std::mutex よりも若干のオーバーヘッドがあります。

https://springrts.com/phpbb/viewtopic.php?t=32966


新規に、スレッドセーフなクラスを確実に手っ取り早く作りたい場合は
とりあえずstd::recursive_mutex を使用しておいて、
どうしても最適化が必要な場合のみ、後からstd::mutex に切り替えるといった
手法が無難かもしれません。
React の Context を使って Flux を実装する


## 何の目的で使うか

ある親の要素以下では、子供はある特定の親(おそらくは根)に依存した特定の this.context の状態を持てる機能がContextである。

Reactでは要素の受け渡しにひたすら子へリレーする方法がメジャーだが、mixinで必要なプロパティはユーザーからは隠したい事が多い。そこでcontextを使う。

注意点として、これはReactのフレームワーク実装者やmixin提供者に必要な知識であって、一般的なReactアプリケーションの中でContextを使うのは複雑すぎるので個人的には推奨しない。Reactとしてもundocumetedである。

参考: [React.js: Communication between Components with ContextsJScrambler Blog](https://blog.jscrambler.com/react-js-communication-between-components-with-contexts/ "React.js: Communication between Components with ContextsJScrambler Blog")

## 概要

1. 親で static childContextTypes = {...} と getChildContext() を実装する
2. 子で static contextTypes = {...} を実装する
3. 子で this.context は getChildContext の結果を参照できる

## 最小コード例

```js
import React from 'react';
import Dom from 'react-dom/server';

class Child extends React.Component {
  static get contextTypes() {
    return {a: React.PropTypes.any};
  }

  render() {
    return <span>{this.context.a}</span>;
  }
}

class Parent extends React.Component {
  static get childContextTypes() {
    return {a: React.PropTypes.any};
  }

  getChildContext() {
    return {a: 1};
  }

  render() {
    return <Child/>;
  }
}

const ret = Dom.renderToString(<Parent/>);
console.log(ret); // <span data-reactid=".1rrwza5woao" data-react-checksum="1038880381">1</span>
```

a = 1 としてちゃんと描画されている。

注意点として、子と親の contextTypes は直感に反して「型を明記するのにあると便利」ではなく「必須」である。ここがpropTypesと大きく異なる。

## Flux を実装する

ある親以下の要素の以下では同一のEventEmitter への参照を持ちたい

Ardaでやってる dispatch mixin と同等の実装

```js
// context
import React from 'react';
import Dom from 'react-dom';
import {EventEmitter} from 'events';

const SharedTypes = {emitter: React.PropTypes.any};

class Provider extends React.Component {
  static get childContextTypes() {
    return SharedTypes;
  }

  getChildContext() {
    return {emitter: this.props.emitter};　
  }　
}

class DispatchableComponent extends React.Component {
  static get contextTypes() {
    return SharedTypes;
  }
  dispatch(...args) {
    return this.context.emitter.emit(...args);
  }
}

// Usage
class App extends Provider {
  render() {
    return (<Content {...this.props.childState} />);
  }
}

class Content extends DispatchableComponent {
  render() {
    return (
      <span
        onClick={() => this.dispatch('foo')}
      >
      {this.props.count}
      </span>
    );
  }
}

const emitter = new EventEmitter();
function render(state) {
  Dom.render(<App emitter={emitter} childState={state}/>, document.body);
}

// flux loop の Dispatcher 相当
const state = {count: 1};
emitter.on('foo', () => {
  // 何か操作する
  state.count += 1;
  // 再描画
  render(state);
});
render(state);
```

Emitterとdispatchの関係、dispatchの実装の中身、ReactとEmitterの関係を隠蔽できた。後は state と emitter のロジックを組み立てる実装、stateとReactElementの関係を別に記述して開発すれば良い。
Windows7で起動時のパスワード入力を省略する

# Windows7で起動時のパスワード入力を省略する
展示などに使うPCの設定になど

#### 1.「スタート」> 「すべてのプログラム」 > 「アクセサリ」 > 「ファイル名を指定して実行」の順にクリック

#### 2.名前 ボックスに 半角文字で **control userpasswords2** と入力し、OKをクリック

#### 3.ユーザーアカウントが表示されるので、「ユーザー」タブをクリックし、自動ログオンしたいユーザー名をクリック。「ユーザーがこのコンピュータを使うには、ユーザー名とパスワードの入力が必要」のチェックを外し、「OK」をクリックする。

#### 4.「自動ログオン」が表示される。「パスワード」と「パスワードの確認入力」にログイン時に使用するパスワードを入力し、「OK」をクリック。


(参考記事)
http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=012586
Karma で XHR で Binary File 読み込む時の問題 / TypeScript による Alembic の読み込み 2

#前回
[TypeScript による Alembic の読み込み 1](http://qiita.com/wokia/items/4c6e3942d5cdaa3b97b4)

#2015/10/21 追記
下記に、先頭部分だけ化けているという様な事を書いているが、実際には最上位ビットがたっている全ての byte が化ける模様. 下記に、自分がとった対応方法を記載した.
[Karma で XHR で Binary File を読み込む Unit Test を書く / TypeScript による Alembic の読み込み 3](http://qiita.com/wokia/items/28be250ad80e792ad937)

#読み込んだ Binary Data が化ける問題
前回最後に書いた、XMLHttpRequest で読み込んだ Binary Data の先頭部分が化ける、という問題は解決. 原因は予想通り Karma の Web-Server にあった.

#Karma 環境で問題の再現
GitHub に、自分の環境で発生した問題を再現するコードを上げた.
[xmlhttprequest-data-corrupt](https://github.com/wokia/xmlhttprequest-data-corrupt)

このテストをそのまま CI にも投げたところ、OS や Browser に関係なく再現した. どの環境でも、全く同じ値になって読み込まれている. 先頭の 1 byte が 0x80 で、それを全て 0 で埋めた 16 bytes のデータを XMLHttpRequest で読み込み、それを Uint8Array に入れて出力したのが下記.
```
Uint8Array{0: 239, 1: 191, 2: 189, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0}
```

#Karma Web-Server が怪しい
OS が変わっても、Browser が変わっても再現するという状況から、読み込んだデータとして化けた値を Web-Server から渡されているんだろうと想像 (で、前回の記事にも追記した). なので、他の Web-Server 環境で検証を行う事にした.

#検証方法
XMLHttpRequest は file プロトコル環境下では使えないらしい. かといって、この検証のためだけにローカル環境に Web-Server を入れるのは嫌だ.

GitHub には、Repository 毎に Web Page を公開できる GitHub Pages というものがある. 今回はこれを使ってみた. 作り方は、下記の Help の中にある、Project Pages を参照.
https://help.github.com/articles/user-organization-and-project-pages/

#検証結果
で、早速上記の Repository に検証用の Page を作ってみた結果が下記.
[Verification page](http://wokia.github.io/xmlhttprequest-data-corrupt/)

とても質素…. そこは今回は問題ではなく、**正しく読めている !!** 事が重要. という訳で、原因は Karma の Web-Server だった…

一応、検証に使った html の内容を下記に書いておく.

```html:index.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Verification page</title>
		<script type="text/javascript">
			function readBinFile(filename, elementId) {
				var request = new XMLHttpRequest();

				request.open('GET', filename);

				request.responseType = 'arraybuffer';
				request.addEventListener('loadend', function () {
					if (request.status != 200) {
						return ;
					}

					var content = (new Uint8Array(request.response)).toString();

					var element = document.getElementById(elementId);
					element.appendChild(document.createTextNode(content));
				});

				request.overrideMimeType('application/octet-stream');
				request.send();
			}

			function main() {
				readBinFile('0x7f.bin', '0x7F');
				readBinFile('0x80.bin', '0x80');
			}
		</script>
	</head>
	<body onload='main();'>
		<h1>Verification page</h1>
		<hr />
		<p>
			<h2>0x7F.bin</h2>
			<h3>ORIGINAL</h3>
			<div>[ 0x7F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]</div>
			<h3>READED</h3>
			<div id='0x7F'></div>
		</p>
		<p>
			<h2>0x80.bin</h2>
			<h3>ORIGINAL</h3>
			<div>[ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]</div>
			<h3>READED</h3>
			<div id='0x80'></div>
		</p>
	</body>
</html>
```

#とはいえ
Unit Test 環境はなくせない… 特に今やっている特定のファイルフォーマットの読み込み処理なんて、Unit Test がないとやってられない.

とりあえず、Karma で動いている事を判別して、最低限の回避コードを仕込む事で逃げられないかを検討中…. 何か他に良い方法があったら教えて下さい.

今回、Alembic 関係ない.名前を失敗したなー

[Karma で XHR で Binary File を読み込む Unit Test を書く / TypeScript による Alembic の読み込み 3](http://qiita.com/wokia/items/28be250ad80e792ad937)
Swift1.0〜2.0 タッチイベント (touchesBegan, touchesMoved, touchesEndedなど) 処理の変遷

## 変遷1
// Swift 1.0
`touches: NSSet`

// Swift 1.2
`touches: Set<NSObject>`

// Swift 2.0
`touches: Set<UITouch>`


## 変遷2
// Swift 2.0
UIEventの最後に?を追加


## コード
```swift:Swift1.0
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { }
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { }
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) { }
```

```swift:Swift1.2
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { }
override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) { }
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { }
```

```swift:Swift2.0
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { }
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { }
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { }
```
CaffeをOSX10.11にmacports+anacondaでインストール

# Caffe on OSX10.11 with macports+anaconda

CaffeをAirMacにインストール．GPUはないのでCPUモードのみ．
検索したところ，homebrewの情報は見つかっても
macports+anacondaの組み合わせの情報は見つからなかったので，
参考までにメモ．

注意：結局うまくいかず．anacondaのpythonが参照するライブラリとmacportsのpythonが参照するライブラリが競合してだめ．anacondaを使わずにmacportsだけならうまくいく.
[macportsでcaffe for OSX10.11](http://qiita.com/tttamaki/items/5d55fe057ef815f31012)を参照．



## install

### anaconda

Anaconda-2.3.0-MacOSX-x86_64.pkgを`$(HOME)/anaconda`にインストール．
（これはpython27用）

```sh:condaでパッケージのインストール
conda install boost cython numpy scipy scikit-image matplotlib ipython h5py networkx nose pandas python-dateutil protobuf python-gflags pyyaml pillow six
```

condaにleveldbがないのでpipでインストール

```sh:condaのpipでインストール
pip install leveldb
```


### macports

MacPorts-2.3.4-10.11-ElCapitan.pkgを`/opt/local/`にインストール．

```sh:macportsでパッケージのインストール
port install boost +python27
port install opencv +python27 +eigen
port install boost protobuf-c protobuf-cpp google-glog gflags hdf5 leveldb snappy lmdb 
```


### caffe

```sh:
git clone https://github.com/BVLC/caffe.git
cd caffe
cp Makefile.config.example Makefile.config
```

ここでMakefile.configを書き換え．

```sh:Makefile.configの変更点
CPU_ONLY := 1 # airmacなので

BLAS := atlas # 簡単にベタなatlas

# home以下にanacondaをいれたので
ANACONDA_HOME := $(HOME)/anaconda
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
		 $(ANACONDA_HOME)/include/python2.7 \
		 $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
PYTHON_LIB := $(ANACONDA_HOME)/lib

# macportsのライブラリは/opt/local/にあるのでそれを先に
INCLUDE_DIRS := /opt/local/include $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := /opt/local/lib $(PYTHON_LIB) /usr/local/lib /usr/lib

# opencvのリンクのために
USE_PKG_CONFIG := 1
```

それからmake．

```sh:
make all
make test
make runtest
```

## ハマったところ

最初はMakefile.configのLIBRARY_DIRSで`/opt/local/lib`を`$(PYTHON_LIB)`の後に書いていた．

するといつまでもこのエラーが消えない．

```sh:エラーメッセージ
$ make runtest
.build_release/tools/caffe
dyld: Library not loaded: @rpath/./libhdf5.10.dylib
  Referenced from: /*********/caffe/.build_release/tools/caffe
  Reason: image not found
make: *** [runtest] Trace/BPT trap: 5
```
似たようなエラーが見つかるが
- [PyCaffe import failing "Library not loaded ... Reason: image not found #2720](https://github.com/BVLC/caffe/issues/2720)
役に立たず．

結局，anacondaのライブラリを先に読みに行っていたので，
macportsのhdf5を見つけられずに失敗していた．

macportsをanacondaよりも先にLIBRARY_DIRSに書けばOK．


## その後：失敗

結局，pythonライブラリが競合してダメ．
[import pycaffe in local Mac OS 10.9 reports "segmentation fault: 11" #591](https://github.com/BVLC/caffe/issues/591)と同じ問題が生じる．
anacondaを使わずにmacportsだけならうまくいく.
[macportsでcaffe for OSX10.11](http://qiita.com/tttamaki/items/5d55fe057ef815f31012)を参照．
点構造体に配列っぽくアクセスする

コードを書いているとふとした必要から下記のような構造体を作ることは多いと思います。

```cpp
struct Point {
  int x;
  int y;
  int z;
}
```

```cpp:使用例
int main(void){
    
    Point p;
    p.x = 100;
    p.y = 200;
    p.z = 300;
    
    cout << "p = (" << p.x << ", " << p.y << ", " << p.z << ")\n";
}
```

```:出力
p = (100, 200, 300)
```

このような構造体を使っているとしばしば `p[0], p[1], p[2]` のように配列っぽく使いたくなることがあります。そのような場合には下記のオペレータを追加するとできます。

```cpp
struct Point {
    int x;
    int y;
    int z;

    // x のアドレスを基準にしたインデックス位置の参照を返す
    int& operator[] (int index) { return *(&x + index); }
};
```

```cpp:使用例
int main(void){
    
    Point p;
    p.x = 100;
    p.y = 200;
    p.z = 300;
    
    cout << "p = (" << p.x << ", " << p.y << ", " << p.z << ")\n";

    p[0] = 10;
    p[1] = 20;
    p[2] = 30;
    cout << "p = (" << p[0] << ", " << p[1] << ", " << p[2] << ")\n";
}
```

```:出力
p = (100, 200, 300)
p = (10, 20, 30)
```

オペレータを追加するのが面倒 or 外部ライブラリのためできない場合には下記のようにもできます。

```cpp:使用例
int main(void){
    
    Point p;

    int* p2 = &p.x;
    p2[0] = 10;
    p2[1] = 20;
    p2[2] = 30;

    cout << "p = (" << p.x << ", " << p.y << ", " << p.z << ")\n";
}
```


```:出力
p = (10, 20, 30)
```
OSX El CapitanにアップデートしたらApp Storeに繋がらなくなった

今日yosemiteからEl Capitanにアップデートしたら、CPU100%張り付き＆App Store開けない事象が発生。

以下対応したら解決したのでメモします。

# 日付と時刻の設定
MAC画面右上の時刻をクリックし「"日付と時刻"環境設定を開く」をクリック。
ここでタイムゾーンがアメリカになっていたので、アジアに変更。
※アップデート時に設定が変わった？ものと思われます。

# keychainの設定変更
以下の手順で証明書を一時的に信頼して、戻す。
1. 「Keychain Access.app」を開く
2. システムルートの証明書を開く
3. Verisign、Globalsignの証明を「常に信頼する」で確定する
4. すぐに「システムデフォルトを使用」に戻す
5. 再起動

これでApp Storeにも繋がり、CPU使用率も下がりました。

他にもしなければならないことがありそうですが、一旦静観です。