OmniAICreator/Qiita-1.07M huggingface dataset:
nvm自体のバージョンを上げる


最近 iojsが3.0.0にバージョンアップしましたね
>昨日8/5のニュースです。 [JavaScriptプラットフォームの最新版「io.js 3.0.0」がリリース](http://codezine.jp/article/detail/8894)

さっそくiojs3.0.0を入れてみようと思って`nvm ls-remote`したらリストになかったので、そういえばnvm自体のバージョンが古かったなと思い、アップデートしてみました。

## nvm

Node.jsのパッケージマネージャーであるnvm。

公式リポジトリはこちらです。 https://github.com/creationix/nvm

元某社CTOさまのnodebrewもいいんですけど、最初にnvmに触れたのでこっちを使ってます。

ちなみに入ってたバージョンは0.21.0

```
$ nvm --version
0.21.0
```

`ls-remote`で取れるリストにiojsが無いです笑

```
$ nvm ls-remote
v0.1.14
・
省略
・
v0.12.6
v0.12.7
```

こんな感じで0.12系は最新を取ってきてくれます。

## `nvm自体`をアップデート

以前私が書いた記事ではnvmをgit経由でインストールしていました。
>[いまアツいJavaScript！ゼロから始めるNode.js入門〜5分で環境構築編〜](http://liginc.co.jp/web/programming/node-js/85318)

`~/.nvm`フォルダがgitリポジトリになってるので`git pull`で最新にして`~/.nvm/nvm.sh`を適用させます。

```
$ cd ~/.nvm
$ git pull origin master
$ source ~/.nvm/nvm.sh
```

これでおkです。

```
$ nvm --version
0.25.4
```

バージョンが上がってますね！

```
$ nvm ls-remote
v0.1.14
・
省略
・
iojs-v2.5.0
iojs-v3.0.0
```
こんな感じでiojsもリストに入ってきました。

## おまけ iojs3のインストール

インストールします。

```
$ nvm install iojs-v3
$ node -v
v3.0.0
```

デフォルトをiojs-v3に

```
$ nvm alias default 
efault -> iojs-v3 (-> iojs-v3.0.0)
```

##まとめ

前に、[npm自体のバージョンを上げる](http://qiita.com/n0bisuke/items/b2704b6ebb84f21c03c1)って記事書きましたけど、バージョンを管理するツールとかのバージョンを上げる話ってググりにくいですよね苦笑
Realm-Swift Int型の最適化について

# 背景
* [Realm](https://realm.io/docs/swift/latest/#models)には、Int型のそれぞれのbit数に対応している記述がある
* では、大きな整数が必要ない場合にはInt8を利用するなどすれば、DBのサイズ節約に繋がる？

# 結論
* Realmでは、Int型のbit数で確保領域は変わらないので、一律Int指定で良さそう

# 比較
下記コードでdefault.realmのサイズを比較（30000000件の1カラムレコード）

```swift
import UIKit
import RealmSwift

final class Dog: Object {
//    dynamic var age: Int64 = 0 // 393KB
//        dynamic var age: Int8 = 0 // 393KB
//    dynamic var age = false // 393KB
//    dynamic var age = "" // 393KB
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        do {
            let realm = try Realm()
            realm.write({
                for _ in 0..<30000000 {
                    let dog = Dog()
                    realm.add(dog)
                }
            })
        } catch {
            print("error")
        }
        print("completed")
    }
}
```

# 結果
|型|DBサイズ|
|:---:|:---:|
|Int64|393KB|
|Int8|393KB|
|Bool|393KB|
|String|393KB|
全部393KB。
Kobito for Windowsをproxy環境で使いたかった


Kobito for Windows を proxy環境下で使用したかった

# 背景
* Kobito を自宅のMacでつかってみたらことのほか好みだったのでオフィスでも使おうとした。

# 結果
だめでした

# なぜ？
proxyを超えられていない。

# 環境
イントラからインターネットへのアクセスはすべてベーシック認証付きのproxy経由。

#proxy超えられないか試してみたこと
## よくある環境変数
+ HTTP_PROXY
>>  http://hoge:port/
>>  http://user:pass@hoge:port/
+ HTTP_PROXY_USER
>> user >> user:pass
+ HTTP_PROXY_PASS

## よくあるコマンドの引数
+ --http-proxy http://user:pass@hoge:port/
+ --http-proxy-user --http-proxy-pass
 
# 改善要望
・proxy設定をできるようにしてほしい。
・できれば、環境変数、設定ファイル、コマンドラインどれでもできるように
Windows版 Phantomjsでattach_fileが上手くいかない


結論から言うと、バージョンのせい。
上手くいかなかったのは、2.0.0

rubyで、phantomjs, pltergeist, capybaraの組み合わせで、windows環境で自動化をしていたら、遭遇。


Windowsなのでファイルのパスの指定の仕方が悪いのかと試行錯誤しました。。。

参考ページ
https://github.com/ariya/phantomjs/issues/12506

上記ページの下方に、直してくれて、Dropboxにアップしてくれた人がいたので、それをダウンロードして解決!
Android開発

# ライブラリー
- ネットワーク：https://github.com/naver/volley-extensions
- 画像
    - Picasso: http://square.github.io/picasso/
    - Glide: https://github.com/bumptech/glide
    - AnimationやCacheを詳細にコントロールしたい場合にはGlide、ただし画質とライブラリのサイズやスクロールスピードなど気になる場合にはPicassoがオススメ。基本Picassoが今はいいと思う。

- View Injection
    - ButterKnife: http://jakewharton.github.io/butterknife/
    - AndroidAnnotation: http://androidannotations.org/
    - Annotationはすごくできることが多いがその分クラスの使いに制限があるのがハードルになる場合があるので今はButterKnifeの方がいいかも

# CI
CircleCIでいい。ただし、CircleCIもメモリ制限があるのでコマンドに以下のような設定が必ず必要です。
https://circleci.com/

```shell-session
- ./gradlew clean assemble -PdisablePreDex
```

このコマンドでもメモリ不足でビルドできなくなったらCircleCIのサーポトに連絡してみましょう。

# Test Deploy
FabricのCrashlyticsを利用しましょう〜エラーリポートも見れるしDeployユーザーも管理できるので便利。
https://fabric.io/
AndroidでRemoteControlClientが消えない場合

### 概要
 
ロック画面に音楽の再生コントローラーを出すときに使う
RemoteControlClientですが
普通に表示したり操作する記事に関しては
WEB記事に挙がったりしていますが
最後に消す方法が載ってなかったりするのでメモ

### 症状

RemoteControlの解除とされる
`unregisterRemoteControlClient(RemoteControlClient)`をしても
ロック画面に表示したRemoteControlが消えない。

### 対処法

Registを解除するだけでは消えない。
ちゃんと消すにはPlaybackSteteを`PLAYSTATE_STOPPED`に
変更してあげる必要がある。


```java
// mRemoteControlClientとmAudioManagerは取得済み
mRemoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
mAudioManager.unregisterRemoteControlClient(mRemoteControlClient);
```

### 関連

止める以前に表示させる実装はこちらの連載記事参照のこと
[Androidで動く携帯Javaアプリ作成入門（30）：Androidアプリでマルチメディアを扱うための基礎知識 (3/3) - ＠IT](http://goo.gl/38Nq4G)

もう5系のAndroidから非推奨なので、使うことも少ないかも知れませんがTipsまで。
MongoDB - dbコマンドでログ出力レベルを変える方法

ログ出力レベルを変更する時に使用するコマンド。
MongoDBの再起動なしに反映できるので便利。

### 環境
* OS: Ubuntu14.04
* MongoDB: 3.0.5

### 設定について
* verbosity levelは「0-5」
* 値が「-1」の場合はdefaultの設定を引き継ぐ

### 現在の設定の確認方法
```
> db.getLogComponents()
{
	"verbosity" : 0,
	"accessControl" : {
		"verbosity" : -1
	},
	"command" : {
		"verbosity" : -1
	},
	"control" : {
		"verbosity" : -1
	},
	"geo" : {
		"verbosity" : -1
	},
	"index" : {
		"verbosity" : -1
	},
	"network" : {
		"verbosity" : -1
	},
	"query" : {
		"verbosity" : -1
	},
	"replication" : {
		"verbosity" : -1
	},
	"sharding" : {
		"verbosity" : -1
	},
	"storage" : {
		"verbosity" : -1,
		"journal" : {
			"verbosity" : -1
		}
	},
	"write" : {
		"verbosity" : -1
	}
```

### 現在の設定の確認方法
```
> db.setLogLevel(-1, "query")
```

### 参考(マニュアル)
http://docs.mongodb.org/manual/reference/log-messages/#view-current-log-verbosity-level
HTMLソースの特定の要素を削除・置換 【BeautifulSoup】

#HTMLのスクレイピング処理で、特定の条件に合う要素を削除したり置換する方法

（＊例えば、リンクをすべてスキップしたい、図表は飛ばす、など）

Python BeautifulSoupで、`.extract()`, `.replace_with()` 関数を使う。

```py
from bs4 import BeautifulSoup

txt = """<p>I have a dog.  His name is <span class="secret">Ken</span>.</p>"""
soup = BeautifulSoup(txt)

# This keeps "unwanted" information
soup.get_text()
#: u'I have a dog.  His name is Ken.'


# remove an element by tag matching 
soup.find("span", {"class":"secret"}).extract()
soup.get_text()
#: u'I have a dog.  His name is .'


# or you can replace that with something
soup = BeautifulSoup(txt)
soup.find("span", {"class":"secret"}).replace_with("confidential")
soup.get_text()
#: u'I have a dog.  His name is confidential.'
```
awspecを気軽に使ってみる

## About
terraformで作った環境のテストができないなと思っていたところ、awsの構成をチェックできる[awspec](https://github.com/k1LoW/awspec)というツールがあるらしいので、試しに使ってみた。

## 準備
* gemをインストールする

```:Gemfile
gem 'awspec'
```

```
$ bundle install
```

元々aws-sdkのバージョン1が入っていた環境だったので、エラーになりました。aws-sdk のバージョン2を使っているようです。

* 初期設定する

```
$ mkdir awspec
$ cd awspec
$ bundle exec awspec init
 + #{dir}/
 + spec/spec_helper.rb
 + Rakefile
 + spec/.gitignore
```

direnvで環境変数を登録します。

```
$ cat .envrc
export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxxxx
export AWS_DEFAULT_REGION=ap-northeast-1
```


## 使ってみる
### 既存環境のテストを作る

```
$ bundle exec awspec generate ec2 xxxxxxxx
describe ec2('test') do
  it { should exist }
  it { should be_stopped }
  its(:instance_id) { should eq 'xxx' }
  its(:image_id) { should eq 'xxx' }
  its(:private_dns_name) { should eq 'xxx' }
  its(:public_dns_name) { should eq '' }
  its(:instance_type) { should eq 't2.micro' }
  its(:private_ip_address) { should eq 'xxxx' }
  it { should have_security_group('web') }
  it { should belong_to_vpc('xxx') }
  it { should belong_to_subnet('') }
end

$ bundle exec awspec generate ec2 xxxxxxxxx >> spec/ec2_spec.rb
```
※ xxxxxxxにはVPCを指定します

設定されてない部分は空欄になりました。自動でここまで出来ると楽です。

### テストを動かしてみる
そのままだと動かないので、`spec/ec2_spec.rb`に`require 'awspec'`を追記しておきます。

```
$ bundle exec rake spec
...
Finished in 2.17 seconds (files took 3.66 seconds to load)
94 examples, 8 failures
```

結構気軽にできるので、良さそうな気がしますね！spec_helper.rbとかはもっと改造してもいいかも。~~`awspec init`だと`.rspec`が作成されなくて色が味気なかったので、後で追加しました。~~ 今はすでに追加されてます。
nslookup でメールサーバを調べる

以下のコマンドでメールの設定情報を調べることができる。
（gmailで試して見た。）

```bash
$ nslookup
> set type=MX
> gmail.com

# 以下出力結果

Server:		xxx.xxx.xxx.xxx
Address:	xxx.xxx.xxx.xxx#x

Non-authoritative answer:
gmail.com	mail exchanger = 20 alt2.gmail-smtp-in.l.google.com.
gmail.com	mail exchanger = 30 alt3.gmail-smtp-in.l.google.com.
gmail.com	mail exchanger = 5 gmail-smtp-in.l.google.com.
gmail.com	mail exchanger = 10 alt1.gmail-smtp-in.l.google.com.
gmail.com	mail exchanger = 40 alt4.gmail-smtp-in.l.google.com.

Authoritative answers can be found from:
gmail.com	nameserver = ns3.google.com.
gmail.com	nameserver = ns2.google.com.
gmail.com	nameserver = ns4.google.com.
gmail.com	nameserver = ns1.google.com.
ns2.google.com	internet address = 216.239.34.10
ns1.google.com	internet address = 216.239.32.10
ns3.google.com	internet address = 216.239.36.10
ns4.google.com	internet address = 216.239.38.10

```
MongoDB 運用中の状態確認


## Diagnostic Tools
運用中はZabbixなどでリソース監視は行っているけど
バッチ動かしたり、急な高負荷状態になる場合などに
Mongodの状態を確認するためのツールがあるのでそれを使うと便利

よく使ってるツールはこのふたつ

- mongostat
- mongotop


## mongostat
mongod/mongosのステータスを表示してくれる

__--discover__オプションをつけるとレプリカセット・シャードクラスタの
全てのインスタンスの状態を表示してくれるので
運用中はいつもこれをつけて監視してる

### 実行してみる
```
$mongostat --discover | grep -E '.*PRI.*|*$' 

                     insert query update delete getmore command flushes mapped  vsize   res faults qr|qw ar|aw netIn netOut conn set repl     time
     localhost:27017     *0     1     *0     *0       0     4|0                      0        191.0M 43.0M      0   0|0   0|0  338b    19k   41        RTR 11:23:50
set01/mongod71:27018     *0    *0     *0     *0       0    12|0     0.0    3.4       0          2.2G  1.7G    n/a   0|0   1|0  920b    95k   25 set01  PRI 11:23:50 
set02/mongod81:27018     *0    *0     *0     *0       0    12|0     0.0   12.5       0          6.0G  5.4G    n/a   0|0   1|0    1k    95k   24 set02  PRI 11:23:50 
      mongod71:27018     *0    *0     *0     *0       0     8|0     0.0    3.4       0          2.2G  1.7G    n/a   0|0   1|0  696b    94k   25 set01  PRI 11:23:50 
      mongod72:27018     *0    *0     *0     *0       0     4|0     0.0   28.0       0         12.7G 12.2G    n/a   0|0   1|0  405b    47k   10 set01  SEC 11:23:50 
      mongod81:27018     *0    *0     *0     *0       0     8|0     0.0   12.5       0          6.0G  5.4G    n/a   0|0   1|0  810b    94k   24 set02  PRI 11:23:50 
      mongod82:27018     *0    *0     *0     *0       0     5|0     0.0   65.1       0         28.2G 27.7G    n/a   0|0   1|0  459b    47k   12 set02  SEC 11:23:50 
```
パイプでgrepに渡してプライマリーの行を赤色にしている。
ちなみにシャード2つの各々レプリカセット組んでるクラスタです


### 気にするポイント
運用中に一番気にしているのは __insert/query/update__ などの発行数はもちろんなのだが __qr|qw__ の数値
__運用中高負荷になったり、クソクエリーで、mongoをいじめた場合__ に発生しうる

この数値が上がると _クエリのタイムアウト、同期遅延_ もう様々な障害が発生しうるので
メンテに入れる一つの指標にしてます。


## mongotop
コレクション毎に操作に利用した時間が表示される
mongostatでは操作時間がかかっているかわからないので併用して使うとかなり分析に役だつ

### 実行してみる
```
$ mongotop --host mongod71 --port 27018

                     ns    total    read    write          2014-12-19T15:32:01-05:00
     admin.system.roles      0ms     0ms      0ms
   admin.system.version      0ms     0ms      0ms
               local.me      0ms     0ms      0ms
         local.oplog.rs      0ms     0ms      0ms
 local.replset.minvalid      0ms     0ms      0ms
      local.startup_log      0ms     0ms      0ms
   local.system.indexes      0ms     0ms      0ms
local.system.namespaces      0ms     0ms      0ms
   local.system.replset      0ms     0ms      0ms
```

### 気にするポイント
高負荷時にどれだけ多くread,writeされているが見れるので、
素直に上から順にアプリーションのクエリ発行を見直してあげるといい

クソクエリ発行している場合は確実にこのtopコマンドで上位に来ているのでそれは修正する
スロークエリのログに出ないけどreadの件数が多すぎるものなんかも上位に出てくるので
修正できないか確認してみる

## まとめ
あくまで補助ツールなのでこれを使ったから運用が楽になるとかはないけど
パッとDBのステータスを確認するには非常に便利

日頃からクエリの本数や状態をみて知見を貯めておかないと
今日の状態の良し悪し判断ができないので
こういったステータス系は日頃から監視しておきましょう
sublime text > 変数名が小文字のkで始まる時に色が異なる

```txt:動作確認
Sublime Text2
```

Cの.hファイルにて以下の2つの変数の表示色が異なる。

```.h
static const int kValue = 5;
static const int KValue = 10;
```

Color Scheme: Monokaiを使用。

kValue : 紫色になる
KValue : 白色になる

最初のアルファベットがkの小文字の時のみ紫色になる。他の小文字(a, i, dなど)では白色だった。

static constの定数を小文字のkで始めるコーディング規約があるがそれと関係しているのだろうか?
変数の初期化にメソッドを用いる -final付与のために-

>
特に変更されないはずの変数(*1)には``final``を付けることで、その変数が存在するスコープ内の状態パターンが減り、デバッグ可能性や可読性が向上する。

(*1 特にImmutableクラスやプリミティブ型)
上記の理解のもとで、なるべく変数には``final``を付与するように心がけています。

ここで、

```sample1.java
//....
final int x = .....; // X は外部パラメータから取得
String t = "";
if(x == 0) t = "test";
if(x > 0) t = "sample";
if....;

System.out.println(t);
```

または、

```sample2.java
//....
switch(x) {
    case 0:
        t = "test";
        break;
    case 1:
        t = "sample";
        break;
    case ....:
        ....;
}

System.out.println(t);
```

上記のようなコードだと、``String t`` に対して ``final`` を付与できません。
そこで、以下のように書き換えます。

```sample1.java
// 条件が多いならメソッドに切り分けてしまう
private static String initT(int x) {
    if(x == 0) return = "test";
    if(x > 0) return = "sample";
    if....
    return "";
}
//....
final String t = initT(x);
```
あるいは、条件が少ないなら、三項演算子を用いて、

```sample1.java
//....
final String t = (x == 0) ? "test" : (x > 0) ? "sample" : "";
```

このように変数の初期化を単文にすることで、 ``final`` の付与を可能にできます。

---
私は上記のような書き換えを意識していますが、**これは推奨されない** 、 **もっと良い記述がある** などあれば、コメント頂ければ幸いです。
play-service ライブラリを導入 ＆ エラーメモ


外部プロジェクト（Eclipseベース）を
AndroidStudioにインポートしたときに四苦八苦したのでメモ。


## 0.背景

`play-service`を使うAndroidアプリがあり
これはもともとEclipseで開発されていたものでした。

そのプロジェクトファイルを一式、AndroidStudioへインポートしたら
以下のようなエラーがでインポートできない。
>* Project $PROJECT_NAME:/Users/mac/import_eclipse_project/project.properties:
Library reference ../google-play-services_lib could not be found
Path is /Users/mac/import_eclipse_project/../google-play-services_lib which resolves to /Users/mac/google-play-services_lib


**「Eclipseでコンパイルリンク指定していた
google-play-serviceのプロジェクトあらへんで！！」**
ということだと思う。

不要ファイルを削除してインポートして、
後からgoogle-playライブラリをコンパイル対象に指定することにしました。

そこからスタート。

## 1. google-playライブラリをgradleに加える

アプリのbuild.gradleに対して以下を追記。

```java:build.gradle
dependencies {
    compile 'com.google.android.gms:play-services:+'
}
```

ちなみに、AndroidStudioではGUIからでも設定が可能みたいです。
>ファイル　＞　プロジェクト構造　＞　app　＞Dependencies
>「＋」から追加するライブラリを選択する

## 2. エラーが発生したよ！

ここでエラーが発生しない人もいると思います。
私はここで２回もエラーが発生したのでメモメモ。

### 2-1. packageAllDebugClassesForMultiDex エラー

これはGoogleAnalyticsのライブラリもコンパイル対象にしてると発生する。

> エラー :Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: com/google/android/gms/analytics/internal/Command$1.class

**GoogleAnalyticsライブラリが被ってるよ！！！**
というエラー。

`play-services`ライブラリにGoogleAnalyticsのライブラリが含まれているので
こういうエラーが起こるそうです。

プロジェクトによって対応は変わるみたいですが、
私の場合は`play-services-gcm`と限定的にすることで解決。

```java:build.gradle
dependencies {
    //compile 'com.google.android.gms:play-services:
    compile 'com.google.android.gms:play-services-gcm:
}
```

###2-2. buttonBarStyleエラー

>/Users/mac/StudioProjects/importproject/app/src/main/res/values/styles.xml
エラー :(25, 21) No resource found that matches the given name: attr 'buttonBarButtonStyle'.
エラー :(24, 21) No resource found that matches the given name: attr 'buttonBarStyle'.
/Users/hiroki/StudioProjects/02_cw_watch_app_versionup/app/src/main/res/values-v11/styles.xml
エラー :(20, 21) No resource found that matches the given name: attr 'buttonBarButtonStyle'.
エラー :(19, 21) No resource found that matches the given name: attr 'buttonBarStyle'.
エラー :Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Users/mac/Library/Android/sdk/build-tools/21.1.2/aapt'' finished with non-zero exit value 1

リソースファイルをみてみると、確かにエラー文にある
buttonBarStyle系が定義されている。

しかしこれは、プロジェクト作成すると自動生成されるもの。
正直、なくてもいい。消してあげれば解決。

## x.参考文献

・[重複ライブラリ参照エラー](http://qiita.com/noobar/items/c15e8e7ba76ce5f858a2)
・[開発ツールが用意してくれるファイルでエラー](http://stackoverflow.com/questions/11573947/error-error-no-resource-found-that-matches-the-given-name-attr-buttonbarbutt)
・[MultipulDex エラー](http://stackoverflow.com/questions/30025223/exception-trying-to-execute-android-app-from-eclipse-to-android-studio)（この記事とは結果的に関係なかったもの。メモで残しておきます）
iTerm2でキー入力を始めるとフリーズする現象の回避策

Mac用のターミナルアプリ「[iTerm2](https://iterm2.com)」は使い勝手がよく愛用しているのですが、最近はキー入力をはじめると同時にレインボーカーソルになり、しばらくフリーズしてしまう現象が頻発していて困っていました。

再現性に乏しいこともあり、どうにかならないものかと思っていたところ、最近になってiTerm2のIssueにも登録され、その原因と回避策が載っていました。

https://gitlab.com/gnachman/iterm2/issues/3546

> George Nachman @gnachman
> Looks like some other program is using accessibility APIs to examine iTerm2's contents. This is very slow, unfortunately, especially with a big scrollback buffer. I recommend using the latest beta or reducing the size of your scrollback history.

とのことで、最新βを使うか、**スクロールのヒストリサイズを減らすと回避できるかも**、という開発者からのコメントが付いていました。

自分の設定（［Profile］→［Terminal］）も確かに`Unlimited scrollback`にチェックを入れた状態になっていたので、このチェックを外して50,000行程度に減らしてみたら（それでも十分に多いですが）、ものの見事に問題が発生しなくなりました。

![settings.png](https://qiita-image-store.s3.amazonaws.com/0/5210/c1b3094a-f906-793f-873a-4e5b5ca91174.png)

個人差はあると思いますので、同様の問題で困っている方がいましたら、参考にしてみてください。
Google Chrome のデベロッパーツールで CSS アニメーションのコントロールが可能に

Chrome Canary ではすでに先行実装されていた CSS アニメーションのコントロール機能が、正式版にも搭載されたようです。
（バージョン 44.0.2403.130 / Mac OS X で確認）

Elements > Styles パネル右上の菱型のアイコンをクリックするとコントロールバーが出現します。
CSS によるアニメーションの再生速度を変更したり、ストップさせることができます。

![chrome_cssanimation.png](https://qiita-image-store.s3.amazonaws.com/0/25032/ac71a8e4-153b-2adf-de39-805a47f1631a.png)

関連記事
[New animation controls in Chrome Canary](http://valhead.com/2015/01/06/quick-tip-chrome-animation-controls/)
Ubuntu へのgo-ethereum/gethのインストール、アップデート方法

以下に移行しました<br><a href="http://block-chain.jp/tech/install-go-ethereum-on-ubuntu/" title="Ubuntu へのEthereum go-ethereum/gethのインストール、アップデート方法">Ubuntu へのEthereum go-ethereum/gethのインストール、アップデート方法</a>
yumの簡単な使い方 (Amazon linux)

# 良く使う流れ

## パッケージアップデート

```
# yum update

いちいちyesを入れたくない時は-y
# yum update -y

特定のパッケージ(zabbix)を除いてアップデート
# yum --exclude=zabbix update
```

## パッケージをインストール

```
php5.6をインストール
# yum install php56

epelリポジトリにあるzabbixをインストールしたい
# yum install --enablerepo=epel zabbix
```

## パッケージを削除

```
# yum remove php56
```

## パッケージの検索、リスト表示

```
php56に関連するパッケージを検索
# yum search php56

php56を含むパッケージをリスト化
# yum list php56*

インストール済みのみをリスト化
# yum list intalled php56*

全インストール済みをリスト化
# yum list installed
```

## 他のリポジトリインストール

```
最新のmysql5.6のリポジトリ
# yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

監視ツール zabbixのリポジトリ
# yum install http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm

```

## リポジトリリスト表示

```
# yum repolist

無効状態のepelを有効にして表示
# yum --enablerepo=epel repolist

全てのリポジトリを表示
# yum --enablerepo=* repolist
```

## リポジトリを再インストールした時はyum listの前にキャッシュクリア

```
zabbixリポジトリを2.2 →2.4に再インストールした直後
# yum list zabbix*
利用可能なパッケージ
zabbix-agent.x86_64                             2.2.9-1.el6                  zabbix
・・・省略・・・

キャッシュを全てクリアする
# yum clear all

リストが再取得されて2.4が表示されるよ
# yum list zabbix*
利用可能なパッケージ
zabbix-agent.x86_64                             2.4.5-1.el6                  zabbix
・・・省略・・・
```

## 最後に

自分の[技術ブログ](https://blog-c.cloudlance-motio.work/)ではフリーランス界隈の情報や最新のIT情報の発信していますので、よろしくお願いします。
tmuxチートシート

# start tmux session
tmux

# 直近のセッションにアタッチ
tmux attach

# セッションのリストを確認
tmux ls

# 0番のセッションにアタッチ
tmux attach -t 0

# コマンド
Ctrl+b の後に以下を入力

## 開始、終了

|キー|操作|
|:-:|:-:|
|a|アタッチ|
|d|デタッチ|


## ウィンドウ操作

|キー|操作|
|:-:|:-:|
|c|ウィンドウ作成|
|w|ウィンドウのリストを表示|
|n|次のウィンドウに移動|
|&|ウィンドウをkill|


## ペイン操作

|キー|操作|
|:-:|:-:|
|%|横にペインを分割|
|"|縦にペインを分割|
|o|ペインを切り替え|
|x|ペインをkill|
unsafe が unsafe なケース (1)

golang で unsafe パッケージを使わざるを得ないケースがあるけれど、具体的にどういう場合に unsafe が本当に unsafe なのかは、あまり出てこない。

具体例を思いついたのでメモしておく。

```go
func Danger(buf [4]byte) *uint32 {
	return (*uint32)(unsafe.Pointer(&buf))
}

func Safe(buf [4]byte) *uint32 {
	var ret uint32
	ret = *(*uint32)(unsafe.Pointer(&buf))
	return &ret
}
```

引数の buf がメモリ解放された後で、戻り値にアクセスできるかどうかを考えると、`Danger` がダメだとわかる。

ま、このケースはそもそもポインタ返すなというのもあるけれど。構造体だったらうっかりやる人もいるかもよ？パフォーマンスガーとか言いながら。
Vagrant+CoreOSでdocker-composeをプロビジョニングする

GitHubからdocker-composeをダウンロードして`/opt/bin`へ配置するシェルスクリプト。URLの`1.2.0`の部分を[別のタグ](https://github.com/docker/compose/releases)に変えればバージョンを変更できる。

```rb:Vagrantfile
...
  (1..$num_instances).each do |i|
...
      # docker-composeのインストール
      $get_compose = <<-'EOF'
        curl -L https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
        sudo mkdir /opt
        sudo mkdir /opt/bin
        sudo mv ~/docker-compose /opt/bin/docker-compose
        sudo chown root:root /opt/bin/docker-compose
        sudo chmod +x /opt/bin/docker-compose
      EOF
      config.vm.provision :shell, :inline => $get_compose
```

参考：Docker Compose リファレンス
http://qiita.com/spesnova/items/6e8919b34e763f27c34e#coreos
c++ builder > thisを外部関数に渡す > TForm *formPtr / template <class T> void __fastcall Test_XXX(TObject *Sender) { ((T*)Sender)->Caption = "ABC"; }

```txt:動作確認
C++ Builder XE4
```

外部関数からあるFormに対する処理を実装する時、そのForm固有で実装してしまう(Form1->...=)と他のFormに対して処理ができない。

# TFormにのみ対応 [this使用]
そのため、thisを引数として渡す方法をとってみる。

```cpp:.h
class TClassXXX{
public:
  static void Test_XXX(TForm *formPtr);
}
```

上記を処理したいForm上からコールする。

```cpp:.cpp
TClassXXX::Test_XXX(this);
```

# TButton, TFormなど色々対応 (mojeldさんより)

templateを使うことで、TFormだけでなく、TButtonなど他のタイプにも対応する場合。

```cpp:test_xxx.cpp
template <class T>
void __fastcall Test_XXX(TObject *Sender)
{
    ((T*)Sender)->Caption = "ABC";
}
```
調べてもなかなか出てこない！SSH公開鍵認証がやっと整理できた

#SSH公開鍵認証方式について

![認証方式](http://dl.off-soft.net/images/sakura/ssl/public_key.png)

引用元：http://dl.off-soft.net/images/sakura/ssl/public_key.png


いや、知ってましたよ。なんとなくは。
ただ、以下のパターンの場合がごっちゃ混ぜになってました。


##ごちゃまぜになってた話

* ホストA
* ホストB


「Aで鍵作った場合、Bで鍵作った場合」で頭がごちゃごちゃになってました。


###ケース１　Aで鍵作成

***

Aでssh-keygenをした場合、公開鍵Aと秘密鍵Aができます。

　B→Aの通信をしたい場合は、
　　・Bへ秘密鍵Aを送る
　　・Aのauthorized_keysに公開鍵Aを追加する


###ケース２　Bで鍵作成

***

Bでssh-keygenをした場合、公開鍵Bと秘密鍵Bができる

　B→Aの通信をしたい場合は、
　　・Aのauthorized_keysに公開鍵Bを追加する


##まとめ

###ケース１が良い場合（ホストAで鍵生成）
特定のユーザだけに公開鍵認証でホストAを公開したい場合
（管理者側で鍵の生成を行う）

###ケース２が良い場合（ホストBで鍵生成）
ホストBから大量のクライアントに対してSSHを実行する場合（Ansibleやserverspecなど）


###付録（sshの公開鍵認証がうまくいかない場合のTips）

***

以下の点に注意すると大体解決します。

* id_rsaのパーミッションと権限の問題
* ~/.ssh　ディレクトリのパーミッションと権限の問題
* SELinuxが有効な場合の問題（[こちら](http://2done.org/76.html?id=76)）
* /etc/ssh/sshd_configの設定の問題
* ファイル名、格納先の誤り（authorized_keysなど）


sshを実行するときに`-vvvv`オプションを使用することで詳細なログが見れますのでトラブルシュートに使って下さい。
PHPUnitのアサーション一覧

いつも忘れるので備忘録として。

配列関連のテストをしたい場合に使うやつ忘れちゃうので。

#### 配列に特定の値が入ってる事を確認する

```php
assertContains($needle, $haystack, $message )
```

* `$haystack` が配列の場合
    * in_array(needle, haystack)
* `$haystack` が文字列の場合
    * strpos(needle, haystack)

#### 配列に特定の値が含まれない事を確認する

```php
assertNotContains($needle, $haystack, $message )
```

assertContainsと逆の動作をする
c++ builder XE4, 10.2 Tokyo > TComboBoxコンポーネントを動的生成する > TComboBox *cmb01 = new TComboBox(this); cmb01->Parent = this;

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/26)
```

TComboBoxコンポーネントをコードから動的に生成したい。

```cpp
TComboBox *cmb01 = new TComboBox(this);
cmb01->Parent = this;
```

参考 http://www.functionx.com/cppbuilder/controls/combobox.htm
IoTプラットフォームサービスのまとめ

IoT向けのサービスがかなり増えてきたので、忘れないようにメモ。

* [Facebook Parse](http://www.infoq.com/jp/news/2015/04/parse-iot-sdk)
 * いつの間にか(2013年)Facebookに買収されていたParseのIoT向けサービス。
 * 「ParseはArduino Yún、Raspberry Pi、Texas Instruments CC3200といったデバイス向けのSDKを出荷した」らしい。開発はしやすそう。
* [Amazon Kinesis/Lambda](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/walkthrough-kinesis-events-adminuser.html)
 * ストリーミングデータを扱うKinesisでデータを取得し、取ってきたデータをLambdaで処理するという感じ。実例・記事も多い([こちら](http://dev.classmethod.jp/cloud/aws/aws-fullmanaged-bigdata/)など)。
* [Windows IoT devices](http://ms-iot.github.io/content/en-US/GetStarted.htm)
 * Raspberry PIやArduinoなどの手持ちのデバイスをAzure経由で連携できるサービス。各デバイス向けのライブラリ、開発のためのVisual StudioとMicrosoftらしく手厚い。
* [Project Brillo](http://www.itmedia.co.jp/news/articles/1505/29/news072.html)
 * 天下のGoogleのサービス。2015/10月からスタートの模様。WeaveというJSONベースのプロトコルで連携させるみたい
* [Apple HomeKit](http://iot.mb.cloud.nifty.com/iotcolumn/apple_iot%E4%BA%8B%E4%BE%8B_homekit?gclid=CjwKEAjw6IauBRCJ3KPXkNro1BoSJAAhXxpyCDy4eWFsCdWhBdxoEvcxIqkSgW9nYxvhiqXDqFMHfRoCkcLw_wcB)
 * iPhone/iPadなどのApple製品から家電などを操作する仕組み。これもGoogle同様独自プロトコルか。
* [Yahoo myThings](http://pr.yahoo.co.jp/release/2015/07/27a/)
 * スマホを中心とした家電などとの連携が行える模様
* [Nifty mBaas](http://mb.cloud.nifty.com/about.htm)
 * モバイル端末むけ
 * [Nifty Cloud MQTT](https://www.nifty.co.jp/cs/newsrelease/detail/150508004426/1.htm)もある
* [IBM Bluemix](https://console.ng.bluemix.net/solutions/iot)
 * MQTTが扱えるバックエンドとして動く模様
 * [Arduino/Rails連携の記事](http://www.ibm.com/developerworks/jp/data/library/techarticle/dm-1408-arduino-iot-app/)があるので、ご参考
RackTestドライバを使ったCapybaraでのHTTPリクエストのヘッダ情報を覗く

[Capybara](https://github.com/jnicklas/capybara)の[RackTestドライバの設定中で](https://github.com/jnicklas/capybara#racktest)テスト対象のappをやりとりしているので、ここで渡すappを弄るとヘッダを覗くことが出来る。(envはヘッダそのものではないがその情報を含んでいる)

```ruby
original = Capybara.drivers[:rack_test]
Capybara.register_driver :rack_test do |app|
  spied_app = lambda { |env| p env; app[env].tap { |status, header| p [status, header] } }
  original[spied_app]
end
```

以下のような出力になる(一部省略)

```
{"rack.version"=>[1, 3], "rack.multithread"=>true, "rack.multiprocess"=>true, "rack.run_once"=>false, ..., "REQUEST_METHOD"=>"GET", "PATH_INFO"=>"/", "rack.url_scheme"=>"https", "HTTPS"=>"on", "SCRIPT_NAME"=>"", "CONTENT_LENGTH"=>"0", "rack.test"=>true, "REMOTE_ADDR"=>"127.0.0.1", "HTTP_REFERER"=>"https://hoge.fuga.jp", "HTTP_HOST"=>"hoge.fuga.jp", "HTTP_COOKIE"=>""}

[302, {"Content-Length"=>"74", "Location"=>"https://hoge.fuga.jp/", "Cache-Control"=>"no-cache", "Set-Cookie"=>"_session_key=....; domain=.fuga.jp; path=/; expires=Sun, 17 Jul 2016 04:14:29 -0000; HttpOnly", "Vary"=>"Origin"}]
```
BLEスキャンコード


[iOS x CoreBluetooth本](http://www.amazon.co.jp/dp/4883379736/ref=sr_1_1?ie=UTF8&qid=1438820017&sr=8-1&keywords=BLE+swift)のコードを試してみました。
※ ライブラリにCoreBlutoothを入れてからコンパイルしてください。

```swift
import UIKit
import CoreBluetooth


class ViewController: UIViewController, CBCentralManagerDelegate{
    
    // 初期化していないのでオプショナル型を使う
    var centralManager:CBCentralManager?
    var peripheral:CBPeripheral?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // CBCentralManagerを初期化
        self.centralManager = CBCentralManager(delegate: self, queue: nil)
     
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    
    // CBCentralManagerの状態変化を取得
    func centralManagerDidUpdateState(central: CBCentralManager!) {
        println("state: \(central.state.rawValue)")
        
        switch(central.state){
            case CBCentralManagerState.PoweredOn:
                println("スキャン開始")
                // スキャン開始
                self.centralManager!.scanForPeripheralsWithServices(nil, options: nil)
                break
            
            case CBCentralManagerState.PoweredOff:
                println("電源が入っていないようです。")
                break
            
            case CBCentralManagerState.Unknown:
                println("unknown")
                break
            
            case CBCentralManagerState.Unauthorized:
                println("Unauthorized")
                break
            
            case CBCentralManagerState.Unsupported:
                println("Unsupported")
                break
            
            default:
                break
        }
    }

    // スキャン結果を受け取る
    func centralManager(central: CBCentralManager!, didDiscoverPeripheral peripheral: CBPeripheral!, advertisementData: [NSObject : AnyObject]!, RSSI: NSNumber!) {
        println("peripheral: \(peripheral)")
    }

}

```
html パスの話


# パス
| パス |説明   |
|:-:|:--|
|  絶対パス |都道府県、市町村名など住所を指定して行き先を説明。|
|相対パス   | 現在地から信号を３つ進み、右に曲がって3件目、現在地を起点に行き先を説明。|
|フルパス   |訪問者には見せたくない場所は省略して入れなくする。家族には倉庫など全ての道筋を説明する|


# パスの住み分け
## 絶対パスと相対パス
いちいちIPアドレスからサーバーを呼び出すという作業を省略できる。
サーバーにアクセスされないためのセキュリティ


## パスとフルパス
全てのパスを省略しないものをフルパスという。
ユーザーには基本的にパスを整形して、また限定している。
通常のURL：http://www.chama.ne.jp/index.htm
もし省略しなかった場合：http://www.chama.ne.jp/c:/www/chama/home/index.htm


# 絶対パス
http://www.hogehoge.ne.jp/users/items/index.html

|  パーツ | 説明  |
|:-:|:--|
| http://www. | WEBの  | 
|  hogehoge.ne.jp| 「hogehoge.ne.jp」サーバー   | 
|  users | usersというディレクトリ内の  | 
| items  | itemsというディレクトリ内の  | 
| index.html| index.htmlというファイル  | 


# 相対パス

../ : ディレクトリ一つ上
ディレクトリ名/ : ディレクトリ内に入る
画像やHPを閲覧するときはpublic/wwwなどを省略
プログラムがファイルの書き込みを行う場合「public」「www」は省略する。
difference > vector<T> / list<T>

vector<T>とlist<T>の使い分け。

以下がわかりやすかった。

[SO: vectorとlistをどのように使い分けますか](http://ja.stackoverflow.com/questions/5997/vector%E3%81%A8list%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E4%BD%BF%E3%81%84%E5%88%86%E3%81%91%E3%81%BE%E3%81%99%E3%81%8B)

> 大抵のケースでは vector<T> 利用で十分かと思います。（Tは要素の型）
...
> list<T> の方が好ましいのは、下記条件を満たすときくらいです。
...
> - 中間位置に対する要素の挿入／削除が頻繁に行われ、
- コンテナに格納される要素数が非常に多く、
- 要素型のサイズ(sizeof T)が十分大きいとき。
CapybaraでJSを使ったテストは save_screenshot が便利

## 概要
CapybaraでSeleniumやpoltergeistをつかって`js: true`なテストを書くときに、テストが失敗した瞬間の画面が欲しかったりする。

JavaScriptを使わないテストでは `save_and_open_page` と書けばその時の画面を保存してくれるが、CSSやJSが使われていない.htmlが保存されるので、レイアウトも整っていないし、テストの時に実際にどのような画面が表示されていたのか分かりにくい。

## そこで save_screenshot

```
page.save_screenshot 'screenshot.png'
```
とすると、その時の画面のスクリーンショットが`screenshot.png`という名前で保存されるので便利。

```rails_helper.rb
def take_screenshot
  page.save_screenshot "tmp/capybara/screenshot-#{DateTime.now}.png"
end
```
と追記しておくと

```foo_spec.rb
it 'save screenshot' js: true do
  visit '/bar'
  take_screenshot
end
```
とかけるし、`save_and_open_page`した時と同じディレクトリにスクリーンショットが保存されるのでさらに便利。
rails-assets-fontawesome 4.4.0 にアップデートしたらフォントが迷子に

`@font-face`のところでパスが`../fonts/xxxxx`になってたのが原因だったので

```scss:app/assets/stylesheets/application.css.scss
 *= require fontawesome
```

するのやめて、強引に

```scss:app/assets/stylesheets/application.css.scss
$fa-font-path: "fontawesome/fonts";
@import "fontawesome";
```

したら見つかった。

`application.css.scss`が汚れていくのは気持ち悪いなー。
`bootstrap-sass-official`も同じ感じやし、`require`はそのままにして、別ファイルに上書く変数ぶっ込んでしまったほうがいいのかしら？


追記
------------

ちょっとproductionで使うことがあってデプロイしてみたらまた迷子になってた。
というよりもAssetPipelineの影響だった。

[asset compile 編](http://qiita.com/masaki925/items/346f24458a406e61dbbf)を見てなるほどなーと思いつつ現実的な解決策を探してみた。

本家様

```scss:app/assets/stylesheets/fontawesome.scss
@import 'fontawesome/font-awesome.scss';
```

ふむ。

```scss:app/assets/stylesheets/fontawesome/font-awesome.scss
/*!
 *  Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */

@import "variables";
@import "mixins";
@import "path";
@import "core";
@import "larger";
@import "fixed-width";
@import "list";
@import "bordered-pulled";
@import "animated";
@import "rotated-flipped";
@import "stacked";
@import "icons";
```

あ、うん。相対パスか。

`@import "fontawesome";`している以上、外部からどうにもならなさそう。
ということで、この際`fontawesome`（正確には`fontawesome/font-awesome.scss`）で`@import`しているものを個別にいれて、`fontawesome/_path.scss`だけ上書きしちゃえ！ということで以下の設定に落ち着いた。

```scss:app/assets/stylesheets/application.css.scss
$fa-font-path: "fontawesome/fonts";
//@import "fontawesome";
@import "fontawesome/variables";
@import "fontawesome/mixins";
@import "fontawesome/path";
@import "fontawesome/core";
@import "fontawesome/larger";
@import "fontawesome/fixed-width";
@import "fontawesome/list";
@import "fontawesome/bordered-pulled";
@import "fontawesome/animated";
@import "fontawesome/rotated-flipped";
@import "fontawesome/stacked";
@import "fontawesome/icons";
```

```scss:app/assets/stylesheets/fontawesome/_path.scss
/* FONT PATH
 * -------------------------- */

@font-face {
  font-family: 'FontAwesome';
  src: font-url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
  src: font-url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
    font-url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
    font-url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
    font-url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
    font-url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
//  src: font-url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
  font-weight: normal;
  font-style: normal;
}
```
iOSシミュレータのSafariでsafari cannot open the page because the network connection was lostと言われました。

iOSシミュレータ内のiOSアプリからをSafariを起動した時に、ネットーワークに繋げない問題が生じました。

# iOSシミュレータのSafariでネットに繋げない
Safariを起動したところ、ページが表示できないエラーがでました。

```text:ページを開けないエラー
safari cannot open the page because the network connection was lost
```
今回の場合FacebookSDKを利用していてFacebookログインをしたかったのですが、ネットーワークに繋げないというエラーメッセージが出ました。

# iOSシミュレータを再起動する。

この問題はiOSシミュレータを単に再起動すると直るみたいです。
実際にiOSシミュレータを`Command+Q`で閉じてからXcodeからiOSアプリをビルドするとSafariでネットーワークにつながるようになりました(☝ ՞ਊ ՞)

# 参考

http://stackoverflow.com/questions/25654679/cant-use-http-in-ios-8-simulator
Raspberry Pi 2 をWindows 10 IoT Core for Raspberry Pi 入れてクリアケースに入れてみる

Windows 10の正式リリースとともに、Windows 10 IoT Core for Raspberry Piもパブリックリリース版（正式版）になっていたのでRaspberry Pi 2をアマゾンで注文

1.Raspberry Pi 2 Windows 10 IoT Core 開発セット (ケース無し)　9,090円
2.Raspberry Pi 2 専用ケース (クリア(GPIO-OPEN/開閉可能))　880円
3.24金メッキプラグ 4K対応 HDMIケーブル (Ver1.4,3D,ハイスピード イーサネット対応) (1m)　448円
4.コアウェーブ USB電源スイッチアダプタ (1個)　368円

モニター、キーボード＆マウスは古いPCのを流用。

Windows 10 IoT Core for Raspberry PiのインストールにはWindows 10の母艦がいるけど、SDカードにインストール済みなので電源オンですぐ起動。（家はまだWindows7なので...)
![11816096_949201455138092_308753805418749558_o.jpg](https://qiita-image-store.s3.amazonaws.com/0/88766/dd6110e2-19fb-7ef1-9ee5-16fd20669df2.jpeg)

![11822959_949201525138085_8099947411305321962_o (1).jpg](https://qiita-image-store.s3.amazonaws.com/0/88766/dd934c7d-f416-38ac-9207-bf9c4a82d4f3.jpeg)

![11754457_949201731804731_7410952783097794056_o.jpg](https://qiita-image-store.s3.amazonaws.com/0/88766/747a7dd9-ae09-e107-aede-a5b34cbe89bf.jpeg)


![接続例.jpg](https://qiita-image-store.s3.amazonaws.com/0/88766/94948137-d34c-7db3-066e-97a423c86a74.jpeg)



しかし、はたと気がついたのですが、実際の開発にはVisual Studio Community 2015が必要。
仕方ないのでVirtualBox上に構築してあったWindows 10 TP版にVS2015をセットアップ。

Microsoftのサイトに事例が乗っていたのでそのうちに作ってみる。
![3.JPG](https://qiita-image-store.s3.amazonaws.com/0/88766/4e31e9b3-132b-ce67-bc0a-2a27d2e251cc.jpeg)




Windows 10 IoT Core　（自分で作る場合）

リリースノート（EN)
http://ms-iot.github.io/content/en-US/win10/ReleaseNotes.htm

セットアップ
http://ms-iot.github.io/content/en-US/win10/SetupRPI.htm

1.ISOイメージをWindows10(x86)マシンダウンロード
2.DownloadしたISOをマウントしてツールをインストール
3.WindowsIoTImageHelperの起動
![1.JPG](https://qiita-image-store.s3.amazonaws.com/0/88766/1b5e649a-57cb-7a8c-c0cf-f9c647727673.jpeg)


4.ユーザーアカウント制御の警告が出るがOK
5.CUIで進捗表示、2分程度　PC側作業終了
6.RPi2にWindows 10 IoT Coreが書き込まれたMicroSDをセットっしてBoot
7.ウォッチツールもあるみたい
![2.png](https://qiita-image-store.s3.amazonaws.com/0/88766/2fa8d6a3-4f81-865c-5aa2-436caeac609c.png)



(参考）

Windows デベロッパー センター　モノのインターネット
https://dev.windows.com/ja-jp/iot

Windows 10 用のキットとツールのダウンロード
https://msdn.microsoft.com/ja-jp/windows/hardware/dn913721.aspx

Get Started
https://ms-iot.github.io/content/en-US/GetStarted.htm

kfurue's diary
Windows 10 IoT Core を Raspberry Pi 2 にインストールする

http://kfurue.hatenablog.com/entry/2015/05/06/224742
Phoenix.new で作ったプロジェクトが動かない

#現象
Phoenix.new で新しいプロジェクトを作っても
エラーが発生して動かない状況に陥ってしまいました。

#復旧方法
先に復旧方法を挙げると、
Phoenix Frameworkのバージョンをv0.15.0に上げれば動くようになりました。
(元々のバージョンはメモし忘れた。。)

#バージョンアップ方法
Githubから直接ダウンロードしてインストールしようとするとエラーが発生したため、
[こちら](https://github.com/phoenixframework/phoenix/releases/tag/v0.15.0)からローカルに.ezファイルをダウンロードしてインストールしました。
（詳しくは[参考記事](#参考記事)を参照ください）

`>mix archive.install C:\phoenix_new-0.15.0.ez`

#発生したエラーについて
mix phoenix.server を実行すると下記のようなエラーが発生しました。

>
== Compilation error on file lib/phoenix/code_reloader.ex ==
** (CompileError) lib/phoenix/code_reloader.ex:61: function full_path/1 undefined
    (stdlib) lists.erl:1337: :lists.foreach/2
    (stdlib) erl_eval.erl:669: :erl_eval.do_apply/6

code_reloader.ex内で使用されているfull_path関数が定義されていないとのことです。
正常に動作するプロジェクト内を見てみると、plug/lib/plug/conn.ex で定義されていましたが、
エラーが発生しているプロジェクトでは定義がごっそり消えてました。

とりあえず、code_reloader.exからfull_pathを呼んでるところを全て消した状態にしたら、
動作しました。

github上では、code_reloader.exからfull_pathを呼ぶ部分がconn.request_pathを呼ぶように変更されていたので、
ライブラリ間でバージョンの差異が出てるんだろうと思い、バージョンアップすることに

#参考記事
こちらの記事を参考にさせていただきました。
[[Elixir+Phoenix]Upgrade phoenix.new of mix archive](http://daruiapprentice.blogspot.jp/2015/07/upgrade-phoenix-new-of-mix-archive.html)
Opaqueポインタ > プライベートデータを隠蔽することができる。

引用: C++のためのAPIデザイン by マーティン・レディ

>これをフラットなCのAPIにすると以下のようになる。

```cpp:.h
struct Stack
{
  int *mStack;
  int mCurSize;
};

void StackPush(Struct Stack *stack, int val);
int StackPop(Struct Stack *stack);
bool StackIsEmpty(const Struct Stack *stack);
```

> このコード例を向上させるために、以下のようにオペークポインタを使ってプライベートデータを隠蔽することができる。

```cpp:.h
typedef struct Stack *StackPtr;
void StackPush(StackPtr stack, int val);
int StackPop(StackPtr stack);
bool StackIsEmpty(const StackPtr stack);
```

後者ではStackの構造体のメンバ変数がAPI使用者には隠蔽されているのが「向上」ということらしい。
StackPtrのようにAPI使用者が直接変更しなくていい構造体についてはこの方法は有効だと思われる。
Iteratorパターンにより、データ構造が異なるSTLのvectorとlistが同じ方法でアクセスできます。

引用: ゲームプログラマのためのコーディング技術 by 大圖衛玄(Moriharu Ohzu)さん

>Iteratorパターンにより、データ構造が異なるSTLのvectorとlistが同じ方法でアクセスできます。

```cpp
// イテレータを使ってstd::vector<int>aの要素にアクセス
for (auto i = a.begin(); i != a.end(); ++i) {
  *i = 0;
}

// イテレータを使ってstd::list<int>bの要素にアクセス
for (auto i = b.begin(); i != b.end(); ++i) {
  *i = 0;
}
```
ifstream / ofstream > インタフェースの分離

引用: ゲームプログラマのためのコーディング技術 by 大圖衛玄(Moriharu Ohzu)さん

> C++標準ライブラリのファイルストリームクラスには読込みと書込みが両方できるfstreamクラスのほかに、読込み専用のインタフェースを持っているifstreamクラス、書込み専用のインタフェースを持っているofstreamクラスが用意されています。読込みと書込みのインタフェースを分離しているわけです。

こういうのはあまり意識したことがなかった。
これまで意識しなかったことを意識するきっかけになり良いことだ。
c++ > 継承の関係は「コンパイル時の結合」です。実行時に掃除ロボットを戦闘ロボットに切り替えることはできません。委譲の関係であれば、実行時に掃除ロボットを戦闘ロボットに切り替えることはできません。

引用: ゲームプログラマのためのコーディング技術 by 大圖衛玄(Moriharu Ohzu)さん

> 継承の関係は「コンパイル時の結合」です。実行時に掃除ロボットを戦闘ロボットに切り替えることはできません。委譲の関係であれば、実行時に掃除ロボットを戦闘ロボットに切り替えることはできません。

<hr>
技術英語 > I have no objection. / The decision is not subject to challenge. 

@ Star Trek Voyager > Eye of the needle

ミーティングにてクルーの一人が言った言葉

> I have no objection.

<hr>
http://ejje.weblio.jp/content/objection
> 1. 【不可算名詞】 [具体的には 【可算名詞】] 〔…に対する〕反対; 異議，異論; 異存，不服 

<hr>
「異論」で思い出したのはあるコンペの申請時に見た言葉

> The decision <font color=red>is not subject to challenge</font>. 

訳すと「決定については異論は認めない」。
Xcodeでコードスニペット（入力補完）を追加する方法【開発効率向上】

Xcodeで独自のコードスニペットを追加する方法のまとめ。
※Xcode6.3.2で行いました
#コードスニペットって？
`for`と入力するとこんな感じで補完されるやつのことです。
![スクリーンショット 2015-08-05 3.13.47.png](https://qiita-image-store.s3.amazonaws.com/0/88056/c638e039-4cc0-0eed-f64e-93ded5220478.png)

#登録方法
今回は`@synchronized`をカスタムコードスニペットとして登録してみたいと思います。
###1.登録したいコードを記述する
カスタムコードスニペットとして登録したいコードをソースコード内で記述して選択状態にします。
![スクリーンショット 2015-08-05 3.34.20.png](https://qiita-image-store.s3.amazonaws.com/0/88056/c8166f74-d85f-3572-1a5c-355a9023e1e3.png)
###2.スニペットを登録する
選択したコードを下図の赤い部分（ユーティリティエリアのライブラリ領域）にドラッグ＆ドロップします。（ユーティリティエリアは Command+Option+0 で表示できます。）
![スクリーンショット 2015-08-05 4.01.32.png](https://qiita-image-store.s3.amazonaws.com/0/88056/30ad6b72-7b0b-1aae-2c59-6dfbea6e1068.png)

すると一番下に「My Code Snippet」というのが追加されます。
これだけでも一応登録は完了ですが、入力補完が効かなかったり、`self`の部分は状況によって書き換えたいのでもう少し詳細に設定します。
（このままで使用する場合は「My Code Snippet」をソースコードにドラッグ&ドロップすれば入力されます。）
![スクリーンショット 2015-08-05 3.43.34.png](https://qiita-image-store.s3.amazonaws.com/0/88056/69b4679c-9051-32f8-4737-a19527e513b8.png)
###3.スニペットの編集・設定をする
2.で追加された「My Code Snippet」を選択すると下図が表示されるので「Edit」を選択します。
![スクリーンショット 2015-08-05 3.56.55.png](https://qiita-image-store.s3.amazonaws.com/0/88056/ddf4fc54-935c-0390-38ca-638a57edec0e.png)

すると編集画面が開かれるので各種設定を行います。
![スクリーンショット 2015-08-06 1.57.08.png](https://qiita-image-store.s3.amazonaws.com/0/88056/100af73e-01d1-52d3-1158-267abcffc49a.png)
####設定項目
* Title
    * スニペットのタイトル
* Summary
    * スニペットの説明文
* Platform
    * 対象環境
    * iOS, OS X, ALLから選択
* Language
    * 対象言語
    * Objective-C, Swiftをはじめ、40種近くから選択
* Completion Shortcut
    * スニペット呼び出し用のショートカット
    * ここに設定した文字列をソースコード上で入力すると入力補完されるようになります
* Completion Scopes
    * ここで指定したスコープ内の場合に入力補完されます
    * ＋ボタンで複数設定できます

|Completion Scopes|説明|
|---|---|
|ALL|すべてのスコープ|
|Class Implementation|`@implementation`から`@end`の間
|Class Interface Methods|`@interface`から`@end`の間
|Class Interface Variables|`@interface`のあとのインスタンス変数を記述するスコープ
|Code Expression|コードの実装ができるスコープ。メソッド呼び出し内でも可能
|Function or Method|コードの実装が出来るスコープ。メソッド呼び出し内では不可
|Preprocessor Directive|プリプロセッサディレクティブを記述するスコープ。import文より下で`@interface`, `@implementation`より前
|String or Comment|文字列リテラルとコメント内
|Top Level|import文より下で`@interface`, `@implementation`より外のスコープ
###4.プレースホルダを設定する
登録した`@synchronized`のスニペットですが、`self`の部分は利用する状況によって変更されるのでプレースホルダとして設定します。
プレースホルダの設定は編集画面のコードの部分でプレースホルダにしたい箇所を<# #>で囲むとプレースホルダとして登録されます。
ちなみにプレースホルダには日本語も設定できます。
![スクリーンショット 2015-08-06 2.54.20.png](https://qiita-image-store.s3.amazonaws.com/0/88056/1beaf3a7-50a5-b0a7-dcfc-698a9005a6bb.png)

最後に「Done」をクリックすれば設定が反映されます。
#スニペットを共有する
追加したコードスニペットは
`~/Library/Developer/Xcode/UserData/CodeSnippets`
に保存されるのでこのフォルダを共有すれば他の人にも追加したスニペットを共有することができます。
#スニペットを削除する
登録したスニペットの削除はスニペットを選択してdeleteボタンで削除できます。

#追加例
定数定義などはよく記述するので登録しておくと便利だと思います。
![スクリーンショット 2015-08-06 3.43.38.png](https://qiita-image-store.s3.amazonaws.com/0/88056/5bc046b1-ff4b-712a-e907-8dc69fa25f87.png)
![スクリーンショット 2015-08-06 3.46.47.png](https://qiita-image-store.s3.amazonaws.com/0/88056/b1d1e68e-c455-c7ef-e43b-557e31284907.png)
#まとめ
頻繁に使用するコードはどんどんスニペットに登録して開発効率を上げていけるといいですね。
【Processing学習】 キャンバスを要素で埋め尽くす


processingが楽しいので、コツコツ継続して勉強していきたい。

今回はCanvasを要素で埋め尽くすような表現を学習する。

例えば、こういうやつ

>[The Internet Map](http://internet-map.net/)

![The_Internet_map.png](https://qiita-image-store.s3.amazonaws.com/0/41889/8a70b0a5-2d50-37df-0957-5b7f16486634.png)



今回は基礎なので、大きさと位置がランダムなサークルを生成する。
ポイントは「要素同士は重なり合わない」こと。

まず全体のコードはイカ

```java

ArrayList<Circle> circles = new ArrayList<Circle>();

// 生成するサークルの直径
int minDiam = 2;
int maxDiam = 200;

Circle c = new Circle(new PVector(0, 0), 20);

void setup() {
  size(640, 640);
  circles.add(c);
  background(255);
}

void draw() {
  c.draw();
  
  PVector newLoc = new PVector(random(width), random(height));
  int newDiam = (int) random(minDiam, maxDiam);
  
  while(detectAnyCollision(circles, newLoc, newDiam)) {
    newLoc = new PVector(random(width), random(height));
    newDiam = (int) random(minDiam, maxDiam);
  }
  
  c = new Circle(newLoc, newDiam);
  circles.add(c);

}

static boolean detectAnyCollision(ArrayList<Circle> circles, PVector newLoc, int newDiam) {
  for (Circle c : circles) {
    if (c.detectCollision(newLoc, newDiam)) {
      return true;
    }
  }
  return false;
}

class Circle {
  PVector loc; // 位置(location)
  int diam; // 直径(diammeter)
  
  Circle(PVector loc, int diam) {
    this.loc = loc;
    this.diam = diam;
  }
  
  void draw() {
    fill(0);
    ellipse(loc.x, loc.y, diam, diam);
  }
  
  //衝突判定
  boolean detectCollision(PVector newLoc, int newDiam) {
    return dist(loc.x, loc.y, newLoc.x, newLoc.y) < ((diam + newDiam) / 2); 
  }
}

```

ポイントはここ

```java
//衝突判定
boolean detectCollision(PVector newLoc, int newDiam) {
  return dist(loc.x, loc.y, newLoc.x, newLoc.y) < ((diam + newDiam) / 2); 
}
```

すでにキャンバス上に存在する円(A)と、新たに生成しようとする円(B)のそれぞれの中心点の距離を`dist()`で測り、その長さが、円(A)の半径と円(B)の半径を足したものより短いかどうかで衝突判定を行う。

絵に描いた(ヘタクソ...)

![col.png](https://qiita-image-store.s3.amazonaws.com/0/41889/7928ecb9-6483-4efe-31ed-b06e493132e5.png)

あとは、イカの部分で衝突判定を繰り返し行い、描画スペースがなくなるまでサークルを生成し続ける。

```java

while(detectAnyCollision(circles, newLoc, newDiam)) {
  newLoc = new PVector(random(width), random(height));
  newDiam = (int) random(minDiam, maxDiam);
}

```

Runすると、こんな感じ

![sketch_150805b.png](https://qiita-image-store.s3.amazonaws.com/0/41889/2744974d-6d1f-acc6-13dc-9d6763deefa2.png)

おわり
【随時更新】私的メモ：OpenCL (とPezy-SC?)

この辺 (http://www.pezy.co.jp/) にぃ、エコい計算機あるらしいっすよ？
じゃけんOpenCL勉強しましょうねー。

---
どうでもいいんだけれど、Pezy-SCにはPezy-SC用の何かを書かなければならなかったはず。
PZなんとかかんとかだった気が…(すっかり忘れてしもうた。。。)

---
コンパイルの仕方。
Macの場合はclang(clang++)で、
`clang++ main.cpp -framework opencl`
でいけました。
Linuxの場合は他に何か色々と必要…。
なおg++じゃだめでした！

openCLを使うにはヘッダが必要で(当たり前だよなぁ？)、
これもMacの場合は`#include <OpenCL/opencl.h>`にありました。

---
デバイス側コードのバイナリを読み込むオフラインコンパイルと、
ソースを読んでホストコードと同時にコンパイルかけるオフラインコンパイルがある。
組み込みとかなら前者なんだろうけど、数値計算的には後者なんじゃないかなぁという感じですはい。~

と思ったらなんとかSCはオフラインコンパイルのみの対応でした。

---
構造体使いたい。
↓こうやって書かなきゃ駄目みたい。(Cってそうなんだっけ。。。)

```c
typedef struct {
    double x, y;
} test_t;
```

---
codeの中でオフラインコンパイルする場合、
ビルドの順番と.clの中に出てくる順番を一致させないと駄目みたいですね(食い気味)。

以下勉強中。。。
CSSで蛍光ペンみたいな線を引く

![スクリーンショット 2015-08-06 1.22.12.png](https://qiita-image-store.s3.amazonaws.com/0/76843/0da15f64-f3e3-0c40-a596-affab08445b9.png)

```css:filename
.line-pen-maker {
  background: linear-gradient(transparent 40%, #ff9 40%); 
}

```


CSS3の線形グラデーションを使用してるみたい。画像を作るのは手間だし、background-colorやborder-bottomだとイマイチですが、これだといい気がします。



![スクリーンショット 2015-08-06 1.22.18.png](https://qiita-image-store.s3.amazonaws.com/0/76843/fffd0c5c-a60b-edb0-1836-d3763cb41e7d.png)
管理画面 左メニューの項目名変更

function.phpに下記記述


```php:function.php

add_filter(  'gettext',  'change_side_text'  );
add_filter(  'ngettext',  'change_side_text'  );

function change_side_text( $translated ) {

/* $translated = str_ireplace(  '現状',  '変更後',  $translated ); */

     $translated = str_ireplace(  'ダッシュボード',  '変更後',  $translated );
     $translated = str_ireplace(  '投稿',  '変更後',  $translated );
     $translated = str_ireplace(  'リンク',  '変更後',  $translated );
     $translated = str_ireplace(  'メディア',  '変更後',  $translated );
     $translated = str_ireplace(  '固定ページ',  '変更後',  $translated );
     $translated = str_ireplace(  '外観',  '変更後',  $translated );
     $translated = str_ireplace(  'ユーザー',  '変更後',  $translated );
     $translated = str_ireplace(  '設定',  '変更後',  $translated );
     return $translated;
}
```
管理画面 特定の左メニューを非表示にする方法

アクションフック使用
function.phpに下記記述

```php:function.php


// メニューを非表示にする
function remove_menus () {

 global $menu;
 unset($menu[2]); // ダッシュボード
 unset($menu[5]); // 投稿
 unset($menu[10]); // メディア
 unset($menu[15]); // リンク
 unset($menu[20]); // ページ
 unset($menu[25]); // コメント
 unset($menu[59]); // メニューの線2
 unset($menu[60]); // テーマ
 unset($menu[65]); // プラグイン
 unset($menu[70]); // プロフィール
 unset($menu[75]); // ツール
 unset($menu[80]); // 設定

remove_menu_page('wpcf7'); //Contact Form 7

 }

add_action('admin_menu', 'remove_menus');

```
Ansible で他のホストの一覧を参照する

[Ansible](https://github.com/ansible/ansible) で他のグループに属するホスト一覧を参照する方法のメモ。

# モチベーション

検証のために一時的に使用する次のような小規模なシステムを Ansible で構成管理したかった。

- 1台のリバースプロキシサーバと複数のHTTPサーバで構成される。
- HTTPサーバの台数は可変。
- Inventory File に記載したHTTPサーバのリストから、リバースプロキシサーバで使用する設定ファイルを生成したい。

# 結論

[Magic Variables](http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts) の `groups` を使用する。

`groups` は Inventory のグループがキー、ホストのリストが値になった辞書になている。

# 詳細

Ansible にはマジック変数 (Magic Variables) という自動で設定される変数があり、これを使うことでホストの情報を参照することができる。

試しに次のような Inventory File と Playbook を書いて確認してみた。

```text:hosts
[proxy]
127.0.0.1

[backend]
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
```

Inventory File にはリバースプロキシサーバ用のグループ proxy と、HTTPサーバ用のグループ backend の2つのグループを定義した。

```yaml:site.yml
---
- hosts: proxy
  tasks:
    - name: dump hosts in backend group
      template:
        src: "{{ inventory_dir }}/config.txt.j2"
        dest: "{{ inventory_dir }}/config.txt"
```

設定ファイルに見立てたテンプレートを用意し、グループ backend に属するすべてのホスト名が出力されるようにする。

```jinja:config.txt.js
{% for host in groups['backend'] %}
- {{ host }}
{% endfor %}
```

実行してみる。

```console
$ ansible-playbook -i hosts site.yml
...
$ cat list.txt
- 192.168.1.1
- 192.168.1.2
- 192.168.1.3
- 192.168.1.4
- 192.168.1.5
```

きちんとホスト名が出力されている。

これでHTTPサーバが増減しても Inventory File を書き換えで対応できる。

# 参考

- [Magic Variables, and How To Access Information About Other Hosts](http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts)
- [Ansible マジック変数の一覧と内容](http://qiita.com/h2suzuki/items/15609e0de4a2402803e9)