OmniAICreator/Qiita-1.07M huggingface dataset:
NumPy と NMatrix の比較

勉強用のメモ。正直どちらもよく知りません。NumPyは`import numpy as np`が実行されている前提。

### 1次元の生成

NumPy: a = np.array([1,2,4,3,5])
NMatrix: a = N[1,2,3,4,5]

### シーケンスの生成
NumPy: a = np.arange(9)
NMatrix: a = N.seq([1,9])

### 2次元の生成
NumPy: a = np.array([[1,2,3],[4,5,6]])
NMatrix: a = N[[1,2,3],[4,5,6]]

### データ型を指定
NumPy: a = np.array([[1,2,3],[4,5,6]],dtype=np.float)
NMatrix: a = N[[1,2,3],[4,5,6], dtype: :float64]

### 1次元から2次元への変換
NumPy: a = np.arange(6).reshape(2,3)
NMatrix: a = N.seq([1,6]).reshape(2,3)

### ノルム
NumPy: linalg.norm(a, ord=2)
NMatrix: a.norm2

### 転置
NumPy: a.T
NMatrix: a.transpose

### 要素のソート結果をインデックスで返す
NumPy: np.argsort(a)
NMatrix: a.sorted_indices

### 条件を全要素が満たすかどうか
NumPy: np.all(a > 0)
NMatrix: a.all?{|i| i > 0 }

### スカラー値を足す
NumPy: a + 3
NMatrix: a + 3
Gemfile に含まれてない gem を rails console で require する方法

`$LOAD_PATH` に lib/ までのフルパスを突っ込めばよい。

```
$ gem which benchmark/ips
/Users/kyanny/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/benchmark-ips-2.6.1/lib/benchmark/ips.rb

$ be rails c
Loading development environment (Rails 4.1.14)
[1] pry(main)> require 'benchmark/ips'
LoadError: cannot load such file -- benchmark/ips
from /Users/kyanny/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-4.1.14/lib/active_support/dependencies.rb:247:in `require'
[2] pry(main)> $: << '/Users/kyanny/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/benchmark-ips-2.6.1/lib/'; nil
nil
[3] pry(main)> require 'benchmark/ips'
true
```

元ネタ:
ruby on rails 3 - How to use a local gem in console with bundled environment - Stack Overflow
http://stackoverflow.com/questions/16463002/how-to-use-a-local-gem-in-console-with-bundled-environment
NAS4Freeの私的セットアップ手順

#インストール
* LiveUSBのファイルをダウンロードする。
* Rufusなどのソフトを使ってUSBメモリーに書き込む。
* ブートしもう一つのUSBメモリーにインストールする。
  * Embeddedインストールの場合には2GB以上のUSBメモリーが必要。
      * 起動のたびに圧縮ファイルを展開して遅いので、起動を速くしたければUSB3.0の速いフラッシュメモリーを用意。ただし、USB3.0からのブートにはBIOS設定でやや苦労が必要かもしれない。
  * Swapは1024MBあれば十分。
* LiveUSBのデバイスを取り外して再起動する。
* 具体的な手順は次を参照のこと→[NAS4Free 9.1.x.x によるファイルサーバ構築＋DLNA＋ZFS – UbuntuによるEco Linuxサーバ構築記](http://eco.senritu.net/nas4free-dlna-zfs-fileserver/)

#基本設定
* ホスト名設定
* 日本語化・日本時間化
* 日付形式設定
* NTPサーバーを ntp.nict.jp に設定

#高度な設定
* 「Enable the system power control utility.」をオンに
* 低消費電力を選択
* 周波数は空でよい

#SSH
* SSHを有効化
* [組み込み(Embedded)インストールをしたNAS4FreeでSSHの公開鍵認証をする - Qiita](http://qiita.com/juze9/items/1ad06646d0c3f0a0043a)
* 「キーボードインタラクティブでの認証を有効にします。」をオフに

#ZFS（CUIから構築）
ZFSは[zpool(1M)](http://docs.oracle.com/cd/E19253-01/819-1211/6n3j834bn/index.html)、[zfs(1M)](http://docs.oracle.com/cd/E19253-01/819-1211/6n3j834bk/index.html)を片手にCUIから構築した方が楽ですが、構築後にWebUIでインポートし、WebUIにプール情報を反映させておかないと、再起動後、自動的に認識されません（手動でzpool importする必要がある）。

```
# HDD一覧
geom disk list

# ブートを考えずに40セクターからzpool用のパーティションを始める場合
gpart destroy -F adaN
gpart create -s gpt adaN
gpart add -a 512b -b 40 -t freebsd-zfs adaN
# gdiskと異なり-a 4kを指定すると後ろも4kに合わせられてしまうため、4kを指定せず先頭セクタを40に指定。

# 確認
gpart show adaN
gpart list

# ZFS作成
zpool create -m /mnt/tank tank raidz adaNp1 adaNp1
zfs set compression=lz4 tank
zfs set atime=off tank

# 大容量ディスクのときはgnopを作らなくてもashiftが12になる
zdb -C pool0

# gptidでディスクを認識するようにする
zpool export tank
zpool import -d /dev/gptid/ tank
zpool status
```
FreeBSDは自動的にAFT対応（4Kセクター）にしてくれるらしいですが、SSDの場合は手動で4Kセクターにした方がいいかもしれません。その場合はnopを使うのですが今回は割愛します。
DOSで環境定義ファイルを使うぞ


環境定義(=設定値)は、スクリプトファイルとは別ファイルで管理したいですよね。　当たり前です。
Unixシェルなら`source`コマンドで簡単に実現できます。
これをDOSでも実現できないものか？　というお話。

## 結論

`for`コマンドでできるよ。


## DOSの場合

`for /f`でファイルの内容を環境変数`%i`に読み込んで、`%i`を実行するだけです。
`%i`はDOSコマンドとして解釈されるため、下記は実行が必要な命令としては扱われずにスキップされます。

* `rem`によるコメント行
* 空白行

スクリプトを配置するディレクトリパスに空白を含む可能性がある場合は、下記修正のいずれかが必要になります。

* スクリプトの先頭で`cd`または`pushd`により作業ディレクトリを`%~dp0`に変更する。　かつ`for /f`ではファイル名だけ(=相対パス)を指定する
* `for /f`に`usebackq`オプションを追加する。　かつ`for ... in`で指定するファイルパスを`逆引用符`で囲んだ絶対パスにする

僕の好みは前者です。
これにより、DOSスクリプトをすべて相対パスで記述できます。
⇒　作業ディレクトリを意識しないで実行することができます

### 例

```dos:env.bat
rem ========================================
rem ENV_A ... 設定値A. hoge:ほげ, fuga:ふが
rem ========================================

set ENV_A=hoge
```

```dos:exec.bat
@echo off

rem env.batのロード
for /f "tokens=*" %%i in (%~dp0env.bat) do (
	%%i
)

rem env.batの設定値を出力
echo %ENV_A%
```

```dos:DOS
DOS> exec.bat
hoge
```

## Bシェルの場合(参考)

```bash:env
# ========================================
# ENV_A ... 設定値A. hoge:ほげ, fuga:ふが
# ========================================

ENV_A=hoge
```

```bash:exec.sh
#!/bin/bash

# envのロード
. `dirname $0`/env

# envの設定値を出力
echo $ENV_A
```

```bash:stdout
$ ./exec.sh
hoge
```
SQLでも愛が生まれたけど

コメント欄にシンプルな愛を書きました。

~~しっくりこない。~~
~~16進リテラル文字列と数値の相互変換に手間取った。~~

元ネタ：[愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)
解説：[なんで愛が生まれるのか](http://qiita.com/tienlen/items/44daf3a52eb872085556)

```sql
with
  t1 (i, v) as ( values
    (1, '生'),
    (2, '死')
  ),
  t2 (i, b) as (
    select
      i,
      substring(convert_to(v,'UTF8')::varchar,2,7)::bit(24)::int
    from
      t1
  ),
  t3 (v) as (
    select
      max(case i when 1 then b end) & max(case i when 2 then b end)
    from
      t2
  )
select
  convert_from(decode(to_hex(v), 'hex'), 'utf8') as result
from
  t3
```
VisualStudioCode メモ

# settings.jsonのよく使う項目

コマンドパレッド(Ctrl+Shift+P)を押して、下記のコマンドを選択する

```:コマンドパレッド(個人設定の場合)
>Open User Settings
```
```:コマンドパレッド(作業ディレクトの設定の場合)
>Open Workspace Settings
```
* よく使う設定  
![image](https://qiita-image-store.s3.amazonaws.com/0/66029/523b32bd-e6de-2842-eb87-3fefa95ee3cb.png)


## jsonスキーマ設定

[公式ドキュメント](https://code.visualstudio.com/Docs/languages/json#_json-schemas-settings)

```json:settings.json
	"json.schemas": [
		{
			"fileMatch": [
				"/.babelrc"
			],
			"url": "http://json.schemastore.org/babelrc"
		}
	]
