OmniAICreator/Qiita-1.07M huggingface dataset:
Rubyでのビット操作向けGem

この前に、popcountを計算する[Gemを作りました](http://qiita.com/jkr_2255/items/ec141731682a79f605d0)が、やりたいことが増えてきたので[`bit_count`という名前](https://github.com/jkr2255/bit_counter)も合わなくなるということで、新たなGemにすることにしました。題して、[`bit_utils`](https://github.com/jkr2255/bit_utils)としています。

# 3つの機能
名前的には汎用とできるようになったところで、現状の機能は3つを用意しています。ビット単位のAND/ORやシフトについては、通常のRubyの演算でまかなえるので、特段用意はしていません。

## `popcount`
元になった`bit_counter`の機能を引き継いで、1になっているビットの数を数える機能があります。ただし、前のところでも書いたように、負の数では1のビットが無限個になってしまうので、0の個数を数えてマイナスで返します。

```rb:popcount.rb
require 'bit_utils'

p BitUtils.popcount(0) # => 0
p BitUtils.popcount(1) # => 1
p BitUtils.popcount(65535) # => 16

p BitUtils.popcount(-2) # => -1

```

## `trailing_zeros`
Rubyの整数には「全体幅」という概念が存在しないのですが、その代わりに有意なビット数を返す`bit_length`メソッドがあります。そして、多くのCPUでは固定幅の整数に対して、「上のビットから0が続く数」「下のビットから0が続く数」を数えるような命令があります。

ということで、Rubyでも「下のビットから0が続く数」を知りたくなって作ることにしました。なお、0の時は-1を返すようにしてあります。マイナスの時も特段のハンドリングは必要ないので、適切な値を返します。

```rb:trailing_zeros.rb
require 'bit_utils'

p BitUtils.trailing_zeros(0) # => -1
p BitUtils.trailing_zeros(1) # => 0
p BitUtils.trailing_zeros(2) # => 1
p BitUtils.trailing_zeros(1000) # => 3
p BitUtils.trailing_zeros(65536) # => 16

p BitUtils.popcount(-2) # => 1
```

## `each_bit`
整数をビットの集合として扱うような場合に、その要素ごとに繰り返し実行するようなメソッドです。なお、`yield`の順序は不定で、また負の数の時は例外を投げます。

他の`each`系メソッドと同様、ブロックを渡さない場合には`Enumerator`を返すので、`.to_a`など好きなように使えます。

```each_bit.rb
require 'bit_utils'

BitUtils.each_bit(0) { |b| p b } # しかし、なにもおこらなかった！
BitUtils.each_bit(1) { |b| p b } # => 0

BitUtils.each_bit(63).to_a # => 0から7まで入った配列（順番は不定）

```

## コア拡張
`require 'bit_utils/core_ext'`とすると、`Integer`に上3つのメソッドが生えます。`require 'bit_utils/core_ext/each_bit'`のようにして、一部だけ組み込むことも可能です。
BigQuery | 今の画面で簡単にカラム型を確認する

どの画面でも、カラムにマウスを当てると、ポップアップしてくれる。(気付かなかった)

![image](https://qiita-image-store.s3.amazonaws.com/0/90607/968040ce-c13c-0468-6d29-01c4c1c3307f.png)



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
UITest自動化を試してみた

# 背景
仕事でUITestの自動化をいろいろ試してみたのでその時のメモ

## 結論
iOSやるときはApple純正が一番学習コストが低い

## 試してみたUITest
- Appium
- XCUITest
- KIF

## 感想
### Appium
- 周りに知っている人がいない人に対しては学習コストが高い
- サンプルが世の中に少ない
- Inspecterでレコーディングの途中でアプリが落ちる
- Inspecterしているとき一つ一つのアクションを記録するのにすごく時間がかかる
- Inspecterだけでコーディングするのは不可能だと思われる
- InspecterはGUIでしか使えないっぽい?
- GUIでAppiumサーバーを立てるとログが見にくいのでCUIで立ててGUIのInspecterで要素の確認を行うのがbetterだと思う
- Androidも使える

### 問題点
- WKWebViewは座標タップに対応していない(issueで上がってたからいつか直るといいな,まぁissueは半年くらい放置されていたけど。。。)

### XCUITest
- Xcode7から標準搭載
- iOS9以上から対応
- レコーディング機能があるがアニメーション等がある場合waitがないと画面が描画される前にテストが流れきってしまう
- Apple公式
- 特定の座標をタップするやり方が謎

### KIF
- AccessibilityLabelを設定してないと使い物にならない可能性がある
理由：Elementを探すのにAccessibilityLabelを使っているため、ソースを見たがXPathとか他の指定方法がなさそう

- UIAccessibilityElementを使ってUIテストを実施しているがApple的には非公開?(リファレンスに詳細がない)っぽい

## まとめ
どれも長所短所がありこれ使えば最強というのはまだないイメージ
XCUITestがObjective-c,Swiftともに資産が生かせるのでiOSのUITest的には便利そう
ただWebViewないの要素がタップできないのが難点
今後座標タップが実装されるのを期待

各UITestの使い方はググってください。。。
credstash/gcredstash - KMS/DynamoDBを使った秘密パラメータの保管

[credstash](https://github.com/fugue/credstash)はAWS Key Management Service (KMS)とDynamoDBを使った秘密パラメータの保管ツールです。KMSで暗号化キーの生成を行い、暗号化した値をDynamoDBに保持します。
[gcredstash](https://github.com/winebarrel/gcredstash)はcredstashをgoに移植したものです。

credstash/gcredstashには以下のようなメリットがあります。

* シンプル: gcredstash put/getで値をセット/取得するだけなので簡単
* 安全: 値はAESで暗号化され、復号した値はHMACでチェックされる
* IAMとの連携: バックエンドはDynamoDBなので、IAMと連携できる
* サーバレス: Vaultのように専用のサーバを立てる必要がない

この記事では主にgcredstashについて説明します。

## インストール
### OS X

```bash
brew install https://raw.githubusercontent.com/winebarrel/gcredstash/master/homebrew/gcredstash.rb
```

### Ubuntu

```bash
wget -q -O- https://github.com/winebarrel/gcredstash/releases/download/v0.1.1/gcredstash_0.1.1_amd64.deb | dpkg -i -
```

## 使い方

まずIAMのコンソールから「credstash」というAliasのEncryption Keyを作成します。

![20160608184639_img20160608-12387-w0hd1u.png](https://qiita-image-store.s3.amazonaws.com/0/20100/b2f9d076-9d26-20be-4426-b5911c15075c.png)

![20160608184726_img20160608-30856-5012g6.png](https://qiita-image-store.s3.amazonaws.com/0/20100/cbbf078d-dab1-2aef-e369-15ce61dd7403.png)
**※作成するリージョンはCLIのAWS_REGIONと同じにする**

次にセットアップを実行。

```sh
$ gcredstash setup
Creating table...
Waiting for table to be created...
Table has been created. Go read the README about how to create your KMS key
```

putで値のセット、getで値の取得ができます。

```sh
$ gcredstash put myapp.db.pass "secret1234567890 秘密です！"
myapp.db.pass has been stored

$ gcredstash get myapp.db.pass
secret1234567890 秘密です！
```

値にはバージョンがあります。上書きしても古いバージョンは残ります。

```sh
$ gcredstash list
myapp.db.pass -- version: 1
```

実態はDynamoDBのテーブルで値は暗号化されます。

```sh
$ ddbcli
ap-northeast-1> select all * from credential-store \G
[
  {
    "contents": "b1+JhrhyDwO9v1MemvkRJwtWUKoSrlRR6eRIsa2DIOM=",
    "hmac": "b8cd59e4a450663ed79d96b9b7c330cc616741abb54c1ce2a981ca5a466ea54d",
    "key": "CiA93iUFTdmOB+Sg6Dxn4g9e8rZni2QUKk+Yah/N05um1BLLAQEBAQB4Pd4lBU3ZjgfkoOg8Z+IPXvK2Z4tkFCpPmGofzdObptQAAACiMIGfBgkqhkiG9w0BBwaggZEwgY4CAQAwgYgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMeVbEFcnsqMszzvewAgEQgFveVAdQYaH95WSScjDdKLWXOStmGn6DW5Lg9I4+2MeLVt9/04CZm1m67kKalBfzBM/NECCx370WDKqr0hGrFHHPsZxpZvoFvGA+QxDhRcMsMkQOd34ppWbaZjz9",
    "name": "myapp.db.pass",
    "version": "0000000000000000001"
  }
]
// 1 row in set (0.08 sec)
```
マスクで画像の一部のみ表示する．[Photoshop]

Photoshopのレイヤーマスクという機能で図のようにマスクをかける．

<img src = "https://qiita-image-store.s3.amazonaws.com/0/113504/347367d5-ccd3-63ce-2ec9-34e8685fa28b.png" width = 480px>


# 手順
# 1. 準備
1. 画像をPhotoshopで開く
2. 背景からレイヤーに変更する．


<img src = "https://qiita-image-store.s3.amazonaws.com/0/113504/3c3f6b37-09be-e582-3830-1fcd72dab0dd.gif" width = 480px>

# 2. レイヤーマスクの適用
1. レイヤーを選択
2. レイヤーマスクボタンを押す． 

<img src = "https://qiita-image-store.s3.amazonaws.com/0/113504/5e4521ab-4e8b-2bde-d82c-239c0a07a73d.jpeg" width = 480px>


<img src = "https://qiita-image-store.s3.amazonaws.com/0/113504/7e9c34d5-d22f-eecc-fd1e-37be0bafd8ca.gif" width = 480px>


# 3. マスクをかける部分の指定
1. 色を黒に変える．
2. レイヤーマスクを選択
3. ブラシツールを選択
4. ブラシサイズを調節して，マスクをかけたい部分を塗る．

<img src = "https://qiita-image-store.s3.amazonaws.com/0/113504/4891d466-d121-7dcd-5ed2-8fb5df7fc152.gif" width = 480px>

5. Command + I を使うことで，マスクを反転することもできる．
Ansibleのios_command等の各タスクの認証情報は「provider」1行でキメる

# 1. 普通に指定すると冗長になってしまう
Cisco IOSに対応したモジュール ios_command や ios_config などでは、
ネットワーク機器にログインするための認証情報を指定する必要があります。
[ios_config - Manage Cisco IOS configuration sections](https://docs.ansible.com/ansible/ios_config_module.html)でいう
以下のようなオプションです。

 - username: ログインユーザー名
 - password: ログインパスワード
 - authorize: 特権モードが必要かどうか
 - auth_pass: 特権パスワード

これに従って素直にPlaybookを書くと以下のように冗長になってしまいます。
（各変数は別途定義してあるものとします）

```yaml:個別指定
---
- hosts: cisco        # インベントリファイルで定義したciscoグループが操作対象
  gather_facts: no
  connection: local

  tasks:
    - name: change password
      ios_config:         # 1つ目のタスク
        host: "{{ inventory_hostname }}"  
        lines:
          - username ope password opeope
        username: "{{ ansible_user }}"       # 1つ目のタスクに対する認証情報
        password: "{{ ansible_password }}"  
        authorize: true
        auth_pass: "{{ cisco_enable_secret }}"

    - name: save config
      ios_command:        # 2つ目のタスク
        host: "{{ inventory_hostname }}" 
        commands:
          - write memory
        username: "{{ ansible_user }}"       # 2つ目のタスクに対する認証情報
        password: "{{ ansible_password }}"  
        authorize: true
        auth_pass: "{{ cisco_enable_secret }}"

```
# 2. providerによる認証情報の指定方法
以下のように`username`などの認証情報を辞書でまとめて、
各タスクの`provider`オプションで指定してあげればスッキリします。

```yaml:providerによる指定
---
- hosts: cisco
  gather_facts: no
  connection: local

  tasks:
    - name: change password
      ios_config:
        lines:
          - username ope password opeope
        provider: "{{ cli }}"   # ★下で定義する認証情報を一括で渡す

    - name: save config
      ios_command:
        commands:
          - write memory
        provider: "{{ cli }}"   # ★下で定義する認証情報を一括で渡す

  vars:    # 説明がしやすいようにPlaybook内で変数定義
    cli:   # ★★providerに渡すための辞書を定義★★
      host:     "{{ inventory_hostname }}"
      username: "{{ ansible_user }}"
      password: "{{ ansible_password }}"
      authorize: true
      auth_pass: "{{ cisco_enable_secret }}"
```
この方法は「[Ansibleで複数のCatalystのパスワードを一括変更する](http://qiita.com/akira6592/items/7695881f91dee1036e4a)」でも
書いていた方法なのですが、参考になればと思いこの件だけ書き出してみました。


なお、[ios_config - Manage Cisco IOS configuration sections](https://docs.ansible.com/ansible/ios_config_module.html)の
`provider`オプションの説明には
>Convience method that allows all ios arguments to be passed as a dict object. All constraints (required, choices, etc) must be met either by individual arguments or values in this dict.

程度しか書いてなく、また、参考になるPlaybookも少ないため、
当初、具体的に何のオプションを`provider`でまとめられるのか分かりませんでした。
なので、 [ios.py] (https://github.com/ansible/ansible/blob/stable-2.1/lib/ansible/module_utils/ios.py#L123)あたりのソースを確認してみると、
以下のパラメータがまとめられそうなことが分かりました。

- host
- port
- username
- password
- ssh_keyfile
- authorize
- auth_pass
- provider
- timeout

# 3. 別のアプローチ
スッキリさせるための別のアプローチです。
YAMLにはマージ記法というのがあって、ある個所に書いたものを別の個所で
使いまわすことができるそうです。こちらは汎用性高そうですね。

- [ansible-playbook内でもYAMLのマージ記法が使えます! Cisco ios_commandモジュールなどでどうぞ。](http://qiita.com/tbuchi888/items/2ff64060290bcabc721e)

# 4. 最後に
もっと良い方法あるよ！という方がいらっしゃいましたら
ぜひコメントいただけると嬉しいです。
【DevOps】Spread sheetでサーバ管理

30台くらいまでのサーバ管理はスプレッドシートが便利。

これくらいの規模は「chef-serverとかを使うまで無いけど、全てのサーバにアップデートかけるのめんどくさい」くらいのレベル感。

スプレッドシートを上手く活用すると、ホスト管理をしながらよく使うコマンドを生成したりできる。

## 利用例
+ サーバ作る
+ 全てのホストにスクリプトを転送して実行するとか
+ docker runする

※詳しくは最後のシート参照

##シート構成
### hosts
+ ホストの一覧
+ コマンドの一覧
+ ホスト固有のパラメータ

##各行の内容
###サーバ作成（適当）
`="aws ec2 create "&B2`
### ssh ログイン
`="ssh -i "&config!$B$1&" user@"&C2`
### スクリプトコピー
`="scp -i "&config!$B$1&" "&config!$B$3&" user@"&C2&":~"`
### スクリプト実行
`="ssh -i "&config!$B$1&" user@"&C2&" bash "&config!$B$3`

### config
+ 共有のパラメータを書く

## サンプル
https://docs.google.com/spreadsheets/d/1mbSTVXs_RViodtHajCyY8wZULG9-lRB4GobivoKbdFs/edit?usp=sharing
クラスの名前空間とuse宣言


Laravelを触り始めた頃、

- 名前空間
- use宣言

の２つを調べたけどなんかよくわからなかった気がする。

#意味

簡単に言うと

- 名前空間：ファイルの居場所を示す
- use宣言：中で使うクラスを宣言する

#各場所

クラスファイルの最初に書きます。

```php:test.php
<?php
namespace App\Http\{クラスのディレクトリ};

use {使うクラス};

class {クラス名} extends {継承するクラス名} {

// ここにコードを書いていく
}

```


名前空間は間違っちゃだめですが、use宣言は間違っても使わなければそこまで問題はありません。
ただ、Usage検索をPhpStormなどで行った場合にひっかかるとめんどくさいのでできるだけ書かないほうがベター。

#例

`Controller`を継承する`TestController`を`/Controllers`下に作る時。

```php:TestController.php
<?php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Console\Commands\Inspire;
use Illuminate\Http\Request;

class TestController extends Controller {

// ここにコードを書いていく
}

```
paiza POH hatsukoi #_poh


私がやりたかったPOHはこういうものでは断じてない。

## HAIR

### ショートヘアセット

```rb:tyama_poh1a.rb
#!/usr/bin/ruby
n=gets.to_i
s=gets.chomp
n.times{puts s}
```

### ロングヘアセット

```rb:tyama_poh1b.rb
#!/usr/bin/ruby
puts gets.to_i%7==0 ? :lucky : :unlucky
```

### ポニーテールセット

```rb:tyama_poh1c.rb
#!/usr/bin/ruby
puts $<.count{|e|a=e.split;a[0]==a[1]}<3 ? :NG : :OK
```

### ツインテールセット

```rb:tyama_poh1d.rb
#!/usr/bin/ruby
s='-'*gets.to_i
s[gets.to_i-1]='+'
puts s
```

### おさげ

```rb:tyama_poh1e.rb
#!/usr/bin/ruby
t,n,*a=`dd`.split.map &:to_i;t*=60;puts (0...n).find{|i|0>t-=a[i]}||:OK
```

## EYE

### たれ目

```rb:tyama_poh2a.rb
#!/usr/bin/ruby
a,b=gets.split.map(&:to_i)
puts a<b ? :NG : :OK
```

### つり目

```rb:tyama_poh2b.rb
#!/usr/bin/ruby
n=gets.to_i
t=n/100
t+=10 if n>=1000
p t
```

### めがね

```rb:tyama_poh2c.rb
#!/usr/bin/ruby
n=gets.to_i
p gets.split.map(&:to_i).sort[n/2]
```

## CLOTHES

### Cute衣装

```rb:tyama_poh3a.rb
#!/usr/bin/ruby
n,m=gets.split.map(&:to_i)
puts m%n==0 ? :ok : :ng
```

### Sexy衣装

```rb:tyama_poh3b.rb
#!/usr/bin/ruby
n,m=gets.split.map(&:to_i)
n-=m
p n>0 ? n : 0
```

### 制服

```rb:tyama_poh3c.rb
#!/usr/bin/ruby
T=Hash[%w(3 4 5 6 7 8 9 10 J Q K A 2).each_with_index.to_a]
a=gets.split
k=rank=pass=0
card=-1
(0..1/0.0).each{|_|
	i=_%a.size
	pass+=1
	if a[i].is_a?(Integer)
		k+=1
		break if k==a.size
	else
		k=0
		if pass>=a.size || T[a[i]]>card
			card=T[a[i]]
			a[i]=rank+=1
			pass=0
		end
	end
}
puts a
```

### 浴衣

```rb:tyama_poh3d.rb
#!/usr/bin/ruby
a=[0]*24
gets.to_i.times{
	x,y=gets.split
	a[x.to_i] += y=='in' ? 5 : 3
}
r=c=0
24.times{|i|
	c+=a[i]
	if c>0
		c-=1
		r+=2
	else
		r+=1
	end
}
p r
```

## SPECIAL

### 水着

```rb:tyama_poh4a.rb
#!/usr/bin/ruby
gets
h=Hash.new(0)
gets.chomp.chars{|c|h[c]+=1}
g=Hash.new(0)
gets.chomp.chars{|c|g[c]+=1}
p g.keys.map{|k|n=g[k]-h[k];n>0 ? n : 0}.reduce(:+)
```

### マイク

```rb:tyama_poh4b.rb
#!/usr/bin/ruby
n,m=`dd`.split.map(&:to_i)
p (m+2*n-1)/(2*n)
```

### カチューシャ

```rb:tyama_poh4c.rb
#!/usr/bin/ruby
n,a,m,b=`dd`.split.map(&:to_i)
p n*a+(n+m-1)/m*b
```
dateコマンドで想像してた使い方が出来なかった話

# はじめに

「dateコマンドを使って変な日付フォーマットをどうにかしたい！」
「日付が読み込めない。。。」
とかそういう人がこの記事にたどり着いたら、
できないのか。。。と時間を無駄にせず他の作業に移れるように記事を書きました。
あとは実はもっといいやり方あったのかなーという思いから。

# やりたかったこと

シェルスクリプトで、
『あるところから取得してきたタイムスタンプと現在時刻を比較して～ｳﾝﾇﾝｶﾝﾇﾝ』
ということをしたかった。

ならdateコマンドを使おう。となりました。

# dateコマンドって？

dateコマンドは現在時刻を取得するコマンドです。

現在時刻取得

```Bash
$ date
2016年  6月  6日 月曜日 18:14:40 JST
```

date -d "2016/06/06 19:36:59"と入力すれば

```Bash
$ date -d "2016/06/06 19:36:59"
2016年  6月  6日 月曜日 19:36:59 JST
```
と出力してくれます。

フォーマットが気に入らなければ、

```Bash
$ date -d "2016/06/06 19:36:59" "+%Y-%m-%d %H:%M:%S"
2016-06-06 19:36:59
```

1970-01-01 00:00:00 UTC からの秒数で表示

```Bash
$ date -d "2016/06/06 19:36:59" "+%s"
1465209419
```
↑時間の比較に使える！

ほかにもいろいろ。

# でも思った使い方が出来なかった！

はじめにも書いた
『あるところから取得してきたタイムスタンプと現在時刻を比較して～ｳﾝﾇﾝｶﾝﾇﾝ』
という処理をしようとしていたら、
**あるところ**から取得してきたタイムスタンプが、、
```20160606_193659```
こんな形だったのだ。。。
でもこれだと無効といわれてしまう。

```Bash
$ date -d "20160606_193659"
date: `20160606_193659' は無効な日付です
```
-dオプションは一般的に読み取れる型でないと読み込んでくれないという。
（一般的って。。。？）


フォーマットオプションも
-d "有効な日付"を好きなフォーマットにできるが、
好きなフォーマットを読み込んではくれない。

```Bash
$ date -d "2016/06/06 19:36:59" "+%Y%m%d_%H%M%S"
20160606_193659
```

どうにか、
・前から4文字はYYYY
・その次の2文字はmm
・　：

みたいに指定して自動で解釈してとかそんな機能、実はありそうだなーと思ったのですが
そんなものはなかった・・・。

仕方がなく、
20160606_193659をいったんsedで変換して
2016/06/06 19:36:59にしてからdateに読み込ませました。
変換もめんどくさい！

```
echo "20160606_193659" | sed -e "s/^\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)_\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1\/\2\/\3 \4:\5:\6/g"`
```

(あまりスマートに見えない)



もっといい方法があったのかなあ。。
【Rails】RoutingError時の処理を書く

# routes.rb
routes.rbにマッチしないルートが呼ばれた時のアクションを設定します

```
match '*unmatched_route', :to => 'application#raise_not_found!', :via => :all
```

# ApplicationController.rb
ApplicationControllerのメソッドにアクションとエラー時のハンドラーを実装します。

```
#called by last route matching unmatched routes.  Raises RoutingError which will be rescued from in the same way as other exceptions.
def raise_not_found!
  raise ActionController::RoutingError.new("No route matches #{params[:unmatched_route]}")
end
```

```
def error_404(exception)
  // 処理を書く
end
```

# 補足
```
get  '*unmatched_route', to: 'application#render_404', format: false
```
routes.rbで登録するアクションに直接ハンドラーを指定しても大丈夫みたいです。
どっちが正しいやりかたなのか誰か教えてください。

# ちなみに
```
rescue_from Exception, :with => :error_500
rescue_from ActionController::RoutingError, with: :render_404
```
ちなみにこのようにExceptinのエラーも捕捉してたりする場合は、その後ろに`rescue_from ActionController::RoutingError, with: :render_404`書かないとRoutingError時もerror_500が呼ばれちゃうみたいです。
関西PHP座談会のメモ


5月26日に初めて[関西PHP勉強会](https://kphpug.doorkeeper.jp/events/44996
"関西PHP勉強会")に参加してきました。
そのときのメモです。
（セッション内容のメモはまた別で書くつもり）

#テーマ 

特には決まってなかったんですが、なぜか **システム** の話になっていました。
最近システム開発って難しいけどおもしろいなーと興味が湧いてきていたところなので面白かったです。



#古いシステムのバージョンの上げ方ってどうするのがベスト？

##まずは全体的に

- フレームワークを使っていないとかき方めちゃくちゃになってたりする（オブジェクト指向、MVC等を理解してない場合特にヤバイ）
- PHPは歴史が長いので生き残ってるものが多い
- オブジェクト指向が流行ってるけど未来はわからない
- けどわりとクラスとして使うというのは生き残りそう
- なので **クラスで作るのがいいかな？**
- 可能ならば何かのフレームワークにのせて作り直すのがベター
- あまり新しいものを「えいやっ！」でやるとヤバイ
- リクエストは昔のシステムに飛ばしちゃうとかもアリ（プロキシみたいな）
- テスト書きながら少しずつ移していくのが良さげ

##フレームワーク関連

- DBの形にあわせてフレームワークを変える
- フレームワークを使うといいこともあるが、古すぎるとそれも大変
- コードイグナイターも作った担当者と世代で違う
- 全然違うフレームワークに勝手に手を出したからめちゃくちゃになった例もある

##お客さんとのやりとりアレコレ

- 「このシステムが本当に必要なのか？」とまず検討するの大事
- その後、本当に必要なものに絞って進めるといい感じになる
- でも裏っかわって基本的にお客さんにわかりにくいところだから推しにくいよね
- 長期的に見ると保守性が高いとコストもかからない、でもお客さんにはなかなか納得してもらえない
- 技術的な負債をどうするのか
- システムを触ってる側とすると気になっちゃうしなるべくトラブルにならないようにしたい
- 一番新しいものを使う必要はないが、次世代にうまく引き継げるためのステップについては考えるよねぇ
- ゴールをどこに見据えるのが大事
- お客さんのビジネスについて「どれだけ売れるのか」「保守性」の２つを両天秤にかける

##お客さんとの交渉術アレコレ

- 「こんないいことがあるよ」ってアピールするのが一番良い
- でも時にはそれじゃ伝わらないので「そうするとこんなリスクがありますよ」という提案の仕方も
- 「サポートがきれる」という一言は結構有効かも
- セキュリティをソフトとかで賄おうとするお客さんもいるが、ソフトが全部守ってくれることはない
- CentOS５とかもよくない

#生のPHPで書いた時のシステムのパフォーマンス測定はどうやってる？

- まずはググって最新のやつでやってみる
- コードの重さとかを見る

#感想

システム開発はビジュアル的にお客さんに説明しにくいというのもあり、実際の技術的なものだけでなくやりとりもかなり重要になってくるのだな、と思いました。
お客さんもシステム制作側も「良いものを作りたい！」という気持ちは同じはずなので、そのへんのコミュニケーションもうまくとっていきたいなぁと。
【WordPress】memcachedを使えるようにする

# memcached-reduxをダウンロード、プラグインのディレクトリに配置

```
[root@test-web wordpress]# cd wp-content/plugins
[root@test-web plugins]# git clone https://github.com/voceconnect/memcached-redux
```

# object-cache.phpをwp-contentに配置

ダウンロードしたmemcached-reduxの中身は以下の通り

```
[root@test-web memcached-redux]# ll
total 16
-rw-r--r-- 1 root root 12010 Jun  8 03:34 object-cache.php
-rw-r--r-- 1 root root  1668 Jun  8 03:34 readme.txt
[root@test-web memcached-redux]# 
```

この、"object-cache.php"をwordpress/wp-contentディレクトリに移動させたい
→ プラグインのアップデート等を考慮して、シンボリックリンクで対応

```
[root@test-web ~]# ln -s /[アプリの場所]/wordpress/wp-content/plugins/memcached-redux/object-cache.php /[アプリの場所]/wordpress/wp-content/object-cache.php
```

# プラグインの有効化

<img width="1020" alt="スクリーンショット 2016-06-08 17.54.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/57635/e3385a5f-4311-ce02-1e39-ac11f1e0a917.png">
"Memcached Redux"の項目を有効化
【WordPress】APCuを使えるようにする

# APCu Object Cache Backend をダウンロード

APCu Object Cache Backend のURLはこちら
https://ja.wordpress.org/plugins/apcu/

場所はどこれあれ、ZIPをダウンロードして展開できればOK

```
[root@test-web ~]# cd /tmp
[root@test-web tmp]# wget https://downloads.wordpress.org/plugin/apcu.1.0.2.zip
[root@test-web tmp]# unzip apcu.1.0.2.zip
```

# object-cache.phpをwp-contentに配置

```
[root@test-web tmp]# cp apcu/object-cache.php /[アプリの場所]/wordpress/wp-content/object-cache.php
```

# "Tribe Object Cache" の必要性について

ソースを見る限り、"Tribe Object Cache"プラグインではobject-cache.phpの配置のみを行っている。
そのため、object-cache.phpさえ然るべき場所に置かれていればプラグインが無くても動作は可能
プラグインの有効/停止でAPCuの動きを制御したい時は入れておいた方が良い。

```php:tribe-object-cache.php 
<?php
/*
Plugin Name:    Tribe Object Cache
Description:    Simple plugin that supports Memcached, APC, Xcache or WinCache based on your system. All you have to do is activate it.
Author:                 Peter Chester, Modern Tribe, Inc.
Version:                1.0.4
Author URI:             http://tri.be
*/

// Block direct requests
if ( !defined('ABSPATH') )
        die( 'Sorry Chuck!' );

register_activation_hook( __FILE__, 'add_object_cache_file' );
register_deactivation_hook( __FILE__, 'remove_object_cache_file' );

/**
 * Place the object-cache.php file into wp-contents.
 */
function add_object_cache_file() {
        $from = dirname( __FILE__ ) . '/lib/object-cache.php';
        $to = WP_CONTENT_DIR . '/object-cache.php';
        copy( $from, $to );
}

/**
 * Remove the object-cache.php file from wp-contents.
 */
function remove_object_cache_file() {
        $file = WP_CONTENT_DIR . '/object-cache.php';
        unlink( $file );
}

?>
```

# 番外編:apc.phpを使えるようにする

APCないしはAPCuのパフォーマンスを可視化してくれるツールがapc.php

![image](https://qiita-image-store.s3.amazonaws.com/0/57635/45d5841d-f353-cefe-aca9-9ba29c719f77.png)

## ソースの取得

URLはこちら
https://github.com/krakjoe/apcu/

```
[root@test-web ~]# cd /tmp
[root@test-web tmp]# git clone https://github.com/krakjoe/apcu/
[root@test-web tmp]# cp apc.php /[phpソースの見られるディレクトリ]/apc.php
```

## 右側の円グラフ、棒グラフが見えないんですけどー

そういう時はGDライブラリがまだ入っていないのでGDを入れる

```
[root@test-web ~]# yum install php-gd
```
devtools で 自分用の R package を作る（最小限）


良い説明は世の中に既にいろいろあるけれど、ここでは:

- RStudio は使わない（IDEよりエディタ派）。
- ドキュメントとかテストとかは置いておいて、まずはとりあえずは動く最小限のものを。
- devtools::skelton() も使わない（羽鳥先生が使うなと言ってるから[^1]）


## 1. 準備

```r
> install.packages(c("devtools", "roxygen2", "testthat", "knitr"))
```

## 2.（なにもしない）パッケージ

例として `hello` という名のパッケージを作る。

```r
> library(devtools)
> create(“hello”)
```

hello がパッケージ名で `hello` というディレクトリが作られるので、そのディレクトリに移動する。

```
> setwd("hello")
> build()
> install()
```

これで `hello` というパッケージが作られ、インストールされた。

```r
> library(hello)
```

として使える（何もできないけど）。

## 3. パッケージに関数を入れる

`hello/R/hello.R` というファイルを作って、例として `sayhello` 関数を書く。

```r
#' @export
sayhello <- function() {
  print("Hello World!");
}
```

ビルド＆インストール

```r
> document()
> build()
> install()
```

`document()` によって `NAMESPACE` ファイルが更新されて、`sayhello()` 関数が外部から使える関数に登録された。

```r
> library(hello)
> sayhello()
[1] "Hello World!"
```

めでたし。

## この後

* DESCRIPTION ファイルを書きましょう。
* `#'` ではじまる roxygen block をもっと書きましょう。

しかし、このメモは「最小限」なので、ここでおしまいです。


[^1]: R Packages http://shop.oreilly.com/product/0636920034421.do
Git | $ git rebase --interactive で 逆順に fixup / squash する

# 問題

インタラクティブモードでリベースする時の話。

たとえば、こういうコミットがある場合。

```bash
pick 77335c9 Commit A
pick d850545 Commit B
```

BをAに溶かしたいんじゃなくて。

```
Commit A
⇡
Commit B
```

AをBに溶かしたい。

```
Commit A
↓
Commit B
```

# 解決

そんな時は、まずはテキストを上下に入れ替えてから。

```bash
pick d850545 Commit B
pick 77335c9 Commit A
```

次に fixup ( または squash ) を指定すれば良い。

```bash
pick 77335c9 Commit A
f d850545 Commit B
```

# 環境

- git version 2.7.4 (Apple Git-66)



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
AndroidのJUnitテストをEnclosedを使ってシュッとする

Androidのテストを書いてるとだんだんごちゃごちゃしてくる

```java:汚くなるテストクラスの例
public class HogeUnitTest {
    @Test
    public void hogeTest() {
        HogeStatus hogeStatus = new HogeStatus();
        assertTrue(hogeStatus.isRunning());
        assertFalse(hogeStatus.isCanceled());
        //cancel
        hogeStatus.cancel();
        assertFalse(hogeStatus.isRunning());
        assertTrue(hogeStatus.isCanceled());
        //finish
        hogeStatus = new HogeStatus();
        hogeStatus.finish();
        assertFalse(hogeStatus.isRunning());
        assertFalse(hogeStatus.isCanceled());
    }
    @Test
    public void mogeTest() {
        Moge moge = new Moge();
        assertNull(moge.someProperty1);
        assertNotNull(moge.someProperty2);
        //calculate
        moge.calculate()
        assertEquals(moge.value, 10);
    }
}
```

コメントとかをつけて頑張ってみても汚くなる...  
Rspecの`describe`みたいにグループ化とか出来たら捗るのに...そう思ったことはありませんか？  
  
`Enclosed`を使うことでシュッとした感じにテストを書くことができます！  

```java:綺麗になったテストクラスの例
@RunWith(Enclosed.class)
public class HogeUnitTest {
    @RunWith(CustomRobolectricTestRunner.class) //例では必要ないけど必要な場合はここに書く
    @Config(constants = BuildConfig.class)
    public static class HogeTest {
        @Test
        public void start() {
            // given
            HogeStatus hogeStatus = new HogeStatus();
            // then
            assertTrue(hogeStatus.isRunning());
            assertFalse(hogeStatus.isCanceled());
        }
        @Test
        public void cancel() {
            // given
            HogeStatus hogeStatus = new HogeStatus();
            // when
            hogeStatus.cancel();
            // then
            assertFalse(hogeStatus.isRunning());
            assertTrue(hogeStatus.isCanceled());
        }
        @Test
        public void finish() {
            // given
            HogeStatus hogeStatus = new HogeStatus();
            // when
            hogeStatus.finish();
            // then
            assertFalse(hogeStatus.isRunning());
            assertFalse(hogeStatus.isCanceled());
        }
    }
    public static class MogeTest {
        @Test
        public void calculate() {
            // given
            Moge moge = new Moge();
            // when
            moge.calculate()
            // then
            assertNull(moge.someProperty1);
            assertNotNull(moge.someProperty2);
            assertEquals(moge.value, 10);
        }
    }
}
```

こんな風に書くと実行結果もいい感じに分割されて解りやすい&&モチベーションアップに繋がるので`Enclosed`おすすめです
Controllerのサブディレクトリの追加エラーの解決法


`/Controllers`にぽんぽんControllerを作ってもちゃーんと動いてました。

でも、`/Controllers/Customer`というディレクトリを新たに追加したらエラーが出た・・・。
`Controllers/Auth`は問題ないのに。

##エラー

```
ReflectionException in compiled.php line 8468:
Class App\Http\Controllers\CorporateController does not exist
```

#コードはどんな感じ？

```php:route.php
Route::get('/admin/corporate', CorporateController::class.'@getDetail');
```

ルートの名前空間の設定についてはProviders\RouteServiceProvider.phpにかいてある、らしい。
けど、とりあえず以下の通りに書いたら解決しました。

#解決後のコード

```php.route.php
Route::get('/admin/corporate', Customer\CorporateController::class.'@getDetail');
```

たぶん、他の方法はあるんだろうけどまずは解決したので一旦よしとする。
他に見つけたらまた追記します。
PostgreSQLのJSON型を使ってみた

#PostgreSQLのJSON型を使ってみた

ちょいとPostgreSQLのJSON型を使ってみたら結構便利だったので紹介します。

## できること
もちろん、登録可能なデータはJSONだけなのですが、
- JSONから値をとりだす
- JSON内の値を利用してwhereやorder、groupなどがかけられる

といったことが可能です。

## 使い方

|id|json_data|
|:-----------|:------------|
|1|"{"point":240,"name":"test","join":{"name":"jointest"}}"|
|2|"{"point":250,"name":"test2","join":{"name":"jointest2"}}"|
|3|"{"point":260,"name":"test3","join":{"name":"jointest3"}}"|
|4|"{"point":270,"name":"test4","join":{"name":"jointest4"}}"|
|5|"{"point":280,"name":"test5","join":{"name":"jointest5"}}"|
|6|"{"point":290,"name":"test6","join":{"name":"jointest6"}}"|

こういったデータがあったとして

①pointデータの取得

```sql
SELECT
    json_data->>'point'
FROM
    json_test
```

②join->nameがjointest2のもの

```sql
SELECT
    *
FROM
    json_test
WHERE
    (json_data->>'join')::json->>'name' = 'jointest2'
```

## まとめ

普通のカラムと同じように扱えるので、かなり便利です！  
ログ情報をまとめて配列で突っ込んでおきたいけど、そのログ情報に検索などしたい場合などに活用できると思います！

※まぁあまり乱用するようなものではないとは思いますが・・・
MySQLにrootユーザーを作成して、rootパスワード設定する手順

ローカルのMySQL`mysql -u root -p`、パスワードrootを入力して、ログインできなかった際の手順。

`mysql.server start`で起動を確認したら、`mysql -u root`とコマンドを叩くとrootにアクセスできます。
GRANT構文の以下コマンドをコピペするするだけで、rootユーザーrootパスワードでアクセスできるようになります。

```mysql
GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'root' WITH GRANT OPTION;
```
【Python】自作モジュールをパッケージ化して配布する

# なにこれ

チームで開発してる時に、自作ツールをほかの人に使ってもらいたかったり、プロジェクトに自作モジュールを組み込みたいみたいなケースありますよね。そういう時、「パッケージ化」が便利っす。

プライベートリポジトリにおいてこっそりパッケージをホスティングする方法はあとで書きます。

(追記)
ごめんこれうごかんかも

# 準備
## プロジェクトの構造
これからの説明は以下の様な構造を想定して書きます。
requirements関係は、pip freezeとかで吐き出してください。
プロジェクト名は「uhouhoapp」とします

- setup.py
- uhouhoapp/
    - main.py
    - sub.py
    - aaaa.py
- requirements.txt
- test-requirements.txt

# 手順

## main.pyの例

```py

def main():
    print('HelloWorld')
```

## setup.pyの用意

```py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from setuptools import setup, find_packages


def _load_requires_from_file(filepath):
    return [pkg_name.rstrip('\r\n') for pkg_name in open(filepath).readlines()]


def _install_requires():
    requires = _load_requires_from_file('requirements.txt')
    return requires


def _test_requires():
    test_requires = _load_requires_from_file('test-requirements.txt')
    return test_requires


def _packages():
    return find_packages(
        exclude=[
            '*.tests',
            '*.tests.*',
            'tests.*',
            'tests',
            '*.yaml'
        ],
    )


if __name__ == '__main__':
    description = ''
    setup(
        name='uhouhoapp',
        version='1.0.0',
        description=description,
        author='UhoUho Inc.',
        author_email='dev@uhouho.com',
        classifiers=[
            'Programming Language :: Python :: 2',
            'Programming Language :: Python :: 2.7',
            'Development Status :: 3 - Alpha',
            'License :: Confidencial',
            'Intended Audience :: Developers',
            'Natural Language :: English',
            'Operating System :: POSIX'
        ],
        packages=_packages(),
        install_requires=_install_requires(),
        tests_require=_test_requires(),
        test_suite='nose.collector',
        include_package_data=True,
        zip_safe=False,
        entry_points="""
        [console_scripts]
        uhouhoapp = uhouhoapp.main:main
        """,
    )
```

# つかうとき
以下のコマンドを叩くと、おれおれモジュールが登録されます。

```py

$ pip install -e .
Obtaining file:///Users/hiroyuki/test22
Installing collected packages: uhouhoapp
  Running setup.py develop for uhouhoapp
Successfully installed uhouhoapp-1.0.0
```


# コマンドとして実行
実行させたいときは、以下のようなかんじ。
別にコマンドいいやって人は、setup.pyのconsole_scripts部分をけそう。

```bash
$ uhouhoapp
HelloWorld
```
Ubuntu 16.04 Geany のテーマを変更する。

#[Ubuntu 16.04] Geany のテーマ（Color scheme）を変更する。


[こちら](https://github.com/codebrainz/geany-themes)より、テーマをダウンロード。
```$ git clone https://github.com/codebrainz/geany-themes```<br>
geany-themes/colorschemes/ を  ~/.config/geany/colorschemes/ に移動。
```$ mv ./geany-themes/colorschemes ~/.config/geany/```<br>
ダウンロードしたファイルはもう不要なので必要に応じて削除。
```$ rm -r ./geany-themes```<br>
あとはgeanyを起動して、
メニューバーの「表示（V）」→「色の設定（C）…」→出現したダイアログからテーマを選択して「閉じる（C）」。

***
参考：
[Color Schemes - Geany Wiki](https://wiki.geany.org/themes/start)
[Geany : Extras](https://www.geany.org/Download/Extras)
[GitHub - codebrainz/geany-themes: A collection of colour schemes for Geany.](https://github.com/codebrainz/geany-themes)
***
LifeKeeperコマンド

#おれのライフキーパーになってくれないか

CLUSTERPROでだいぶ飯を食ってきた私。ここへきて案件でLifeKeeperでHAする機会がありました。こういう製品構築ってのはすぐ忘れちゃうから、案件あれば手伝わせてくださいｗ

なんてことで、OSSみたいにサクッと手順洗い出しの検証はしておきたいってことで、(以前はいろいろ敷居の高かった)トライアルダウンロードができるようになりましたね。これで現場でおろおろすることもないでしょう。まあ一番の肝であるマルチデバイスパスとかDBの検証は、検証環境ではできなそうですけど、共有ドライブの引き継ぎ確認などはiSCSIで接続してマウントポイント・・とかで検証できそうですね。
http://sios.jp/bcp/lkv9/trial/
httpdをリソースとしているし、添付のガイドも秀逸なんで誰でもサクッと始められます。
ただGUI操作の説明しかないため、初めての方は操作コマンドでフェイルオーバーしたいとおもうので、自分の備忘録として書いてマース。

続きはブログで！
http://amachan007.techblog.jp/archives/8117551.html
JETSON TX1が来てやったこと（２日目）

今日は、カメラ周りを中心に見て行きます

#プロセッサについて
今更ながら、TX1ボードに搭載されているプロセッサは「NVIDIA Tegra X1」というらしい。
[Tegra - Wikipedia](https://en.wikipedia.org/wiki/Tegra)を眺めてみると（公式ページ見なさいよ……）
すぐ上に「Tegra K1」というのが居るので、Jetson TK1にはコレが乗ってるんだな、とか
Tegra X1のモデルナンバーは「T210」というんだな、という事が分かります。
……というのも、カーネル眺めてたら```arch/arm64/mach-tegra/board-t210**```てファイルが出てきて
それで逆引きしただけなんだけどね。
つまり、チップ依存の記述はこの辺りに記載されているはず
```board-t210ref-camera.c(197)```辺りを見ると、OV5693とTegraのI/Fっぽい記述がベタベタ書かれてるっぽい。
別のカメラを取り付けるなら、この辺りをガッツリ書かないとダメって事ね……

#カメラモジュールについて
[前回の記事](http://qiita.com/threecups/items/d0be58e133ca44f230c4)にも書いた通り、センサーはOV5693で間違いないと思う。
（何で開発キットのドキュメントに記載されてないんですかねぇ……）
で、こいつがどんなセンサーかというと……ググっても[コレ](http://www.ovt.com/download_document.php?type=sensor&sensorid=185)しか出てこない。
読み取れる範囲で抽出すると
・1080pで、30FPS動作が可能
・ISP内蔵、出力は10bit RGB
・MIPI 2Lane出力
・電源は2.6～3.0[V]、内蔵レギュレータによりコア電源（1.2[V]）が生成される
それ以外に、Linuxのソースから読み取れる事は
・制御はI2C経由 (i2c-6にぶら下がってる？)
・アドレスは0x36 (0x6C/0x6D) ...デバイスツリーにベタ書き？
くらいか

#勘違いと絶望と
さて、[前回の記事](http://qiita.com/threecups/items/d0be58e133ca44f230c4)で色々と勘違いしていた事が発覚
（Linuxやってる人にちょっと見て貰った）
まずカメラについて、V4L2で動いているというのがそもそもの勘違いだったようで
（コマンドで```gst-launch```と書いてあるんだから気付けよという話）
つまり```ov5693_v4l2.c```は全く使用されていないようだ。
そして困ったことに、ここで使用されている```nvcamerasrc```というライブラリがソースコード非公開の模様
この中でMIPI受けなど、カメラの制御が行われているらしいので
ちょい変更で別カメラに対応できるのでは……という夢が潰えてしまった。

#そしてV4L2へ……
しかし不幸中の幸いとでも言うべきか
ドキュメントを色々漁ったところ「Tegra Linux Driver Package Documents」に```Video for Linux User Guide```という項目が
つまり同一環境で、カメラ制御部をGstreamerからV4L2に置き換えることが出来る？
V4L2であれば、先の通り全ソースコードが公開されてる（はず）
ところで、パッチ当てろとかカーネル再ビルドしろとか不穏なワードが見えるんですがそれは
ひとまず明日は、この手順に従って行けるとこまで行ってみたいと思います。

#覚え書き
・ファイル検索について（[参考：Linuxコマンド集 / ITpro](http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230777/)）
　カレント以下の全ディレクトリから、ある名称のファイルを検索する
　```find . -name "*hoge*"```

・文字列検索について（[参考：Linuxで「特定の文字列を含むファイルを全て検索する」ためのコマンド](http://qiita.com/KENJU/items/9bebc75df1e0b3c3ee9b)）
　```grep -rn . -e "hoge"``` もしくは ```grep -rnw . -e "hoge"```
　（オプション```-w```を指定すると、単語単位での検索になる）
　OR検索する場合は```grep -rn . -e "hoge" -e "piyo"```
　AND検索する場合は```"grep -rn . -e "hoge" | grep -e "piyo"```

・キーボードレイアウトについて
　TX1を再起動すると、設定したはずのレイアウトが英語配列に戻ってしまうようです。
　しかも```sudo dpkg-reconfigure keyboard-configuration```を実行すると、設定はちゃんと日本語になっている……
　（再設定するとレイアウトもちゃんと日本語になる、何でや！！）
　[このサイト](http://ubuntu.hatenablog.jp/entry/20140403/1396524520)を参考に、設定ファイルxmlを編集したら直った模様。
　つまりMozcが悪いのか……？
VM上の仮想ディスクの容量を増やす

# VirtualBox上のUbuntuの容量を増やしたい
Ubuntuでいろいろとインストールなどをしていたら容量不足になりました。
やっぱり8GBは少ない。

## 仮想ディスク(VDI)の容量を増やす
Windowsの端末を開き、以下のようなコマンドを実行する。

  ```cmd:コマンドプロンプト
  “C:¥Program Files¥Oracle¥VirtualBox¥VBoxManage.exe” modifyhd D:¥¥ubuntu.vdi --resize 51200
  ```

上記のコマンドはVirtualBoxに存在するコマンド「VBoxManage.exe」を実行して「ubuntu.vdi」の容量を50GBに変更している。
これで8GBだった「ubuntu.vdi」が50GBになっている。(可変の仮想ディスクなのでwindows上で見える容量はそれほど変わらない)


## Ubuntuなどでパーティションを調整する
VDIの容量が増えても、Ubuntu上では8GBのパーティションのままになっていて、42GBほどが未割当の状態になっている。
ここからはUbuntuのLiveCDなどを使ってパーティションの調整を行う。

0. Ubuntu16.04などのLiveCDで起動する。
1. GPartedを起動する。
3. 「sda5」のスワップ領域を無効化し、削除する。(「/dev/sda」にUbuntu16.04がインストールしていたとする。)
4. 「sda2」を削除する。
5. 「sda1」をリサイズし、スワップ領域の分だけ残す。
6. 余っている領域にスワップを設定する。
7. 変更を適応して、PCを再起動する。

以上で、おしまい。
GPartedでsda1をそのままリサイズしようとしたのですが、小さく出来ても大きくはできませんでした。調べてみたらsda1以外を削除すればいいみたいですね。


## 参考
[仮想ディスク(VDI)のサイズ変更](http://virtual-soft1.nnn2.com/?p=384)
[VirtualBoxのディスク容量を拡張する](http://kabatin.hateblo.jp/entry/2016/02/25/190846)
MacにWordPressをインストールする

#０．環境
|項目      | バージョン |
|:----------|:----------|
| 機種       | MacBook Pro |
| OS        | OS X EI Capitan  バージョン10.11.5 |
| Apache    | 2.4.18 |
| MySQL     | Ver 14.14 Distrib 5.7.13, for osx10.11 (x86_64) |
| PHP       | 5.5.34 |
| WordPress | 4.5.2 |


#１．WordPressを以下URLよりダウンロードする

　https://ja.wordpress.org

　![wordpress_Top.png](https://qiita-image-store.s3.amazonaws.com/0/128324/16b3c63c-5719-c523-b7bd-efc437eb1c5f.png)


#２．ダウンロードしたWordPressフォルダを、Macのapacheルートディレクトリに移動する

#３．WordPress設定ファイルを修正する

　ダウンロードしたWordPressフォルダ内の**wp-config-sample.php**を修正する。
　とりあえず使えるようにするなら以下のMySQL情報でOK。

    /** WordPress のためのデータベース名 */
    define('DB_NAME', 'database_name_here');
    
    /** MySQL データベースのユーザー名 */
    define('DB_USER', 'username_here');
    
    /** MySQL データベースのパスワード */
    define('DB_PASSWORD', 'password_here');
    
    /** MySQL のホスト名 */
    define('DB_HOST', 'localhost');


#４．ブラウザで前項でコピーした場所にアクセスする
　ダウンロードしたフォルダを「WordPress」で保存したので、

　http://localhost/wordpress

　にアクセスすると、以下が表示されるので「さあ、始めましょう！」
　![wordpress_start.png](https://qiita-image-store.s3.amazonaws.com/0/128324/6638b9b2-6a2e-625a-b1bd-278ba5330ab8.png)

#５．各情報を入力
　３．項と同じ内容を入力する。
　![wordpress_info.png](https://qiita-image-store.s3.amazonaws.com/0/128324/9c2b8cea-fbe6-da4a-46c2-adf9aa22bf81.png)

　以下のエラーが出た場合は、
　<img width="790" alt="スクリーンショット 2016-06-08 9.30.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/128324/bd71da6c-a7d7-083f-5e46-9f6271736068.png">
　
　データベース名等の入力情報の確認はもちろん、以下の点も確認してみます。自分はMAMPやphpMyAdminを使わずに単独でAMP環境をコツコツしたので、ここでハマっちゃいました。

- [x] apacheがPHP使えるようになってる？？

　httpd.confを確認し、以下記述が有効（コメントが外れてる）か確認。

    LoadModule php5_module libexec/apache2/libphp5.so

- [x] PHPがmysqlを使えるようになってる？？

　　①php.iniがなければ作成する（readonlyになっていると思うので、chmodで適宜変更）

    cp /etc/php.ini.default /etc/php.ini

　　②php.iniにてMySQLのソケットが指定されているか確認する。なってなければ指定する。

    mysql.default_socket = /tmp/mysql.sock

> ソケットの場所は、mysqlの**status**コマンドで出てくる**UNIX socket:**の項目で確認できます。

- [x] apache再起動

    sudo apachectl restart

***
　php.iniにソケットの記述をしてもエラーが解消されなく、Macを再起動しようかと思いましたが、それで直っても原因がわからなくなるな〜と思い、必死に踏みとどまりました。
　で、apacheを再起動したらエラーは解消され、無事に５．へと進むことができました。
    
    困った時の再起動

　いつの時代も変わらぬ、魔法の合言葉ですね。
***

#６．WordPressインストール

　以下の画面になったら、指示通り**wp-config.php**を作成、内容をすべてコピーし、「インストール実行」！
　![wp-config.png](https://qiita-image-store.s3.amazonaws.com/0/128324/51717d79-594e-f202-7d07-1e2a37c2f197.png)

　好きに入力し「WordPressをインストール」！
　![wordpress_install.png](https://qiita-image-store.s3.amazonaws.com/0/128324/ef4f8b3c-85bf-6139-6691-b7f9949fdc2f.png)


#７．成功！

　![success.png](https://qiita-image-store.s3.amazonaws.com/0/128324/b70b66a6-0fca-d334-f61d-34ae5f3aab63.png)

***
　無事ログインできました。次はDocker上で使ってみようかな！
iphone で fixed 要素の上の inputにカーソルを当てると本来入っている部分にカーソルが移動してしまう

#問題点
inputやselectが入った要素を
bodyの下の方に記載して、

```
positon:fixed;
bottom:0;
```
にしたところ、
inputやselectをタッチした際に
一番下に移動してしまった。

#したいこと
この動作でなく、一番下に移動することなく
見ている場所でinputやselectが弄れるようにしたい。

#解決策

#サンプル
http://codepen.io/key055/full/QEQQNq/

## javascript

```
$(".fixed").on("focus mouseup", ".input", function(event) {
    var pos = $(window).scrollTop();
    setTimeout(function() {
        $('html, body').scrollTop(pos, 0);
    }, 50);
});
```


#### 参考にしたサイト
http://ja.stackoverflow.com/questions/2979/ios8%E3%81%A7positionfixed%E3%81%AAheader%E3%81%AB%E4%BB%98%E3%81%91%E3%81%9Finput%E3%81%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%82%AB%E3%82%B9%E3%82%92%E5%BD%93%E3%81%A6%E3%82%8B%E3%81%A8%E4%B8%80%E7%95%AA%E4%B8%8A%E3%81%BE%E3%81%A7%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86
Coq + Proof Generalで使うキーシーケンス

基本的なものから。覚え方にあるキーワードはemacsの関数名からの推測です。
検証はCoq 8.4、Proof General 4.3で行いました。

# キーシーケンス
## ヘルプ
| 機能 | キー | 覚え方 |
|:--|:-:|:--|
| キーシーケンスと関数の対応表を表示  | `C-c C-h`  | Help |

## 基本
| 機能 | キー | 覚え方 |
|:--|:-:|:--|
|次のコマンドを実行  | `C-c C-n`  | Next |
|前のコマンド実行を巻き戻す  | `C-c C-u`  | Undo |
|バッファの最後まで実行  | `C-c C-b`  | Buffer |
|バッファの先頭まで巻き戻す | `C-c C-r` | Retract |
|カーソル位置のコマンドまで実行  | `C-c C-RET`  ||
| [SearchAbout](https://coq.inria.fr/tutorial/3-modules#htoc30)[^1] | `C-c C-a C-a` ||
 
[^1]: SearchAboutはCoq8.5以降ではdeprecatedで、Searchと呼ばれるようになったようです。


## スクリプト処理
| 機能 | キー | 覚え方 |
|:--|:-:|:--|
| 前のコマンド実行を巻き戻して、コードを削除 | `C-c BS`  |
| `.`を打った時に自動で`C-c C-n`（トグル） | `C-c .`  | コマンドの終端`.`

## 編集
| 機能 | キー | 覚え方 |
|:--|:-:|:--|
| 実行済み部分の次へカーソルを移動  | `C-c C-.`  |
| `intros`を自動挿入 | `C-c C-a C-i` | Intros |
| 型に対して`match`を自動生成 | `C-c C-a RET` |
| タクティックの補完入力 | `C-c C-a C-t` | Tactic

## 証明補助
| 機能 | キー | 覚え方 |
|:--|:-:|:--|
| 既存の証明・定義を一覧表示(名前:型) | `C-c C-t`  | conText? |
| [About](https://coq.inria.fr/refman/Reference-Manual008.html#hevea_command77) | `C-c C-a C-b` | 
| [Check](https://coq.inria.fr/refman/Reference-Manual008.html#hevea_command95) | `C-c C-a C-c` | Check
| [SearchPattern](https://coq.inria.fr/refman/Reference-Manual008.html#hevea_command106) | `C-c C-a C-o` |
| [Print Hint](https://coq.inria.fr/refman/Reference-Manual010.html#hevea_command197) | `C-c C-a h` | Hint
| [Print](https://coq.inria.fr/refman/Reference-Manual008.html#hevea_command75)(関数・データ型などの定義を表示) | `C-c C-a C-p` | Print
| *i*番目のゴールを表示 | `C-c C-a C-s` |
| 現在の`*goal*`バッファの内容を凍結して表示 | `C-c C-a g` | Goal
| 現在の`*response*`バッファの内容を凍結して表示 | `C-c C-a r` | Response

## 見た目の制御
| 機能 | キー | 覚え方 |
|:--|:-:|:--|
| `*goal*`バッファの表示 | `C-c C-i` |
| 設定されたウィンドウレイアウトを復帰 | `C-c C-l` | Layout |
| バッファのローテーションを行う | `C-c C-o` |
| `*response*`バッファをクリア | `C-c C-w` |
| ツールバーを表示 / 非表示 | `C-c b` | toolBar? |
| カーソル位置の証明・定義を展開 / 折り畳み | `C-c v` | Visibility |
## プロセスの制御
| 機能 | キー | 覚え方 |
|:--|:-:|:--|
| Coqプロセスを開始 | `C-c C-s` | Start |
| Coqプロセスを終了  | `C-c C-x`  | eXit |
| スクリプト処理の中断 | `C-c C-c` | Cancel |

# 参考になるドキュメント
`*Help*` (`C-c C-h`)
[Vernacular Commands Index](https://coq.inria.fr/refman/command-index.html)
EspressoでSpinnerの選択肢に特定の文字列が存在しない事をテストしたい


標準版に存在する選択肢が特定のproductFlavorでのみ存在しない事をテストしたい、という状況がありましたが、あまりいい方法が思い浮かばなかったのでかなりいい加減で酷いコードです。

onDataでマッチするものがなかった場合、performやcheckを読んだ時点でRuntimeExceptionを吐く事を利用しています。

```java
// 例：標準版には選択肢1・選択肢2・選択肢3が存在するが、テスト対象には選択肢1と選択肢2しか存在してはいけない事のテスト
onView(withId(R.id.spinner)).perform(click());
onData(allOf(is(instanceOf(String.class)), is("選択肢1"))).check(matches(notNullValue()));
onData(allOf(is(instanceOf(String.class)), is("選択肢2"))).check(matches(notNullValue()));
try {
    onData(allOf(is(instanceOf(String.class)), is("選択肢3"))).check(matches(notNullValue()));
    fail("選択肢3が存在する");
} catch (RuntimeException ignored) {

}

```
LinebotをJobキュー使って非同期処理をする


さくっとできそうだったので、Pythonを使ってLinebotを操作してみることした。
まず、Linebot自体は、 __データを受け取り__、そして、 __データを返す__ ことしかしない。

なので、ちょーざっくり言うと、基本的に2つのことを行うために使うケースが多いと考えられる。

* ユーザーからのデータをcallbackで __受け取り__、 __解釈__ する
* 解釈したデータを使って __処理を行い__、 __返答__ する

この、 __解釈の方法__ と __返答のフォーマット__ によって、 __Botの機能/性質__ が決まる。


以下、LinebotモジュールをPythonでざっくり準備してみた。
使い方/実行方法などは、README.mdにあるので、参考にしてもらえればと思う。
Linebotモジュール: https://github.com/JFK/linebot

ここでは、上記のモジュールとrq（jobキューワーカー）を使ってLinebotを操作してみる。

## rqを使ってLinebotを実行

* rqについて http://python-rq.org/docs/

### rqの準備

```python:job_queue.py
from rq import Queue
from redis import Redis

def queue(name='low'):
	redis = Redis()
    q = Queue(connection=redis)
	return q
```

### rqを使って実行

```
from job_queue import queue
from linebot import LINEBot
...
# callbackのデータをパースする
bot = LINEBot(<CHANNEL_ID>)
receive = bot.receive_callback(json_body)
to = receive.content('from')
text = 'Hi!'

# テキストを受けっとた場合
if receive.is_message and receive.content('contentType') == ContentType.TEXT:
	# jobキューにセットして実行する
	queue.enqueue(bot.send_text, [to], text)
...
```

みたいな感じ。
SharePoint Client Object Model でビュー オブジェクトを取得するコード

```javascript
// コンテキスト取得
var custCtx = SP.ClientContext.get_current();
 
// サイトオブジェクト取得指示
var custWeb = custCtx.get_web();

// リスト（ライブラリ） オブジェクトの取得指示
//var custList = custCtx.get_web().get_lists().getByTitle("(リスト・ライブラリの表示名)");
//// リストコンテキスト内のページ（ビュー、フォーム等）の場合に現在のリストを取得する場合
var custList = custCtx.get_web().get_lists().getById(_spPageContextInfo.pageListId);

// リストビューコレクション オブジェクトの取得指示
var custViews = custList.get_views();
// リストビューコレクション オブジェクトから、名前を指定した特定のビューを取得指示
var custView = custViews.getByTitle("(ビュー名)");

// リストビューコレクション オブジェクト取得予約
custCtx.load(custViews);
// 特定のリストビュー オブジェクト取得予約
custCtx.load(custView);

// サーバーへのクエリー実行（ここまでのコンテキストに含まれる指示予約を送信）
custCtx.executeQueryAsync(
    function(sender, args) { // クエリー実行時コールバック処理

        // 特定のリストビューの内容を取得
        console.log(custView);
        console.log(String.format(
            "Title:{0}, ServerRelativeUrl:{1}, ID:{2}",
            custView.get_title(),
            custView.get_serverRelativeUrl(),
            custView.get_id()
        ));
        console.log("ViewType : {0}", custView.get_viewType());
        console.log("ViewXml : {0}", custView.get_listViewXml());
        console.log("SchemaXml : {0}", custView.get_htmlSchemaXml());

        // すべてのリストビューの内容を取得
        console.log(custViews.get_count());
        var listViewEnumerator = custViews.getEnumerator();
        while (listViewEnumerator.moveNext()) {
            var oView = listViewEnumerator.get_current();
            
            console.log(oView);
            console.log(String.format(
                "Title:{0}, ServerRelativeUrl:{1}, ID:{2}",
                oView.get_title(),
                oView.get_serverRelativeUrl(),
                oView.get_id()
            ));
            console.log("ViewType : {0}", oView.get_viewType());
            console.log("ViewXml : {0}", oView.get_listViewXml());
            console.log("SchemaXml : {0}", oView.get_htmlSchemaXml());
          }

          // ビューの設定を更新したら、サーバーに送信が必要です！
          //custCtx.executeQueryAsync(
          //    function(sender, args) { // クエリー実行時コールバック処理
          //        console.log('送信ヨシ！');
          //    },
          //    function(sender, args) { // クエリー失敗時コールバック処理
          //        console.log('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
          //    }
          //);
    },
    function(sender, args) { // クエリー失敗時コールバック処理
        console.log('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    }
);
```
MySQLクライアントソフトSequelProで便利なキーボードショートカット集

こんにちは、皆さんパンケーキ(SequelPro)使ってますか？(・∀・) 
僕は個人開発でも仕事場でもこの便利なソフトを使ってます。
シンプルかつ直感的で素晴らしい :kissing_closed_eyes: 

さてそんなSequelProで多用するであろう便利なキーボードショートカットを
ご紹介します。

まず画面と対応するショートカットをホントにてっとり早く知りたいという方はこちら
![スクリーンショット 2016-06-07 17.png](https://qiita-image-store.s3.amazonaws.com/0/71113/4ed007e6-1830-4fc8-ea55-e73e50e0cb1a.png)

↑も含めたショートカットの対応表は以下に記載します

# メインタブ(ヘッダーメニュー)切り替え
|動作|キー|
|:---|:---|
|テーブル構造タブを選択|Cmd+1|
|テーブル内容タブを選択|Cmd+2|
|テーブル関係タブを選択|Cmd+3|
|テーブルトリガータブを選択|Cmd+4|
|テーブル情報タブを選択|Cmd+5|
|カスタムクエリタブを選択|Cmd+6|

# 全体

|動作|キー|
|:---|:---|
|新しいウインドウを開く|Cmd+N|
|新しいタブを開く|Cmd+N|
|SQLファイルを開く|Cmd+O|
|SQLをファイル保存|Ctrl+Cmd+S|
|接続タブを閉じる|Cmd+W|
|SQLインポート|Cmd+Shift+I|
|次の接続タブに移動|Cmd+Alt+→|
|前の接続タブに移動|Cmd+Alt+←|
|データベース再読み込み|Ctrl+Cmd+R|
|データベース選択|Cmd+Shift+D|

# テーブル内容タブ選択時
|動作|キー|
|:---|:---|
|テーブル内容再読み込み|Cmd+R|
|条件値入力フォーカス|Cmd+F|

# カスタムクエリタブ選択時
|動作|キー|
|:---|:---|
|現在または選択中のクエリをSQL実行|Cmd+R|
|全SQL実行|Cmd+Alt+R|
|現在または選択中の行を左にタブ移動|Cmd+[|
|現在または選択中の行を右にタブ移動|Cmd+]|
|現在または選択中の行をコメントアウト|Cmd+/|
|現在のクエリをコメントアウト|Cmd+Alt+/|

# その他
テーブル数が多くなると赤枠のテーブルフィルタが出るようになります
![スクリーンショット 2016-06-08 18.png](https://qiita-image-store.s3.amazonaws.com/0/71113/586227f7-e8dd-c3d5-50a8-1f93dcb1d33d.png)


フィルタが出来るのは良いんだけど、これもショートカットキーでフィルタ入力にフォーカスしたい・・
そう思って調べたら一応ショートカットキーはありました。
デフォルトでは「Ctrl+Alt+Cmd+F」で出来ます。
はっきり言います。超押しにくいです :dizzy_face: 

なのでカスタマイズしましょう。
Macの「システム環境設定」>「キーボード」を開いて「ショートカット」タブの「アプリケーション」を開いてください。

次に+ボタンをクリックします
![スクリーンショット 2016-06-08 18.png](https://qiita-image-store.s3.amazonaws.com/0/71113/5db69df8-33a8-6ba3-dff5-0c2d8a228bbb.png)

表示されたダイアログで以下のように入力して追加ボタンをクリックします。
(ショートカットキーはお好みで)
<img width="780" alt="スクリーンショット 2016-06-08 18.50.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/71113/b217f053-239d-d05f-733f-b4b758dcd4e4.png">

これで設定したショートカットキーでテーブルフィルタ入力にフォーカス出来るようになりました！
Laravel+Nginxでpublicの下のアクセス優先順位をかえる

Laravel+Nginxで、htmlよりphpを優先したいケースがあったのでメモ。
（スマートじゃないかもしれない）

# 環境
Laravel homestead(2016/5/30時点の最新）
Ubuntu 14.04
Laravel 5.1
nginx/1.9.14
PHP 7.0.5-2+deb.sury.org~trusty+1 (cli) ( NTS )


# リクエスト処理順
1. Nginxの '/etc/nginx/nginx.conf' 内、 server>root に規定されたディレクトリ＝webのルートになり、実在するファイルをチェック。あればそのままそれを表示。
2. "/"で指定された場合の、優先順位はserver>indexの記載順。
ちなみに、Homesteadの場合は、上記configからincludeしている、`/etc/nginx/sites-enabled/homestead.app` に実際の設定が記述されている。
デフォルト


```file:/etc/nginx/sites-enabled/homestead.app
server {
    listen 80;
    listen 443 ssl;
    server_name homestead.app;
    root "/home/vagrant/Code/Laravel/public";

    index index.html index.htm index.php;
以下略）
```

3. 上記の優先順位により、public以下のindex.phpを読み込む（Laravelの処理へ入る）
4. index.phpの

```
$app = require_once __DIR__.'/../bootstrap/app.php';
````

が読み込まれることにより、Laravelの本流へ

4. routes.phpに規定されたルーティングに応じて、Karnel.php に規定されたmiddlewareやContoller等が実行される


# publicの下のファイルの優先順位をかえる。

/home/vagrant/Code/Laravel/public/original/ の下に、
- index.php
- index.html

を配置。index.phpを先に読み込ませたい。

```file:etc/nginx/sites-enabled/homestead.app
server {
略）
#    index index.html index.htm index.php;
    index index.php index.html index.html;
以下略）
```

に書き換えて、`# nginx -s reload`

→結果、phpの方が先に読まれるようになった!

# index.htmlへのアクセス

このままでは普通にブラウザから、ドメイン/original/index.html と打ったらアクセスできる。

index.htmlのアクセス拒否をするには

```file:etc/nginx/sites-enabled/homestead.app
server {
（中略）

    location ~ /\.ht {
        deny all;
    }

#追加ここから
    location ~* ^/.*/index.html$ {　
        deny all;
    }
#追加ここまで

    ssl_certificate     /etc/nginx/ssl/homestead.app.crt;
    ssl_certificate_key /etc/nginx/ssl/homestead.app.key;
}
```

のように足してやればOK。

index.phpの中から、

```
readfile("index.html");
```

のように呼んでやれば、URLにindex.htmlを出さずに表示することができる。

# 別ディレクトリのindex.phpを呼び出す
（追記）



```file:etc/nginx/sites-enabled/homestead.app
server {
（中略）
   location ~* ^/apps/.+/$ {
        index /apps/index.php;
   }
（略）
}
```

みたいにしてやると、
ドメイン/apps/アプリ名/
にアクセスしたときに、
public/app/index.php
を呼ぶことができる。


---
# 参考）
http://qiita.com/syou007/items/3e2d410bbe65a364b603
http://tengine.taobao.org/nginx_docs/ja/docs/http/request_processing.html
macにoffice365入れようとしたらDNSエラー出てインストできない件


## ダウンロードができない！

「officecdn.microsoft.com という名前のサーバが見つかりませんでした」と表示されてしまい肝心のダウンロードが始まらない。


## 回避策

書いてある通りDNSの問題だそうなので、macから見に行くDNS先を指定してあげると大体クリアできるようです。
DNSを見にいくサーバとして、優秀なのがGoogle先生の用意しているDNSサービス。
こちらに設定するのがベター。いやベストか。


## 設定方法(mac)
システム環境設定
　=> ネットワーク
　　=> 詳細
　　　=> DNS
　　　　=> DNSサーバー の[+]
　　　　　=> 8.8.8.8を入力して[OK]
　　　　　　=> 適用

指定する8.8.8.8というIPアドレスが「Google Public DNS」のアドレスだそうです。
HTC Viveでコントローラの当たり判定（collision）

# HTC Viveでコントローラの当たり判定（collision）

いつもパラメータを忘れるのでメモです。
SteamVR_RenderModelで動的にコントローラのオブジェクトを作成しているので、コントローラの当たり判定で良いアイデアがありません。
仕方がないのでコントローラにColliderを入れて当たり判定のチェックを行っています。
（何か他に良いアイデアがあればください）

![15e28fe3b7ebe24ce19e9de597763769.png](https://qiita-image-store.s3.amazonaws.com/0/79067/b5168ee9-fd9f-3982-b1c0-06961914769e.png)

ここに、こんな感じのGameObjectを作成して

![29063fca93dd15dc20f3a2dc752e446e.png](https://qiita-image-store.s3.amazonaws.com/0/79067/4a3d15c7-3d44-7065-9fe6-f60df0f77002.png)

こんな感じのパラメータでなんとなくコントローラ全体を包むようなBox Colliderが出来ました。