OmniAICreator/Qiita-1.07M huggingface dataset:
UIAlertController表示問題対応済みの呼び出しメソッド

# はじめに
UIAlertControllerを表示する際に2点課題がありました。
　・常にRootViewControllerから出したい
　・表示処理を実行しても実際に表示されるまで1秒ほど待たされる現象がある

そこで、その対応を含んだAlert表示用処理を使い
すべてのAlertをこのメソッド経由で出すようにしています。

# UIAlertController表示用メソッド

```objc:

+ (void)showAlertController:(UIAlertController *)alertController
{
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.0001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        
        UIViewController *baseViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
        
        while (baseViewController.presentedViewController && !baseViewController.presentedViewController.isBeingDismissed) {
            baseViewController = baseViewController.presentedViewController;
        }
        
        [baseViewController presentViewController:alertController animated:YES completion:nil];
        
    });
}

```

## 使い方の例

```objc:

    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:@"削除しますか？" preferredStyle:UIAlertControllerStyleAlert];
    
    [alertController addAction:[UIAlertAction actionWithTitle:@"キャンセル" style:UIAlertActionStyleCancel handler:nil]];
    
    __block __weak MyViewController *refSelf = self;
    [alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        [refSelf deleteLogic];
    }]];
    
    [Util showAlertController:alertController];

```

# ActionSheet表示時のエラー対応

preferredStyleにUIAlertControllerStyleActionSheetを指定して表示しようとした際にこちらのエラーが出る場合。

```lang:
NSGenericException', reason: 'Your application has presented a UIAlertController (<UIAlertController: 0x7b974060>) of style UIAlertControllerStyleActionSheet. The modalPresentationStyle of a UIAlertController with this style is UIModalPresentationPopover. You must provide location information for this popover through the alert controller's popoverPresentationController. You must provide either a sourceView and sourceRect or a barButtonItem.  If this information is not known when you present the alert controller, you may provide it in the UIPopoverPresentationControllerDelegate method -prepareForPopoverPresentation.'
```

以下の3点の指定をしましょう。
値は適宜置き換えてください。

```objc:
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"アクションシートのタイトル" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];

    alertController.popoverPresentationController.sourceView = self.view;
    alertController.popoverPresentationController.sourceRect = CGRectMake(self.view.bounds.size.width / 2, self.view.bounds.size.height /2, 1.0, 1.0);
    alertController.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionDown;

```

# おわりに
調べたり対応するのに使った時間が、誰かの役に立ちますように。
参考になりましたら幸いです。
[C++] priority_queue custom compare method

If you can not edit the ListNode struct, you also can custom your own compare method of `priority_queue`. Just do something like this:

```cpp
struct cmp {
    bool operator()(const ListNode* a, const ListNode* b) const {
        return a->val > b->val;
    }
};
```

When create a priority queue, you can use the struct of 'cmp' for the priority queue.

```cpp

priority_queue<ListNode*, vector<ListNode*>, cmp> q;
```
コピペで使えるメモリ使用量計測用スニペット


```php
printf("[Before] MEMORY USAGE: %0.2fMB\n", round(memory_get_usage() / 1024 / 1024), 2);

/* ここにコードを記載 */

printf("[After] MEMORY USAGE: %0.2fMB\n", round(memory_get_usage() / 1024 / 1024), 2);
```
Laravelのexists/uniqueバリデータでNULL/NOT NULLの扱い

Laravelのバリデータ、便利です。

でも、NULLチェックの扱いではまってしまいましたので、
メモ書きしておきます。

existsとかuniqueバリデータで値をチェックする際、
"is null"の場合は、NULLを記述しましょう。

ex)
```'staff_id' => 'exists:staffs,id,deleted_at,NULL',```

**[注意！] null/Nullは不可です。**
Laravelコアの中で、リテラルで"NULL"となっていることに依ります。

ちなみに、not nullは
NOT_NULLを指定しましょう。

ex)
```'staff_id' => 'exists:staffs,id,section_id,NOT_NULL',```
Git Command Cheet Sheet


##レポジトリの初期化
git init

##グローバルなユーザ名とメアド設定
git config —global user.name “~~~~”
git config —global user.email “~~@~~”

##特定のレポジトリ用のユーザ名とメアド設定
git config user.name “~~~~”
git config user.email “~~@~~”

##Git出力の色分け
git config —global color.ui “auto”

##レポジトリのクローン
git clone <URL>

git remote add <リモートレポジトリ><レポジトリのURL>

##ブランチの削除
git br -d 

##コミット前に
git diff HEAD
//直前との差分確認ができる

##ブランチをマージするときにコメントを残す
git merge —no-ff  （ブランチ名）

##ブランチを視覚的に
git log —graph

##現在のリポジトリで行われた作業ログ
git reflog

##コミットメッセージの修正
git commit —amend

##マージ前のコミット内容の修正(歴史の改ざん←）
git rebase -i HEAD~2
//続いて2行目の内容のpickをfixupと書き換える

##addとcommitを同時に
git commit -am ‘コメント’

##リモートのブランチdevelopをチェックアウト
git co -b develop origin/develop

##間違えてaddした時の対処
git rm --cached -f -r [folder name]
or
git rm --cached -f [file name]

##最新の状態に常に更新
git remote add upstream [originのサイト]
git fetch upstream
BasicTeX-2015でRe:VIEWの環境を用意する

# TeXとOS X

OS X用のTeX(TeX Live)としてはMacTexというパッケージがありますが、これは超大きい(2GB以上)のでインストールが大変です。

そこでBasicTeXです。

# BasicTeXとは

MacTexの小さい版。下記URLよりダウンロードできます。

https://tug.org/mactex/morepackages.html

# Re:VIEW環境の用意

いろいろエラーが出るので、足りないパッケージをインストールします。

review-sample-bookの場合は以下の手順でビルドできるようになります。

```
$ sudo tlmgr update --self --all
$ sudo tlmgr install collection-langjapanese
$ sudo tlmgr install framed wrapfig pdfcomment marginnote datetime fmtcount bezos collection-fontsrecommended filehook
```

# 参考

- http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?TeX%20Live%2FMac#basictex
ConEmu + nyagos で Windows ターミナル環境を作る