```

# 言語切替

コマンドパレッド(Ctrl+Shift+P)を押して、下記のコマンドを選択する

```:コマンドパレッド
> Configure Language
```
入力後に開かれるlocale.jsonのjpの部分を好きな言語に切り替える
IntelliSenseで候補が出るため楽

```json:locale.json
{
	"locale":"ja"
}
```

# 置換変数
tasks.json と launch.json の2種類のファイルには
置換変数を使うことでディレクトリ名などを使うことが出来ます


|置換変数|説明|
|:-----------|:---|
|${workspaceFolder}|VisualStudioCodeで開いたフォルダのパス|
|${file}|現在アクティブなファイル|
|${fileBasename}|現在アクティブなファイルのベース名|
|${fileDirname}|現在アクティブなファイルのディレクトリ名|
|${fileExtname}|現在アクティブなファイルの拡張子|
|${CWD}|起動時にタスクランナーの現在の作業ディレクトリ|

[公式ドキュメント](https://code.visualstudio.com/Docs/editor/tasks#_variable-substitution)

# アイコンテーマ  
「ファイル」=> 「基本設定」=> 「File Icon Theme」から変更できる  
![image](https://qiita-image-store.s3.amazonaws.com/0/66029/bc48e723-fc23-81de-2661-9524eca9a1f0.png)


# 拡張機能


* [Path Intellisense](https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense)  
パスのインテリセンスを有効にする  
![image](https://qiita-image-store.s3.amazonaws.com/0/66029/d9c9a74e-0142-db26-9de2-7a27991d29e3.png)
* [Python](https://marketplace.visualstudio.com/items?itemName=donjayamanne.python)  
PythonのIntelliSense＋デバッグを行えるようにする
* [Add jsdoc comments](https://marketplace.visualstudio.com/items?itemName=stevencl.addDocComments)
jsdoc形式のドキュメントコメントを挿入する
* [Excel Viewer ](https://marketplace.visualstudio.com/items?itemName=GrapeCity.gc-excelviewer)  
CSVやエクセル形式のファイルをプレビューする  
* [vscode-icons](https://marketplace.visualstudio.com/items?itemName=robertohuertasm.vscode-icons)  
アイコンをつける(※ベータ版らしい)  
↓使用例  
![image](https://qiita-image-store.s3.amazonaws.com/0/66029/0ef16b44-6ce0-1c17-fcb4-43fa351a2eb0.png)

VSCode15.1からアイコン機能が公式で入ったため、テーマとして利用できるので下記は不要です
~~拡張機能をインストール後、管理者でVSCodeを実行する~~
~~コマンドパッドから↓を実行する~~  

```:コマンドパッド
>Icons Enable
```
Spreadsheetsでも愛が生まれた


元ネタ
http://qiita.com/dongri/items/041ff3e7dde6c99beeb0

ブログにも投稿しています
http://ryoichi0102.hatenablog.com/entry/2016/05/11/003646

## Spreadsheetsに書いてみた

https://docs.google.com/spreadsheet/ccc?key=1mDQSaiQcGYP3zR1ksbXZK1PURGKGgA7NWb1quF-qJRo&amp;pubredirect=true

Excelでもできると思います。
`dec2hex(code(A1))`でUnicodeに変換して各文字をmidで1桁にバラします。
その後、`hex2bin(E1,4)`でビットに変換します。
(4は4桁で出力の意)

その後、ビット演算なのですが、これがツラかった。

```js
=if(and(mid(J1,1,1)="1",mid(J2,1,1)="1"),"1","0")&
if(and(mid(J1,2,1)="1",mid(J2,2,1)="1"),"1","0")&
if(and(mid(J1,3,1)="1",mid(J2,3,1)="1"),"1","0")&
if(and(mid(J1,4,1)="1",mid(J2,4,1)="1"),"1","0")
```

このあたり。
もっと良いやり方があれば知りたい。

ここで折り返し地点を超えて、
`bin2hex`、各桁を連結して、`char(hex2dec( ))`
と戻してあげれば完成です。
AK-020 を Mac OS X 10.11 (El Capitan) で使う

#2016年9月20日追記

公式で El Capitan 対応されました。
http://www.abit.co.jp/support/info/ak020.html#panel4

以下の記事は obsolete です。

#概要

[ソラコム](https://soracom.jp) が販売するエイビット(Abit)の3Gモデム(AK-020)ですが、製品仕様上の対応OSに、現時点では Mac OS X 10.11 (El Capitan) が含まれていません。

こちらを Mac OS X 10.11 (El Capitan) で使えるようにしてみます。

#免責事項
本ドキュメントは as is で提供するものであり、本ドキュメントの内容、利用により蒙るいかなる損害についても保証するものではありません。また、記載内容に関する問い合わせ等を行われないよう、ご了承ください。

特に、本来セキュリティを向上させるために具備されている機能である
・セキュリティ整合性保護機能（SIP: System Integrity Protection）
を無効化することになることについて、影響を十分に理解した上で、実施してください。

#手順
##セキュリティ整合性保護機能（SIP: System Integrity Protection）の無効化
command + R を押しながら Mac を起動させ、リカバリモードに入ります。
「ユーティリティ」から「ターミナル」を起動させ、"csrutil disable" と入力し、セキュリティ整合性保護機能（SIP: System Integrity Protection）通称 "rootless" を無効化します。

```
# csrutil disable
Successfully disabled System Integrity Protection. Please restart the machine for the changes to effect.
# 
```
完了したら再起動します。

##セキュリティ整合性保護機能（SIP: System Integrity Protection）が無効化されていることを確認

起動したら、ターミナルから以下のコマンドを打ち、セキュリティ整合性保護機能（SIP: System Integrity Protection）が無効化されていることを確認します。以下のように応答があれば正常です。

```
$ csrutil status
System Integrity Protection status: disabled.
```
なお、

```
System Integrity Protection status: enabled.
```

と表示された場合は、セキュリティ整合性保護機能（SIP: System Integrity Protection）が有効になっていますので「セキュリティ整合性保護機能（SIP: System Integrity Protection）の無効化」の手順に戻ってください。

##接続ソフト「AK-020 Dialer」のインストール
AK-020 を挿入すると、CD-ROM ドライブに見えます。
接続ソフト「AK-020 Dialer」（とドライバ）をインストールします。

##接続設定
まず、CD-ROM ドライブとして見えている「AK-020 Dialer」の「取り出し」をして、接続ソフト「AK-020 Dialer」を起動します。
（取り出しておかないと「AK-020 Dialer」右下の状態は「ドングルが見つかりません」となります。）

その上で「AK-020 Dialer」には触らずに、OS の「システム環境設定」＞「ネットワーク」には「USB Modem Port」が追加されている部分に設定を行います。
「詳細」から「モデム」の項目で
・製造元：一般
・機種：GPRS (GSM/3G)
・APN：soracom.io
・CID：1
として「OK」します。「適用」を押すと設定が保存されます。
（構成：デフォルトとし、電話番号・アカウント名・パスワードは空白で構いません。）
なお「メニューバーにモデムの状況を表示」にチェックを入れておくと、次回以降の接続の際に便利です。

##接続方法
接続ソフト「AK-020 Dialer」を起動した状態で、メニューバーのモデムアイコンから「接続：USB Modem Port」を選択することで接続ができます。
なお、「AK-020 Dialer」が起動している状態で無いと接続できないようです。

##FAQ
Q1. メニューバーのモデムアイコンから「接続：USB Modem Port」を選択してもすぐに接続が解除され「モデムでエラーが起きました。接続し直してください」というエラーが表示されてしまう。
A1. 接続ソフト「AK-020 Dialer」を起動しておかないと接続できないケースがあるようです。「AK-020 Dialer」を起動しておきましょう。

Q2. 接続ソフト「AK-020 Dialer」で右下に「ネットワークが見つかりません」と表示されます。
A2. SMS 無しの SIM の場合に発生するケースがあるようです。無視して OS の「システム環境設定」＞「ネットワーク」＞「USB Modem Port」から接続してみてください。

Q3. 接続ソフト「AK-020 Dialer」で右下に「ドングルが見つかりません」と表示されます。
A3. CD-ROM としてマウントされていませんか？取り出してみましょう。
MySQLのtriggerを試す


最近の案件で削除フラグ連発のオシャレじゃないDB設計にやられてしまった。
だが、開発ノート的なところを覗くとトリガー使ってデータを移動する方法もあると聞き知ったこともあり、ちょっとやってみる。

やりたいことは、usersテーブルのレコードをDELETEしたら、DELETEしたレコードがdeleted_usersテーブルに移動されているようにしたい。


元テーブルとしてusersがある

```
CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `salt` varchar(22) COLLATE utf8_unicode_ci NOT NULL,
  `last_login` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `status` enum('active','inactive') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'active',
  `remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`),
  KEY `users_name_index` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
