OmniAICreator/Qiita-1.07M huggingface dataset:
CubLinux(Chromium+Ubuntu)をvirtualboxに入れてみる

Chromium+UbuntuベースのLinuxディストリビューションCubLinuxをvirtualboxに入れてみたので、手順とかまとめておきます。

# isoダウンロード

ディスクイメージは下記公式サイトからダウンロードできます。

https://cublinux.com/

# virtualboxに入れる

virtualboxが最新でないとエラー起こすっぽいので、最新にしてから実行してください。

## OS選択

OS選択はLinux+OtherLinux64-bitに。
※他のでもできるかもしれないです。

![スクリーンショット 2016-05-30 9.53.16.png](https://qiita-image-store.s3.amazonaws.com/0/105934/f13b944c-c453-2636-7c18-84d82350d9a1.png)


## ハードディスクの割り当て

メモリとかは適当でいいと思われます。一旦1024MB割り当ててます。

ハードディスクはデフォルト8GBだと思いますが、8GBだと足りなくて、インストールできなくなるので、20GBぐらい積んでおいた方が無難っぽいです。

![スクリーンショット 2016-05-30 9.55.44.png](https://qiita-image-store.s3.amazonaws.com/0/105934/bce7798d-bf50-2a5e-3711-c3135f16078d.png)


## インストール

あとは普通に起動して、ディスクイメージ選択するだけです。

![スクリーンショット 2016-05-30 9.57.31.png](https://qiita-image-store.s3.amazonaws.com/0/105934/6b94a8e8-69e0-f1aa-b71c-1241f4320205.png)


## 言語選択

一番下に日本語もあったので、日本語でやってみます。

![スクリーンショット 2016-05-30 9.59.05.png](https://qiita-image-store.s3.amazonaws.com/0/105934/0241e784-e554-1196-76fd-356e5fd1035f.png)

## インストールの種類

インストールの種類のところはとりあえずデフォルトのままにしました。

![スクリーンショット 2016-05-30 9.59.57.png](https://qiita-image-store.s3.amazonaws.com/0/105934/62cf38df-7bb4-7e9b-9463-594f7f844baf.png)

## その他

あとはデフォルトだったり、任意だったりな感じです。

![スクリーンショット 2016-05-30 10.00.51.png](https://qiita-image-store.s3.amazonaws.com/0/105934/fdc6f7e4-078d-acf5-3ed6-90234a29c1d3.png)

![スクリーンショット 2016-05-30 10.01.04.png](https://qiita-image-store.s3.amazonaws.com/0/105934/43d81ee6-9540-21c2-868d-6d75750e219b.png)

![スクリーンショット 2016-05-30 10.20.00.png](https://qiita-image-store.s3.amazonaws.com/0/105934/94156d36-9257-14cb-e0af-cb301e14f346.png)

---

これで続けるとインストールが始まります。

![スクリーンショット 2016-05-30 10.22.16.png](https://qiita-image-store.s3.amazonaws.com/0/105934/31381767-9d59-5143-08af-7b8b757b0b04.png)

インストール終わったら再起動

![スクリーンショット 2016-05-30 10.26.05.png](https://qiita-image-store.s3.amazonaws.com/0/105934/896ae6a1-f1b8-67e1-5a46-4f39256c3a6b.png)


無事インストールできたようです！

# デスクトップ

デスクトップはこんな感じでかなりシンプルです。

![スクリーンショット 2016-05-30 10.31.16.png](https://qiita-image-store.s3.amazonaws.com/0/105934/182f8305-7e63-e2a1-99bb-3713bd240ce1.png)


---


以上、動作とかはこれから使ってみて確認します
Homebrewが更新できなくて悲しかった話


レアな気はしますが、一応。

ある日、`brew update`したら以下のメッセージ出て動かなくなりました。

```
/Users/tsukasa/.rbenv/shims/ruby: line 21: /usr/local/Cellar/rbenv/0.4.0/libexec/rbenv: No such file or directory
Error: Another active Homebrew process is already in progress.
Please wait for it to finish or terminate it to continue.
```

2行目の`Another active Homebrew process is already in progress.`に着目して調べてたんですが、何のことはない、rbenvがいつの間にかバージョンアップして`1.0.0`になってました。
1行目のエラーをスルーしなきゃよかったです。
イマイチなんかエラーあると`No such file`みたいなエラーを出すやつが多いせいでスルーしてました。
というわけで、`$HOME/.rbenv/shims/ruby`の21行目をちゃんと存在してるバージョンに書き換えたら動きました。

てか、全然Already in processじゃねえじゃねえかｗ

めでたしめでたし。
次元の呪いについて

# この記事について
以下の観点から高次元空間の性質についてまとめます。

* 次元数と最近傍・最遠傍との距離の関係
* データ数と最近傍・最遠傍との距離の関係
* 人工データと実データの比較

# はじめに
機械学習を使って何らかのタスクを解く上で、データの次元数は常に気にする必要があります。なぜなら、機械学習で扱う多くの問題はデータの次元数が大きくなるごとに難易度が跳ね上がるからです。
「次元の呪い」とも呼ばれるこの問題の原因は、高次元空間の性質にあると言われています。

データの次元数を大きくすると、私達の直感に反する興味深い挙動が確認できます。今回は、高次元空間の性質を簡単な数値実験で調べてみました。

# 次元の呪いとは
データの次元数が高次元になると、データが空間の外側に集中して分布する現象です。

高次元空間の直感的な理解のためには下記が参考になると思います。

* [次元の呪い、あるいは「サクサクメロンパン問題」](http://windfall.hatenablog.com/entry/2015/07/02/084623)

> 確かにメロンパンの皮は、３次元空間では非常に薄っぺらなものでしかない。しかしそのメロンパンの皮の体積はｎ乗に比例して増加していくため、ｎ次元空間では皮がメロンパンの大半を占めることになる。

超球をメロンパンに例えています。高次元空間においては、「皮」に相当する部分が体積の殆どを占めるようです。
3次元では皮の体積が3%であるのに対し、500次元では99.3%が皮になります。とても不思議です。

空間上に分布するデータに関しては、[Wikipedia](https://en.wikipedia.org/wiki/Curse_of_dimensionality)の数式が理解の助けになります。

```math
\lim_{d \to \infty} E\left[ \frac{\mathrm{dist}_\mathrm{max}(d) - \mathrm{dist}_\mathrm{min}(d)}{\mathrm{dist}_\mathrm{min}(d)} \right] \to 0
```

次元数の増加に伴い、任意の点からの最近傍点と最遠傍点との差が0に近づくそうです。やっぱり不思議です。

この性質は、数値実験で確認することができます。

# 実験
データの次元数について実験を行いました。[こちらコード](https://github.com/erikbern/ann-presentation/blob/master/knn_avg_dist.py)をほぼそのまま使っています。

## 次元数と最近傍・最遠傍との距離の関係
$d$次元標準正規乱数を10000点生成します。10000点からランダムにサンプリングした40点について、最近傍、10番目の近傍、最遠傍点との距離を計算しました。

| 設定 | 値 |
|:----------:|:-----------:|
| データ数   |10000        |
| 次元数   |2,4,8,16,32,64,128,256,512,1024|
| 距離   |ユークリッド距離|

![knn_1.png](https://qiita-image-store.s3.amazonaws.com/0/66317/55170748-18f2-19ff-f7b7-00b22677619d.png)


次元数の増加とともに、最近傍、10番目の近傍、最遠傍との距離の差が小さくなっていることが確認できます。

先ほどの式の挙動もプロットしてみます。

![knn_2.png](https://qiita-image-store.s3.amazonaws.com/0/66317/c6d98380-957d-f1f8-2856-cf84f926d455.png)



0に近づいていくことがわかります。すなわち、高次元空間では近傍と遠傍の差がほとんどないことになります。

## データ数と最近傍・最遠傍との距離の関係
高次元空間でも一定のデータ数を確保することで呪いを軽減できないでしょうか。「次元の呪い」はデータ数で克服できるのか検証してみます。
設定は前の実験とほぼ同じで、データ数を可変にします。

| 設定 | 値 |
|:----------:|:-----------:|
| データ数   |100,1000,10000,100000|
| 次元数   |4,256,1024|
| 距離   |ユークリッド距離|

![knn_3.png](https://qiita-image-store.s3.amazonaws.com/0/66317/0ebd226c-f5de-5c1f-182b-1d856c21a218.png)


![knn_4.png](https://qiita-image-store.s3.amazonaws.com/0/66317/5de61a16-de8c-0ea4-4206-17fbf19d8b44.png)


4次元の場合と比べて、256次元や1024次元の変化はごくわずかです。データ数を増やしてもほとんど効果が無いことがわかりました。

呪いに対してデータ数を増やすことはあまり有効ではないようです。次元削減を検討したほうが良いかもしれません。

## 人工データと実データの比較
ここまでの実験はすべて人工データによる実験でした。最後に、現実のデータの振る舞いも見ておきます。ここでは実データとして、ベンチマークによく用いられるデータセットをいくつか用意しました。

| 設定 | 値 |
|:----------:|:-----------:|
| データセット|iris(アヤメの大きさ),boston(ボストンの家の値段),mnist(手書き文字)|
| 次元数   |それぞれ、4,13,784|
| 距離   |ユークリッド距離|

![knn_5.png](https://qiita-image-store.s3.amazonaws.com/0/66317/80454a62-5c74-48c6-8055-dee61da84d39.png)



実データは人工データよりもきれいに分布していないのか、次元数の割には最近傍と最遠傍の距離は小さくないようです。現実のデータは価値のない変数を含んでいることがよくあるので、潜在的な次元数は見かけの次元数より小さくなります。
このグラフからは言い切れませんが、ベンチマークとしてよく使われるデータセットは、赤線よりも右上に分布するものが多いそうです。

余談ですが、irisとmnistの差がほとんどありません。この実験だけでは断言できませんが、mnistは次元数の割には易しいデータセットなのかもしれませんね。

# まとめ
いくつかの数値実験を通して高次元空間とデータの性質について調べました。
高次元空間では近傍と遠傍の差が小さくなる傾向にあること、データ数を増やしても高次元データは扱いやすくならないことが確認できました。
sudoerでないときに、pythonのライブラリをインストールする（または、新規ユーザをSudoerにはしたくないけど、好きにPythonLibraryを入れてもらうのは構わない時の方法）

#解決方法

開発に入った時など、よくあるのが、sudoerには入れてもらえないが、開発でライブラリが必要。

そんなときは、pyenvで管理する

```bash
pip install <package名> --user
```

これで大丈夫


# pyenvを初めて使う

注意：もしもpyenvが入ってないと、これを入れる作業には、sudo権限が必要になってしまうので、管理者にやってもらうしかない。（はず）

## installを参考にする
https://github.com/yyuu/pyenv#installation

###mac

1. brewでインストールする
```bash
brew install pyenv-virtualenv
```
2. ~/.zshrcにいかを追加する(zshを使っている場合)

```
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
```
3 読みなおす

```bash
source ~/.zshrc
```

###ubuntu

pipをインストール（Sudo権限が必要）

```
sudo aptitude install python-pip
```

pyenvをインストール

```
pip install pyenv --egg
```

.zshrcにいかを記入

```
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
```

.zshrcを再読み込み

```
source ~/.zshrc
```


##基本コマンド

### Pythonの特定のVersionをインストール

```bash
pyenv install <version>
```

例えば、

```bash
pyenv install 3.5.1
```


### globalで使うPythonのVersionを指定

```bash
pyenv global <version>
```
OPcache導入してみた！（速さ検証もあるよ！）

#OPcacheとは
OPcacheとはコードをコンパイルし、共有メモリへ保存しておく仕組みのことです。
PHPはインタプリタですが、この仕組みによってリクエストごとにスクリプトを読む必要がなくなり、パフォーマンスの向上が期待されます。

#インストール
本記事ではWindowsのphp 7.2.4で設定を行っています。あらかじめご了承ください。

##準備
特になし（さすがにPHPは入ってますよね？）

##設定
php.iniで以下の設定を記述します。

```php.ini
# Linux,Macの場合
zend_extension=/[それぞれのPHPのextensionのパス]/php_opcache.so
# Windowsの場合
zend_extension=C:\[それぞれのPHPのextensionのパス]\php_opcache.dll

[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
```
設定内容は[php.netの推奨設定](http://php.net/manual/ja/opcache.installation.php)で推奨される一般的設定です。

|オプション|デフォルト|意味|
|:-:|:-:|:-:|
|opcache.enable|1|キャッシュを有効にする|
|opcache.enable_cli|0|CLI版のキャッシュを有効にする|
|opcache.memory_consumption|64|使用される共有メモリのサイズ|
|opcache.interned_strings_buffer|4|internされた文字列を格納されるために使用されるメモリ量|
|opcache.max_accelerated_files|2000|スクリプトの最大数最小値は200|
|opcache.revalidate_freq|2|更新時にタイムスタンプをチェックする頻度。 opcache.validate_timestampsがデフォルトで有効なのでチェックされる|
|opcache.fast_shutdown|0|それぞれに割り当てられたブロックを開放しない高速シャットダウンシーケンスが使用される|

変更可能範囲と他のオプションについては[OPcacheの実行時設定](http://php.net/manual/ja/opcache.configuration.php)を参照してください。

##確認
php -v　で確認します。

![opcache_install_01.PNG](https://qiita-image-store.s3.amazonaws.com/0/120969/16dd4be8-09b5-c84a-c92d-5d21f3dd36cc.png)

図のように表示されればOpache導入成功です。めっちゃ簡単！

##検証
せっかくなので速さ検証してみます。
hello worldを返すだけのphpプログラムを作成してみたので、ベンチマークとってみます。
`ab -c 100 -n 100` （100人が同時に1リクエストした場合を想定）で検証したいと思います。

###導入前
![no-cache.PNG](https://qiita-image-store.s3.amazonaws.com/0/120969/a009fb94-9af9-a59a-51ed-bf3d696c22c4.png)

###導入後
![cached.PNG](https://qiita-image-store.s3.amazonaws.com/0/120969/40a5bcad-77ba-a580-fc35-52f827339e14.png)

うーん、まぁ全体的に速くなってるけどあんまり違い分からないな...。
Laravel5.6プロジェクトはどうなるかも見てみます。

###導入前
![laravel-no-cached.PNG](https://qiita-image-store.s3.amazonaws.com/0/120969/670632ef-73e0-2ab8-df6b-415292316575.png)


###導入後
![laravel-cached.PNG](https://qiita-image-store.s3.amazonaws.com/0/120969/04f8cc90-2fdf-8a93-b568-e35784af036f.png)

ちょっぱや！倍近く速くなってる！

#参考
* http://www.checksite.jp/php55-zend-opcache/
* http://hamuhamuengineer.blogspot.jp/2014/02/opcache.html
* http://php.net/manual/ja/book.opcache.php
GitLabでタイトルにWIP:を付けるとマージボタンをdisableにすることができる

先日GitLabでマージリクエストを出そうとしたらこんな表記が目に入りました。

![スクリーンショット 2016-05-27 12.31.10.png](https://qiita-image-store.s3.amazonaws.com/0/100736/2bd4c59e-c5b7-31ad-3adc-785266f385aa.png)

```
Start the title with [WIP] or WIP: to prevent a Work In Progress merge request 
from being accepted before it’s ready.
```

つまり、タイトルを`[WIP]`もしくは`WIP:`で始めるとまだマージすべきではないマージリクエストを許可してしまうことを避けられるということです。[公式ドキュメント](http://docs.gitlab.com/ce/workflow/wip_merge_requests.html)を元にもう少し詳しく見ていきます（というより以下は公式ドキュメントの訳のようなものです）。

---

まだレビュー、修正が終わってないのに間違えてマージボタン押しちゃった、ということを避けるためにGitLabではタイトルの先頭に`[WIP]`もしくは`WIP:`を付いていた場合はマージボタンを押せないようにするという機能があります。

WIPをつけている場合はいつもはマージボタンがある場所にこのような表示が出ています。

<img width="1292" alt="スクリーンショット 2016-05-27 15.01.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/100736/67a3d8cf-8db2-15a4-8a44-c25bbabeffa0.png">

マージする準備が整ったらタイトル先頭に付けていたWIPを取り除けばマージボタンが押せるようになります。
Zynq > 7010 and 7020 > 7020用ブートイメージの7010での使用 > it's enough to just change the target in the logic implementation tools

Zynqには7010と7020という種類がある。

7020用に作成したブートイメージを7010で起動できるかどうか。
以下を見つけた。

https://forums.xilinx.com/t5/Embedded-Linux/microzed-7010-and-7020-files-compatibility/td-p/657089

> Microzed 7010 and 7020 differ only in the Zynq device placed on the board (7010 and 7020, quite obviously). The difference between the devices is only on the logic side.
 
> So it's enough to just change the target in the logic implementation tools (ISE or Vivado). Everything that is related to the PS part (dtb, FSBL, boot.bin etc.) needs no change.
JavaScriptの整数の精度が保たれるのは9007199254740991まで

Javascriptの整数の精度が保たれるのは2の64乗ではなく、2の53乗までらしい。

```js
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
console.log(Math.pow(2, 53) - 1); // 9007199254740991
console.log(Math.pow(2, 53) + 0); // 9007199254740992
console.log(Math.pow(2, 53) + 1); // 9007199254740992 誤差
console.log(Math.pow(2, 53) + 2); // 9007199254740994
console.log(Math.pow(2, 53) + 3); // 9007199254740996 誤差
console.log(Math.pow(2, 53) + 4); // 9007199254740996
console.log(Math.pow(2, 53) + 5); // 9007199254740996 誤差
```

なお、`9007199254740991`は[Number.MAX_SAFE_INTEGER]で定義されています。

これは、JavaScriptには、整数型がなく全て浮動小数点型で表現されるためのようです。JavaScriptの浮動小数点型はIEEE 754に準拠していると思われます。


> 64ビット倍精度
> ![2000px-IEEE_754_Double_Floating_Point_Format.svg.png](https://qiita-image-store.s3.amazonaws.com/0/889/6780893b-ddf8-9200-16d6-c6572b7530ad.png)
> [IEEE 754 - Wikipedia]より


[Number.MAX_SAFE_INTEGER]: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER

[IEEE 754 - Wikipedia]: https://ja.wikipedia.org/wiki/IEEE_754#64.E3.83.93.E3.83.83.E3.83.88.E5.80.8D.E7.B2.BE.E5.BA.A6
シェルスクリプトでGitHub API

シェルスクリプトからGitHub APIを使って、GitHubのデータにアクセスする方法を紹介します。

GitHub APIの認証方法はいろいろありますが、今回はセキュアかつシェルスクリプトでも扱いやすい、Personal access tokenを使います。Personal access tokenはシンプルな認証方法です。トークンをGitHub上で発行し、クライアント側は発行されたトークン利用して認証します。流出した恐れのあるトークンを無効化したり、発行したトークンごとに権限を設定できるので、安全な認証がで簡単に実装できます。

<i class="fa fa-key"></i> Personal access tokenの発行 
------

まずGitHubのPersonal settingsから[Personal access tokens](https://github.com/settings/tokens)を開き、Generate new tokenをクリックします。今回はプライベートリポジトリにもアクセスしたいので、Select scopesのrepoにチェックを入れます。

![personal_access_token.png](https://qiita-image-store.s3.amazonaws.com/0/102667/a393fe94-aebd-304b-ccce-09fbcb3a80c2.png)

設定が完了したら Generate token を押し、表示されるトークンをコピーします。

![generated_token.png](https://qiita-image-store.s3.amazonaws.com/0/102667/de41391f-2eeb-98aa-7345-70713b281b24.png)

<i class="fa fa-code"></i> APIでリポジトリ一覧の取得してみる
------

先ほど発行したPersonal access tokenを使い、GitHub APIにアクセスしてみましょう。次の例は、cURLでAPIにアクセスし、[リポジトリ一覧](https://developer.github.com/v3/repos/#list-your-repositories)を取得する例です。cURLで認証するには、ホスト名の直前に `@` をつけて `:` 区切りでGitHubのログイン名とPersonal access tokenを指定します[^specify_user]。GitHub APIはJSONで返ってくるので、jqにパイプしてパースします。リポジトリ名のみを改行区切りで出力し、更にパイプして行ごとにechoしています。

[^specify_user]: `-u` オプションでもユーザ名・パスワードを指定できます。

```sh
#!/bin/sh

# 発行したトークン
GITHUB_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# ログイン名
LOGIN_NAME='xxxxxx'

curl https://${LOGIN_NAME}:${GITHUB_TOKEN}@api.github.com/user/repos?per_page=1000 |
jq -r '.[].full_name' |
while read -r repo; do
  echo "You have '$repo'"
done
```

<i class="fa fa-arrow-circle-down" aria-hidden="true"></i> リポジトリの取得
------

Personal access tokenを使うと、プライベートリポジトリにもアクセスもできます。ログイン名とPersonal access tokenを、リポジトリURLに指定するだけです。

```sh
git clone "https://${LOGIN_NAME}:${GITHUB_TOKEN}@github.com/path_to/your_repository"
```

GitHub APIはGitのデータだけでなく、Pull RequestやIssueにもアクセスできるので、いろいろと試してみてはいかがでしょうか。
IME辞書登録を晒す; 文字入力を最強に楽にする方法

チキン大好きChicken yutaさんのポストに反応するように投稿です。
[Windowsの単語登録を使って定型文の入力を楽にする](http://chicken-yuta.com/article/lifehack/525 "Windowsの単語登録を使って定型文の入力を楽にする")

## 前置き

まぁ知ってる方はな〜んだって感じですが、
でも知ってる方の方がちゃんと見てくれそうな気がします。
改善や効率化から程遠い所からは、いつまで経っても何も始まらないのと同じで…

仕組みとしてはIMEユーザー辞書登録による入力簡略化で
内容としては辞書の内容と命名ポリシーを晒しますってのが本記事です。

※ 以降 "よみ" として登録するものをキーと呼ぶことがありますm(_ _)m

## では晒します

### アルファベットで略したもの (ABC順)

```
b: ビール
btn: ボタン
ch: チェックボックス
d: データ
db: データベース
f: フィールド
fb: フィードバック
fl: ファイル
fm: フォーム
g: 画面
k: キー
m: メール
o: (自分の苗字)
pj: プロジェクト
pp: ポップアップ
prp: プロパティー
れｖ: レビュー
rf: リファクタリング
s: サーバー
せｌ: セレクトボックス
sh: 仕様変更
t: テーブル
tm: チーム
v: バージョン
w: (笑)
```

職業柄かWeb系が多いような気がします。

### 業務用語や日本語略語

一般的な人は、変換に出ないという理由でこれを登録していることが多いかと。
公開できる範囲だと私はだいたいこんな感じです。

```
とり: 取締役
おみ: 御見積書

がいせつ: 外設
ないせつ: 内設
さいばん: 採番
はつばん: 発番
しゅうじ: 週次
ひんかん: 品管
```

### 慣用句的なもの

```
おじぎ: m(_ _)m
ｒｙ: 了解いたしました。
ｓｙ: 承知しました。
おつ: お疲れ様です。
おせ: お世話になっております。
おね: お願い致します。
あり: ありがとうございます。
よろ: よろしくお願い致します。
おｔ: お疲れ様です、【自分の苗字】です。
おｓ: お世話になっております、【自分の苗字】です。
りゃり: 了解しました、ありがとうございます。
いじょろ: 以上、よろしくお願いいたします。
いじょお: 以上、お知らせいたします。
いじょご: 以上、ご確認よろしくお願い致します。
いじょさ: 以上、ご査収よろしくお願い致します。
いじょごさ: 以上、ご査収よろしくお願い致します。
```


### 他にも

固有名詞を登録していたりします。

* ｋ⇒自社の社名
* 取引先社名略称⇒正式名称
* 同期のアダ名⇒苗字
* よく使う名前で珍しい名字の短縮登録

などなど。
また、(同音異義語とは言わないでしょうけど)
同じ読みで複数の漢字がある苗字で、よくその苗字を使う場合は
既に標準の辞書に入っていてもユーザー辞書に登録したりします。
一番上に出てくるようになりますよ！間違えないで済みます。


### 番外編

```
せｐ:
----------------------------------------
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
''''''''''''''''''''''''''''''''''''''''
▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
――――――――――――――――――――
```

せｐで6種登録しています。
デバッグのコンソール出力や
コメントに使うことがあるので登録しています。
(separatorのsepまで打って変換)

## どういうキー命名ポリシーで登録しているか

* 母音1文字だけには登録しないようにしています。  
  例）a, i, u, e ⇒ 登録なし (oは自分の苗字なので登録していますがw)  
* 子音1文字に登録する単語は1単語のみにしています。  
  理由）必ずそれが変換の第一候補で出てきてほしいから。  
  変換の候補に迷ってる暇があったら多分全部打った方が早いかも。  
* IMEの全角ひらがな状態で英語のイメージで打鍵して  
  すべて日本語にならないよう状態で登録しています。  
例）selectboxはseleまで打つと"せぇ"になるので  
  selまでの入力を登録している。(せｌ⇒セレクトボックス)  
* たまに略語  
  例）fb⇒フィードバック  


## もっともっと登録すべき文言ってあると思います

ぜひ命名ポリシーや、何を登録しているのか教えて下さい！

## この投稿はブログにも同じ内容を投稿しています

[文字入力を最強に楽にする方法 (IMEユーザー辞書登録キーを晒す)](http://ryoichi0102.hatenablog.com/entry/2016/05/26/235306 "文字入力を最強に楽にする方法 (IMEユーザー辞書登録キーを晒す)")
Homebrewをインストールする


## 環境

Mac OS 10.9.5
作業をした日 2015/10/18

## 手順

まずは公式サイト （http://brew.sh/index_ja.html） に行きます。

公式サイトに行くと『インストール』というセクションにターミナルで実行するためのコマンドが乗っているので、そのままコピーしてターミナルで実行します。

![kobito.1445135760.756567.png](https://qiita-image-store.s3.amazonaws.com/0/6624/7e6e5ba7-c303-e824-7ea4-854c4fa1f5b7.png "kobito.1445135760.756567.png")

コマンドラインツールがインストールされていない場合は、その旨がダイアログで表示されますので、インストールします。

![kobito.1445135849.257792.png](https://qiita-image-store.s3.amazonaws.com/0/6624/f8a84025-a3f0-a6af-b92f-c9de0b2f251b.png "kobito.1445135849.257792.png")

インストールが終わるとターミナル上に何かキーを押してくださいとメッセージが出ているので何か押します。

マシンのパスワードを聞かれるので、パスワードを入れます。

するとインストールが始まり

```
==> Installation successful!
==> Next steps
Run `brew help` to get started
```

とターミナル上に表示されターミナルが入力待ち状態になります。

試しに現時点でのbrewのバージョンを見てみます。

```
hasehiro:~ hasehiro$ brew -v
Homebrew 0.9.5 (git revision 0772; last commit 2015-10-18)
```

この作業した日時点では、0.9.5というバージョンがインストールされました。

以上です。
[JAWS-UG CLI] Lambda Blueprint解説: Lambda共通編 (Python)

LambdaのPython初心者向け解説です。


Lambdaの解説
============

ハンドラ
--------

LambdaがインポートするLambda関数内の関数のこと。

```python:コード(例):
   def lambda_handler(event, context):
```

ハンドラ関数: eventデータ
-------------------------

Lambdaはeventパラメーターを使用してイベントデータをハンドラーに渡します。

このパラメータは通常、Pythonの辞書タイプです。

```json:イベントソースがCloudWatchEventsの場合のイベントデータ(サンプル):
   {
     "account": "123456789012",
     "region": "ap-northeast-1",
     "detail": {},
     "detail-type": "Scheduled Event",
     "source": "aws.events",
       "time": "1970-01-01T00:00:00Z",
     "id": "cdc73f9d-aea9-11e3-9d5a-835b769c0d9c",
     "resources": [
       "arn:aws:events:ap-northeast-1:123456789012:rule/my-schedule"
     ]
   }
```

list、str、int、float、NoneTypeタイプも使用できます。


ハンドラ関数: Contextオブジェクト (Python)
------------------------------------------

contextパラメーターを使用して、LambdaのContextオブジェクトに格納されたランタイム情報にアクセスします。

このパラメータはLambda Contextタイプです。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-context-object.html

Lambda関数の実行中に、Contextオブジェクトにより次のようなランタイム情報を取得できます。

* Lambda関数を終了するまでの残り時間

  * タイムアウトはLambda関数の設定で変更可能

* 実行中のLambda関数に関連付けられたCloudWatchロググループとログストリーム。

* Lambda関数をインポートたクライアントに返されたAWSリクエストID。

  * AWSサポートでへの問い合わせに利用できる。

* Lambda関数がMobile SDK経由で呼び出された場合は、Lambda関数をインポートするモバイルアプリケーションの詳細を知ることができます。

### メソッド

* get_remaining_time_in_millis()

### プロパティ

- function_name
- function_version
- invoked_function_arn
- memory_limit_in_mb
- aws_request_id
- log_group_name
- log_stream_name
- identity
- client_context


ハンドラ関数: 返り値
--------------------

オプションで、ハンドラーは値を返すことができます。

### クライアントが RequestResponse インポートタイプ(同期実行)を指定した場合

インポートを行ったクライアントに結果が返ります。


```python:返り値の例
return event['time']
```

* 同じ情報は、CloudWatch にも送信されます。


### クライアントが Event インポートタイプ(非同期実行)を指定した場合

Lambdaは何も返しません。

* 代わりに、CloudWatchログにエラー情報がログ記録されます。
* CloudWatchメトリックスでエラーメトリックスを確認することもできます。


Lambda関数のログ
----------------

* print関数(標準出力)

  * CloudWatch Logsにログを書き込みます。

```python:コード例
  print('Check complete at {}'.format(str(datetime.now())))
```

* logging.* 関数

  * CloudWatch Logsにログを書き込みます。

  * 各ログエントリにタイムスタンプやログレベルなどの追加情報を書き込みます。


Lambda関数の例外
----------------

Lambda 関数で例外が発生した場合、Lambdaはエラーを認識してJSONに例外情報をシリアル化して返します。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-exceptions.html

```python:コード例:
   def always_failed_handler(event, context):
     raise Exception('I failed!')
```

```json:エラーメッセージ例:
   {
     "errorMessage": "I failed!",
     "stackTrace": [
       [
         "/var/task/lambda_function.py",
         3,
         "my_always_fails_handler",
         "raise Exception('I failed!')"
       ]
     ],
     "errorType": "Exception"
   }
```
phpでズンドコゲッター

#概要
paizaのphpでズンドコゲッターやってみた。
#実際
https://paiza.io/projects/HdaHgc3OKm8xCL92Srjb1w
#サンプルコード
```
<?php

function main() {
    $zun = "ズン ";
    $doko = "ドコ ";
    $kiyoshi = "キ・ヨ・シ！";
    $z = 0;
    while (true) 
    {
        $c = file_get_contents("http://ohijs0.paas.jp-e1.cloudn-service.com/zundoko");
        if ($c == "ドコ") 
        {
            print $doko;
            if ($z == 4) break;
            $z = 0;
        }
        else
        {
            print $zun;
            $z++;
        }
    }
    print $kiyoshi . "\n";
}
main();
?>
```
技術英語 > leave the files [unedited]

@ AdamTaylor Microzed Chronicles
https://forums.xilinx.com/t5/Xcell-Daily-Blog/The-Zynq-PS-PL-Part-Two-Adam-Taylor-s-MicroZed-Chronicles-Part/ba-p/422249

> I will just use the four registers we created and therefore can <font color=red>leave the files unedited</font>.

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

http://ejje.weblio.jp/content/intact

> 手をつけてなくて、そこなわれていなくて、(そっくり)そのままで、完全で

uneditedと可換かは不明。
NSView で Swift の print() をやろうとしてもプリントダイアログが起動するぞ

NSView のサブクラスでログを出そうといつものように `print("hogehoge")` みたいな感じにしてたらいきなりプリントダイアログが起動してしまいました。

<img width="550" src="https://qiita-image-store.s3.amazonaws.com/0/3603/3f7e3187-cc3e-c73c-376e-8b20a5aafe11.png">

お、おう。。
これって NSView が実装している方の `print(sender: AnyObject?)` メソッドが呼ばれちゃってるんですね。んなアホなと思いましたけど。

```swift:NSView
extension NSView {
    …
    /* Printing action method (Note fax: is obsolete) */
    @warn_unqualified_access
    public func print(sender: AnyObject?)
    …
```

対策として、NSView では Swift. を略さずに書いてあげればログ出力用のプリントを呼び出せるようになります。

```swift
class MyView: NSView {
    func method() {
        Swift.print("hogehoge")

        // print("hogehoge") // こっちだとプリントダイアログが起動してしまう
    }
}
```

## 追記：

macOS High Sierra / Swift 4では、印刷ダイアログのメソッド名の変更によりこの問題が解消されます。
mex configulation on MacOSX

Windowsと違って、MacOSXの場合はmexファイルのコンパイルはデフォルトでそれほど制限はない
（Windowsだと、自由形式のコンパイルがまず通らない。。）
ただ、openmpでハマったのでメモしておく。

結論から言うと、デフォルトのファイルの以下の部分に```-liomp5```と足せばOK、のはず

```
LDFLAGS="-liomp5 -Wl,-twolevel_namespace -undefined error -mmacosx-version-min=10.7 -Wl,-syslibroot,$ISYSROOT -bundle $LINKEXPORT"
```

以下の記事を参考
http://qiita.com/ryo1inagaki/items/ed9b9ae24c8c62eb3b11
Windows 10でXAMPPのApacheが動かなくてビビる

# はじめに
久しぶりにWindows環境でPHPを書こうとしたら、XAMPPのApacheが動かなくてハマったので対処方法を記載します。

# 環境
Windows 10 Home(Windows 7からのアップグレード)
XAMPP v3.2.1

# 何が起こったのか
久しぶりにPHPのコードを動かすためにXAMPPを起動したところ、いきなりApache関連の真っ赤な文字が・・・
![xampp01.png](https://qiita-image-store.s3.amazonaws.com/0/48529/5e64249b-44e8-5247-10f3-fc5b5e8f28d9.png)

特に気にせず、[Start]ボタンを押してみましたが、もちろん起動するはずもなく、今度は別のエラーが表示されてしまう状態に。
![xampp02.png](https://qiita-image-store.s3.amazonaws.com/0/48529/f266240a-fef4-ae88-f1cc-7f02de55d735.png)

# 思い当たる節が
何回か[Start]ボタンを押してもやはり起動しないので、おとなしく赤文字を読むことに。
XAMPP起動時に出力された文章を読むと「PID 4が**80番ポート**を使っているよ！」との、過去に見たことがある内容が書いてありました。

これ昔からXAMPPでよくある内容で、すぐに原因がSkypeであるのではないかと思い、意気揚々とSkypeの設定画面へ。

Skypeはデフォルトの接続設定で「追加の受信接続にポート80と443を使用」っていう項目にチェックが入っており、このままだと80番ポートや443番ポートがSkypeに使用されてしまいます。

**が**、Skypeの設定画面を見てみると既にチェックが外れている事実orz
![xampp03.png](https://qiita-image-store.s3.amazonaws.com/0/48529/de5aeb8b-7728-93a9-49e9-8de5088027e3.png)

当てが外れたので、おとなしくググってみると、Skypeの問題の他にもう一つの問題があることを発見。

# 問題の終息
実はこの問題、掲題にもあった**Windows 10**が問題を起こしていた張本人？でした。

何が問題だと言うと、Windows 10ではMicrosoftが誇るWebサーバーサービスである**IIS**がデフォルトで有効になっています。
この事象はWindows 7からバージョンアップしてWindows 10になった私の環境も例にもれず有効になっていたわけで、そのために80番ポートが占有されていました。

# IISを無効にする
Windows 10でIISを無効にするには以下の手順を事項します。
1. コントロールパネルを開く(以降の説明はコントロールパネルの表示方法がカテゴリに設定されているものとする)
2. [プログラム] => [Windowsの機能の有効化または無効化]の順番にクリックします。
3. [Windowsの機能]内の[インターネット インフォメーション サービス]のチェックを外し[OK]ボタンを押下します。
![xampp04.png](https://qiita-image-store.s3.amazonaws.com/0/48529/89be5c89-41fe-686a-91c4-3634e6263c97.png)

変更の適用に少し時間がかかりますが完了によりIISが無効になり80番ポートが解放され、XAMPPのApacheが起動できるようになります。
![xampp05.png](https://qiita-image-store.s3.amazonaws.com/0/48529/19214a71-c76d-ea06-a03b-ec3905cb7706.png)

# 最後に
Apacheの使用するポート番号をconfigを修正して変更する方法もありますが、ブラウザで表示する際にポート番号を指定しなければならないのは面倒くさいのでまとめておきました。
git

git関連のメモ

# gitの初期設定

一番最初に設定する識別情報、ユーザ名とメールアドレスを設定する。

```
$ git config --global user.name "hoge"
$ git config --global user.email hoge@example.com
```

`--global`をつけると、`~/.gitconfig`に保存される。

~/.gitconfig

```
[user]
	name = hoge
	email = hoge@example.com
```

ちなみに、`--edit`を付けると`~/.gitconfig`を直接編集できる。

```
$ git config --global --edit
```
macの隠しファイル&フォルダの表示

標準では.bash_profileなど、隠しファイル＆フォルダはFinderで表示されない。これを表示させる。

1. ターミナルを開き、設定を変更。
```$ defaults write com.apple.finder AppleShowAllFiles -boolean true```

1. Finderを再起動。
```$ killall Finder```
【Windows】SublimeGitとか(Sublimeパッケージの）Gitでうまくpullやpushが出来ない時の対処方


大変ややこしい記事名してますがパッケージがそんなんだからしかたないのです

# こんな人むけ

## Sublime上のgitで無反応を起こしたりプロセスが残ったりする

SublimeGitやGitパッケージ経由してfetchとかpullとかしようとしたらずっと無反応だったり
ステータスバーのインジケータがずっと[]を往復したまま終わらなかったり
gitプロセスがずっと残りっぱなしになったり（つらい）

## PermissionDenied(publicKey)

普通にコマンドプロンプトとかからfetchとかpullとかしようとした時に表題みたいなの出たとか


以下、これらの問題を回避する設定の方法です
かなり手探りで進めたので色々足りない手順が含まれている可能性あり

# OpenSSHでGithubにつなぐ

まず大前提として、
**Sublime上のGit達はpush時などのユーザーネームとパスワード入力に対応していないようです**
認証が必要になるコマンドを使った時に進行せず延々とインジケータ動きっぱなしになったりするのはたぶんそのせい
なので、入力認証を避けるする方法で運用する必要があります。
とりあえずOpenSSHでやるかーと思ったので今回はOpenSSHです
PuTTYでもできるっぽいですが試してません
https://sublimegit.readthedocs.io/en/latest/troubleshooting.html

sshが諸事情で使えない場合は
http://tbpgr.hatenablog.com/entry/20131107/1383834179
こういうのを使うとよいらしい（こっちも未検証）

## ssh-agentの立ち上げとssh-add

今回使用するssh-agentはMSYS環境に入ってるやつです（Git for Windowsインストールしてれば使えるはず？）

http://mattn.kaoriya.net/software/20081106192615.htm

こちらのサイト様を参考に

* ssh-agentの立ち上げ
* ssh-addによる秘密鍵の追加

これらを行うバッチファイルを作っていきます
sublime上でうまいことgitを動かすためには
ssh-agentが立ち上がりつつ環境変数 **SSH_AUTH_SOCK** と **SSH_AGENT_PID** が設定されないといけないようです

参考ページにあるものそのままだとそのコマンドプロンプト内でしか設定されずsublime的にうまくいかないので、
setxに変えたりなんだりしてユーザ環境変数をいじるやつを作ります

```bat
@echo off

for /f "eol=; tokens=1,2 delims==;" %%1 in ('ssh-agent.exe') do (
    if "%%1" == "SSH_AUTH_SOCK" (
        setx SSH_AUTH_SOCK "%%2"
        set SSH_AUTH_SOCK=%%2
    )
    if "%%1" == "SSH_AGENT_PID" (
        setx SSH_AGENT_PID "%%2"
        set SSH_AGENT_PID=%%2
    )
)

ssh-add 入れたい秘密鍵のファイルパス

```

ぶっちゃけsetxだけあればいいような気も
これはgit操作を行う前に実行してください
一回実行したらssh-agentが死ぬまでは実行しなくて大丈夫なはず

とりあえずこれでssh-agentの起動は出来るわけですが、
このままだとssh-agentを殺すにはタスクマネージャから直接プロセスを落とさないといけなかったり、
上記バッチで一度ユーザ環境変数をいじっちゃってるのでその中身が残りっぱなしになってしまいます
そのため一応終了用のバッチファイルも用意しておきます

```bat
@echo off

ssh-agent -k

setx SSH_AUTH_SOCK ""
setx SSH_AGENT_PID ""

```

ここまで準備したら最初のバッチを実行してssh-agentの立ち上げ、秘密鍵の登録をします
あとはSublimeTextを立ち上げて
git fetchやgit pull、git pushをやってそれぞれ動けば成功です。
環境変数を空にするのにPC落とす前に終了バッチ叩かないといけないのがすごぶる面倒なんですが、
別に残ってても超困るという事は無い…はず…
結構困るケースがある場合もうちょっと別案考えた方がよさそう

# 参考にした文献

https://sublimegit.readthedocs.io/en/latest/troubleshooting.html
http://techblog.clara.jp/2014/07/ssh-agent/
http://mattn.kaoriya.net/software/20081106192615.htm

# やってて思ったこと

SublimeText中の環境変数だけ変えつつSublimeTextが生きてる間だけssh-agent立ち上げておくとか出来ないのかしらと思ったんですが
これもしかしてプラグイン書けば出来たりする？
vimのメモ

vimに関連するメモ

# Unite.vim

タブ表示やバッファ・ディレクトリ表示により、ファイルへのアクセスを便利にするプラグイン。
vim 用の統合ユーザインターフェースという位置づけらしい。

| 操作                     | コマンド            |
|:------------------------|:------------------|
| 新規タブ                  | :tabnew           |
| 次のタブに切替	          | gt                |
| 前のタブに切替	          | gT                |
| ウィンドウを閉じる	          | :q                |
| バッファを閉じる	          | :bd               |
| タブ一覧                  | :Unite tab        |
| 現在のタブで開いたバッファ一覧 | :Unite buffer_tab |
| バッファ一覧	          | :Unite buffer     |
| バッファ一覧                   | Ctrl+P |
| カレントディレクトリ以下のファイル一覧 | Ctrl+N |
| 最近使ったファイルの一覧         | Ctrl+Z |

# nerdtree

rails.vimプラグインを入れた状態で、railsプロジェクトをツリー表示するプラグイン。

| 操作                     | コマンド            |
|:------------------------|:------------------|
| ツリー表示                 | :NERDTree           |
| ヘルプ                    | ?                 |

# vim-rails

railsプロジェクトの操作を便利にしてくれるプラグイン。

| 操作 | コマンド |
|:----|:----|
| モデル・ビュー・コントローラ間の移動 | :R(model/controller/view) [name] |

# tcomment_vim

コメントアウトの切り替えを楽にしてくれるプラグイン。

Shift+Vで対象の範囲を選択し、Ctrl+-+-(コントロールキー+ハイフン+ハイフン)を2回押すと、その範囲をコメントアウトしたり、コメントを外したりできる。ファイルの拡張子を見て、コメントアウト記述を切り替えてくれる。

| 種類（拡張子） |   |
|:--|:--|
| ruby（rb） | # |
| html(html) | <!-- -->|
| css(css) | /* */ |
| javascript(js) | // |

# dbext.vim

vimからrailsプロジェクトのdatabase.ymlを読み込み、SQLクエリが実行できる。

例
```:Select * from tables;
```
free pascalでSDL

C++やC#でゲームを作ろうと思ったけど、ウェブで調べているとメモリ管理の仕方がふにゃふにゃで一定してない。で、golangでSDLしようと思ったけどcygwinじゃないとダメ。で、

Free Pascal meets SDL
http://www.freepascal-meets-sdl.net/

っての見つけた

これはFree PascalとSDLでゲームを作るためのサンプルを置いてあるウェブですが。でも、ウェブで説明している方法ではビルドできませんでした。ですが、他の方法を見つけたので、それをメモで残しておきます

今回のはWindows10のFree Pascalでビルドしてます。Free Pascalのインストールが出来るのは前提で…

#ヘッダのダウンロードとインストール

今回は

https://github.com/danpla/sdl2-fpc

を見つけた。それをzipファイルでダウンロードして、その*.pasファイルを適当なディレクトリに置きました

#ビルドと実行

自分の場合は

http://www.freepascal-meets-sdl.net/chapter-5-drawing-primitives/

にあるソースリストをコピペしてセーブ。それを

c:\hoge\work>fpc -Fu"..\sdl2-fpc" main.pas

とFree Pascalの「-Fu」オプションでヘッダのディレクトリを指定してDOS窓でビルドし

Windows版のSDLのdllファイルをビルドした実行ファイルのあるディレクトリに置き

c:\hoge\work>main

で実行して動作を確認しました

#それぞれのウェブ

Simple Direct Layer
https://www.libsdl.org/
のオフィシャルウェブ。基本的なダウンロードはこちらで

SDLでオプション扱いのライブラリやサンプル
https://www.libsdl.org/projects/
オフィシャルウェブで見つからないdllはこちらにあります

SDLの各種リファレンス
http://sdl2referencejp.osdn.jp/

free pascalチュートリアル
http://wiki.freepascal.org/Object_Pascal_Tutorial/ja

free pascal関数リファレンス
http://www.freepascal.org/docs-html-3.0.0/rtl/sysutils/
基本的な関数は「Localization」を選んで、Nextをクリックし続けると見れます

Object pascalコーディング規約（参考）
http://srgia.com/docs/ObjectPascalStyleGuide-j.html

とりあえず、これでゲームを作る準備はできたとは思うのですが。まず、pascalのテキストがジュンク堂にも無かったんですよね…

【追記】Delphi＝object pascalの本は後日、ジュンク堂で見つけました
jadeはpugにリネームされたのでexpressでpugを使う

# 概要
jadeはpugにリネームされました。商標問題か何かだと思いますが詳しくは追ってません。各自お調べ頂くとして...。

# Express Generator
2016年5月30日現在、ジェネレータが吐き出すコードはいまだにjadeなので、pugを利用するようにします。

いったんジェネレータでひな形を吐き出させます。

```shell-session
$ mkdir myapp
$ cd myapp
$ express ./
```

吐き出された`app.js`を書き換えてテンプレートエンジンを変更します。

```js:app.js
app.set('view engine', 'pug');
```

`./views/`の中の`jade`ファイルの拡張子を変更します。

```shell-session:ワンライナー
$ for f in ./views/*.jade; do mv $f ${f%.jade}.pug; done
```

`package.json` から `jade` を消します。

```diff:package.json
--- package.json.old	2016-05-30 00:54:35.000000000 +0900
+++ package.json	2016-05-30 00:55:00.000000000 +0900
@@ -10,8 +10,7 @@
     "cookie-parser": "~1.3.5",
     "debug": "~2.2.0",
     "express": "~4.13.1",
-    "jade": "~1.11.0",
     "morgan": "~1.6.1",
     "serve-favicon": "~2.3.0"
   }
-}
\ No newline at end of file
+}
```

pugをインストールします。

```
$ npm install -S pug
```

その他のパッケージもインストールします。

```
$ npm install
```

以上！
Photos Frameworkで写真アルバムのタイトル、写真枚数を取得するサンプル

iOSのPhotos Frameworkで写真アルバムの情報を取得するサンプルです。
今回はスマートアルバムの情報を取得します。
スマートアルバム：パノラマ写真、ビデオなど、iOSが自動で作成するアルバム

# 取得する情報
 - 写真アルバムのタイトル
 - 写真の枚数（動画含む）

# サンプルコード
**PHAssetCollectionTypeSmartAlbum**でスマートアルバムを指定、
**PHAssetCollectionSubtypeAny**でスマートアルバムに該当するもの全てを指定しています。
タイトルの取得はPHAssetCollectionクラスの**localizedTitle**プロパティから行います。

```objc:写真アルバムの情報を取得するサンプル(Objective-C)
    PHFetchResult *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType: PHAssetCollectionTypeSmartAlbum
                                                                               subtype: PHAssetCollectionSubtypeAny
                                                                               options: nil];
    for (PHAssetCollection *assetCollection in assetCollections) {
        PHFetchResult *assets = [PHAsset fetchAssetsInAssetCollection:assetCollection options: nil];
        NSLog(@"%@:%d", assetCollection.localizedTitle, (int)assets.count);
    }
```

# 実行結果
```
2016-05-30 00:36:29.013 PhotoApp[8460:2390078] Panoramas:0
2016-05-30 00:36:29.015 PhotoApp[8460:2390078] Videos:14
2016-05-30 00:36:29.016 PhotoApp[8460:2390078] Slo-mo:0
2016-05-30 00:36:29.017 PhotoApp[8460:2390078] Time-lapse:0
2016-05-30 00:36:29.019 PhotoApp[8460:2390078] Favorites:0
2016-05-30 00:36:29.025 PhotoApp[8460:2390078] Camera Roll:1174
2016-05-30 00:36:29.026 PhotoApp[8460:2390078] Hidden:0
2016-05-30 00:36:29.027 PhotoApp[8460:2390078] Bursts:0
2016-05-30 00:36:29.029 PhotoApp[8460:2390078] Recently Added:301
2016-05-30 00:36:29.031 PhotoApp[8460:2390078] Selfies:0
2016-05-30 00:36:29.032 PhotoApp[8460:2390078] Screenshots:5
```
例えば、スクリーンショットが5枚あることが分かります。

# 関連記事
PHAssetCollectionType,Subtypeの種類は以下を参照。
[PHAssetCollectionType早見表](http://qiita.com/shtnkgm/items/5b14d41685226f5c5e4b)
What does class_eval <<-“end_eval”, __FILE__, __LINE__ mean in Ruby?

http://stackoverflow.com/questions/2496102/what-does-class-eval-end-eval-file-line-mean-in-ruby

https://github.com/rails/rails/blob/3-1-stable/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb

```rb
vagrant@precise64:~/data/dirty$ ruby 3.rb 
(eval):4:in `foo': undefined method `abc' for 123:Fixnum (NoMethodError)
	from 3.rb:11:in `<main>'
vagrant@precise64:~/data/dirty$ ruby 3.rb 
3.rb:12:in `foo': undefined method `abc' for 123:Fixnum (NoMethodError)
	from 3.rb:11:in `<main>'
```

```rb
require 'pry'

instance_eval <<-end_eval, __FILE__, __LINE__
 def foo
 	a = 123
 	b = :abc
 	a.send b
 end
end_eval

foo
```

```rb

require 'pry'

instance_eval <<-end_eval
 def foo
 	a = 123
 	b = :abc
 	a.send b
 end
end_eval

foo
```
rails mattr_accessor 

mattr_accessor if attr_accessor for module

https://github.com/rails/rails/blob/3-1-stable/activesupport/lib/active_support/core_ext/module/attribute_accessors.rb

```rb
require 'pry'

module Test
	binding.pry
	mattr_accessor :lala, :instance_writer => false

	self.lala = 12
	puts lala


end

class Lala
	include Test
end

binding.pry
```

开启instance_writer

```rb
[1] pry(main)> Lala.new.lala
=> 12
[2] pry(main)> Lala.new.lala = 13
=> 13
[3] pry(main)> Lala.new.lala
=> 13
[4] pry(main)> Test.lala
=> 13
```

close instance_writer

```rb
[1] pry(main)> Lala.new.lala
=> 12
[2] pry(main)> Lala.new.lala = 13
NoMethodError: undefined method `lala=' for #<Lala:0x00000004b018b0>
from (pry):2:in `<top (required)>'
[3] pry(main)> Lala.new.lala
=> 12
```


instance_reader就差不多了


```rb
[1] pry(main)> a = :lala
=> :lala
[2] pry(main)> puts "123 #{a}"
123 lala
=> nil
```
rails extract_options

https://github.com/rails/rails/blob/3-1-stable/activesupport/lib/active_support/core_ext/array/extract_options.rb

```rb
1.9.3-p551 :001 > [1,2,a: 12].extract_options!
 => {:a=>12} 
1.9.3-p551 :002 > [1,2,a: 12,4].extract_options!
SyntaxError: (irb):2: syntax error, unexpected ']', expecting tASSOC
[1,2,a: 12,4].extract_options!
             ^
	from /home/vagrant/.rvm/gems/ruby-1.9.3-p551@expermental/gems/railties-3.1.1.rc1/lib/rails/commands/console.rb:45:in `start'
	from /home/vagrant/.rvm/gems/ruby-1.9.3-p551@expermental/gems/railties-3.1.1.rc1/lib/rails/commands/console.rb:8:in `start'
	from /home/vagrant/.rvm/gems/ruby-1.9.3-p551@expermental/gems/railties-3.1.1.rc1/lib/rails/commands.rb:40:in `<top (required)>'
	from script/rails:6:in `require'
	from script/rails:6:in `<main>'
1.9.3-p551 :003 > [1,2,a: 12,4]
SyntaxError: (irb):3: syntax error, unexpected ']', expecting tASSOC
	from /home/vagrant/.rvm/gems/ruby-1.9.3-p551@expermental/gems/railties-3.1.1.rc1/lib/rails/commands/console.rb:45:in `start'
	from /home/vagrant/.rvm/gems/ruby-1.9.3-p551@expermental/gems/railties-3.1.1.rc1/lib/rails/commands/console.rb:8:in `start'
	from /home/vagrant/.rvm/gems/ruby-1.9.3-p551@expermental/gems/railties-3.1.1.rc1/lib/rails/commands.rb:40:in `<top (required)>'
	from script/rails:6:in `require'
	from script/rails:6:in `<main>'
1.9.3-p551 :004 > [1,2,a: 12,c: 4].extract_options!
 => {:a=>12, :c=>4} 
```
ruby is_a vs instance_of

http://stackoverflow.com/questions/3893278/ruby-kind-of-vs-instance-of-vs-is-a

```rb
[1] pry(main)> class Test < Array
[1] pry(main)* end  
=> nil
[2] pry(main)> Test.new.instance_of?(Array)
=> false
[3] pry(main)> Test.new.is_a?(Array)
=> true
```

也可以自己覆盖

```rb
[1] pry(main)> class Test < Array
[1] pry(main)*   def instance_of?(a)
[1] pry(main)*     return true if a == Array
[1] pry(main)*     return false
[1] pry(main)*   end  
[1] pry(main)* end  
=> nil
[2] pry(main)> Test.new.instance_of?(Array)
=> true
[3] pry(main)> Test.new.instance_of?(String)
=> false
```

https://github.com/rails/rails/blob/3-1-stable/activesupport/lib/active_support/core_ext/array/extract_options.rb
エディタの処理としてブループリント関数を C++ から実行する方法

コンストラクションスクリプトがゲーム、エディタ問わずに実行されることを利用して、エディタで実行するイベントとして、ブループリントの関数を C++ に設定することができるようになっています。

以下がその例です。
![image](https://qiita-image-store.s3.amazonaws.com/0/43814/48babb85-ca97-c5ba-2f5a-78ac1e034b43.png)

これはアセットのロードが終わったら C++ から実行されるイベントとして、ブループリントで定義されている OnLoaded 関数を設定する処理です。

コンストラクションスクリプトを使えば、このようなことができるようになっているのですが、**ゲームが実行状態でない時にはブループリント関数は実行できないようになっています。**

では、どうすれば実行できるようになるか？
それは、**FEditorScriptExecutionGuard** という構造体を使えば解決できます。

```cpp:
void RunBlueprintFunctionByEditor(FDynamicDelegate Delegate)
{
	FEditorScriptExecutionGuard Guard;
	Deleagate.ExecuteIfBound();
}
```

このように、デリゲータの実行関数と同じスコープ内にこの構造体の変数を定義すれば、エディタの処理中でもブループリント関数が実行できるようになります。
GitHubのIssueに担当を複数割り当てれるようになってる！

タイトルそのままなのですが、GitHubのブログ記事より。

> Multiple assignees on Issues and Pull requests
> https://github.com/blog/2178-multiple-assignees-on-issues-and-pull-requests

Issueだけじゃなくプルリクエストへのアサインも同様です。
最近、Issueに担当を複数人つけれなくて困っていたケースがあったので、自分的にはナイスタイミング！
割当は10メンバーまでらしいですが、タスクの割当としては十分かな。

## これまで不便に感じていたケース

私の現場では最近からZenHubを導入しており、Issueに課題やら検討事項やらをガンガン放り込むようにしているのですが、
時折Issueに担当を複数人つけれなくて困ることがありました。

例えばユースケース単位の粒度でIssueを作った時、関係者が複数人（フロントエンドとバックエンドなど）になることは良く有ります。
ただアサインが一人しか出来ないので、あえてアサインをせずにIssueのチェックリストでレイヤーごとにわけたりしてました。

今回の機能改善で複数人のアサインが可能になるため、タスクの粒度を気にせずタスクの管理ができそうです。
あと、プルリクエストもレビューしてほしい人にアサインつけるとかって運用もできそう。

## ZenHubでやってみた
https://www.zenhub.io/

ということで、ZenHubのBoardからつかってみましたが、普通に割当できました。
ただし、フィルタにはまだ未対応らしく、複数人割り当ててもフィルタができない。。。
（GitHubのIssueからは複数人でもフィルタできました）

ZenHubのサポートみてみると既にIssueが上がっていたので、早めに対応してくれるといいなぁ。
https://github.com/ZenHubIO/support/issues/758
figure out why rails require base.rb

```rb
1.9.3-p551 :006 > method(:require).source_location
 => ["/home/vagrant/.rvm/gems/ruby-1.9.3-p551@expermental/gems/activesupport-3.1.1.rc1/lib/active_support/dependencies.rb", 238] 
```

http://makandracards.com/makandra/8879-use-activesupport-autoloading-outside-of-rails
extend self in ruby

http://stackoverflow.com/questions/1733124/ruby-extend-self

```rb
require 'pry'

module Lala
	extend self

	def gaga
		puts "lala"
	end
end

binding.pry
```

https://github.com/rails/rails/blob/3-1-stable/activesupport/lib/active_support/dependencies.rb#L17
cocoapods-keysをSwiftのプロジェクトで利用する

## 概要

Swiftプロジェクトで`cocoapods-keys`を利用してWebサービスのAPIキー等を管理する際の備忘録

[cocoapods-keysについてはこちら](https://github.com/orta/cocoapods-keys)

## 前提

* bundlerインストール済み
* Xcode 7.3.1
* cocoapods 0.39.0
* cocoapods-keys 1.0.0 (pod)
* cocoapods-keys 1.6.1 (gemfile)

## インストール

リポジトリで cocoapods-keys を利用していることを明示したいのでGemfileで管理する

```
% cd SwiftyTumblrKit  //iOSアプリのプロジェクトルートディレクトリへ
% touch Gemfile
% vim Gemfile

source 'https://rubygems.org'
gem 'cocoapods-keys', '1.6.1'

% bundle install
```

## keyの追加

Podfileの以下の文を追記、適宜プロジェクト名とキー名を記載し `pod install`を実行することで対話的にkey-valueを設定できる

```
Podfileに追加

plugin 'cocoapods-keys', {
  :project => "SwiftyTumblrKit",
  :keys => [
    "consumerKey",
    "secretKey"
  ]}
```

※ `pod install`実行時に `Keys (1.0.0)`がインストールされなければもう一度`pod install`を実行する必要がある

## Swiftプロジェクトでの利用方法

Swiftプロジェクトで利用する場合は `import Keys` を追記

既にソースファイルが生成されているので、project名.key名()で呼び出しが可能

今回の例ならば `SwiftytumblrkitKeys().consumerKey()`でkeyに対応するvalueが返ってくる

`import Keys` からXcodeの `⌘ + クリック` でソースを追ってへッダーファイルを確認するとよい

**※Podfileではプロジェクト名をキャメルで記述しているが、生成されたファイル名はキャメルで無い点に注意**

## 参考

https://github.com/orta/cocoapods-keys/blob/master/SWIFT_PROJECTS.md
スポットインスタンスの起動とAMI

スポットインスタンスの起動とAMI
よくわからないのでメモ。

######オンデマンドインスタンスで開発環境を構築
インスタンス作成時にボリュームも同時に作成される
オンデマンドインスタンスを終了したい場合は停止または削除が可能。停止後再開始で停止前のデータにアクセス可能

######スポットインスタンスでこの開発環境を利用したい場合

1. オンデマンドインスタンスからAMIを作成、同時にスナップショットも作成されて紐づく
2. スポットインスタンスの作成で、1.で作成したAMIを指定
3. ボリュームについても1.で作成したスナップショットが使われる
4. スポットインスタンスを終了したい場合は削除のみ

で、インスタンスを削除した後はスナップショット以後新たに作成したデータにアクセスできない。。

######解決策の案

1. ボリュームを別に作成（例えば```/dev/sda2```）、インスタンスにアタッチし、データはそこに保存しておく。しかし、元のボリューム（```/dev/sda1```）にある開発環境に手を入れた場合にはその変更が元に戻ってしまう。例えば、起動ボリューム（```/dev/sda1```）は/bootのみ、アタッチするボリューム（```/dev/sda2```）は他のフォルダ、といったことが可能か？
2. スポットインスタンスを削除する前に、AMIを作成しておく。次にスポットインスタンスを作成する際は、このAMIを指定。AMI作成に時間がかかるのと、新たにAMIに紐付いたスナップショットが作成されるため管理が煩雑になるのが難点。
borderの省略指定でボーダー色が黒になってしまった件

borderの指定でハマった件。
仕様を読めばそう書いてるのですが、はじめ見たとき驚いたのでメモ。

> borderのstyle, widthだけを変更したとき、なぜかborder-colorが黒色になってしまった。

**イメージ：**
![image](https://qiita-image-store.s3.amazonaws.com/0/45314/395a9017-4807-dced-9512-56a59984482d.png)

「*なんで黒！？( ꒪⌓꒪)*」ってびっくりしまして。


## 原因

原因は２つあって、

* borderの省略指定で、省略した値は初期値が適用される
* border-colorの初期値はcolor属性


参考：
> This is a shorthand property for setting the width, style, and color of the top, right, bottom, and left border of a box. Omitted values are set to their initial values.

[W3C 4.4. Border Shorthand Properties](https://www.w3.org/TR/css3-background/#the-border-shorthands)

> 5.5.16    'border-color'
Value: <color>{1,4}
Initial: the value of the 'color' property
Applies to: all elements
Inherited: no
Percentage values: N/A

> If no color value is specified, the value of the 'color' property of the element itself will take its place

[W3C 5.5.16 'border-color'](https://www.w3.org/TR/CSS1/#border-color)


## くわしく見てみると

```jade:jade
div.box sample
div.box.box--dashed 上だけ点線にしたい
```

```stylus:stylus
.box
  margin 10px
  border solid 2px red
  
  &--dashed
    border-top dashed 1px
```

![image](https://qiita-image-store.s3.amazonaws.com/0/45314/395a9017-4807-dced-9512-56a59984482d.png)


```.box``` で指定している線の色はそのままに、他の要素だけを変えたかった（＋なるべく書く量を減らしたかった）のです。
ただし、```border-top```はstyle, width, color全てを指定する必要があるので、どれか１つでも省略した場合、```border-color```の初期値（initial）が指定されてしまいます。
そしてborder-colorの初期値は親要素の ```color``` 属性のため、color属性の初期値の黒が継承されてしまっていたのでした。
<img width="606" alt="image.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/45314/38789564-4211-8f83-63c5-e861b9e32f3c.jpeg">

なので、親要素にcolor属性が指定されていれば

```stylus:stylus
.box
  margin 10px
  border solid 2px red
  color blue  // これ
  
  &--dashed
    border-top dashed 1px
```

![image](https://qiita-image-store.s3.amazonaws.com/0/45314/7257f050-93a8-9723-a7c7-2d03760a9c21.png)

border−topも青くなります。
でもこの指定の仕方をすると、バグを生みそう（というかバグに見えそう）だなぁという印象。
（https://jsfiddle.net/kpk5debr/ このサンプルは面白いけど、コード上だとどこの色が変わるかわかりづらい。）

[追記]
[上記のサンプル](http://codepen.io/tokimari7/pen/oLXada)のような事例でも ```currentColor``` プロパティを使えば分かりやすく明記できます。
https://developer.mozilla.org/ja/docs/Web/CSS/color_value#currentColor_keyword
http://simurai.com/blog/2014/05/04/cssconf のcolorあたり

currentColor使ったことなかったのですが、積極的に使ってこうとおもいます(∩´∀｀)∩

---

ちなみに、プロジェクトのコードでは

```stylus:stylus
border-top dashed 1px inherit
```

のように書いてました。
コード上では問題なさそうですが、省略指定でcolorにinheritが使えないのも罠。


横着せずに ```border-top-style``` を指定しましょう。という話でした。



## 余談

Qiitaを書かなくなってから圧倒的にinput減ってしまったので、こりゃいかんということで、
リハビリがてら、クソみたいな小さなネタでも書こうと思っている次第です。
フロントエンドエンジニア４年目に突入してしまいましたが、初心で書くのは自由ﾃﾞｽﾖﾈ(つд⊂)

この記事で一番大事なことは、書くことは仕入れること、です。Qiitaしゅごい。
Swift2でUIAlertControllerに追加したUITextFieldにバリデーションを実施する

* UIAlertController

```swift:
let dialog: UIAlertController = UIAlertController(title: "ユーザ名登録", message: "名前を入力してください", preferredStyle:  UIAlertControllerStyle.Alert)
```

* AlertAction

```swift:
let signUpAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:{ (action: UIAlertAction!) -> Void in
    print(dialog.textFields![0].text)
    // any code
})
signUpAction.enabled = false
```

* UITextField for UserName

```swift:
dialog.addTextFieldWithConfigurationHandler { (textFieldUser: UITextField!) in
    textFieldUser.placeholder = "1〜6文字"
    textFieldUser.keyboardType = .Default
}
```

* Validation

```swift:
let textFieldValidationObserver: (NSNotification!) -> Void = { _ in
    let min = 1
    let max = 6
    let userName = dialog.textFields![0].text
    signUpAction.enabled = userName?.characters.count >= min && userName?.characters.count <= max
}
```

* Notifications for textField changes

```swift:
NSNotificationCenter.defaultCenter().addObserverForName(UITextFieldTextDidChangeNotification, object: dialog.textFields![0], queue: NSOperationQueue.mainQueue(), usingBlock: textFieldValidationObserver)
dialog.addAction(signUpAction)
self.presentViewController(dialog, animated: true, completion: nil)
```
Haskell Servant 入門 (Testing)

# Testing in Haskell with Servant

hspec-wai を使って Servant server のテストを書く方法を紹介します。
Hspec は Haskell のユニットテストライブラリです。このライブラリの詳しい説明は省略します。
本記事のソースコードは以下のリポジトリにおいてあります。
http://github.com/algas/haskell-servant-cookbook

## テスト対象

servant server のコードを用意します。
"/" にリクエストを投げると "Simple" を返すだけの簡単な API です。

```hs:lib/SimpleApi.hs
{-# LANGUAGE DataKinds         #-}
{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators     #-}
module SimpleApi where

import           Data.Aeson
import           Data.Proxy
import           Data.Text                  (Text)
import           GHC.Generics
import           Network.Wai
import           Servant
import           Servant.API

type SimpleAPI  = Get '[PlainText] Text

simpleApi :: Proxy SimpleAPI
simpleApi = Proxy

server :: Server SimpleAPI
server = return "Simple"

app :: Application
app = serve simpleApi server
```

## テストコード

次にテストコードを用意します。
上記の `SimpleApi` から `app` を呼び出します。
hspec-wai から `with` を使っているのがポイントです。

```hs
with :: IO a -> SpecWith a -> Spec
```

以下がテストコードです。

```hs:test/Spec.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes       #-}
module Main (main) where

import           SimpleApi           (app)
import           Test.Hspec
import           Test.Hspec.Wai
import           Test.Hspec.Wai.JSON

main :: IO ()
main = hspec spec

spec :: Spec
spec = with (return app) $ do
    describe "GET /" $ do
        it "responds with 200" $ do
            get "/" `shouldRespondWith` 200
        it "responds with 'Simple'" $ do
            get "/" `shouldRespondWith` "Simple"
```

```hs:haskell-servant-cookbook.cabal
test-suite test
  type:                exitcode-stdio-1.0
  hs-source-dirs:      test
  main-is:             Spec.hs
  build-depends:       base
                     , hspec
                     , hspec-wai
                     , hspec-wai-json
                     , aeson
                     , transformers
                     , haskell-servant-cookbook
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
  default-language:    Haskell2010
```


## 動作確認
以下のコマンドでテストを実行します。

```bash
$ stack test
```
```bash
haskell-servant-cookbook-0.1.0.0: test (suite: test)

Progress: 1/2
GET /
  responds with 200
  responds with 'Simple'

Finished in 0.0138 seconds
2 examples, 0 failures

Completed 2 action(s).
```

## Template 化
上記のテストの雛形を stack の servant template に組み込むために [PR](https://github.com/commercialhaskell/stack-templates/pull/65) 
を1つ送っています。
無事に取り入れられれば、`stack new (myproj) servant` でテストの雛形まで作られた状態になります。

## 参考文献

https://github.com/commercialhaskell/stack-templates/blob/master/scotty-hspec-wai.hsfiles
めざせpythonライブラリマスター （１）da-vinci

#【ライブラリ説明】
　画像をいじるためのライブラリ

#【準備】
　da-vinciを使用するにはPillowも必要

#【プログラム】
```py:da-vinci.py
# -*- coding: utf-8 -*-

from da_vinci import Image

# URLを使用して画像取ってくる
image = Image('http://stamps.co.id/static/merchants/img/logo.png')
# 画像を左右逆にする
image.flip('horizontal')
# 画像サイズ変更
image.resize(width=120, height=120)
# 拡張子pngで保存
# qualityは百分率で設定するようだが、値を変えて何が変化するのか分からない
image.set(format='png', quality=85)
# 画像保存
image.save()
```

#【結果】
　![logo.png](https://qiita-image-store.s3.amazonaws.com/0/121997/439604e5-cf3b-becb-9e60-0ffe85a7a256.png)

#【感想】
　URLで画像を指定できるのがいいね！

#【参考サイト】
　[da-vinci](https://pypi.python.org/pypi/da-vinci/)
　[github](https://github.com/ui/da-vinci)