ちょっと前まで Windows 上でターミナルを使うときは [ckw](http://ckw-mod.github.io/) + [nyaos 3.x](http://www.nyaos.org/index.cgi?p=NYAOS+3000.ja) を使っていましたが、つい最近 [ConEmu](http://conemu.github.io/) + [nyagos](https://github.com/zetamatta/nyagos) に変更しました。主な理由は以下。

- ConEmu はタブが使えて、タブ毎に別々のシェルを起動できる
- nyagos は UNICODE の文字化けが起きない

環境構築手順をメモしておきます。


Nyagos のインストール
----
[Releases · zetamatta/nyagos](https://github.com/zetamatta/nyagos/releases) から最新の zip をダウンロードして、任意の場所に解凍するだけ。ここでは `c:\app\nyagos` に解凍するものとします。


ConEmu のインストール
----
[ConEmu - Handy Windows Terminal](http://conemu.github.io/) の "Download" からインストーラー版かポータブル版好きな方をダウンロードしましょう。

インストールが終わったら起動してください。


ConEmu の設定
----
画面右上の三本線のアイコンをクリックし、 "Settings..." をクリック。

### 日本語フォントを設定する

![conemu_ss_1.png](https://qiita-image-store.s3.amazonaws.com/0/8267/48054518-c581-d99f-d08b-70de7ab273b9.png)

左側のツリーから "Main" をクリックし、以下のように設定します。

- `Main console font`: 好きな日本語フォントを設定
- `Monospace`: チェックを外す
  - このチェックを外さないと日本語のカーソルがズレます
- `Anti-aliasing`: "Clear Type" にチェック

### nyagos をデフォルトシェルにする

![conemu_ss_2.png](https://qiita-image-store.s3.amazonaws.com/0/8267/9dd78380-8e56-8402-6697-6715c0cec22f.png)

1. "Startup > Tasks" をクリック。
1. "+" をクリック。
1. グループ名に "nyagos" 、コマンド入力欄に `c:\app\nyagos\nyagos.exe` を指定。
1. "Up" を連打してタスクリストの一番上に並べる。

ここまで終わったら、"Startup" をクリックし、"Specified named task" に `{nyagos}` を指定。

![conemu_ss_3.png](https://qiita-image-store.s3.amazonaws.com/0/8267/b3dcdd70-0157-b7a4-7233-09faca84a8f6.png)

以上で "Save settings" をクリックし、ウィンドウ上部の "+" アイコンをクリックすれば、nyagos が起動します。


nyagos の追加設定
----
nyagos は標準で `ll` コマンドなどが無くなっている (nyaos の頃はあったはず) ので、エイリアスを追加してやります。設定ファイルは `c:/Users/<ユーザー名>/_nyagos` です。

例えば `ll` コマンドは以下のように追加できます。

```bash:~/_nyagos
alias "ll=ls -oFl"
```

なお、 Lua による独自コマンドの定義も可能です。詳しくは公式マニュアルの [nyagos/01-Install_ja.md](https://github.com/zetamatta/nyagos/blob/master/Doc/01-Install_ja.md) あたりを参考に。

ひとまず今日はここまで。

![conemu_ss_4.png](https://qiita-image-store.s3.amazonaws.com/0/8267/f73966b3-c16d-e645-35dc-bf77b01ca501.png)


参考
----
- [Windows用ターミナルアプリConEmuのフォント設定 - モーグルとカバとパウダーの日記](http://d.hatena.ne.jp/stealthinu/20130527/p1)
ローカル開発環境設定メモ

CentOSを導入してます。

##ボックスの追加
vagrant box add \<名前> \<アドレス>

##仮想ボックスの初期化
 vagrant init \<名前>

##Vagrantfileの編集
vi Vagrantfile
//IPアドレスを編集する

##ボックスの作成
 vagrant up

##システムを最新の状態に
 sudo yum update -y

##ネットワークの設定
 sudo vi /etc/resolv.conf
	options single-request-reopen
(centosのver6から速くなる設定らしい)

##ファイアウォールを切る（開発用）
 sudo service iptables stop

##以降自動で設定が使われるように
 sudo chkconfig iptables off

##今の仮想マシンに入ってるものチェック
yum list installed

yum list installed | grep httpd
//特定のもの(httpd)のチェック

##httpdのインストール
sudo yum install -y httpd 

##httpdを立ち上げる
sudo service httpd start

##再起動しても有効に
sudo chkconfig httpd on

##vagrantユーザがこちらにアクセスできるように
sudo chown -R vagrant:vagrant /var/www/html

##情報確認
yum info プログラミング言語(phpとか)

##zipとかのゲット
wget \<httpアドレス>

##epelのゲット
wget　http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

##remiのゲット
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

##epelの使用
sudo rpm -Uvh epel-release-6-8.noarch.rpm

##remiの使用
sudo rpm -Uvh remi-release-6.rpm

##epelのenabled=0にして他のものを使えないように
sudo vi /etc/yum.repos.d/epel.repo
FreePBXにetckeeperを入れる

## はじめに

FreePBXはGUIで設定を変更するので、/etc/asterisk以下のファイルなど、どこが変更されたかわからなくなってしまう場合があります。FreePBXの設定変更を記録するために、etckeeperを入れておくと便利です。

以下の手順は、FreePBXにetckeeperを入れるための手順です。
FreePBX Distro 64bit Stable-6.12.65 (Asterisk 13)で確認しています。

## 'epel-release' パッケージを入れる

etckeeperはEPELに入っているので、まずepel-repleaseパッケージを入れてEPELが使えるようにします。

````
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
````

## EPELのキーをインポートする

    # rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

## EPELのパッケージをデフォルト無効にする

EPELのパッケージが、FreePBXのパッケージとコンフリクトしてしまうので、デフォルトではEPELを無効にします。

````
# vi /etc/yum.repos.d/epel.info
````

[epel]セクションの、enabled=1を、enabled=0に書き換えます。

````
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
````

## etckeeperのインストール

````
# yum update
# yum --enablerepo=epel install etckeeper
````

## etckeeperの設定変更

    vi /etc/etckeeper/etckeeper.conf

VCS="git"になっているのを確認します。gitになっていない場合は、VCS="git"に変更します。

## etckeeperの初期化

````
# etckeeper init
````

## 初回コミット

etckeeperを初期化したら、現在の/etcの内容をコミットします。

````
# etckeeper commit "Initial revision."
````

## おわりに

これで、FreePBXの/etc以下をetckeeperで管理できるようになりました。
この後は、普通のetckeeperの使い方と同じです。

### ログの確認

    etckeeper vcs log

### 差分の確認

    etckeeper vcs diff

### 差分のコミット

    etckeeper commit "add exten"
Docker Cheet Sheet（メモ）

さっと書いただけなんで適宜変更していきます。



##Docker の導入(Ubuntu版）
sudo apt-get update
wget -qO- https://get.docker.com/ | sh


##Docker imageの検索
sudo docker search \<調べたいosとか> | more

Docker imageを引っ張ってくる
sudo docker pull \<調べたやつ>

##imageの確認
sudo docker images
//Image IDがImageの実態となる。

##Imageの設定の確認
sudo docker inspect \<名前+TAG>or\<ID>

##Imageの削除
sudo docker rmi \<名前+TAG>or\<ID>

##コンテナの実行
sudo docker run \<名前> \<実行したいコマンド> (e.g. echo "hello world")

##実行中のコンテナの確認
sudo docker ps

##実行後も含めたコンテナの確認
sudo docker ps -a (\<-n=数>で数を指定できる)

##コンテナの削除
sudo docker rm \<ID>

##継続的にコンテナの実行
sudo docker run -d \<imageの名前> free -s 3
//-dはバックグラウンドで走らせる
//freeはメモリの状況を見る
//3は3秒ごとに走らせる


##実行中のタスクのログの確認
sudo docker logs

##タスクを前面に出す
sudo docker attach --sig-proxy=false \<ID>

##実行中のコンテナを止める
sudo docker stop (or kill) \<ID>

##実行中のコンテナを進める
sudo docker start \<ID>

##コンテナの中で作業をする方法
sudo docker run -i -t \<image> /bin/bash
//-i インタラクティブモード＝コンテナの中に
//-t ターミナルを立ち上げる

##imageの作成
sudo docker commit \<ID> \<Imageの名前 e.g. kota/\<sth>>



##Dockerfileについて（Dockerfileの編集)

Dockerfile (例)
From \<image>
MAINTAINER \<name>\<address>
//RUN \<sth> (e.g. RUN echo "now building...")
//CMD[\<sth>](e.g. CMD["echo","now running"];
RUN yum install -y httpd
ADD ./index.html /var/www/html
EXPOSE 80
CMD["/usr/bin/httpd", "-D", "FOREGROUND"]


 →index.htmlを作る

sudo docker build -t \<新しいimageの名前>

sudo docker run \<image>



##docker hubにログイン
sudo docker login

##imageのpush
sudo docker push \<imageの名前>


##参考
http://docs.docker.com/linux/step_one/
http://dotinstall.com/lessons/basic_docker
WebRTCプラットフォーム tokboxのopentokを調べてみた(番外編) SFUについて考えた

## 番外編として
今回はopentokでも使われているSFUについて、勝手に考えてみたことを書いてみます。SFU/MCUについてはこちらの資料（スマートフォンでのWebRTC活用）の<a href="http://www.slideshare.net/minamotot/webrtc-44772839/27" target="_blank">27ページ</a>をご覧ください。

* SFU... Selective Forwarding Unit：映像/音声ストリームを特定の相手に配信。ストリームの分配も担当
* MCU... Multipoint Control Unit：多拠点制御装置。拠点別の再エンコードや、複数映像の合成も実施

## SFUの強み
SFUとMCUはどちらもPeer-to-Peerの通信経路爆発問題に対するソリューションです。特にSFUの場合は、「サーバー側で再エンコードしない」ということが最大の利点になります。

* サーバー側で再エンコードしない
* → サーバー側のCPU負荷が低い
* → 1つのサーバーで（MCUに比べて）多くのクライアントをつなげることができる

## SFUの弱み
SFUの弱みも、同じく「サーバー側で再エンコードしない」という点にあると考えています。どういうことか、もう少し補足してみます。

### Peer-to-Peerの場合
WebRTCの場合、通信相手ごとに動画/音声をエンコード（圧縮）しています。通信経路の状態をモニターしていて、相手に合わせた品質を調整しています。

例えば通信相手が2人いる場合に、片方が高速の回線でつながっていれば低圧縮/高ビットレートで送り、もう片方がモバイルなどの低速回線であれば高圧縮/低ビットレートで送ります。
つまり「相手ごとに、バイトレベルでは送っている情報が違う」ということです。重要なので繰り返しますが、「相手ごとに送信している内容が異なり」ます。
その結果、次のような特性があります。

* 相手ごとにエンコードするので、CPU負荷が高くなる
* 相手ごとに合わせるので、低速回線の相手が混じっていても、それなりにコミュニケーションできる
![p2p_encode.png](https://qiita-image-store.s3.amazonaws.com/0/19403/35d5f2e3-9d60-54a6-1109-12df446ab6c2.png)

WebRTCでは個別にエンコードするというアグレッシブな戦略が採用されていて、それを知った時にはびっくりしました。良く「WebRTCは重い。ファンが唸る」と言われるのはそのせいですね。

### MCUの場合
送信元は相手がMCUサーバーだけなので、エンコードは1回だけになります。代わりにMCUサーバー側で、映像を合成したあと、複数の受信側に合わせて個別にエンコードします。
したがって、個々の回線状況に応じてそれなりの品質になります。反面サーバーのCPU負荷が高くなってしまいます。
![mcu_encode.png](https://qiita-image-store.s3.amazonaws.com/0/19403/a99a913e-7422-dfa9-2ebb-901b870d86fb.png)


※実際には「映像の合成」でタイミング合わせの難しい問題があるのですが、今回は触れません。

### SFUの場合
SFUはMCUと逆になります。

* すべての受信側に同じバイトデータを送る
* 低速回線の相手が混じっていると、その相手とはまともにコミュニケーションできない（映像停止、音声断絶）

モバイルが1人混じっていたりすると、通信が断続的になり、その人はまともに会話できないかもしれません。これが、私の考えるSFUの最大の弱点です。
![sfu_noencode.png](https://qiita-image-store.s3.amazonaws.com/0/19403/990d0ff9-1a6c-a987-e13c-8ae578283f8f.png)


## opentokの知恵
SFUを使っているopentokはこの点にどう対処しているのでしょうか。その回答がこちらにありました。

* <a href="https://tokbox.com/platform/fallback" target="_blank">Audio Fallback</a> ... 回線状況が悪い場合、音声のみの通信に切り替わる
![audio_fallback.png](https://qiita-image-store.s3.amazonaws.com/0/19403/f17889b7-1c46-eb82-1feb-93351bcc24e8.png)


説明にはさらに複数の工夫が書かれています。

* video-recovery により、回線が回復したら映像ありに復帰する
* Adaptable Frame-Rate Control で、切り替わる閾値をカスタマイズできる

この分野で実際にサービスを続けてきたからこそのノウハウですね。

## その先か？SVCの可能性
SFUやMCUと違った考え方として、SVC(Scalable Video Coding)というものが提唱されています。

* <a href="http://www.nojitter.com/post/240168352/implementing-svc-in-webrtc" target="_blank">Implementing SVC in WebRTC</a>

きちんと理解できていませんが、必ずしもMCUなどと対立するものではないと受け取っています。P2Pや一般的なMCUのようにエンコードを相手別に行うのではなく、何段階のグループに分けて行う、というものだと思われます。通信相手が多い場合（例えば10人以上など）に有効でしょう。

これは全く新しい概念ということはなく、大規模な映像のオンデマンド配信や、ライブ配信の仕組みの中には以前から取り入れられている方式です。これを、WebRTCの世界にも持ち込もう、ということなのでしょうね。

ビット密度を変えてもコミュニケーションが成立する映像/音声の世界では、まだまだ色々な工夫の余地がありそうです。
setIntervalを連続使用すると、clearIntervalが効かない問題

javascriptでゲームを作る際に毎秒を数え、制限時間を表示したかったのでsetIntervalを使用した。
だが、2度目の使用時にclearしたはずが前のintervalが残ってしまうことがあった。
どうやら他の人も直面したらしく、参考にさせていただいた。
>http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1063499895

```js
    var timerArray = new Array();
	function exec_interval() {
		timerArray.push(setInterval("alert('5秒間隔で表示されます。');", 5000));
	}
	
	function stop_interval() {
		if (timerArray.length > 0) {
		clearInterval(timerArray .shift());
		}
	}
```

shiftで配列にあるintervalを消すことで、全て綺麗に消えてくれた。
elasticsearch zookeeper

Elasticsearch zookeeper pluginを1.6.0に対応させてみた

https://github.com/shinjiikeda/elasticsearch-zookeeper


インストール方法

```shell
% bin/plugin -url https://github.com/shinjiikeda/elasticsearch-zookeeper/releases/download/v1.6.0/elasticsearch-zookeeper-1.6.0.zip -install zookeeper
```

設定

elasticsearch.yml

```yaml
discovery:
    type: com.sonian.elasticsearch.zookeeper.discovery.ZooKeeperDiscoveryModule
sonian.elasticsearch.zookeeper:
    settings.enabled: true
    client.host: localhost:2181
    discovery.state_publishing.enabled: true
```
[iOS]ストーリーボードに貼ったUILabelに、インタラクティブな処理を追加したい


#やりたいこと
**ラベルのような動かないControlも、IBActionでインタラクティブに処理をさせたい.**

##かいけつさく
GestureRecognizer Objectを使おう。ほぼボタンと同じようにアクションが記述できる。
**可能な限りストーリーボードだけ使い、コードはアクションメソッドだけ書きたい**。

##やりかた
0. Xcodeでストーリーボードを使ったプロジェクトを準備。Versionは現行。
1. ObjectLibraryからTapGestureRecognizerをストーリーボードのViewControllerの上部（黄色とかオレンジのアイコンが並んだバーになってる領域な）にD&Dで設置する。

2. TapGestureRecognizerのReferencing Outlet Collectionsの◎を引っ張って、画面のVC上のラベルコントロール(UILabel)にドロップしてヒモ付ける。

3. 実行したい内容をIBActionメソッドとして記述しておく。
　　→このようなシグネチャのメソッド　-(IBAction)selector:(id)sender{}

4. TapGestureRecognizerの sent Actionsの◎からVCパネルに引っ張ると、IBアクションメソッドがリストになって表示されるので、今書いたメソッドを選択する。

いっぱい番号ふってあるが、こんだけ。実際は、1つコードを書いて、画面上で3つ操作しするだけだからラクラク。

※なお、ボタンなど元々インタラクティブなコントロールに、この処理を適用すると、本来のボタンアクションがキャンセルされるので、本来の処理も残したい場合は、Gestureオブジェクトのbehavor欄の cansels touch in veiwsのチェックをOFFする。

##そのた
1. これは、ObjectiveCの話だが、たぶんSwiftでも同じようにいけるんじゃないかな？　試してみてくれ！
2. あとGestureRecognizerの数を増やすか、アクションメソッド側でsenderによる分岐を入れることで、複数のコントロール毎に処理できるけど、面倒なんで省略。

[EOF]
配列の値が数値だったら文字列にする(多次元配列対応)


サーバからレスポンスを返す際に、数値と文字列が混在しているとフロント側でちょっと面倒と言われたので作りました。
多次元配列でもいけますが再帰処理を使っているので、あまりに階層が深い配列だとmemory_limitのエラーが出ちゃうかと思います。


```php
public static function int2stringByArray( array $array ) {
		
		$responseArray = array();
		foreach ( $array as $key => $value ) {
			
			// 値が配列の場合
			if ( is_array( $value ) === TRUE ) {
				$responseArray[$key] = self::int2stringByArray( $value );
			// 値がintの場合
			} else if ( is_int( $value ) === TRUE ) {
				$responseArray[$key] = (string)$value;
			} else {
				$responseArray[$key] = $value;
			}
			
		}
		
		return $responseArray;
		
	}
```
Yahoo注文検索APIでリクエストを投げても401 insufficient scopeエラーとなる


ChromeアプリのPostmanを利用してYahoo注文検索APIにリクエストをPOSTしたところ、
```
WWW-Authenticate: Bearer realm="yahooapis.jp", error="insufficient_scope", error_description="insufficient scope"
```
というエラーが返ってきました。401については許可のないアクセスということですが詳細な内容が注文検索APIのドキュメントに記載がなく対処方法がわかりません。
GPUの使用状況を知る(Ubuntu14, Cuda7)

nvidia-smiコマンドでGPUの使用状況などを知る(Ubuntu14, Cuda7)。
オプションいっぱい。とりあえず使いそうなやつ。一緒に使えたり使えなかったりする。
<dl>
  <dt>オプションなし</dt>  <dd>サマリ</dd>
  <dt>-L, --list-gpus</dt>  <dd>GPUを列挙</dd>
  <dt>-i, --id=</dt>  <dd>GPUを指定</dd>
  <dt>-f, --filename=</dt>  <dd>ファイルに出力</dd>
  <dt>-l, --loop=</dt>  <dd>指定されたインターバル（デフォルト5秒）で表示を続ける。Ctrl+Cでとめる。</dd>
  <dt>-q,   --query</dt>  <dd>GPU情報表示</dd>
  <dt>-x,   --xml-format</dt>  <dd>XMLで出力</dd>
  <dt>-d,   --display=</dt>  <dd>特定の項目だけ出力 カンマでつなげる。MEMORY,UTILIZATION, ECC, TEMPERATURE, POWER, CLOCK,COMPUTE, PIDS,PERFORMANCE, SUPPORTED_CLOCKS, PAGE_RETIREMENT, ACCOUNTING.</dd> 
</dl>

* 10秒おきにGPU1のサマリを表示
`$ nvidia-smi -l 10 -i 1`
* watchでもよい
`$ watch -n10  "nvidia-smi -i 1"`
* GPUを使ってるプロセスを知りたい。サマリのほうが見やすいけど。
`$ nvidia-smi -q -d PIDS`
XMPとは


(調べ物)

= Adobe Extensible Metadata Platform

メディアやワークフロー間でのメタデータを保持するための、XMLで記述されたオープンソースなテクノロジのことである。

そういえば昔、Photoshopファイル内にプラグイン用の独自データを保存させたく、この領域を利用した記憶がある。

picasaでも使われているらしく、最近では、GoogleがThetaのような天球画像/動画のために、XMPを拡張して[Photo Sphere XMP Metadata](https://developers.google.com/photo-sphere/metadata/)を定義しているようだ。

もしかしたら、天球画像はこれがデファクトとなるのかもしれないと思うと、把握しておくべきか。

QuickTime VRのフォーマットや、そもそもまだ存在するのか、きになるところもあるが、まぁ大勢に影響なさそうなので気にしなくてもいいか。

---
[XMP仕様の概要](http://www.antenna.co.jp/XML/xmllist/XMP/AboutXMP.htm)


EXIFリソースのXMPによる記述例
(最新版では、rdf:RDFがルート要素である)

```XMP
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
	<rdf:Description 
		xmlns:tiff="http://ns.adobe.com/tiff/1.0" 
		about="" 
		tiff:Make="Canon" 
		tiff:Model="Canon PowerShot S300" 
		tiff:Orientation="1" 
		tiff:XResolution="180/1" 
		tiff:YResolution="180/1" 
		tiff:ResolutionUnit="2" 
		tiff:DateTime="2001-07-25T20:18:27-07:00" 
		tiff:YCbCrPositioning="1">
	</rdf:Description>
	<rdf:Description 
		xmlns:exif="http://ns.adobe.com/exif/1.0" 
		about="" 
		exif:ExposureTime="1/60" 
		exif:FNumber="27/10" 
		exif:ExifVersion="0210" 
		exif:DateTimeOriginal="2001-07-25T20:18:27-07:00" 
		exif:DateTimeDigitized="2001-07-25T20:18:27-07:00" 
		exif:CompressedBitsPerPixel="3/1" 
		exif:ShutterSpeedValue="189/32" 
		exif:ApertureValue="93/32" 
		exif:ExposureBiasValue="0/3" 
		exif:MaxApertureValue="187820/65536" 
		exif:SubjectDistance="913/1000" 
		exif:MeteringMode="5" 
		exif:Flash="1" 
		exif:FocalLength="173/32">
		<exif:ComponentsConfiguration>
			<rdf:Seq>
				<rdf:li>1</rdf:li>
				<rdf:li>2</rdf:li>
				<rdf:li>3</rdf:li>
				<rdf:li>0</rdf:li>
			</rdf:Seq>
		</exif:ComponentsConfiguration>
	</rdf:Description>
</rdf:RDF>
```

バイナリデータに埋め込む方法（画像ファイルの形式について知らなくてもXMPパケットが判別できる方法）も規定されているようだ。


これ以上は、必要になった時に調べよう。
おわり。
DataBindingしたDataGridViewでColumnを追加する

#概要

BindingモードのDataGridView.DataSourceに列を追加すると、DataGridViewにも列が追加されて便利だが、SelectionModeがColumnHeaderSelectまたはFullColumnSelectな時は工夫が必要。

#問題
データバインディングと複数列選択を共存させようとするとInvalidOperationExceptionを投げる。これはバインディングが自動生成する列のSortModeの規定値がAutomaticになっているため。

```csharp:Form.cs
public partial class Form1 : Form
{
    private DataTable m_Table;
    
    public Form1()
    {
        InitializeComponent();

        this.dataGridView1.AutoGenerateColumns = true;
        this.dataGridView1.MultiSelect = true;
        this.dataGridView1.SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect;

        m_Table = new DataTable();
        m_Table.Columns.Add();
        this.dataGridView1.DataSource = new BindingSource().DataSource = m_Table;
    }
}
```
``` :output
DataGridView control's SelectionMode cannot be set to ColumnHeaderSelect while it has a column with SortMode set to DataGridViewColumnSortMode.Automatic.
```

#解決
DataGridViewに列が追加されるたびにSortModeをProgrammaticまたはNotSortableに変更すれば良い。

```csharp:Form.cs
public partial class Form1 : Form
{
    private DataTable m_Table;
    
    public Form1()
    {
        InitializeComponent();

        this.dataGridView1.AutoGenerateColumns = true;
        this.dataGridView1.MultiSelect = true;
        this.dataGridView1.SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect;
        this.dataGridView1.Columns.CollectionChanged += Columns_CollectionChanged;

        m_Table = new DataTable();
        m_Table.Columns.Add();
        this.dataGridView1.DataSource = new BindingSource().DataSource = m_Table;
    }

    void Columns_CollectionChanged(object sender, CollectionChangeEventArgs e)
    {
        if (e.Action == CollectionChangeAction.Add)
        {
            var column = e.Element as DataGridViewColumn;
            column.SortMode = DataGridViewColumnSortMode.Programmatic;
        }
    }
}
```


#参考リンク
[SelectionMode列挙体](https://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.selectionmode(v=vs.110).aspx)
Qt5.2.0@MacでdropEventのファイル名がおかしい

**Mac OSX Yosemite ＋ Qt5.2.0 の環境だと、アプリ画面にドロップされたファイル名が `"file:///.file/id=12345"` というふうに、おかしなことになります。Qtのバグだそうですが、以下の手法で解決できました。**

# ![churippu_s.png](https://qiita-image-store.s3.amazonaws.com/0/36751/8157fb95-559a-856d-af0d-e4f75f0c40f6.png) ソースコード
```cpp:[your_app].pro
LIBS += -framework CoreFoundation
```

```cpp:mainwindow.h
#include "CoreFoundation/CoreFoundation.h"
private:
    std::string GetPathFromCFURLRef(CFURLRef urlRef);
```

```cpp:mainwindow.cpp
// 追加の関数
std::string MainWindow::GetPathFromCFURLRef(CFURLRef urlRef)
{
	char buffer[1024];
	std::string path;
	if(CFURLGetFileSystemRepresentation(urlRef, (Boolean)true, (UInt8*)buffer, (CFIndex)1024))
		path = std::string(buffer);
	return path;
}
// メイン画面へのドロップイベント
void MainWindow::dropEvent(QDropEvent *ev)
{
	QUrl url = ev->mimeData()->urls().first();
	QString file_path;
	if (url.url().startsWith("file:///.file/id=")) {
		char const* utf8 = url.url().toUtf8().constData();
		CFStringRef cfstringref = CFStringCreateWithCString(kCFAllocatorDefault, utf8,kCFStringEncodingUTF8);
		CFURLRef cfurl = CFURLCreateWithString(0, cfstringref, 0);
		CFErrorRef error = 0;
		CFURLRef absurl = CFURLCreateFilePathURL(kCFAllocatorDefault, cfurl, &error);
		std::string path = GetPathFromCFURLRef(absurl);
		CFRelease(cfurl);
		CFRelease(absurl);
		file_path = QString::fromUtf8(path.c_str());
	} else {
		file_path = url.toLocalFile();
	}
	・・・
}
```

# ![churippu_s.png](https://qiita-image-store.s3.amazonaws.com/0/36751/8157fb95-559a-856d-af0d-e4f75f0c40f6.png) 参考URL
Qt Yosemite drop bug
http://ameblo.jp/mfukushima/entry-12028663303.html
vccwのMySQLにSequel Proから接続

#vccwのmysqlにsequel proから接続する方法
- sshタブに切り替え 

- MySQLホスト 127.0.0.1
- ユーザー名 wordpress
- パスワード wordpress
- データベース wordpress
- ポート 3306  
  
  
  
  

- sshホスト 192.168.33.10
- sshユーザー vagrant
- sshパスワード vagrant
- sshポート 22
Amazon LinuxでGolangの設定してみるメモ


AWS EC2でAmazon LinuxにSSH接続している前提です。

##yumに登録されているか探す

```
$ sudo yum list go*
読み込んだプラグイン:priorities, update-motd, upgrade-helper
利用可能なパッケージ
golang.x86_64                                        1.4.2-2.12.amzn1                                 @amzn-updates
golang-pkg-bin-linux-amd64.x86_64                    1.4.2-2.12.amzn1                                 @amzn-updates
golang-pkg-linux-amd64.noarch                        1.4.2-2.12.amzn1                                 @amzn-updates
golang-src.noarch                                    1.4.2-2.12.amzn1                                 @amzn-updates
・
・
・
```

あるみたいですね。

## Golangのインストール

```
$ sudo yum install -y golang
```

確認

```
$ go version
go version go1.4.2 linux/amd64
```

v1.4.2が入りました。

## GOPATH設定

[Mac YosemiteにGoのインストールからghq+pecoを使うまで](http://qiita.com/n0bisuke/items/bfd4ec4087f7c58a6983)を参考に

`.bash_profile`や`.zshrc`などに追記

```
$ vim ~/.bash_profile
```

```~/.bash_profile
 ### GO PATHを追加
 export GOPATH=$HOME/.go
 export PATH=$HOME/.go/bin:$PATH
```

変更を適用させます。

```
$ source ~/.bash_profile
```
parの中でAwaitする場合と、重い処理を書く場合は気をつける

最初謎挙動って書いてましたが、謎ではないと指摘された(たしかに)ので、修正。

## parの中でAwait

予期しないタイミングでタイムアウトします。

```scala
import java.util.Date, scala.concurrent._, scala.concurrent.duration._, scala.concurrent.ExecutionContext.Implicits.global

def elapsed(f: => Unit) = { val s = (new Date).getTime; f; println(((new Date).getTime - s) + "ms") }

(1 to 10).par.foreach { _ => 
  Await.result(Future(elapsed { Thread.sleep(1000) }), 3.seconds)
}
```

1秒の処理なのに、3秒のタイムアウトに...

```
scala> import java.util.Date, scala.concurrent._, scala.concurrent.duration._, s 
cala.concurrent.ExecutionContext.Implicits.global
import java.util.Date
import scala.concurrent._
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits.global

scala> def elapsed(f: => Unit) = { val s = (new Date).getTime; f; println(((new  
Date).getTime - s) + "ms") }
elapsed: (f: => Unit)Unit

scala> (1 to 10).par.foreach { _ => Await.result(Future(elapsed { Thread.sleep(1 
000) }), 3.seconds) }
1000ms
1001ms
1000ms
1000ms
1000ms
1000ms
1000ms
1000ms
1000ms
java.util.concurrent.TimeoutException: Futures timed out after [3 seconds]
```

( ﾟдﾟ)

(つд⊂)ｺﾞｼｺﾞｼ 

(；ﾟдﾟ) ・・・ !?

[説明はこちら](http://qiita.com/ryoppy/items/9c6820830227eb6eabdd#%E3%81%8A%E3%81%BE%E3%81%91)


## parの中で重い処理

一つの処理が急に重くなります。

```scala
scala> import java.util.Date
import java.util.Date

scala> def f = (1 to 1000000).map(_ + 1)
f: scala.collection.immutable.IndexedSeq[Int]

scala> def elapsed(f: => Unit) = { val s = (new Date).getTime; f; println(((new  
Date).getTime - s) + "ms") }
elapsed: (f: => Unit)Unit

scala> elapsed(f)
738ms

scala> (1 to 20).foreach { _ => elapsed(f) }
38ms
47ms
49ms
40ms
40ms
41ms
41ms
40ms
39ms
40ms
39ms
38ms
37ms
38ms
39ms
40ms
42ms
30ms
32ms
33ms

scala> (1 to 20).par.foreach { _ => elapsed(f) }
3579ms
4842ms
5292ms
6006ms
6443ms
6444ms
6445ms
6801ms
6756ms
6822ms
6242ms
7121ms
1937ms
808ms
1594ms
1161ms
785ms
808ms
801ms
187ms
```

( ﾟдﾟ)

(つд⊂)ｺﾞｼｺﾞｼ 

(；ﾟдﾟ) ・・・ !?

parじゃなくても並列だとこうなるっぽい。
メモリをかなり食うような重い処理で起きるっぽいです。
100倍とか時間かかるので、10秒の処理だと1000秒(16分)とかなって破綻するもよう。実際、破綻したので並列やめたことがあった。
OpenStackのデフォルトセキュリティルールについて

http://docs.openstack.org/user-guide-admin/nova_cli_manage_projects_security.html

デフォルトのセキュリティルールは

* Ingress全断
* defaultのセキュリティグループが設定されているVM間のみ許可

のどちらかを`nova.conf`で選べて、どちらかしか選べない。デフォルトでSSHのみを許可する、とかはできないみたい。
地方・都道府県マスタ

# はじめに

サイトを作るときに必ずと言っていいほど作る都道府県マスタ。
毎回作るのが面倒なので、SQL文書いておきます。
IDはゼロ埋めの2ケタにすると、[JIS X0401](https://www.jisc.go.jp/app/jis/general/GnrJISNumberNameSearchList?show&jisStdNo=X0401)に合うようになってますので、そのままご利用ください。
カラム名、フリガナの有無は環境に合わせてご利用ください。
地方に関しては一般的な[八地方区分](https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E5%9C%B0%E5%9F%9F)を使っています。

# 都道府県のみ

## テーブル作成

```sql:都道府県テーブル
CREATE TABLE `prefecture` (
  `id` tinyint(3) unsigned NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `name_kana` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
);
```

## データINSERT
[こちらに移動しました](https://thousand-tech.blog/uncategorized/%e5%9c%b0%e6%96%b9%e3%83%bb%e9%83%bd%e9%81%93%e5%ba%9c%e7%9c%8c%e3%83%9e%e3%82%b9%e3%82%bf/)

# 地方＋都道府県

## テーブル作成

```sql:地方テーブル
CREATE TABLE `region` (
  `id` tinyint(3) unsigned NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `name_kana` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
);
```

```sql:都道府県テーブル
CREATE TABLE `prefecture` (
  `id` tinyint(3) unsigned NOT NULL,
  `region_id` tinyint(3) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `name_kana` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
);
```

## データINSERT
[こちらに移動しました](https://thousand-tech.blog/uncategorized/%e5%9c%b0%e6%96%b9%e3%83%bb%e9%83%bd%e9%81%93%e5%ba%9c%e7%9c%8c%e3%83%9e%e3%82%b9%e3%82%bf/)

# おまけ
1回だけ使いたかったりする、ものぐささん用も作ってみました

[こちらに移動しました](https://thousand-tech.blog/uncategorized/%e5%9c%b0%e6%96%b9%e3%83%bb%e9%83%bd%e9%81%93%e5%ba%9c%e7%9c%8c%e3%83%9e%e3%82%b9%e3%82%bf/)

# 参考
[全国地方公共団体コード - Wikipedia](https://ja.wikipedia.org/wiki/%E5%85%A8%E5%9B%BD%E5%9C%B0%E6%96%B9%E5%85%AC%E5%85%B1%E5%9B%A3%E4%BD%93%E3%82%B3%E3%83%BC%E3%83%89)
[日本の地域 - Wikipedia](https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E5%9C%B0%E5%9F%9F)
[総務省｜電子自治体｜全国地方公共団体コード](http://www.soumu.go.jp/denshijiti/code.html)
UnityでフォルダをiCloudの保存対象から外す

■アセンブリブラウザーで見るとiPhoneクラスがなくなったらしい

```
using System;
namespace UnityEngine
{
	[Obsolete ("iPhone class is deprecated (UnityUpgradable). Please use iOS.Device instead.", true)]
	public sealed class iPhone
	{
	}
}
```

■んで、アセンブリブラウザーでiOS.Deviceをチェック

**UnityEngine.iOS.Device** の名前空間の中に下記のように定義されている

```
using System;
using System.Runtime.CompilerServices;
[WrapperlessIcall]
[MethodImpl (4096)]
public static extern void SetNoBackupFlag (string path);
```



●こんな感じでできあがり

```
using UnityEngine.iOS;

#if UNITY_IPHONE
	Device.SetNoBackupFlag(makeDirectorypath);
#endif
```
AWS-VPC - プライベートサブネットのインスタンスからNATインスタンス経由で外部に接続しようとした時にハマった件


#### 状況

- プライベートサブネットのインスタンスのパッケージ情報を更新しようとした
- ルートテーブルにNATインスタンスを設定
- ルートテーブルにプライベートサブネット割り当て
- インスタンスで「sudo apt-get update」を実行したけど反応なし
- セキュリティグループとかの疎通の問題なし
- ssh、pingも問題なかった

#### 原因

- 送信元／送信先チェックが有効になっていた
- デフォルトでEC2インスタンスは、送信元／送信先チェックを実行する

#### 対応

1. AWSコンソールログイン
1. EC2を選択
1. NATインスタンスを選択
1. Actions
1. Networking
1. Change Source/Dest.Check
1. 「Yes Disable」

少しはまってしまったのでメモ
デフォルトで送信元／送信先チェックをしているのを知らなかったので勉強になった
以前プロキシサーバでポートフォワーディングしようとした時に失敗したときも、この辺りの設定が関係しているかも
gitWatch > setTo() > set()と区別?

https://github.com/mamedev/mame/commit/00150aec1cf3e6b4d00a3fd7b0211baaedc6881b
を見ていると

```
if (is_sound_device())
{
	update_to_current_time();
	m_param->setTo((val >> m_shift) & m_mask);
}    
```
のようにsetTo()という関数を使っている例を見つけた。

setTo()という名前はset()と何か違うのだろうか?
set()だと検索しずらいのだろうか?

<hr>
setTo()関連で以下を見つけた。
http://stackoverflow.com/questions/8971308/what-is-cvsetto-function
Windows(MINGW)でdtsmのセットアップに失敗する

# やろうとしたこと #
>AngularJSをTypeScriptで書くときのあれこれ
http://qiita.com/zoetro/items/1aefa189cb54169f2cee

を参考に
>vvakame/angularjs-typescript
https://github.com/vvakame/angularjs-typescript

を使う

# いきなり躓く #

```bash
$ ./setup.sh
Running "dtsm:client" (dtsm) task
fetching https://github.com/borisyankov/DefinitelyTyped.git
>> Error: Command failed: fatal: Path 'jquery\jquery.d.ts' d
Warning: Task "dtsm:client" failed. Use --force to continue.

Aborted due to warnings.
```

どうやらreferenceの解決に失敗している感じ？

# 原因 #
原始的にconsoleデバッグしながら少しずつ原因箇所に迫っていくと
処理系はパス区切りに「/」を使いたいところで「\」が返ってくるため失敗している模様。


>https://nodejs.org/api/path.html#path_path_join_path1_path2

一応この辺までは処理を辿った

# 解決策 #

```diff:angularjs-typescript\node_modules\grunt-dtsm\node_modules\dtsm\node_modules\lib\manager.js
    Manager.prototype._installFromOptions = function (recipe, opts) {
        var _this = this;
        if (opts === void 0) { opts = {}; }
        var baseRepo = recipe && recipe.repos && recipe.repos[0] || this.repos[0];
        return this.backend
            .getByRecipe({
            baseRepo: baseRepo.url,
            baseRef: baseRepo.ref,
            path: recipe.path,
            dependencies: recipe.dependencies,
            postProcessForDependency: function (result, depResult, content) {
                var dependencies = utils.extractDependencies(content.toString("utf8"));
                dependencies.forEach(function (detected) {
                    var obj = result.toDepNameAndPath(detected);
                    result.pushAdditionalDependency(obj.depName, {
                        repo: depResult.repo,
                        ref: depResult.ref,
-                       path: obj.path
+                       path: obj.path.replace(/\\/, '/')
                    });
                });
            },
```
ホントはpathの中とかもっと根本的な部分で解決するのがよかったんだろうけど今回は妥協。
電子回路 > RC直列回路 > 90%に達する時間は2.3tau[sec]の根拠

引用: 電気・電子回路計算法 入門講座 by 浅川 毅さん

p195. 例題2
> RC直列回路に方形波を与えた場合、出力電圧が定常電圧の90%に達する時間は2.3tau[sec]である。

上の数字の根拠は以下のようだ。

出力電圧はEに対して以下の式で計算される。

```math:
V_{out} = E(1 - e^{-t / \tau})
```

t = 2.3tauとするとEにかかる係数は0.899741となる。

反対に係数を与えてtを計算もできる。

t = 4tauだと0.981684。
ChromeのDevToolsにCanvas ProfilerはCanary版では入らないので、デフォルトブラウザにしてるChromeを開発用にするのもいやだし、なんとかする(Mac)



ChromeのDevToolsにはCanvas Profilesというドローコールを調べるProfilesがある。
ほかにもWebGLのドローを調べる拡張機能もあるけど、使いにくい。

くわしくはこちら。
[Chrome 上で、Canvas API のダンプ、Draw call の可視化、スナップショットが取れる Canvas Profiles が超便利なのでご紹介 - latest log](http://uupaa.hatenablog.com/entry/2014/05/20/182051)



## いつのまにかCanaryのほうでCanvas Profilesが使えなくなっていた。

`chrome://flags/#enable-devtools-experiments` を有効にしてもでてこない


## なので、もうひとつChromeのプロファイルを作って、`devtools-experiments`を有効化した開発専用のChromeをつくる

Chromeはデフォルトブラウザにしているので、いろいろ拡張が入ってて、このまま開発用として使うのはなんとなく嫌だ。拡張入れまくりで重いし。

なので、別のプロファイルをつくろう。
以下をターミナルで叩くと、「適当なフォルダ名の新規プロファイル」としてChromeが立ち上がる。

```sh
$ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=$HOME/Library/Application\\ Support/Google/適当なフォルダ名
```



ので、こちらをAutomatorでアプリ化しておく。

Automatorで [新規作成] → [シェルスクリプトを実行]をえらぶ

![名称未設定.png](https://qiita-image-store.s3.amazonaws.com/0/2631/5d343e89-d685-90f8-3bcb-380e1afa3a44.png "名称未設定.png")


![Chrome_dev_app.png](https://qiita-image-store.s3.amazonaws.com/0/2631/e5db9a6e-0e20-4afe-8afb-1eaf07425627.png "Chrome_dev_app.png")

で、アプリケーションフォルダに保存しておけばOK！
上記の例だと`Chrome_dev`で開けるようになる。

![貼り付けた画像_2015_06_19_15_34.png](https://qiita-image-store.s3.amazonaws.com/0/2631/97ba057d-bcef-95e0-eed2-f33d216fd348.png "貼り付けた画像_2015_06_19_15_34.png")



### 参考
[Google Chorme/Goolge Chrome for mac で複数プロファイル管理する [俺の基地]](http://yakinikunotare.boo.jp/orebase2/google_chrome/google_chrome_for_mac_multi_profile)


# もっといいやりかた知ってたらおしえてください！
お願いします！
Railsアンチパターン<ビュー編>②Markup騒乱

前回のアンチパターン何が違うの、というとまあビューからロジックを抜き出すことには成功したとして、Railsからデフォルトで生成されるHTMLが果たしてちゃんと意味的に(HTMLの本義的に)mark upされてますかって言われるとちょっと怪しいですよね、って話。

HTMLのsemantisは以下の三点から成立している

* 全ての要素はその中身を表すid,class属性を持っている
* 正しいtagがついている
* 見かけの部分はCSSの領域でHTMLは感知しない

たとえばそれ自体が情報をもたない`<div></div>`などはよく見られる光景だと思うが、あまり好ましいものではない。それらを防ぎながら、かつ綺麗に書くにはどうするか。

ソリューション:rails helperを使う
=
大体の必要な機能はRailsに初めからある。[div_forやcontent_tag_for](http://blog.scimpr.com/2013/02/02/erb%E3%81%A7%E8%A6%81%E7%B4%A0%E3%81%AEid%E3%82%84class%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B%E3%81%AA%E3%82%89content_tag_for%E3%81%A8div_for%E3%81%8C%E4%BE%BF%E5%88%A9%E3%81%A0%E3%81%A3/)などが例としてあげられていた。これにより煩雑なid,class付けが不要になり、なおかつちゃんとmark upできる。

##結論:`div_for`、`content_tag_for`を使ってちゃんと意味付けしよう

ソリューション:hamlを使う
=
そもそもerbの記述自体が煩雑といえば煩雑ですよね、という話。Railsには他にも便利なテンプレートエンジンの候補がある。

[比較エントリ](http://ruby-rails.hatenadiary.com/entry/20141001/1412169453)
[slimの簡単なチュートリアル](http://ruby-rails.hatenadiary.com/entry/20140929/1411997071)
[Hamlの簡単なチュートリアル](http://ruby-rails.hatenadiary.com/entry/20141001/1412097051)

また、最近Hamlの記法を維持しながらパフォーマンスを向上させたfaml, hamlitというテンプレートエンジンもあるよう。
[パフォーマンス比較エントリ](http://eagletmt.hateblo.jp/entry/2015/04/06/210549)

最近ではこのレベルのビューの話はフロントエンドエンジニアとの分業になっていることも多いかもしれないけど、個人でちょっとしたものを作る際のためにこのあたりのことも愛んでおくといいと思う。一度slilm,hamlあたりに慣れるとちょっとerbには戻れなさそうですね……

##結論:テンプレートエンジンはいいやつを使おう
Dockerのコンテナ間でMySQL通信する方法（と、自動起動設定）

# 暫定設定

よくわからなかったのでこうしていた

* システム用のコンテナがある(httpd)
* MySQL用のコンテナがある(mysqld)
* 2つを普通に``docker start``する
* コンテナにはそれぞれ``172.17.0.2``(httpd)、``172.17.0.3``(mysqld)が割り振られる
* httpd側から``mysql -h 172.17.0.3``とすれば一応通信はできる

# 問題点
* しかし、mysqldのコンテナを``docker restart``したりすると``172.17.0.4``になってしまい、httpd側からの接続設定が無効になってしまう
* また、VPSが再起動してしまった際などにhttpdとmysqldが``.2``と``.3``の順番になる保証がない
* ぐぐってもコレといったセオリーはなさそう・・・

# 新しい設定

まだよくわからないけど、とりあえずこうすることにした

## ホスト

IPアドレスを確認
(dockerのホストは常に```172.17.42.1```になる模様)

```
$ ifconfig
docker0   Link encap:Ethernet  HWaddr AE:BF:F3:9F:68:23
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::cc:60ff:fee0:d23f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13496 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27855 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:645599 (630.4 KiB)  TX bytes:35548124 (33.9 MiB)
eth0
...
```

## システム用コンテナ(httpd)

```
$ sudo docker run -p 49164:80 -d --name httpd me/centos6_php
$ sudo docker inspect -format="{{ .NetworkSettings.IPAddress }}" httpd
172.17.0.2
```

## MySQL用コンテナ(mysqld)

```
$ sudo docker run -p 49176:3306 -d --name mysqld me/centos6_php```
$ sudo docker inspect -format="{{ .NetworkSettings.IPAddress }}" mysqld
172.17.0.3
$ mysql -u root -p -e 'GRANT ALL ON *.* to "root"@"172.%";'
```

## システム(httpd側)から接続確認

```
$ php -r 'new PDO("mysql:host=172.17.42.1;port=49176;dbname=system_dev","root","");'
```

エラーが出なければOK
めでたしめでたし

# 自動起動設定

ついでなので、VPSが再起動してもサービスが止まらないように設定

## ホスト

### dockerの自動起動設定
```
$ sudo yum install -y supervisor
$ ...（設定省略）
$ cat /etc/supervisord/conf/service.conf
[supervisord]
nodaemon=false

[program:docker_httpd]
command=/usr/bin/docker start -a httpd
autostart=true
autorestart=false

[program:docker_mysqld]
command=/usr/bin/docker start -a mysqld
autostart=true
autorestart=false
```

### nginxの設定

関係ないけどnginx設定もメモ

```
$ cat /etc/nginx/conf.d/virtual.conf
server {
    listen 80;
    server_name dev.mysystem.jp;

    location / {
      proxy_pass http://127.0.0.1:49164;
    }
}
```

# おわり

これで、動的な設定変更に影響されずにサービスを自動的に再稼働できるはず
SwiftでiOSアプリにレビューを促すアラートの表示

![スクリーンショット 2015-07-23 17.03.34.png](https://qiita-image-store.s3.amazonaws.com/0/62043/7fe7bb88-6ba9-4089-5d2c-f18069439703.png)


#コード
```swift:ViewController.swift
let ud = NSUserDefaults.standardUserDefaults()

override func viewDidAppear(animated: Bool) {
  if !ud.boolForKey("reviewed") {
    let alertController = UIAlertController(
      title: "おめでとうございます",
      message: "クリアありがとうございました。よろしければレビューを書いて頂けませんか？今後の開発の参考に致します", 
      preferredStyle: .Alert)

    let reviewAction = UIAlertAction(title: "レビューする", style: .Default) {
      action in
      let url = NSURL(string: "APP_STORE_URL")
      UIApplication.sharedApplication().openURL(url!)
      self.ud.setObject(true, forKey: "reviewed")
    }
    let yetAction = UIAlertAction(title: "まだレビューしない", style: .Default) {
      action in
      self.ud.setObject(false, forKey: "reviewed")
    }
    let neverAction = UIAlertAction(title: "今後レビューしない", style: .Cancel) {
      action in
      self.ud.setObject(true, forKey: "reviewed")
    }

    alertController.addAction(reviewAction)
    alertController.addAction(yetAction)
    alertController.addAction(neverAction)
    presentViewController(alertController, animated: true, completion: nil)
  }
}
```

#ちょっとした解説
これをまるっとどこかのViewControllerに仕込むだけでアプリレビューを促すアラートを表示できます。
レビューする　→　今後ウィンドウが表示されない + Appstoreへ飛ばす
まだレビューしない → 今後もウィンドウは出るが、一旦何もしないで閉じる。
今後レビューしない → 今後ウィンドウが表示されない。何もしないで閉じる。

※ViewDidAppearでなく、ViewDidLoadに書くとエラーが起きます。
Railsアンチパターン<ビュー編>①PHP

ビューにロジックが書かれすぎてる状態を「PHPってる」と揶揄した章。まあ、PHPも今や生で(フレームワークなしで)書かれることは稀っぽいけど。

viewに(viewに関係がない)純粋なrubyのコードが混じってきてるのはまずい。presentation logic(たとえば、`<li>`の繰り返しをeachでやってたりとか)ではなくて、ドメインロジックを表現している可能性がある。MVCに反している。
presentation logicでもrubyのコードはなるべく減らしたい。保守がつらい。

ソリューション:Railsのviewの機能を把握しよう
=
Railsは便利なヘルパーを十分用意してくれている。これらをちゃんと把握して利用することでかなりの負担を減らせる。
たとえば[form for](http://railsguides.jp/form_helpers.html#%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E8%AD%98%E5%88%A5%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B)を有効に利用する。特に、「レコード識別を利用する」を読むこと。
また他にも[Railsガイドの記事] (http://railsguides.jp/layouts_and_rendering.html)は)は大いに参考になる。
特に、

 * `render`によるpartial viewの利用
 * `yield`,`content_for`と`views/layouts/`以下のレイアウトによる柔軟なレイアウト構成
 *  [collectionについてのpartial rendering](http://railsguides.jp/layouts_and_rendering.html#%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B)

あたりがDRYにviewを描くための技術としてよく利用される。押さえておこう。
##結論:Railsのビューのヘルパー機能を把握しよう

ソリューション:メソッドを作る。ただし「適切な場所に」
=
ドメインロジックはhelperにも本来あるべきではなくて、あくまでモデル自体に実装されているべきだ、という主張。モデルのところでも同じ主張があった。

たとえば複雑な条件判断の例がある。

```.erb
<% if
current_user &&
(current_user == @post.user ||
@post.editors.include?(current_user)) && @post.editable? &&
@post.user.active? %>
<%= link_to 'Edit this post', edit_post_url(@post) %>
<% end %>
```

このような複雑なロジックはviewに直接書かず、`editable_by?`のようなメソッドを用意するべきだ。
さてこのようなメソッドはmodelに入れるべきだろうかそれともhelperメソッドにするべきだろうか。
結論としては、それがviewに表示するための整形やちょっとした下処理に関係しているならそのメソッドはヘルパーメソッドにあるべきだし、モデルそのものの属性や操作に関係するような処理はモデルのメソッドであるべきだ、と言われている。

##結論:便利メソッドを作ろう。ただし、それがモデルのメソッドにするべきか、ヘルパーメソッドにするべきかはよく考えること。

「適切な場所に」はヘルパーメソッドの範囲の中でも繰り返し言われる(後述)。

ソリューション:ヘルパーメソッドを定義してみる
=
Railsの元々の機能では満たせない(あるいは非常に煩雑になる)とわかったときは、ヘルパーメソッドを作ることを検討しよう(逆に言うと先に十分にRailsの機能を調べるべきだ)。
[公式ドキュメントの例](http://apidock.com/rails/AbstractController/Helpers/ClassMethods/helper_method)ではlogin状態の確認にとどまっているが、普通にpartial viewレベルにも利用できる。この本だと、

```.rb
def rss_link(project = nil)
  link_to "Subscribe to these #{project.name if project} alerts.",
          alerts_rss_url(project), 
          :class => "feed_link"
end
```
のようなメソッドを定義して、

```.erb

<div class="feed">
  <%= rss_link(@project) %>
</div>
```
のように利用する例が上がっている `content_tag`メソッドを組み合わせることで、Mark up部分もこの中に含めることができる。
helperメソッドの大きな点として、単体テスト可能というのがある。Railsガイドの[ヘルパーメソッドのテストの箇所](http://railsguides.jp/testing.html#%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%E3%82%92%E3%83%86%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B)参照。
最後にhelperメソッドの定義場所に留意すること。`helpers/application_helper.rb`の中に書けば確かに読み込まれるが、全てをそこに放り込んでるとどんどんカオスになってくるのでやめよう。専用のファイルをちゃんと作ること。

##結論:必要ならばヘルパーメソッドを自分で定義しよう。テストを書くことと配置場所に気を払うこと。
Wordpressを下層ディレクトリに設置した際に、ホームページのパスをショートコードで取得して表示する方法


Wordpressを下層ディレクトリに設置し、下層ディレクトリのみでWordpessを運用することがあります。
その際にホームページへのパスを予め定義しておくと便利です。

```text
サイトの構造
■ホームページ(index.html)　←取得したいホームページはここ
├ hogehoge.html(普通のページ)
|
└ /hoge(Wordpress)
    └ 記事や固定ページなど
```
**※WordPress アドレス (URL)と、サイトアドレス (URL)はいずれも【Wordpress設置ディレクトリ】を設定しています。**

function.phpに以下を書く

```php
function sitehome(){
	$wp_top = get_bloginfo('url');
	$sitehome = str_replace ('/hoge', '',$wp_top);
	return $sitehome;
}
add_shortcode('sitehome', 'sitehome');

// hoge はWordpress設置ディレクトリ
// http://www.○○○○○.com/hoge ←この部分

```
テンプレートファイルでの使用例

```php
//例
<a href="<?php echo do_shortcode('[sitehome]'); ?>">ホーム</a>
<img src="<?php echo do_shortcode('[sitehome]'); ?>/images/img.png" alt="画像">
```
記事・固定ページの投稿画面での使用例

```php
<a href="http://[sitehome]">ホーム</a>
<img src="http://[sitehome]/images/img.png" alt="画像">
```
相対パスではなく絶対パスで取得しています。
ショートコードに設定しておけば投稿画面でも使えるので便利です。
tmuxのコピーモードへのアクセスをちょっとだけ改善する

## TL;DR

`bind v copy-mode`

## 動機

tmuxのコピーモードは鬼便利ですが、デフォルトのキーバインドが`PREFIX [`となっていてやや遠いです。キーが押しにくいとそれだけで使う頻度が下がってしまうものですが、それではもったいない！もっといいキーバインドを探そう！

## 候補

この手のキーバインドは覚えやすさが重要となります。そこで、使用する文字が機能と何らかの結び付きを持たねばなりません。
今回は`copy-mode`なので、`c`,`o`,`p`あたりが候補となります。が、どれも使用済みでしかも結構重要なものばかりです（`c`は新規ウィンドウの作成、`o`は次のペインへ移動、`p`は前のウィンドウに移動）。
`Ctrl-c`とかも探しましたが、プラグインとかのキーバインドで軒並み取られてました…（実際に使われているキーバインドを知りたければ`PREFIX ?`が使えます）。

## Vimmer的発想

多くのtmuxユーザーがそうだと思うのですが、自分もコピーモード時はvi風のキーバインドにしています。これはある意味、**コピーモードに入るということは、viモードに入ることである**と言えるのではないでしょうか？
さらに、コピーモードで行うことといえば多くの場合「ビジュアルモードで選択してコピー」なので、その意味でも`v`という文字は適切であると思われます。
調べてみたら、`PREFIX v`は未使用のキーバインドでした。完璧！と、いうわけで。

## 結論

```.tmux.conf
bind v copy-mode
```
Facebookのいいね！ Ver2のセットアップ方法


ご周知のところ
2015/6/23〜
Ver1の廃止に伴い、
旧SDKは仕様ができなくなります。
主には、旧型のFacebookボタンおよび、Likeboxは使えなくなります。

"//connect.facebook.net/en_US/all.js"
をご使用中の方は注意くださいませ。
"//connect.facebook.net/fr_FR/sdk.js#xfbml=1&version=v2.3"
に変更になります。


###以下、新SDKの設定例

```lang:sdk
    <script>
      window.fbAsyncInit = function() {
        FB.init({
          appId      : 'your-app-id',
          xfbml      : true,
          version    : 'v2.3'
        });
      };

      (function(d, s, id){
         var js, fjs = d.getElementsByTagName(s)[0];
         if (d.getElementById(id)) {return;}
         js = d.createElement(s); js.id = id;
         js.src = "//connect.facebook.net/en_US/sdk.js";
         fjs.parentNode.insertBefore(js, fjs);
       }(document, 'script', 'facebook-jssdk'));
    </script>
```

appIDは存在した方が良いが、なくても動作はしましたので、
appID設定がないサイトは、以下のように無しでも大丈夫そうです。

```lang:sdk
      window.fbAsyncInit = function() {
        FB.init({
          xfbml      : true,
          version    : 'v2.3'
        });
      };
```

または.jsに
xfbml=1&version=v2.3
を指定した以下でも大丈夫そうです。

```lang:sdk
<script>
      (function(d, s, id){
         var js, fjs = d.getElementsByTagName(s)[0];
         if (d.getElementById(id)) {return;}
         js = d.createElement(s); js.id = id;
         js.src = "//connect.facebook.net/ja_JP/sdk.js#xfbml=1&version=v2.3";
         fjs.parentNode.insertBefore(js, fjs);
       }(document, 'script', 'facebook-jssdk'));
</script>
```
IntelliJのvm設定

## 設定ファイル作成

```
$ cp "~/Applications/IntelliJ IDEA 14.app/Contents/bin/idea.vmoptions" ~/Library/Preferences/IntelliJIdea14
$ vi ~/Library/Preferences/IntelliJIdea14/idea.vmoptions
```

## memoryを増やす 

```
-Xmx750m
↓
-Xmx2048m
```

## アンチエイリアス

```
-Dawt.useSystemAAFontSettings=on
-Dswing.aatext=true
-Dsun.java2d.xrender=true
```
goでwindowsでRS232C その２

## ターミナルのようなやつ。
![term.PNG](https://qiita-image-store.s3.amazonaws.com/0/18104/94bc199b-82be-f767-5b17-4251cad101ac.png)

## サンプルコード
```
package main
import (
	"fmt"
	"github.com/ohisama/serial"
	"github.com/ohisama/key"
	"time"
)
func main() {
	device := "COM5"
	baud := 9600
	fmt.Println("open", device, "at", baud)
	port, err := serial.Open(device, baud)
	if err != nil {
		fmt.Println("open failed:", err)
		return
	}
	defer port.Close()
	fmt.Println("ready")
	buf := make([]byte, 100)
	c := make([]byte, 1)
	for {
		time.Sleep(200 * time.Millisecond)
		c[0] = key.Scan()
		if c[0] > 0 {
			n, err := port.Write(c)
			if err != nil {
				fmt.Println("serial write error:", err)
			}
			n, err = port.Read(buf)
			if err != nil {
				fmt.Println("serial read error:", err)
				break
			}
			fmt.Printf(string(buf[:n]))
		}
	}
}

```