```

データを移動する用のテーブルを作成する

```
CREATE TABLE deleted_users LIKE users;
```

上記で作れなかったので、

```
CREATE TABLE `deleted_users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
  `salt` varchar(22) COLLATE utf8_unicode_ci NOT NULL,
  `last_login` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `status` enum('active','inactive') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'active',
  `remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `deleted_users_name_index` (`name`)
) ENGINE=InnoDB
;
```

## トリガーの作成

```
DELIMITER //
CREATE TRIGGER deleted_user_insert
BEFORE DELETE ON users
FOR EACH ROW
BEGIN
INSERT INTO deleted_users VALUES (
  OLD.id, OLD.name, OLD.email, OLD.password, OLD.salt, OLD.last_login,
  OLD.status, OLD.remember_token, OLD.created_at, OLD.updated_at
);
END; //
DELIMITER ;
```

## トリガーの削除

```
DROP TRIGGER deleted_user_insert;
```


usersテーブルにDELETE文を走らせると、確かに移動している。
ALTER文を実行するとトリガーは消えるらしいので、合わせて覚えとく。
PowerShellでも愛が生まれるのかやってみた

元ネタ：[愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)

愛が生まれる理由：[なんで愛が生まれるのか](http://qiita.com/tienlen/items/44daf3a52eb872085556)

なるほどーと思ってやってみました。

```ps1
[char]([char]'生' -band [char]'死')
```

思っていたより長くなりました。もう少し短くなるかと思いましたが…


ついでにMac OSX上で2015年４月時点のソースからビルドしたPashでも実行できることは確認しました（ビルド、動作にはmonoが必要です）。

[https://github.com/Pash-Project/Pash](https://github.com/Pash-Project/Pash)

PashConsoleが入力中の日本語をうまく表示できない症状がありますが、出力は「愛」になりました。

<img width="654" alt="Qiita20160511.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/14333/3e8eb42a-5f2d-dbef-cf4f-82c397116524.jpeg">
ruby send include newmodule

据我的理解，include 是 Ruby 的方法，用于给类实现多继承的

Class.send :include, NewModule 这种写法时常用在 Gem 对某些类做 hack 的场景

https://github.com/pmarreck/ruby-snippets/blob/master/wtf_objects.rb

```rb
[1] pry(main)> A.include C
NoMethodError: private method `include' called for A:Class
from (pry):1:in `<main>'
```
BitMapをLinearLayoutの背景に設定する方法(Android)

# やりたいこと
BitMapの画像データをLinearLayoutの背景として設定する

# 方法
まずBitmapをBitmapDrawable変換した後，LinearLayout.setBackgroundDrawableで背景として設定を行います．

```java
Bitmap bmImg = BitmapFactory.decodeStream(is);
BitmapDrawable background = new BitmapDrawable(bmImg);
linearLayout.setBackgroundDrawable(background);
```

## BitmapとBitmapDrawableの差
BitmapDrawableには以下の機能が備わっています．
 - 透過色指定
 - 画像のタイル表示
 - 画像の伸縮
要するにBitmapより高機能らしいです．

# この解決方法について
[teratail](https://teratail.com/questions/34568)の方で教えていただきました．私だけが解決方法を知っているのは勿体ないので，Qiitaの記事として記録させていただきました．

# 参考文献
[BitmapDrawableの使い方](http://android-note.open-memo.net/sub/image--draw-BitmapDrawable.html)
docker-compose を使ってみた

Vagrantよりも、メモリ使用量も少ないので複数コンテナを動かしてもHostマシンにそこまで負荷がかからないということで使ってみたのでその時のメモ。
また、DBとか公式のコンテナが豊富なので、MySQL環境ほしいな～とか言う時にとても便利な印象

# docker-compose.ymlのサンプル
簡単なAPサーバとDBサーバの設定

```docker-compose.yml

# DBサーバ
db:
  image: mysql # mysqlの公式イメージを使用（最新）
  environment:
    - "MYSQL_ROOT_PASSWORD=root" # rootのパスワード
  volumes:
    - etc:/etc/ # etc配下をコンテナ上の/etcにマウント。mysql用の設定ファイルを追加で配置させている
  ports:
    - "3306:3306" # dockerホストの3306ポートをコンテナの3306ポートにフォワード

# APサーバ
app:
  build: ./ruby # ホスト側のこのパスに存在するDockerfileを使用
  volumes:
    # ローカル側にあるモジュールをコンテナにマウント
    # git操作等はローカルで行う
    - ~/program/projects:/app/projects
  ports:
    - "10022:22" # dockerホストの10022ポートをコンテナの22ポートにフォワード(SSH用)
    - "3000:3000"
  links:
   # このコンテナから上記で設定しているdbコンテナを参照出来るようにする。
   # コンテナ内の/etc/hosts に「db」が設定されるのでアプリの設定ファイルのDBの向き先は「db」にしておける
   - db
```

# よく使うコマンド

```
# ビルドして起動
$ docker-compose up -d --build

コンテナ停止
$ docker-compose stop
```
ruby methods unbound method bind

http://www.monkeyandcrow.com/blog/metaruby_monkeying_with_methods/

https://github.com/pmarreck/ruby-snippets/blob/master/wtf_objects.rb

```rb
[19] pry(main)> "lala".method(:upcase)
=> #<Method: String#upcase>
[20] pry(main)> "lala".method(:upcase).call()
=> "LALA"
[21] pry(main)> "lala".method(:upcase).to_proc.call()
=> "LALA"
[22] pry(main)> "lala".method(:upcase).()
=> "LALA"
```

```rb
[24] pry(main)> String.instance_method(:upcase).bind("lala").call()
=> "LALA"
[25] pry(main)> String.instance_method(:upcase).bind("lala").()
=> "LALA"
[26] pry(main)> String.instance_method(:upcase).bind("lala").to_proc.call()
=> "LALA"
[27] pry(main)> String.instance_method(:upcase).bind("lala").to_proc.()
=> "LALA"
```
SpriteKit を用いて 田代まさしを左右に動かす feat. Playground

# LL脳の悩み

- ビルドが苦痛
- そんな僕にも Playground のおかげで気軽に Swift を楽しむ環境が出来た
- しかしながら SpriteKit を触る上では SpriteKit API を覚えないといけない
  - 何回もビルドするのがダルい => SpriteKit API 離れが発生
- ~~ビルドくらい我慢しろという声は必死に耳を塞ぐことにする~~

# というわけで

**せっかくだから 俺はこの赤の SpriteKit を用いて田代まさしを動かすことを選ぶぜ！**

# Result

![tashiro.gif](https://qiita-image-store.s3.amazonaws.com/0/46303/bded1dc5-b3ea-16df-8356-4fb0e56ee14a.gif)

# How to

## コード

```swift:田代まさし.swift

import SpriteKit
import XCPlayground


let sceneWidth = 500
let sceneHeight = 200

func setTashiro(scene: SKScene) -> Void {
    let tashiro = SKSpriteNode(imageNamed: "tashiro")
    let moveShipLeft = SKAction.moveByX(-650, y: 0, duration: 4)
    let moveShipRight = SKAction.moveByX(650, y: 0, duration: 4)
    let tashiroSequence = SKAction.sequence([moveShipLeft, moveShipRight])
    let tashiroLoop = SKAction.repeatActionForever(tashiroSequence)
    
    tashiro.xScale = -1.0;
    tashiro.position = CGPoint(x: 560, y: 50)
    tashiro.runAction(tashiroLoop)
    scene.addChild(tashiro)
}

// View and scene setup
let skView = SKView(frame: CGRect(x: 0, y: 0, width: sceneWidth, height: sceneHeight))
let skScene = SKScene(size: CGSize(width: sceneWidth, height: sceneHeight))
//skScene.backgroundColor = CGColor.whiteColor()

setTashiro(skScene)
skView.presentScene(skScene)

// Showing the result in our timeline
XCPShowView("Live SKView : Gotanda", view: skView)
```

# PlayGround ファイル

- [こちら](https://coredrive.com/jp/shares/4RLUtoeQ3aYaxrKXiKnG45xEGWMZBxANzS9K) からダウンロード出来ます

# ポイント

## 利用する画像ファイルを追加するには？

- PlayGround の ここをクリックして左のペインを開きます

![Screen Shot 2016-05-11 at 00.24.40.png](https://qiita-image-store.s3.amazonaws.com/0/46303/6f676124-abc1-6626-c6d8-e17e861bd73d.png)

- 画像をドラッグアンドドロップします

![Screen Shot 2016-05-11 at 00.24.36.png](https://qiita-image-store.s3.amazonaws.com/0/46303/638c92b0-a2dc-114e-5768-a3a97e041874.png)

- すると、普通に SpriteKit で使っているAPIのようにリソースを利用できるようになります。

# Reference

僕は以下の記事を参考にして、PlayGround で動かすのを勉強しました。

- [Swift and Playgrounds: Learn to program in a fun way!](http://letvar.com/blog/2014/06/swift-and-playgrounds-learn-to-program-in-a-fun-way-2/)
iPhoneに保存された画像パスからUIImageを表示

# 概要
iPhoneのカメラ、写真を使った処理についてメモレベルでまとめます。
画像をそのまま保存するとデータが大きくなり過ぎるかなと思い、デフォルトの写真に保存されている画像のパスだけをアプリ内で持っておけばデータはそこまで大きくならないかと思い、色々と調べました。その際に画像のパス→UIImageに変換する流れをまとめています。

# 写真の表示
iPhoneのデフォルトの写真一覧を表示させます。

```swift
import AssetsLibrary

func pickImageFromLibrary() {
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
        
        // 新たに追加したカメラロール表示ViewControllerをpresentViewControllerにする
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }
}
```

# 写真から画像のパスを取得
写真が選択された時に呼ばれるメソッドです。

```swift
import AssetsLibrary

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: AnyObject]) {
    if info[UIImagePickerControllerOriginalImage] != nil {        
        // 画像のパスを取得
        let imageUrl = info[UIImagePickerControllerReferenceURL] as? NSURL
    }    
}
```
ちなみに`imageUrl`にはこんな感じの値が入ってます`assets-library://asset/asset.JPG?id=106E99A1-4F6A-45A2-B320-B0AD4A8E8473&ext=JPG`

`info[UIImagePickerControllerOriginalImage] as? UIImage`にするとそのままUIImageを取得できます。

# カメラロールの画像パスからUIImageにする
上記で取得した画像パスからUIImageに変換するためにPhotos frameworkを使います。
参考：[Photos frameworkを使ってiPhoneアルバム内の写真を取得・削除する+α](http://himaratsu.hatenablog.com/entry/ios8/photos)

```swift
import Photos

let fetchResult: PHFetchResult = PHAsset.fetchAssetsWithALAssetURLs([url], options: nil)
    let asset: PHAsset = fetchResult.firstObject as! PHAsset
    let manager = PHImageManager.defaultManager()
    manager.requestImageForAsset(asset, targetSize: CGSize(width: 140, height: 140), contentMode: .AspectFill, options: nil) { (image, info) in
        // imageをセットする
        imageView.image = image
}
```

# おわりに
アプリ内に画像のパスだけ保存しておくと元の写真が削除されるとアプリからデータをひけなくなるため(当たり前)アプリ内でもパスではなく画像を保存しておいた方がよいなと思い、これ自体あんまり意味なかったかなと後から気づきました。。
CentOSのディレクトリについて(MacOS10.9環境下)

VirtualBoxとVagrant、そしてCentOSをMacOS10.9環境下でターミナルでインストールしました。
尚、VagrantfileはDropBox上のプロジェクトフォルダ内に入れてあります。
CentOSログイン後、プロジェクトフォルダにNode.jsファイルを置きターミナルで開こうとしましたが
ファイルが見当たりません。

仮想マシンCentOSのディレクトリはMac上では何処に存在するのでしょうか？
ご教示頂けると幸いです
モンティホール問題

モンティホール問題を解いてみた

探偵ナイトスクープの小ネタ集でモンティホール問題やっていたので、解いてみた。

# モンティホール問題とは

登場人物 : Player(あなた), Host(プレゼントくれる人)

1. 3つのカップ(A,B,C)の中にプレゼントを用意します。
2. Host : 「どれか選んでください」
3. Player : 「Aを選びます！」(**まだ開けない**)
4. Host がBを開けます。(**Hostはどこにプレゼントが入っているか知っている**)
5. Host : 「Bには、入ってませんでした。『1. Aを開けますか?』『2.Cにかえますか?』」

このとき，『2.変える』の確率が『1.変えない』の2倍になるという・・・
#### 回答
直感的には1/2で同じ確率になるが、『2.変える』:2/3，『1.変えない』:1/3 の確率になる。

# プログラム

```python:Marilyn.py
# coding: utf-8
import random

def do_try(doChange):
    # 何も入っていないカップを用意する
    cups = {"A":0, "B":0, "C":0}
    # プレゼントを一つ格納する
    treasure = random.choice(list(cups.keys()))
    cups[treasure] = 1
    
    # player: どれかを選ぶ(ランダムで)
    choice = random.choice(list(cups.keys()))
    
    # host: 選んだもの と プレゼント 以外のカップを見せる
    rest_choice = [v for v in cups.keys() if v != choice and v != treasure]
    see_cup = random.choice(list(rest_choice))
    
    # player: 見せられたものを選択肢からはずす。
    # player: 「選択肢を変える or 変えない ?」
    # doChange = random.choice([True, False])
    rest_choice = [v for v in cups.keys() if v != choice and v != see_cup]
    final_choice = choice if doChange == False else rest_choice[0]
    result = cups[final_choice] == 1
    
    # 選択肢の変更の有無と、宝を引き当てたかを返す
    return (doChange, result)

import collections
# player が変えないパターン
array = [do_try(True) for i in range(1,10000)]
print(dict(collections.Counter(array)))
array = [do_try(False) for i in range(1,10000)]
print(dict(collections.Counter(array)))

```
関数フィッティング（Keras利用）

こんにちは。
multilayer perceptron を使った関数フィッティングを行いました（Keras利用）。ノイズを加えた関数値に対してフィッティングを行っています。収束の様子もプロットしてみました。
![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/54617/253a4c37-31df-ba01-e1d8-bd07fcfd3c9c.png)
![figure_2.png](https://qiita-image-store.s3.amazonaws.com/0/54617/f414c46c-955e-f17d-37e3-c740911eda15.png)

```mlp_sinusoidal_keras.py 
#from __future__ import print_function
import numpy as np
import matplotlib.pyplot as plt

from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.optimizers import SGD
#from sklearn.metrics import mean_squared_error

param = {'num_hidden_layers': 2, 'num_nodes': 100, 'num_epochs': 8000, 'activation': 'relu'}
# 'activation': ['tanh' 'sigmoid' 'relu']

# generating data
num_training, num_testing, sigma, seed = 400, 100, 0.3, 0
def sin(x):
    return np.sin(x)*3+1
N = num_training + num_testing
tau=4*np.pi
np.random.seed(seed)
X = np.random.random((N,1))*tau
Y = sin(X)+np.random.normal(0,sigma,(N,1))
I = np.arange(N)
np.random.shuffle(I)
training, testing = I[:num_training], I[num_training:]

# multilayer perceptron
model = Sequential()
for _ in range(param['num_hidden_layers']):
    model.add(Dense(param['num_nodes'], input_dim=1))
    model.add(Activation(param['activation']))
model.add(Dense(1))
model.compile('sgd', 'mse')
model.fit(X[training], Y[training], validation_split=0.1, nb_epoch=param['num_epochs'])
pred = model.predict(X[testing])
#print("error=", mean_squared_error(pred, Y[testing]))

# plotting
X0 = np.linspace(0,tau)
plt.plot(X0, sin(X0), 'r', alpha=0.5)
plt.plot(X, Y, 'b.', alpha=0.3)
plt.plot(X[testing], pred, 'yo')
plt.axis([-0.2,tau+0.2,-5,6])
plt.show()
exit(0)
```
定式化の仕方しだいで問題は解きやすくなる

　ある種の問題を解いているときに、どうにもこれ以上改善のしようがなくなってくることがある。その方式を選択した限り避けられない部分だ。そういうときには、別な枠組みを使うことでうまく解けないかを考えてみよう。

　**たいがいの場合、今自分が考えている問題によく似た例は、既に知られている問題だ。**
ほんの少しの部分が、自分の場合では特殊になっているに過ぎないことが多い。そのような考え方は、問題解決においても、既存の問題解決の事例にヒントを得ることができるとする考え方と共通する。
[TRIZ（トゥリーズ）](https://ja.wikipedia.org/wiki/TRIZ)

　数学の問題の場合でも、多くの問題は最小化問題と定式化される問題は多い。よく知られた問題であれば、その問題を解くための定式化は既に考えられていて、まったく違うアプローチも多数存在している。

　**数学の幾何の授業には苦しめられた経験を持つ人は多いだろう。でもあれは、答は１つじゃなく、いろんな解き方があるんだということを知る訓練なんだ。**

円というのは、
・１点から等距離にある平面状の点の集まり、
・一定の周の長さで面積を最大になるように膨らませたときの平面図形、
・接線の法線が常に一点で交わる図形
といろんな形で記述できる。
　そのような問題の定式化を変えることで問題の解きやすさはいくらでも変わってくる。

屈折の現象だって
[スネルの法則](https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%8D%E3%83%AB%E3%81%AE%E6%B3%95%E5%89%87)と呼ばれるsin関数を含む式で記述することもできるし、
最小時間の原理（[フェルマーの原理](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A7%E3%83%AB%E3%83%9E%E3%83%BC%E3%81%AE%E5%8E%9F%E7%90%86)：　2点を結ぶ経路のうち、光で通過するのにかかる時間が最も小さくなる経路で光は屈折する）で記述することもできる。もし、屈折率が連続的に変わる状況での屈折を考えようとしたら、スネルの法則よりも最小時間の原理の方が解きやすくなる可能性が高くなる。
[ホイフェンスの原理](https://ja.wikipedia.org/wiki/%E3%83%9B%E3%82%A4%E3%83%98%E3%83%B3%E3%82%B9%EF%BC%9D%E3%83%95%E3%83%AC%E3%83%8D%E3%83%AB%E3%81%AE%E5%8E%9F%E7%90%86)の原理によって波として考えることもできる。

　このように問題の定式化の種類によって、問題の解きやすさは、変わってくる。


**同じ問題であっても、どう定式化するかで解きやすさは変わってくる。**
厳密解を求めるのか、ほどほどの一致を求めるのか、
間違った入力を含むときの安定性を求めるのかどうか。
それらによって使うべき定式化は違ってくる。


学生実験で利用する最小二乗法にしてもそうだ。
最初は、「えいや」と直線を手書きでひいていた時代（中学の理科の実験）。
次に、少しだけ統計を知って、直線の最小２乗法でフィッティング結果を引く時代。
さらに、多変数のパラメータで多項式近似のフィッティングをする時代。
統計データの入力には、外れ値が混入していることを考量して、外れ値の影響を受けにくい処理（ロバストな処理）をする時代。

そのように、ものごとをどう定式化して解きやすくするかが、問題解決のコツである。

　ソフトウェアも実現する内容が、何らかの問題解決である以上、そのソフトウェアで実現する内容を、どのように定式化するかによって、解決のしやすさが格段にかわってくる。
　デザインパターンも、そのような定式化の1例にちがいない。問題解決の定石を手持ちの道具箱に増やしていこう。それらがあなたが立ち向かう課題に対して力を与えてくれるだろう。


---
**機械学習も最小化問題**

機械学習の問題は、たいがいの問題で、ある１つの量を最小化する問題として定義されることが多い。
https://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf
のp1の式(1) を見てみよう。
その式の値を最小化する問題として定義されている。

ボルツマン・マシン(https://ja.wikipedia.org/wiki/%E3%83%9C%E3%83%AB%E3%83%84%E3%83%9E%E3%83%B3%E3%83%9E%E3%82%B7%E3%83%B3)も
ネットワーク全体のエネルギー E 
の最小化問題として定義されている。


**損失関数**
深層学習の多くは、与えられたネットワーク構成において、学習データセットに対して損失関数を最小化するものとして表現される。
どの種類の損失関数を採用するかによって、どのような最適化後の結果が得られるかが述べられています。
自分のしたい処理では、どのような結果が得られるののを期待するかで、採用すべき損失関数の種類が決まってきます。

slideShare[機械学習の理論と実践](https://www.slideshare.net/pfi/sacsis2013mlokanohara) などで学び取ることができます。

[機械学習で抑えておくべき損失関数（分類編）](http://s0sem0y.hatenablog.com/entry/2017/06/20/135402)



**拘束条件つきの最適化問題**
拘束条件つきの最適化問題は、
最小化すべき量の中に拘束条件由来の項を追加した新たな量に対する最適化問題に
置き換えることができる。

その手法は[ラグランジュの未定乗数法](https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%B0%E3%83%A9%E3%83%B3%E3%82%B8%E3%83%A5%E3%81%AE%E6%9C%AA%E5%AE%9A%E4%B9%97%E6%95%B0%E6%B3%95)と呼ばれ、
様々な分野で広く使われる数学的な手法になっている。


ラグランジュの未定乗数法
http://www.neuro.sfc.keio.ac.jp/~masato/study/SVM/lagrange.htm



計算機の能力が貧弱だった時代には、
数学的な挙動が同じ現象を利用して、
その結果の値を物理的に計測して、それを換算して
知りたい対象の挙動を解析したことがあると、書籍で読んだことがある。
それは、問題をどう定式化するかということで、どう楽ができるかを
考え抜くことで得られたのだと思う。
Cisco Router エミュレータ（GNS3 IOS）を構築しよう

Cisco CCNP Router の勉強用にエミュレータを作成したい。実機がないと分かりにくいし・・

では、エミュレータを作成しましょう。仮想マシンは検証用で作成します。ただし、ホストコンピュータ（インストール先
）でも必要十分なため任意です。EIGRPやOSPFの動作設定したいだけなので省略推奨。

【環境】
■ Windows 10 Pro bulid 1511 x64
■ Oracle VirtualBox

1. オラクル VirtualBox をインストール（任意）
//商用利用とかのライセンス上、オラクルで。
http://www.oracle.com/technetwork/jp/server-storage/virtualbox/downloads/index.html

2. GNS3 をインストール
WireSharkなどのキャプチャツールがインストールされます。
https://www.gns3.com/

3. GNS3 仮想マシンをダウンロード（任意）
上記の手順と同様のHPより、GNS3をダウンロードします。

4. GNS3仮想マシンをVirtualBox をエクスポート（任意）
VirutalBox のメニューより仮想マシンをエクスポートする

5. IOS ソフトウェアを入手する
実機もしくはインターネットよりIOSのソフトウェアを入手します。
私は実機よりマイグレしました。
シスコからダウンロードする場合は契約番号が必要です。

※IOSのダウンロード先の公開および再配布はいたしません。ご理解お願いします。

とりあえずのインストールは以上です。設定確認は次回
![set2.png](https://qiita-image-store.s3.amazonaws.com/0/94366/96cefae6-98e9-c037-6c0c-5256011c4465.png)
Beer Testでいいじゃないか

[Bots don’t need to pass the Turing test — just the beer test | Venture Beat](http://venturebeat.com/2016/05/02/bots-dont-need-to-pass-the-turing-test-just-the-beer-test/)
Slackの中の人が書いたこの記事を、以下荒削りに解釈します。

## Botの評価にはTuring testじゃなくてBeer testがいい
ビアテスト? --> 「この人と一緒に飲みに行きたいか?」
というシンプルな基準のようだった。

このBeer test、響きメインですが、いろんなユーザーインターフェイスの評価に通じるかと妙に納得しました。あるシステムを気持ちよく使ってもらえるか、これを評価するときに、打ち解けて話し合える対象なのか。基準はそれだけでいいのでは、と。
普通の考えでは、それって基準になってないのでは? ○×の指標が0.5足りない…みたいな話になると思う。でも、よく行われる主観評価でも、表面的になっていないだろうか。心の声まで聞けていることは、あまり行えてない気がする。
本当に評価するべきは、好意を抱けるものかどうか。その軸にフォーカスするのが大事、なのかも。

そんな気づきを与えてくれたこの記事、参考までに超訳(?)してみました。
あえてくだけて…

### Bot開発における評価のベストプラクティス

- わかんないとき、"Help"を頼れること。
- DMやmentionに反応できること。対応できないものも「わかんない」と応える。
- BotはDMすべきじゃない。
- Botはたくさん書き込みそうなときはそれとなくお知らせしておくべき。あと@channelや@hereは使わないほうが。
- Botはopt-inできるようにして、emailやDMは避けたほうがいい。新しい人にはBotを使うかどうか選ばせてあげたほうが。
- Botはmute/pauseできる方が。
- おせっかいなおしゃべりになりそうな前に「いっぱいしゃべるけどいい?」と聞いたほうが。
- 公開かDMかはよく考えたほうがいい。それとどっちかにしたほうが分かりやすい。
- Botとユーザーの会話がうまく行ってない時には、サポートできたらいいね。
- ユーザー個別にパーソナライズできたら、もっといいね。
- 同じ会話には、ランダムに答えよう。

(あなたのbotが)いい感じにならないとしたら:
- そもそも難しいし、NLPの処理だから。
- すごくいい感じに会話させられる技術は他にもいっぱいあるし。
- (botみたいに)人間が自然にやってるようなやり方じゃなくても、すごいサービス作れるから。
XcodeでOpenCL

Xcode7でOpenCLコンパイル

実行形式ファイルの出力場所変更
File>Project Settings...>Derived Data
でProject-relative Locationを選択。

Advanced設定で
Custom>Absolute
フルパスを指定する。

フルパスの表示方法は以下。
http://inforati.jp/apple/mac-tips-techniques/system-hints/how-to-display-the-full-path-of-folder-in-macos-finder-titlebar.html
@Component、@Service、@Repository、@Controllerの違いについて

Springアノテーション「`@Component`、`@Service`、`@Repository`、`@Controller`」について、動きとして基本的同じであり、何れもアノテーションが付与されたクラスをSpringのDIコンテナにbeanとして登録します。使い分けとしては、Spring MVCにおいてコントローラー層のクラスには`@Contoroller`、サービス層のクラスには`@Serivice`、データ層のクラスには`@Repository`、どれにも当てはまらない場合は`@Component`を付けます。

# `@Controller`
Spring MVCでコントローラー層のクラスに付与する。
Controller は、主に以下の役割を担う。
・画面遷移の制御
・ドメイン層の Service の呼出 (主処理を実行する)

```java
@Controller
@RequestMapping("findProduct")
public class FindProductController {

	@Inject
	FindProductService findProductService;
	
	@RequestMapping(value="list")
	public String list(Model model) {
		Collection<Product> products = findProductService.findAll();
		model.addAttribute("products", products);
		return "product/list";
	}
}
```


# `@Service`
Sping MVCでサービス層のクラス（ビジネスロジック等）に付与する。
Service は業務処理を提供する。

```java
@Service
public class FindProductServiceImp implements FindProductService {
	
	@Inject
	FindProductRepository findProductRepository;
	
	public Todo findAll() {

		Collection<Product> products = findProductRepository.findAll();

		if (products == null) {

 			// エラー処理
 			...
		}
		return products;
	}
}
```

# `@Repository`
Spring MVCでデータ層のクラス（DAO等のDBアクセスを行うクラス）に付与する。

```java
@Repository
public class FindProductRepositoryImpl implements FindProductRepository {

	private Collection<Product> products;

	@Override
	public Collection<Product> findAll() {
		return products;
	}
}
```

# `@Component`
Spring MVCに限らず、SpringのDIコンテナにbeanとして登録したいクラスへ付与する。

```java
@Component
public class checkComponentImp implements checkComponent{

	@Override
	public boolean check(BLogicParam param) {
		...
	}
}
```
なでしこでも愛が生まれた

日本語で綴る愛は脆く壊れやすい。
ちょっとしたことで相手を傷つけてしまう。

```なでしこ:愛.nako
「生」をSJIS_UTF8N変換してそれの1をDWORDでバイナリ取得して生に代入
「死」をSJIS_UTF8N変換してそれの1をDWORDでバイナリ取得して死に代入
愛は生＆＆死
愛を愛の1にDWORDでバイナリ設定して愛をUTF8N_SJIS変換して愛に代入
愛を表示
```

なでしことは
==============

1. [なでしこ:日本語プログラミング言語](http://nadesi.com/top/)

元ネタ
========

1. [愛が生まれた - Qiita](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)
ruby 标准库里两种自带的数据库

https://www.krautcomputing.com/blog/2015/09/21/rubys-built-in-databases-meet-pstore-and-yamlstore/

https://github.com/franzejr/best-ruby/blob/master/tricks/easiest-database-pstore-yaml.md

http://solidfoundationwebdev.com/blog/posts/3-built-in-methods-for-simple-file-based-storage-in-ruby-or-rails

https://github.com/franzejr/best-ruby/blob/master/tricks/easiest-database-pstore.md

```rb
require 'yaml/store'
db = YAML::Store.new("yaml-store.yaml")
db.transaction do
  db["foo"] = 1
end
db.transaction do
  db.roots   # => ["foo"]
  db["foo"]  # => 1
end
```

也可以存数据

```rb
[33] pry(main)> store.transaction do
[33] pry(main)*   store["lala"] = "gaga"  
[33] pry(main)* end  
=> "gaga"
```


yaml就会变成这样

```yaml

---
development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000
test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000
production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000
lala: gaga
```

```rb
[1] pry(main)> require 'yaml/store'
=> true
[2] pry(main)> store = YAML::Store.new('./config/database.yml')
=> #<Psych::Store:0x00000002c90408 @abort=false, @filename="./config/database.yml", @lock=#<Mutex:0x00000002c90278>, @opt={}, @thread_safe=false, @ultra_safe=false>
[3] pry(main)> store.transaction 
LocalJumpError: no block given (yield)
from /home/vagrant/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/1.9.1/pstore.rb:325:in `block (2 levels) in transaction'
[4] pry(main)> store.transaction do
[4] pry(main)*   store.roots
[4] pry(main)* end  
=> ["development", "test", "production", "lala"]
[5] pry(main)> store.transaction do
[5] pry(main)*   store["lala"]  
[5] pry(main)* end  
=> "gaga"
```
Proxmox VEでGmailを送る

#はじめに
Proxmox VEでGmailを送ろうとしたのですが、[gmail notifications over ssl 587 port](https://forum.proxmox.com/threads/gmail-notifications-over-ssl-587-port.26451/#post-132769)の通りではSASLで引っかかったので、うまくいった手順を書き残します。

#postfix、libsasl2-modulesおよびsasl2-binをインストール
```
apt-get install -y postfix libsasl2-modules sasl2-bin
```

#/etc/postfix/main.cfを書き換え
```
relayhost = [smtp.gmail.com]:587 #フォーラムでは何も書かれていませんが、こうしています（消す検証はしていません）。
```

#/etc/postfix/main.cfに追加
```
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relayhost.hash

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_auth.hash
smtp_sasl_security_options = noanonymous #フォーラムではnoplaintext, noanonymousですが、SASLで引っかかりました。

smtp_use_tls = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
```

#/etc/postfix/sasl_auth.hashを作成
```
user@gmail.com user@gmail.com:password

#default
[smtp.gmail.com]:587 user@gmail.com:password #フォーラムではこの行はありませんが、こうしています（消す検証はしていません）。
```

#/etc/postfix/sender_relayhost.hashを作成
```
user@gmail.com [smtp.gmail.com]:587
```

#パーミッション設定・設定反映
```
postmap /etc/postfix/sasl_auth.hash
postmap /etc/postfix/sender_relayhost.hash

chmod u=rw,g=,o= /etc/postfix/sasl_auth.hash
chmod u=rw,g=,o= /etc/postfix/sasl_auth.hash.db

postfix reload
```

#テスト
```
date | mail -s test user@gmail.com
```

#ログの確認
```
tail -n 10 /var/log/mail.log
```

#その他
Proxmox VEのインストール時にメールアドレスを要求されますが、それはPAMでrootユーザーのメールアドレスとして設定されています。そのためrootユーザーにメールを送ればそのメールアドレスに送られるはずです。

```
date | mail -s test root@hostname.local
```
からくりとしては/root/.forwardに/usr/bin/pvemailforwardを読むように書かれており、pvemailforwardでPAMを読みにいっているようです。
TypeScriptでも愛が生まれた

元ネタ：[愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)
派生ネタ：[JavaScriptでも愛が生まれた](http://qiita.com/meganetaaan/items/4212e4faa88256addbad)
愛が生まれる理由：[なんで愛が生まれるのか](http://qiita.com/tienlen/items/44daf3a52eb872085556)

```ts
class Shouter {
    shout() {
		return String.fromCharCode('生'.charCodeAt(0) & '死'.charCodeAt(0));
	}
}

let shouter = new Shouter();

let button = document.createElement('button');
button.textContent = "Shout";
button.onclick = function () {
    alert(shouter.shout());
}

document.body.appendChild(button);
```

こちらで実行できます [typescriptlang.org](http://www.typescriptlang.org/play/index.html#src=class%20Shouter%20%7B%0D%0A%20%20%20%20shout()%20%7B%0D%0A%09%09return%20String.fromCharCode('生'.charCodeAt(0)%20%26%20'死'.charCodeAt(0))%3B%0D%0A%09%7D%0D%0A%7D%0D%0A%0D%0Alet%20shouter%20%3D%20new%20Shouter()%3B%0D%0A%0D%0Alet%20button%20%3D%20document.createElement('button')%3B%0D%0Abutton.textContent%20%3D%20%22Shout%22%3B%0D%0Abutton.onclick%20%3D%20function%20()%20%7B%0D%0A%20%20%20%20alert(shouter.shout())%3B%0D%0A%7D%0D%0A%0D%0Adocument.body.appendChild(button)%3B)
rails upcase downcase for no ascii string

https://coderwall.com/p/b74yda/rails-upcase-downcase-for-non-ascii-strings

https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/activesupport/lib/active_support/core_ext/string/multibyte.rb

http://apidock.com/rails/String/mb_chars
clang-formatのstyle比較


ひどいコードがclang-formatでどのように整形されるか，styleごとに見てみる．

```c:汚いコード
/*
  test comment
        */

#include<stdio.h>
#include<stdlib.h>

int add(const int *a, int n)
{int b=0;
for (int i = 0; i < n; i++) b += a[i];
  { int c=b; /* who knows? */ }
return b;}

int main( ){
  int i,n=5; // numbers
int data[n]; /* array */
  int *p = data; // what ?
for(i=0;i<n;i++)
  {
data[i]=i;
  } 
  add(data,n);  return 0;
}
```

# LLVM

```c:-style=LLVM
/*
  test comment
        */

#include <stdio.h>
#include <stdlib.h>

int add(const int *a, int n) {
  int b = 0;
  for (int i = 0; i < n; i++)
    b += a[i];
  { int c = b; /* who knows? */ }
  return b;
}

int main() {
  int i, n = 5;  // numbers
  int data[n];   /* array */
  int *p = data; // what ?
  for (i = 0; i < n; i++) {
    data[i] = i;
  }
  add(data, n);
  return 0;
}
```

# Google

```c:-style=Google
/*
  test comment
        */

#include <stdio.h>
#include <stdlib.h>

int add(const int *a, int n) {
  int b = 0;
  for (int i = 0; i < n; i++) b += a[i];
  { int c = b; /* who knows? */ }
  return b;
}

int main() {
  int i, n = 5;   // numbers
  int data[n];    /* array */
  int *p = data;  // what ?
  for (i = 0; i < n; i++) {
    data[i] = i;
  }
  add(data, n);
  return 0;
}
```

# Chromium

```c:-style=Chromium
/*
  test comment
        */

#include <stdio.h>
#include <stdlib.h>

int add(const int* a, int n) {
  int b = 0;
  for (int i = 0; i < n; i++)
    b += a[i];
  { int c = b; /* who knows? */ }
  return b;
}

int main() {
  int i, n = 5;   // numbers
  int data[n];    /* array */
  int* p = data;  // what ?
  for (i = 0; i < n; i++) {
    data[i] = i;
  }
  add(data, n);
  return 0;
}
```

# Mozilla

```c:-style=Mozilla
/*
  test comment
        */

#include <stdio.h>
#include <stdlib.h>

int add(const int *a, int n) {
  int b = 0;
  for (int i = 0; i < n; i++)
    b += a[i];
  { int c = b; /* who knows? */ }
  return b;
}

int main() {
  int i, n = 5;  // numbers
  int data[n];   /* array */
  int *p = data; // what ?
  for (i = 0; i < n; i++) {
    data[i] = i;
  }
  add(data, n);
  return 0;
}
```

# WebKit

```c:-style=WebKit
/*
  test comment
        */

#include <stdio.h>
#include <stdlib.h>

int add(const int* a, int n)
{
    int b = 0;
    for (int i = 0; i < n; i++)
        b += a[i];
    {
        int c = b; /* who knows? */
    }
    return b;
}

int main()
{
    int i, n = 5; // numbers
    int data[n]; /* array */
    int* p = data; // what ?
    for (i = 0; i < n; i++) {
        data[i] = i;
    }
    add(data, n);
    return 0;
}
```
state演算子（静的変数）が使えない環境での代替方法

静的変数、C言語でいうところのstatic変数というものがある。

[静的変数とは｜スタティック変数｜static変数｜static variable - 意味/定義 ： IT用語辞典](http://e-words.jp/w/%E9%9D%99%E7%9A%84%E5%A4%89%E6%95%B0.html)


関数で2度目の呼び出しが行われた時、前回の値を引き継ぐちょっと変わった変数で、
これを使うと外部からアクセスできないprivateな変数にしたり、前回の結果をキャッシュしたりすることができる。
Perlでは5.10から導入されたため、それ以前の環境下では使えないが、
クロージャという仕組みを使うと同等のことが可能になる。

```pl:cache.pl
#!/usr/bin/perl

use strict;
use warnings;

my @hoge = get_filelist();
print "hoge end $#hoge\n";
my @foo = get_filelist();
print "foo end $#foo\n";

{
        my @list;
        sub get_filelist {
                if (0 == scalar @list) {
                        @list = `find /etc`;
                }
                else {
                        print "cashed\n";
                }
                return @list;
        }
}
```

上記はfindの結果を@listにキャッシュしておき、２度目の呼び出し時は
その結果を返すサンプルである。"cached"が標準出力されており、キャッシュを返している様子がわかる。

```bash
$ perl cache.pl
hoge end 1226
cashed
foo end 1226
```

なお、@listは外側でアクセスできないので仮に呼び出してもコンパイルエラーになり、隠蔽されていることが確認できる。

```bash
$ perl -c cashe.pl
Possible unintended interpolation of @list in string at a.pl line 25.
Global symbol "@list" requires explicit package name at a.pl line 25.
Execution of a.pl aborted due to compilation errors.
```


# 参考

Perl クロージャによる永続的なプライベート変数 closure, state (0x26c)｜Perl Perl_5｜blog20100901
http://pointoht.ti-da.net/e8120632.html
Realm Java 0.90.0でRealmBaseAdapterが別リポジトリへ移動になった

#0.90.0の変更点
[0.90の変更点](https://realm.io/jp/news/realm-java-0.90.0/)は以下の3つ。

- java.util.Date型でミリ秒精度をサポート
これまで秒単位に丸められていた`Date`型の値が、ミリ秒まで情報を保持するようになりました。

- RealmBaseAdapterがRealm JavaからAndroid Adapterに移動
dependenciesに以下の内容を追記する必要があります。
>compile 'io.realm:android-adapters:1.0.1'

- APIの整理
ごちゃごちゃしてたので整理したそうです。いろいろ変更になってます。

#0.87.5と比べてみてどうなの?
日本語のドキュメントがある0.87.5と比べてみると、APIを整理したこともあって、いろいろとDeprecatedになっているなという印象でした。詳細は[CHANGELOG](https://github.com/realm/realm-java/blob/master/CHANGELOG.md)参照。

例えば、RealmのallObjects()がDeprecatedになっていたり、RealmResultsのclear()とremove()がDeprecatedになって、deleteAllFromRealm()とdeleteFromRealm()が追加になっていたりとか。

#RealmBaseAdapterの変更点
[ドキュメント0.90.0のサンプルコード](https://realm.io/docs/java/0.90.0/#working-with-android)と、GitHubにある[Android Adapterのサンプルコード](https://github.com/realm/realm-android-adapters/tree/master/example)を比べると、コンストラクタの引数が異なっていました。

ドキュメントの方が古いままのようですので、お使いになる方はGitHubにあるサンプルコードを確認してください。

#参考
- https://realm.io/news/realm-java-0.90.0/
- https://realm.io/jp/news/realm-java-0.90.0/
- https://realm.io/docs/java/0.90.0/
- https://github.com/realm/realm-java
- https://github.com/realm/realm-android-adapters
仮想環境でのWindows server 2012r2 STDのライセンスについてのメモ

*インフラ初心者の備忘録的なものなので、詳細はMSへご連絡を！

#仮想環境でのWindows server 2012r2 STDのライセンスについてのメモ

##2種類のライセンスが存在。
1.Windows server 2012R2そのものに対するライセンス。
2.CALと呼ばれる、Windows server 2012R2がインストールされたサーバへアクセスするクライアントに対するライセンス。

###前者は1つのライセンスで、2仮想インスタンス(所謂仮想マシン)、2物理プロセッサー(CPUそのもの)をカバー出来る。

物理サーバにWin 2012R2をインストールする時は、単に物理CPUの数を気にすればOK。
仮想マシンにインストールする時には、以下の点に注意。
・仮想マシンをホストしている物理マシンのCPUの数。
・仮想マシンの数。
・どのホストサーバにライセンスを割り当てるか（vMotionなどで、別のホストへ移動した時にはそちら分のライセンスも持ってなければならない。）

上記のStandardライセンスの他にもDatacentarライセンスが存在するが、こちらは価格差が凡そ7倍という話なので、1ホスト当たり14仮想マシンを搭載するような構成ならば効果的。
他にもよりミニマルな環境や物理環境向けのライセンスもあるらしいので、詳しくはMSへ！
https://www.microsoft.com/ja-jp/server-cloud/products-Windows-Server-2012-r2-Purchasing.aspx

###後者のCALについては、インターネットに公開されたサーバか社内などのイントラ向けかがポイントである。
インターネットに公開されたサーバで、使用するユーザが不特定多数の場合、その不特定多数のユーザはCALの範囲対象外。インターネットに公開されていても、社員しかアクセス出来ない状態だったり、社員しかアクセス出来ない場所があるような場合は、その社員数分購入する必要があるようだ。
社員が複数のWin sv 2012 r2サーバにアクセスをするケースもあると思うが、その場合、ユーザ毎にCALを割り当てれば大丈夫なようだ。
https://www.microsoft.com/ja-jp/server-cloud/v1/buy/licensing-guide/

誰かの参考になれば幸いです。
最終的な確認はMicrosoftへお願いします。。。
facebookのOAuth認証を環境ごとに設定する

# はじめに
- Railsでgem deviseを用いて、facebookのOAuth認証を実装した
- facebook開発ページでは「サイトURL」を設定する必要がある
- サイトURLには開発環境（localhost:3000）と本番環境(example.com)のどちらか一方しか設定できないため、開発環境と本番環境から同時にログインできるようにするにはfbに2つアプリを作成する必要があった（？）
- fb開発ページの「テストアプリ」を利用すると、簡単に開発環境用のアプリを準備できたのでメモします。

# やり方
1. fb開発ページの対象アプリに飛ぶ
2. 左枠の「テストアプリ」をクリック
3. 「テストアプリを作成」をクリック
4. 「(fbアプリ名)-Test1」のようなアプリが作成される
5. 左枠「設定」より、アプリID、app secretを表示
6. 「ウェブサイトURL」には開発環境（localhost:3000）などを入力
7. devise.rbの内容を変更

```devise.rb 
  case Rails.env
    when 'production'
      config.omniauth :facebook, "(アプリID production)", "(app secret production)"
    when 'development'
      config.omniauth :facebook, "(アプリID development)", "(app secret development)"
```

8.おしまい
[kintone Café 大阪ハンズオン向け]kintoneに蓄積されたデータをグラフ化しよう

# 概要
本コンテンツは、[kintone Café 大阪主催のハンズオン](https://kintonecafe-osaka.doorkeeper.jp/events/42313)向けに作成したものです。
下図の通り、IoTデバイス(RaspberryPi)でセンシングしたデータを可視化することが目標です。
通信にはWi-Fiまたは3Gを利用します。
可視化にはkintone標準のグラフ機能、およびサイボウズスタートアップスのkViewerを使います。

![Qiita.png](https://qiita-image-store.s3.amazonaws.com/0/30557/85e6ec23-d4f4-677e-9a3b-ccd6c323c0af.png)

本記事では、 **6.グラフの設定** 部分について説明します。

## 6.グラフの設定
### 6-a. 前提条件の確認
[kintoneアプリを作ろう](http://qiita.com/rocca0504/private/5fce5aded1eef08ac35f)で作成したアプリと、センサーデータがアプリの中に入っていることが条件となります。

まずkintoneにログインし、アプリの中に下図のようにデータが入っていることを確認して下さい。
<img width="604" alt="26.png" src="https://qiita-image-store.s3.amazonaws.com/0/73604/a8a7f455-3736-9edd-9e38-1d240b1ae536.png">

### 6-b. グラフの作成
**アプリ一覧画面**のグラフのアイコンをクリックします。
<img width="413" alt="27.png" src="https://qiita-image-store.s3.amazonaws.com/0/73604/48422a87-7748-d923-2b5e-10c165ddc346.png">

集計項目は下記のように設定して下さい。 ※それ以外は**デフォルト**で大丈夫です。
* **グラフの種類：折れ線グラフ**
* **分類する項目：大項目 - 日時 - 分単位**
* **集計方法：平均 - 照度** 

<img width="361" alt="28.png" src="https://qiita-image-store.s3.amazonaws.com/0/73604/0b5f5ec4-31e7-1cdc-6dfc-415254b42efa.png">
設定を進めていくと、プレビュー画面で実際にどのようなグラフになるか確認することができます。
最後は**「適用する」**をクリックして下さい。
<img width="676" alt="57.png" src="https://qiita-image-store.s3.amazonaws.com/0/73604/06f9279b-2045-a113-85e1-8860cb69c2e1.png">


簡単にグラフを作成することができました！
<img width="590" alt="58.png" src="https://qiita-image-store.s3.amazonaws.com/0/73604/f5470ce5-5819-9774-9acf-b2e757a81d2b.png">


また、グラフの種類は**「折れ線グラフ」**以外の種類を選択することも可能です。
実際に変更してみて、どのように表示が変わるか確認してみましょう！
<img width="405" alt="50.png" src="https://qiita-image-store.s3.amazonaws.com/0/73604/362f5e43-a385-7750-bd75-62d8b46a196f.png">
VS Code 1.1.0の新機能（変更点）

## はじめに
Visual Studio Codeの1.1.0が[リリース](https://code.visualstudio.com/Updates)されました!!1.0.0の正式リリースが4月中盤に連れ込んだせいで、数週間で新バージョンがでましたね。そのせいか、目新しい新機能はありません。以下、新機能ダイジェストです。

## エディタ
### エクスプローラーの自動表示
今まで、エクスプローラーの「作業ファイル」でファイルを選択すると、自動的にエクスプローラー内でそのファイルにフォーカスが合うようになっていました。ファイル数が多いと、勝手に移動が繰り返されて煩わしいことがありました。`explorer.autoReveal`を`false`にすることで、停止できるます。私としては開いてほしい時とほしくないとき、両方あるので使いどころが少々難しいです。


### 直近で閉じたファイルを再度開く
直近で閉じたファイルを再オープンできるようになりました。ファイル数が多いプロジェクトで、作業中ファイルをうっかり閉じてしまった場合などに非常に役立ちます。`workbench.files.action.reopenClosedFile`でショートカットの設定ができます。Windowsかんきょうでは、`ctrl+shift+t`が既定値として設定されていました。

### ボーダーのダブルクリックでリサイズ
エクスプローラーやデバッグなどのボーダーをダブルクリックすると、自動的にリサイズしてくれます。Visual Studioでよく使っていた機能なのでありがたいです。

### おまけ
- ローカライズ版でも、コマンドパレットのコマンド名を英語のままつかるようになりました。
- 要望の多かったタブの実装が始まるようです。[デザイン案](https://github.com/Microsoft/vscode/issues/224#issuecomment-213015687)も上がっています。


## デバッグ
### コールスタックパネル
深いコールスタックにも対応しました。パフォーマンスの都合上、デフォルトでは20件分しかコールスタックが表示されませんが、読み込みボタンをクリックすれば続きが表示されるようになります。

### Node.jsデバッグ
ES2015の`Map`や`Promise`、`Generator`がサポートされて変数ウィンドウなどで確認できるようになりました。また、`getter`の値も併せて表示できるようになっているようです。 文字列もV8エンジンの制約で80文字で切られていたところを1000文字程度表示できるようになっています。パフォーマンスも上がっているので、どんどんNode.jsのデバッグがしやすくなっている印象ですね。

## セットアップ
### コマンドプロンプトで開く
エクスプローラーで右クリックしたときに表示される`コマンドプロンプトで開く`をカスタマイズできるようになりました。Windows環境ではコマンドプロンプトが開いていましたが、Powershellなどに切り替えられます。また、Linuxも対応していますが、Macは未実装のようです。

```
{
    "externalTerminal.windowsExec": "powershell",
    "externalTerminal.linuxExec": "terminator"
}
```

### そのほか
Linuxでインストールパスを変更できたり、VS Codeをsudoで実行できるようになったとのことです（ここあたりは環境がないため、未確認です）。

## そのほか
エクステンション用のAPIの追加やランゲージサーバプロトコルV2のリリース、デバッグアダプタのテストサポートなども行われています。こちらの詳しい情報は公式サイトを見てください。
Cと危険なキャストで愛が生まれた

Cで愛が生まれた人は[他にもいます](http://qiita.com/tttamaki/items/be4fd0f5391371d1d205)が。型のチェックが甘いCならではの愛の生まれ方もあるんです。
intが4bytes以上の処理系じゃないと、きっと動かないですが。

```c
#include <stdio.h>

int main(int argc, char** argv){
        argc = *(int*)"生" & *(int*)"死";
        return !puts((char*)&argc);
}
```



http://qiita.com/dongri/items/041ff3e7dde6c99beeb0