OmniAICreator/Qiita-1.07M huggingface dataset:
NSDateFormatterStyle 表示スタイルまとめ

[別の記事](http://qiita.com/malt/items/c04a5542805e97cdf979)で、NSDateFormatterについての自分の誤解について書いた。
今回は、NSDateFormatterで時間がどのように表示されるかまとめる。
全て、UnixTimeで 1428054441 にする。（書いている時間）

ちなみに英語では、
short/Medeumでは', ' 
long/Fullでは' at '
で、日付と時間の間が保管された。

#日付表示

| style  | 日本語             | 英語                  |
|:-------|:-------------------|:----------------------|
| short  | 2015/04/03         | 4/3/15                |
| medium | 2015/04/03         | Apr 3, 2015           |
| long   | 2015年4月3日       | April 3, 2015         |
| full   | 2015年4月3日金曜日 | Friday, April 3, 2015 |

#時刻表示

| style  | 24時間表示 | 日本語                   | 英語                           |
|:-------|:-----------|:-------------------------|:-------------------------------|
| short  | ON         | 18:47                    | 18:47                          |
| short  | OFF        | 午後6:47                 | 6:47 PM                        |
| medium | ON         | 18:47:21                 | 18:47:21                       |
| medium | OFF        | 午後6:47:21              | 6:47:21 PM                     |
| long   | ON         | 18:47:21 JST             | 18:47:21 GMT+9                 |
| long   | OFF        | 午後6:47:21 JST          | 6:47:21 PM GMT+9               |
| full   | ON         | 18時47分21秒 日本標準時  | 18:47:21 Japan Standard Time   |
| full   | OFF        | 午後6:47:21秒 日本標準時 | 6:47:21 PM Japan Standard Time |
ZaifのストリーミングAPIをphpから使う

experimentalらしいですがZaifで[websocket API](https://corp.zaif.jp/api-docs/)が公開されました（誰か？ってツッコミは無用で）。

[textalk/websocket](https://github.com/Textalk/websocket-php)を使って試してみます。

```json:composer.json
"require": {
  "textalk/websocket": "1.0.*"
}
```
自分で php composer.phar update してね！

で、サンプルスクリプトはこんな感じで・・・

```php:my.php
<?php

require('vendor/autoload.php');

use WebSocket\Client;

$url = "wss://ws.zaif.jp:8888/stream?currency_pair=mona_jpy";

$client = new Client($url);

while(true)
{
    try {
        $json = $client->receive();
        $data = json_decode($json); // var_dump($data)とかするとわかりやすいと思われ

        echo $data->timestamp . " last_price:" . $data->last_price->price . " " . $data->last_price->action . "\n";
    } catch (WebSocket\ConnectionException $e) {
        // ぶちっと切れる感じあるんで再接続
        $client = new Client($url);
    }
}

```

動かしてみると・・・

```
ryo@rubuntu:~/$ php my.php 
2015-04-03 19:09:36.039360 last_price:17.4 bid
2015-04-03 19:10:21.706524 last_price:17.4 bid
2015-04-03 19:10:24.845934 last_price:17.3 ask
2015-04-03 19:11:54.615810 last_price:17.3 ask
2015-04-03 19:11:55.325730 last_price:17.3 ask
2015-04-03 19:12:28.431111 last_price:17.3 ask
2015-04-03 19:12:29.152539 last_price:17.3 ask
2015-04-03 19:13:25.663307 last_price:17.3 ask
2015-04-03 19:13:27.630823 last_price:17.3 ask
2015-04-03 19:13:53.579406 last_price:17.3 ask
2015-04-03 19:13:56.745123 last_price:17.3 ask
2015-04-03 19:15:25.771214 last_price:17.3 ask
2015-04-03 19:15:26.482218 last_price:17.3 ask
...
```

と、流れてきますね

とりあえず10円きったらメールするようにして寝るか・・・(´∀｀)
R の read.csv() と read.csv2() の違い #rstatsj

R には CSV ファイルを読み込むための関数として、`read.csv()` と `read.csv2()` の 2 つの関数があります。
これらの違いは何なのでしょうか？

違いを調べたところ、ヨーロッパには小数点をカンマで表す地域があり、それらの地域では CSV のフォーマットがそもそも違い、ヨーロッパ式の CSV を読み込むための関数が `read.csv2()` なのだそうです。

日本で一般的な CSV フォーマットは、区切り文字がカンマですが、小数点をカンマで表す地域では、区切り文字がセミコロンになります。

`read.csv()` と `read.csv2()` の違いは、それぞれの関数の中身を見るとわかりやすいです。

```r:read.csv()の中身
read.table(file, header = TRUE, sep = ",", quote = "\"", 
           dec = ".", fill = TRUE, comment.char = "", ...)
```

```r:read.csv2()の中身
read.table(file, header = TRUE, sep = ";", quote = "\"", 
           dec = ",", fill = TRUE, comment.char = "", ...)
```

`sep` パラメータ(区切り文字)と `dec` パラメータ(小数点文字)が違うだけだということがわかります。

それでは実際にやって確かめてみましょう。

```:test.csv
A,B,C
3.1,4.1,5.9
2.6,5.3,5.8
9.7,9.3,2.3
```

```r:R
read.csv("test.csv")
```

```:結果
    A   B   C
1 3.1 4.1 5.9
2 2.6 5.3 5.8
3 9.7 9.3 2.3
```

ヨーロッパ式。

```:test2.csv
A;B;C
3,1;4,1;5,9
2,6;5,3;5,8
9,7;9,3;2,3
```

```r:R
read.csv2("test2.csv")
```

```:結果
    A   B   C
1 3.1 4.1 5.9
2 2.6 5.3 5.8
3 9.7 9.3 2.3
```

確かにそのようですね。

以上です。

### 参考

[Difference between read.csv() and read.csv2() in R - Stack Overflow](http://stackoverflow.com/questions/22970091/difference-between-read-csv-and-read-csv2-in-r)
InspectorのActiveチェックボックスの表示/非表示について

UnityのGameObjectのInspectorの各コンポーネントでは、enable/disableを設定できるチェックボックスがある。
・・・が、しかし表示がないものもあるではないか！
どゆこと？？？なんなの？？？

と、思ってましたが理由はとても単純
そのコンポーネント内にイベント関数である

- Start
- Update
- FixedUpdate
- LateUpdate

これらが存在するかどうかでチェックボックスの表示非表示が変わる。
そもそもここでコンポーネントをdisable（チェックボックスのチェックoff)の時に上記が実行されるかされないかが変わるためである。

色々芸が細かいな～Unity～
GCSに自動で保管させたGAEのログをBigQueryにロードする方法

GAEのログは自動でGAE内に保管されますが、デフォルトの設定では1GB　or　90日間のどちらかの条件に達すると、古いデータから削除されてしまいます。その為、ログを永続的に保管するには、外部サービスに保管する必要が有ります。

GAEはオプションで、以下の2つのサービスに自動でログをエクスポートし保管させることができます。
・BigQuery
・GCS

やり方は簡単で、[Google Developers Console](https://console.developers.google.com)から対象のプロジェクトを選択し「Monitoring」->「Logs」->「Exports」と進みます。
BigQueryに保管させる場合は、既存or新規のデータセットを選択して、「Stream App Engine Logs to BigQuery」にチェックを入れます。
GCSに保管させる場合は、既存or新規のバケットを選択して、「Save App Engine Logs to Cloud Storage」にチェックを入れます。
最後に「Done」をクリックすれば設定完了です。
![スクリーンショット 2015-04-03 19.10.38.png](https://qiita-image-store.s3.amazonaws.com/0/74296/a49e8037-7dcd-53ef-b6fb-9db9c0f58c3f.png)

直接BigQueryに保管させることもできますが、ストレージ費用やログ保管単位(BigQueryは1日単位、GCSは1時間単位)の違いなどで、GCSに保管させる方が良い場合もあります。
この記事では、GCSに自動でエクスポートし保管させたGAEのログをBigQueryにロードする方法を記載します。

#1.データセットの作成
[BigQueryのトップページ](https://bigquery.cloud.google.com)にて、データセットを作成します。
![スクリーンショット 2015-04-03 17.32.59.png](https://qiita-image-store.s3.amazonaws.com/0/74296/4c0769fa-9b1e-355e-979a-8ded107794bd.png)

#2.テーブルの作成及びインポート
先ほど作成したデータセットを選択し、テーブルの作成を行います。ウィザードに従って以下の通り進めます。
####1.「Table ID」にはデータセット内にてユニークなテーブルIDを入力します。
![スクリーンショット 2015-04-03 17.35.22.png](https://qiita-image-store.s3.amazonaws.com/0/74296/dc94bfde-7ffe-1731-9e5d-ca7b2560369b.png)

####2.「Source Format」は「JSON」を選択します。「Load data from」は「Google Cloud Strage」を選択し、GCSに自動エクスポートされたGAEのログのフルパス(gs://~)を入力します。
![スクリーンショット 2015-04-03 17.36.43.png](https://qiita-image-store.s3.amazonaws.com/0/74296/6e90194d-be23-6b94-c5f6-735344be695a.png)

####3.「Schema」には、以下のJSONファイルの中身を全部をコピーし、貼り付けます。
https://gist.github.com/yang36/46a9f3332d057e785edd
![スクリーンショット 2015-04-03 17.38.21.png](https://qiita-image-store.s3.amazonaws.com/0/74296/9e729769-de52-d8bb-80bd-9a1ec4e922b1.png)

####4.最後の画面で「Ignore unknown values」にチェックを入れ、「submit」をクリックします。
![スクリーンショット 2015-04-03 17.39.00.png](https://qiita-image-store.s3.amazonaws.com/0/74296/b433bf4d-7c39-bead-d3d9-1c0a32146037.png)

※チェックを入れることにより、BigQueryのテーブルスキーマに定義されていない値は無視(破棄)されます。現状、いくつかの値はプログラム等による加工を行わない限り、そのままBigQueryに格納することはできません。
　また、GAEの設定により、出力される値が微妙に変化することも確認されています。全てのログを保管させたい場合は、GAEから直接BigQueryにエクスポートし保管させる方法を推奨します。

#3.無視(破棄)されるデータについて
以下のようなデータが無視(破棄)されます。
"appengine.googleapis.com/module_id": "default",
"appengine.googleapis.com/version_id": "20150324a",
"appengine.googleapis.com/clone_id": "00c61b117c3335a4c278e4a25bd43eb92ba2cf40"
"@type": "type.googleapis.com/apphosting.RequestLog"
これらのデータを無視(破棄)しなければならない理由は、BigQueryのテーブルスキーマの列名に、アンダースコア(_)以外の記号が使用できない為です。

#4.ちなみに
GAEのログをGCSに保管させるのとBigQueryに保管させるのと、どちらが費用的に安くなるのでしょうか？
以下の公式ドキュメントを見る限りGCS(Nearline Storage)に保管したほうが安く見えます。

https://cloud.google.com/storage/pricing#storage-pricing
https://cloud.google.com/bigquery/pricing#storage

しかし、BigQueryに保管したほうが、ストレージサイズは小さくなります！(不要なJSON形式が省かれ、生データのみ格納されるため)
その為、実際のプロジェクト内容によって、どちらが安くなるかは変動すると思われます。
Drupalの役立つかもしれないリンク集

※以下はDrupal 7での話ですが、D8でも役に立つかもしれません。

Drupal用のモジュール・テーマ・ディストリビューション評価用

簡易的な評価にはなるものの、数秒で評価用のDrupalサイトが立ち上がり便利

- [Evaluate Drupal projects online | simplytest.me](https://simplytest.me/# "Evaluate Drupal projects online | simplytest.me")

## Links

- モジュールの比較
	- [Comparison of contributed modules](https://www.drupal.org/node/266179 "Comparison of contributed modules")

### Drupalのコマンドラインツール

コマンドラインでDrupalを操作

- [Drush Commands - a core and contrib command reference for Drush](http://www.drushcommands.com/ "Drush Commands - a core and contrib command reference for Drush")
- [Home \| Drupal Console](https://drupalconsole.com/)

### Tokens

管理画面内でよく使うDrupal内の変数の様なもの

- [List of tokens](https://www.drupal.org/node/390482 "List of tokens")
- [Drupal Tokens | Tips, tricks, articles, rankings for Drupal developers](http://www.drupaltokens.com/ "Drupal Tokens | Tips, tricks, articles, rankings for Drupal developers")

### Modules

モジュールの検索

- [Drupal Modules - Search, Rate, and Review Drupal Modules](http://drupalmodules.com/ "Drupal Modules - Search, Rate, and Review Drupal Modules")


### Resorce

Drupalを学ぶ上でのショートカット

#### Videos
-  [Learn Drupal With Over 1310 Drupal Videos and Training | BuildAModule](http://buildamodule.com/ "Learn Drupal With Over 1310 Drupal Videos and Training | BuildAModule")
- [Drupal Training | Drupalize.Me](https://drupalize.me/ "Drupal Training | Drupalize.Me")
- [Codekarate Content | Code Karate](http://codekarate.com/codekarate-posts/tags/drupal-1 "Codekarate Content | Code Karate")

#### Books
 
- [Books about Drupal | Drupal.org](https://www.drupal.org/books "Books about Drupal | Drupal.org")
- [The Definitive Guide to Drupal 7](http://www.apress.com/9781430231356 "The Definitive Guide to Drupal 7") 

## Tips

- Drush覚えるとサイトの管理が楽になるかも
- 変更が反映されなかったらキャッシュを手動でクリアしてみる
- モジュール選び基準(ざっくり)
	- 安定版かどうか
	- Maintenance status: Actively maintained であるか
	- usage statisticsが下降傾向に無いか
	- 競合と比較 Reported installs
	- 競合と比較 Downloads
	- 全部入りではないもの
Couchbaseクラスタのモニタリング

みなさん、データベースの監視はバッチリですか!? Couchbase Serverのモニタリングベストプラクティスについての記事を和訳してみました。 原文はこちら: [Couchbase Monitoring](http://blog.couchbase.com/monitoring-couchbase-cluster)

本文は[ブログ](http://ijokarumawak.github.io/couchbase/2015/04/03/monitoring-couchbase-cluster/)で公開しています。

- [Couchbase モニタリング](http://ijokarumawak.github.io/couchbase/2015/04/03/monitoring-couchbase-cluster/#intro)
- [モニタリングのベストプラクティス](http://ijokarumawak.github.io/couchbase/2015/04/03/monitoring-couchbase-cluster/#s1)
- [ノードのモニタリング](http://ijokarumawak.github.io/couchbase/2015/04/03/monitoring-couchbase-cluster/#s2)
- [バケットのモニタリング](http://ijokarumawak.github.io/couchbase/2015/04/03/monitoring-couchbase-cluster/#s3)
- [コマンドライン](http://ijokarumawak.github.io/couchbase/2015/04/03/monitoring-couchbase-cluster/#s4)
CocoaPods関連のエラー



# pod install したはずのライブラリのヘッダファイル（.h）を読み込めない

## エラー内容

```
xxx.h file not found
```

## 状況

* Xcodeによって自動で追加されたデフォルトのターゲット以外にも、手動で複数のターゲットを追加している

## 原因



## 対処

* スクリーンショットのようにConfigurationに Pods.debug, Pods.release を指定した

![スクリーンショット 2015-04-03 17.02.33_.png](https://qiita-image-store.s3.amazonaws.com/0/26038/bc86b10b-9145-c61d-56f3-3affa4636acf.png "スクリーンショット 2015-04-03 17.02.33_.png")


# Shell Script Invocation Error になった

## エラー内容

```
/Users/miminashi/Library/Developer/Xcode/DerivedData/PROJECTNAME-gmthhjfpgwpkwxeemndglaosaojy/Build/Intermediates/PROJECTNAME.build/Debug-iphonesimulator/PROJECTNAME-dev.build/Script-5D852C2918F54BAE0081727F.sh: line 2: /Users/miminashi/path/to/project/PROJECTNAME/Pods/Pods-resources.sh: No such file or directory
```

## 状況

*  `gem install cocoapods` でCocoaPodsのバージョンをあげた直後
* TARGETを複数追加している
  * PROJECTNAME-dev, PROJECTNAME-staging など

## 原因

Cocoapodsのアップデート時に、PROJECTNAME以外のターゲットのCopy Pods Resourcesが自動でアップデートされていなかった

# 対処

PROJECTNAMEターゲットの BuildPhase > Copy Pods Resources のスクリプトを他のターゲットの Copy Pods Resources にコピーする
HTTPクライアントプログラムで読み込みタイムアウトをテストするアドホックサーバーをワンライナーで

RubyビルトインのWEBrickを利用する。例えば10秒でレスポンスするサーバー。

```
$ ruby -rwebrick -e "WEBrick::HTTPServer.new(Port:3333).tap{|s|s.mount_proc(?/){sleep 10}}.start"
```

これでクライアント側でタイムアウトを3秒とか5秒とかに設定して、`http://localhost:3333/`にアクセスさせれば幸せになれる。
最新のAmazon Linux AMIのIDを取得する


CLIからEC2を起動!みたいなときに「えーっと、最新のAmazon LinuxのAMIのIDってどれだっけ・・・？」みたいな感じにManagement Consoleを覗くのはアレだよね。

ということでCLIで取得するツールを書いた。

```ruby:latest_amazonlinux_ami.rb
#!/usr/bin/env ruby
require 'aws-sdk-core'

ec2 = Aws::EC2::Client.new(region:'ap-northeast-1')
images = ec2.describe_images(
    owners: ['amazon'],
    filters: [
        {
            name:"architecture",
            values:["x86_64"]
        },
        {
            name:"hypervisor",
            values:["xen"]
        }
    ]
)

latest_ami = images[:images].find_all{|image|
    image[:description]
}.find_all{|image|
        image[:description].match(/Amazon Linux/)
}.find_all{|image|
        image[:description].match(/EBS/)
}.find_all{|image|
        image[:description].match(/HVM/)
}.sort_by{|image|
    image[:creation_date]
}.reverse.first

puts latest_ami[:image_id]
```

どろくさい・・・　みんなどうしてるの？

## Disclaimer
このポストは個人のメモであり、私の雇用主を代表するものではりません。
AWS SDK for Ruby のElastiCacheなどWaiterが実装されていないサービスで雑に待つ


AWS SDK for Rubyのv2は残念ながらまだ開発途上のようでちょいちょい足りない機能がある。


なぜかElastiCacheの構築スクリプトを書いていたらWaiterが実装されていないことに気づいた。
Monkey PatchingできないかSDKのコードを確認したがJSONからAPIなどを生成するようなことをしていて、ちょい面倒そうだったので素直に雑なコードを書いた。


```
# "client" is instance of AWS::ElastiCache::Client

def wait_available(client, id)
  loop do
    status = client.describe_cache_clusters(cache_cluster_id: id)
      .cache_clusters
      .first
      .cache_cluster_status
    break if status == 'available'
    sleep 10
  end
end
```
カスタム投稿タイプの作成


実務でカスタム投稿タイプを作成する機会があったのでメモ。
テーマファルダのfunctions.phpを編集します。なければ新規で作成します。


```php:functions.php
<?php //この中に書いていきます

add_action('init', 'create_post_type');
//create_post_typeのactionを定義

function create_post_type () {
  
  register_post_type(
    'column', array(  /*任意の名前*/
    
      /*ラベルの作成*/
      'labels'        => array(
        'name'          => 'コラム', //管理画面などで表示する名前
        'singular_name' => 'コラム', //管理画面などで表示する名前（単数形）
        'menu_name'     => 'コラム', //管理画面メニューで表示する名前（nameより優先される）
        'add_new_item'  => '新しいコラム', //新規作成ページのタイトルに表示される名前
        'add_new'       => '新規追加', //メニューの新規追加ボタンのラベル
        'new_item'      => '一覧ページの「新規追加」ボタンのラベル',
        'edit_item'     => '編集', //編集ページのタイトルに表示される名前
        'view_item'     => '編集', //編集ページの「投稿を表示」ボタンのラベル
        'search_items'  => 'コラムの検索', //一覧ページの検索ボタンのラベル
        'not_found'     => '見つかりません。', //一覧ページに投稿が見つからなかったときに表示
        'not_found_in_trash' => 'ゴミ箱にはありません。' //ゴミ箱に何も入っていないときに表示
      )
      'descriptions' => 'コラムの概要', //カスタム投稿ページの概要文
      'hierarchical' => false, //falseの場合、階層構造なし
      'public'       => true, //ユーザーが内容を投稿する場合true(通常はtrue)
      'has_archive'  => true,  //アーカイブページを作成するか否かを設定(trueでindexページを作成)
      'exclude_from_search' => false, //WPの検索機能から検索した際、検索対象に含めるか否かを設定（※trueの場合は検索対象に含めない）
      'taxonomies' => [], //投稿の分類に用いるカスタムカテゴリ・カスタムタグ[配列]
      
      //管理画面から投稿できる項目
      'supports'     => array(
        'title', //タイトル表示を有効に
        'editor' //本文の表示を有効に
      )
    )
  );

};



?>
```

とりあえずこんな感じで記入していきます。
また何かわかったら追記していきます。
***


プラグイン使うとちゃちゃっと出来ます。

PHP書くのめんどくさいとか時間がねえよボケーな感じでしたら、下記のプラグインを使ってみてください。


- Types

[Types WordPressのプラグインまとめ](http://matome.naver.jp/odai/2141056804584433701)

- Custom Post Type UI

[Custom Post Type UIの使い方](http://kotori-blog.com/wordpress/custom_post_type_ui/)

特に、Typesは日本語にも対応しており、かつカスタムフィールドの設定もできて一石三鳥なプラグインです。
[MongoDB] maxConns can't be greater than 20000 が出たらmaxConnsが怪しい

先日 @nabetama と話した件よく忘れるのでメモがてら。
古いバージョンのMongoDBを使ってて、新しいバージョンに入れ替える時などに注意。

新しいバージョンを起動しようとしてこんなエラーが出たら

```
maxConns can't be greater than 20000
```

下記のようなバカオプションを設定していないかどうか確認しましょう。
```
--maxConns 100000
```

最近のMongoDBは20000までしか設定出来ません。あしからず。
Rails on Dokcer on boot2docker構成でlivereloadする方法


#環境
- browser(Chrome 41.0.2272.118 (64-bit))
- livereload(2.0.3)
- guard-livereload(2.4.0)
- boot2docker(1.5.0)
- docker(1.5.0)
- Rails(4.2.1)
- GuestOS(CentOS Linux release 7.0.1406 (Core))
- HostOS(Mac OS X 10.10.2)

#構成

構成は以下の通り。
- guardサーバーが35729をListenしてる
- Dockerが35729をExposeしてる
- boot2dockerの35729をDockerの35729へforwarding
- HostのMac OSの35729をboot2dockerの35729へforwarding

```
 -----
|guard|  Listen:35729 
 -----
 ------
|Docker| 0.0.0.0:35729->35729/tcp 
 ------
 -----------
|boot2docker| 
 -----------
 ------
|Mac OS| ssh -L 35729:localhost:35729
 ------
```

#手順
### guard, guard-livereloadの設定
インストールや初期設定の手順は他にたくさん説明があるので割愛。

```Guardfile
guard 'livereload', host: '0.0.0.0', port: '35729' do
  watch(%r{app/views/.+\.(erb|haml|slim)$})
  watch(%r{app/helpers/.+\.rb})
  watch(%r{public/.+\.(css|js|html)})
  watch(%r{config/locales/.+\.yml})
  # Rails Assets Pipeline
  watch(%r{(app|vendor)(/assets/\w+/(.+\.(css|js|html|png|jpg))).*}) { |m| "/assets/#{m[3]}" }
end
```

### Docker
起動オプションでforwardingを設定する

```zsh
% docker run --volumes-from dev -p 35729:35729 -p 2222:22 -p 80:3000 -itd osamunmun/dev:1.1 /usr/sbin/sshd -D
```

### boot2docker, Mac OS


```zsh
% boot2docker ssh -L 35729:localhost:35729
```

### 確認

guardのconsoleに以下のようなlogが表示されたら接続成功。

```zsh
[1] guard(main)> 16:19:32 - INFO - Browser connected.
```
[新人WEB系エンジニア向け]これやってってねという一覧


４月なので、新しく社内に入ってくる方向けにまとめた。前提として初学者/未経験者を想定。

- [Qiita](http://qiita.com)にアカウントを作り投稿をチェックする。
- [WEB+DB PRESS](http://gihyo.jp/magazine/wdpress)、[Software Design](http://gihyo.jp/magazine/SD)を購読する。
- [connpass](http://connpass.com)にアカウントを作り、勉強会をチェック＆参加する。
- 開発環境に Mac を用意する（少なくとも個人のものは）。
	- ただし Windows クライアント/サーバ系の開発でない場合。
	- Mac の中身が Linux ＆ 現段階では周辺環境が Wnidows より充実しているため。
- [GitHub](https://github.com)にアカウントを作り、気になるプロダクト/ライブラリのソースコードを読むようにする。
- [はてなブックマークのテクノロジカテゴリ](http://b.hatena.ne.jp/hotentry/it)を確認する。
- Twitter で情報収集する。
	- とりあえず上記Rebuild.fmの出演者や、参加した勉強会での発表者
	- ほか[connpass](https://twitter.com/connpass_jp)、[Qiita](https://twitter.com/Qiita)、[はてなブックマーク::Hotentry](https://twitter.com/hatebu)
- [Rebuild.fm](http://rebuild.fm)を聞く（ポッドキャスト）。

慣れてきたら、自ら発信する。

- Qiita や個人ブログ（[はてなブログ](http://hatenablog.com/)等）に学んだことを書く。
- 勉強会で発表する。
	- 発表したら[SlideShare](http://www.slideshare.net)、[Speaker Deck](https://speakerdeck.com/)で資料を公開する。
- GitHubでソースを公開する。

> なぜ自ら発信した方が良いか、という疑問については下記を参照。
> [私が新しい開発言語/フレームワークを習得する際に心掛けている１０のこと](http://qiita.com/hkusu/items/a73c0c25121be779b8e6)

〜 おわり 〜
[Rails]不要なアプリケーションログを削除する

`rails server` しているときに、下記のようなcssやjsが大量に出力されてログが見難くなることがある。

```ruby:log/development.log
Started GET "/assets/application-ab419c13308629544db2ed02ed5cccfb.css?body=1" for 192.168.56.1 at 2015-04-03 13:20:39 +0900

Started GET "/assets/jquery-87424c3c19e96d4fb033c10ebe21ec40.js?body=1" for 192.168.56.1 at 2015-04-03 13:20:39 +0900
```

そんなときは、 `config/initializers` ディレクトリに以下ファイルを追加すればログがスッキリする :sparkles: 

```ruby:config/initializers/quiet_assets.rb
Rails.application.assets.logger = Logger.new('/dev/null')
Rails::Rack::Logger.class_eval do
  def call_with_quiet_assets(env)
    previous_level = Rails.logger.level
    if env['HTTP_X_RAILS_ENABLE_ASSETS_LOG'].nil? && env['PATH_INFO'].index('/assets/') == 0
      Rails.logger.level = Logger::ERROR
    end
    call_without_quiet_assets(env).tap do
      Rails.logger.level = previous_level
    end
  end
  alias_method_chain :call, :quiet_assets
end
```

さらに、Chromeのextension([Header Hacker](https://chrome.google.com/webstore/detail/header-hacker/phnffahgegfkcobeaapbenpmdnkifigc?utm_source=chrome-app-launcher-info-dialog))を使えば、cssやjsのログも見たいとき、以下の設定で簡単に表示を再開することも可能(ﾟдﾟ)ｳﾏｰ

![header_hacker_setting1.png](https://qiita-image-store.s3.amazonaws.com/0/15315/6bfac562-f034-ada4-6911-324c6c292cff.png)

**設定値**

| Title | Header | Append/Replace | String |
|:--|:--|:--|:--|
| rails_enable_assets_log | X_RAILS_ENABLE_ASSETS_LOG | Append | 1 |

**設定例**
![header_hacker_setting2.png](https://qiita-image-store.s3.amazonaws.com/0/15315/52f5ca11-60b7-fcbd-d277-e37b47a30f2c.png)
【tortoisegit】別ブランチから特定コミットを持ってきたい cherry pick

Cherry pickでできます。

```
持っていきたい方のブランチ名：release
取り込みたいコミットのあるブランチ名：develop
```

とします。

①releaseブランチにしておいてください。

②gitで管理しているフォルダを右クリックし、`Show log`をクリック。

③log画面が出たら、左上に現在のブランチ名（release）が書いてあるリンクをクリックすると`browse references`という画面が出てきます。

④そこで取り込みたいコミットのあるブランチ（develop）を選択して、`ok`をおします。

⑤左上がdevelopになっているのを確認して、取り込みたいコミットを右クリックする。

⑥`Cherry Pick this commit...`と出てきますので、押して、次の画面の`continue`ボタンを押すと取り込むことができます。
sbt-scoverage を使う


[scoverage/sbt-scoverage](https://github.com/scoverage/sbt-scoverage)
[scoverage](https://github.com/scoverage/scalac-scoverage-plugin)というScala向けのコードカバレッジツールをsbtプラグインとして利用できるものです。

# 使い方

sbt-scoverageのREADMEに書いてあるままですが、日本語で書いていきます。

`project/plugins.sbt` に以下のコードを追加します。

```scala
resolvers += Classpaths.sbtPluginReleases

addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.0.4")
```

テストを実行してついでにカバレッジレポートを出力するコマンドです。

```
$ sbt clean coverage test
```

完了すると`target/scala-2.11/scoverage-report/index.html`にレポートが出力されます。

# あわせて読みたい

[ScalaプロジェクトをCircleCIでビルド+テストして、scoverageで計測したカバレッジをCOVERALLSに送るための諸設定をした - TODESKING](http://www.todesking.com/blog/2014-11-18-scala-with-circleci-and-coveralls/)

sbtタスクなど内容が古いものもありますが、CircleCIでの設定が参考になりそうです。
JavaScriptのanonymous functionのエラー対処

今JavaScriptを勉強していて下記のサイトを利用してスロットマシーンを作成しています。
http://dotinstall.com/lessons/slot_js_v2/23303

サイトの通り書いたつもりなのですが現在エラーが出てしまい詰まっています。

そこで質問があります。
結論から言うと

**次のエラーを対処するにはどうしたらいいでしょうか？**

↓画面
![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/60528/f43180d8-9d0c-2059-178f-3e0a671ca4bc.jpeg)


```html:index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>スロットマシーン</title>
<style>
.col {
	float: left;
	width: 100px;
	text-align: center;
	font-size: 32px;
}
</style>
</head>

<body>
	<div class="col">
		<span id="num0">?</span><br> <input type="button" value="STOP"
			onclick="stopSlot(0);">
	</div>
	<div class="col">
		<span id="num1">?</span><br> <input type="button" value="STOP"
			onclick="stopSlot(1);">
	</div>
	<div class="col">
		<span id="num2">?</span><br> <input type="button" value="STOP"
			onclick="stopSlot(2);">
	</div>

	<script>
		var timers;

		function startSlot() {
			timers = [];

			runSlot(0);
			runSlot(1);
			runSlot(2);
		}

		function runSlot(n) {
			docment.getElementById('num' + n).innerHTML = Math.floor(Math.random() * 10);
			timers[n] = setTimeout(function() {
				runSlot(n);
			}, 50);
		}

		startSlot();
	</script>
</body>
</html>
```

<br>
anonymous functionのエラーを調べたんですが
読み込んでいるJQueryのパスを先に書くなどでした。
サイトの動画ではパスを書き込んでいないので今回のケースとは違うのかなと思っています。

また動画と見比べても記述の違いも見つけられませんでした。


もしわかる方がいれば教えて下さい。お願いします。
デザインスプリントでファシリテーターがおさえておくべき10のこと

今回はデザインスプリントのやり方というよりも「ファシリテーターの心得」的なおさえておくべき注意点についてまとめました。

*デザインスプリント自体いまいちよく分からないという方はまずはこちらをご覧ください。[THE DESIGN SPRINT(和訳)](https://github.com/crossnode/DesignSprint)*

## 1. 進行台本を作っておく

台本には次のことを書いておきましょう。

1. 予定時刻
  - 何時何分から何時何分までにどのフェーズを行うべきか時刻を明記する。
- 時間配分
  - 各フェーズが何分間割り当てられているかひと目で分かるように。
  - タイマーをセットするときに役に立つ。
  - 何らかの原因で進行状況が予定とずれた際にはこの時間配分に基づいて進めることになる。
- フェーズ名
  - 何をする時間なのか端的に伝わるフェーズ名をつける。
- 詳細内容
  - 具体的に内容を詳しく書き出す。
  - 手書きorPC、無言or議論、1人orチーム、など、使うものや作業人数やその他作業内容を全て挙げる。
  - 情報共有やディスカッションのフェーズなら、扱うべき項目やどんなことを話すべきかなど扱うこと伝えることを全て挙げる。
- 目的・意義
  - 「次のフェーズでアイデアをスケッチするために、このフェーズでは思い浮かんだキーワードをマインドマップにしましょう」など、なぜそのフェーズ／作業が必要なのか完結に説明できるようにメモしておく。

その他、スプリントに関わることは台本のしかるべき箇所に書き加えておきましょう。

## 2. 会場と備品の確認

スプリント中に疑問点や不明点があればメンバーはまず最初にファシリテーターに質問するはずです。次のことは把握しておきましょう。特に、外部から参加しているメンバーがいる場合は簡単なことでも質問されるので注意深く確認しましょう。

- キッチン／コーヒーメーカーの場所・使い方
- トイレの場所
- 喫煙所の場所
- ホワイトボードとペンとイレイザー
- 紙とペン
- ポストイット
- テープ
- タイマー

たとえ会場担当者がいる場合でも備品を確認して気づいたことはただちに会場担当者へ対応を依頼してください。ホワイトボードのイレイザーが他のミーティングルームへ出張しているのはよくあることです。

## 3. 常にゴールを意識する
このスプリントで達成したいことを常に明確に意識しましょう。プロトタイピングしてユーザーインタビューを行うのがゴールであれば、より良いものを作るために唯一のベストなアイデアを探し出すというアプローチは正しくありません。決められた時間のなかでベターなアイデアをプロトタイピングしてユーザーの反応を観察しましょう、それで問題があれば次のスプリントに生かせばいいのです。そしてメンバーにもそれを必要に応じて明確に伝えましょう。

## 4. フェーズごとに目的と内容を伝える
フェーズを始めるときには、この時間は「何をすべきか」「何をすべきでないか」「どんな目的や意味があるのか」「以降のフェーズにどうつながるのか」を明確にチームに説明しましょう。それがないとメンバーはそのフェーズの目的や作業内容など正しいことに集中できなくなります。

## 5. すぐに軌道修正できるように常に目を配る
次のフェーズでやることまで始めてしまうメンバーには「それは次のフェーズでやるから大丈夫。今はこの作業に集中しよう」と伝えて本来の作業に戻してあげましょう。そのためには、あなたは常にメンバーの一人ひとりが何をしているのか注意して観察していなくてはなりません。タイマーのアラートが鳴るまで部屋の隅でFacebookを眺めているのではダメなのです。

## 6. 時間通り進める
メンバーは作業に集中しているのであなたが時間をマネージメントしてあげる必要があります。フェーズの半分、終了10分前、5分前、3分前、2分前、1分前など、必要なタイミングでコールして時間に気づかせてあげましょう。タイマーをみんなから見やすく大きく表示しておくのもその助けになるはずです。そして、時間をコールするだけではなく議論を進めて時間内に結論を出すよう巧みにみんなのディスカッションを導く役目も果たしてください。ファシリテーターはただのタイムキーパーではありません。

## 7. 客観的に質問し情報を引き出す
適切な情報やキーワードがたくさんあるとアイデアが生まれ膨らみやすいものです。あなたは情報共有やディスカッションの時間に情報を引き出す質問をしたりメンバーが見落としている情報に気付かせるよう助けることができます。つい意見を言いたくなるかもしれませんが、議論に加わるのではなく質問を投げかけたり情報を提示するだけにとどめるよう気をつけてください。

## 8. 決断を促す
いくつかのフェーズで決断が必要になるかもしれません。ディスカッションで意見がまとまらない決められないことがあったら決定権者に決断してもらってください。無責任な多数決は避けましょう。決定権者に決めてもらう場合があることは本人には事前に伝えておきましょう。残り時間が数分になった時に突然「あなたが決めてください」と言われてパニックになるような人ではないとしても無用なストレスは回避してあげましょう。

## 9. アジャスト
フェーズを進めていく中で、前提条件が覆ったり何らかの重大な原因でプロトタイプやユーザーインタビューなどの内容変更を避けられない場合は決定権者の同意を得て最小限の変更をしましょう。しかし、あくまで最小限です。フェーズをさかのぼったりスケジュールの変更はするべきではありません。

## 10. ラグビーのレフリーのように
あなたがラグビーの試合を見たことがないのならぜひ一度見てみてください。彼らは毅然とした態度でルールに従って冷静に判断しますが、選手たちには試合中のその場でどのプレーがどんな危険があるのかどんな理由で反則なのか丁寧に説明します。時には笑顔を見せながら選手を落ち着かせ納得するまで語りかける場合もあるでしょう。あなたも彼らのように冷静で注意深く丁寧に接する姿勢を示しつづければスプリントのメンバーみんなからリスペクトされ良い関係性を保てることでしょう。
glColor4fで図形の色を変える

塗りつぶす色の指定方法は、次の関数を利用します。

```glColor4f(float r, float g, float b, float a)```


例えば
glColor4f(1.0f, 0.0f, 1.0f, 1.0f);
のように書く。

色のメモ：
　　 (1.0, 0.0, 0.0)　赤

　　 (0.0, 1.0, 0.0)　緑

　　 (0.0, 0.0, 1.0)　青

　 　(0.0, 1.0, 1.0) シアン(CYAN)，

　 　(1.0, 1.0, 0.0) イエロー(YELLOW)，
 
 　　(1.0, 0.0, 1.0) マゼンタ(MAGENTA)，

 　　(1.0, 1.0, 1.0) 白，

 　　(0.0, 0.0, 0.0) 黒
velocity.jsでぐにゃぐにゃSVGを描く

## はじめに
ロゴやキャッチなどでたまに見かける、ぐにゃぐにゃと動くSVGをvelocity.jsを使って実装してみました。
<こんな感じのやつ （何て言ったらいいのでしょうか。ラインアニメーション、ストロークアニメーション、とか？）>

![svg-anim01.gif](https://qiita-image-store.s3.amazonaws.com/0/58436/afd319bb-5a8a-efba-f270-c185fd667b77.gif)

なおオンライン上で簡単に作成できるサービスもあるようです
http://lazylinepainter.info/

## 用意するもの
- jQuery
- velocity.js
- svgファイル（今回はIllustratorで書き出し）

> velocity.js とは
- アニメーションを実現するJSライブラリ
- 他ライブラリやcssアニメーションより高速
- jQueryアニメーションと同じような記述ができる
- jQueryを使わなくても動作はする

## 実装

```index.html
<!-- SVGファイルの読み込み -->
<object id="logo" data="./logo.svg" type="image/svg+xml">
```

```script.js
$(function() {
    $(window).load(function() {
        var doc   = document.getElementById('logo').contentDocument;
        var $path = $(doc).find("path");

        // pathの長さをcssにセットする関数
        function setPathLengthToStyle($obj) {
            var len;
            var arr = [];
            Array.prototype.slice.call($obj).forEach(function(path, i) {
                arr.push(path);
                len = arr[i].getTotalLength() + 30 + 1 | 0; // +30は、Firefox対策。+1 | 0 は小数点切り上げ
                arr[i].style.strokeDasharray  = len;
                arr[i].style.strokeDashoffset = len;
            });
        }

        // CSSの設定
        $path.css({
            stroke      : "#4aa3df",
            fill        : "none",
            strokeWidth : 1
            // strokeDasharray, strokeDashoffsetは setPathLengthToStyle()で設定
        });
        setPathLengthToStyle($path);

        // アニメーション描画
        $path
             .velocity({ strokeDashoffset : 0 }, 3000 , "swing")
             .velocity({ fill: "#4aa3df" }, 1000 , "swing");
    });
});
```

pathの描画の仕方には少しクセがありますが、velocity.jsのおかげでアニメーション自体は非常に単純で分かりやすくできました。  
また例えばアニメーション描画を以下のように変えると、順番になぞっていくような表現ができます。
<こんな感じ>

![svg-anim02.gif](https://qiita-image-store.s3.amazonaws.com/0/58436/aece5a5f-904d-2fdb-3ccf-826eb75c17c1.gif)

```js
var pathLength = $path.length;
// アニメーション描画
$path.each(function(i) {
    $(this).velocity({
        strokeDashoffset: 0
    }, {
        delay    : 300 * i,
        duration : 1000,
        complete : function() {
            // ifを外して$(this)にすると、それぞれ終わった直後に塗りつぶしされていく
            if (i === (pathLength - 1)) {
                $path.velocity({
                    fill: "#4aa3df"
                }, 1000, "swing");
            }
        }
    });
});
```

## 参考
- http://2ndidea.com/svg/svg-path-drawing-animation-even-ie/
Laravel Eloquentで大量のデータを取得する場合

LaravelのEloquentで大量のデータをgetすると、
メモリー違反が発生する場合があります。

そんなときは、getの代わりにchunkを使いましょう。

```php

class SomeContent extends Eloquent {
}

```

のようなEloquent継承のクラスがあったとして、

```php

SomeContent::where('created_at', '>=', Carbon\Carbon::yesterday()->toDateString())
    ->orderBy('id')
    ->chunk(100, function ($someContents) {
            foreach ($someContents as $someContent) {
                $someContent->touch();
            }
        }
    );

```

これで、100件ごとにデータが取得され、クロージャが実行されます。
drawQuadとは

drawQuadは、なにか（例えば四角形など）を表示させる時に画面上の表示場所を示すものです。
引数には、ウィンドウ左上を原点とした、XYと、幅、高さをピクセルでとる。

```
    drawQuad(gl10, 100, 200, 300, 400);
```
Timing Diagram > 汎用値ライフライン | General value Lifeline

[IT専科](http://www.itsenka.com/contents/development/uml/timing.html)

状態ライフラインと状態リストを組み合わせた表記法です。
これにより、状態の数が増えても一列で表示できます。但し、状態の整合性を保つことが難しくなります。

<hr>
[SPARX](http://www.sparxsystems.jp/help/valuelifeline.htm)

汎用値ライフラインはオブジェクトがX軸方向で表される時間単位での処理の遷移を表現します。

<hr>
(2017/01/18 追記)

関連
[onlineTool > タイミングチャート生成](http://qiita.com/7of9/items/4febc353f37ee2cd262b)
Ethernet > RGMII > Reduced Gigabit Media Independent Interface | ピン数は12本

[latticesemi](http://www.latticesemi.com/ja-JP/Products/DesignSoftwareAndIP/IntellectualProperty/ReferenceDesigns/ReferenceDesign04/RGMIItoGMIIBridge.aspx)より引用

RGMII(Reduced Gigabit Media Independent Interface)は、GMIIの置き換えです。RGMIIの目的は、ピン数を22から12へと減らすことでコスト効率向上とテクノロジー非依存です。このリファレンス設計は、RGMIIとGMII間のデータ伝送に双方向ブリッジ機能を提供します。
TinyMCE で strong や em タグをインラインスタイルに置き換える方法

TinyMCE では 「B」「I」ボタンで、太字や斜体にできますが、デフォルトでは strong タグ、 em タグをラップされます。
カスタムフォーマットを利用して、これを、 span タグでラップしてスタイルを適用するように変更できます。

# カスタムフォーマット

italic をインラインスタイルに変更してみる。

```
$(function() {
	tinyMCE.init({
		...
		formats:{
			italic: {inline: 'span', styles: {fontStyle: 'italic'}}
		}
	});
});
```

bold をクラス名 bold を指定して別途スタイルしてみる。

```
$(function() {
	tinyMCE.init({
		...
		formats:{
			bold: {inline: 'span', 'classes': 'bold'}
		}
	});
});
```

# 参考
* [javascript - How to make TinyMce replace deprecated tags with inline styles? - Stack Overflow](http://stackoverflow.com/questions/13249612/how-to-make-tinymce-replace-deprecated-tags-with-inline-styles)
* [TinyMCE - Custom formats](http://www.tinymce.com/tryit/custom_formats.php)
Ethernet > Polarity Correction / 極性の修正

[allied-telesis](https://www.allied-telesis.co.jp/library/nw_guide/device/hub.html)

- ツイストペアケーブルに誤配線（誤極性）があり、RX（受信データ）の極性が反転してしまった場合、ＨＵＢ側でその信号を受信する際に自動的に修正（極性反転）する機能です。

<hr>
MySQLで外部参照を無視してTRUNCATE

テスト用のデータを放り込んだり削除したり、いろいろやっていて変な状態になったテーブルを
ちょっとだけきれいにしたくなりました。
で、TRUNCATE！しようとしたら外部参照制約のせいでTRUNCATEさせてもらえません。。。
そんな時には外部参照のチェックをスキップしてもらって強制的にTRUNCATEします。

```sql:truncate.sql
SET FOREIGN_KEY_CHECKS=0;
TRUNCATE [table_name]
```
CakePHPでMailを使う

# CakePHPでMailを使う

## 環境

- SMTP：Google Appsを使用
- CakePHPのバージョン:2.6

## CakeEmailの読み込み

### CakePHP全体で使用の場合
`/app/Config/bootstrap.php`に下記を追加

```php
App::uses( 'CakeEmail', 'Network/Email');
```

### コントローラーで使用する場合
ファイルの先頭で読み込む

```php
App::uses( 'CakeEmail', 'Network/Email');
class EmailTestsController extends AppController{
    public function index(){
		echo 'メール送信テスト！';
    }
}
```

## CakeEmailの設定

`/app/config/email.php.default`を`/app/config/email.php`にリネーム
任意の配列を作成してそこに設定を記載していきます。

例：Gmailの場合

```php
class EmailConfig {
    public $default = array(
        ....
    );
    public $gmail = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => 'username@gmail.com', // ユーザ名
        'password' => 'password',           // パスワード
        'transport' => 'Smtp'
    );
}
```

## 送信処理

### 送信処理メール本文ベタ書き)

```php
$email = new CakeEmail( 'gmail');                        // インスタンス化
$email->from( array( 'sender@domain.com' => 'Sender'));  // 送信元
$email->to( 'reciever@domain.com');                      // 送信先
$email->subject( 'メールタイトル');                      // メールタイトル

$email->send( 'メール本文');                             // メール送信
```

### 送信処理(メール本文をテンプレート化)

```php
$email = new CakeEmail( 'gmail');                        // インスタンス化
$email->from( array( 'sender@domain.com' => 'Sender'));  // 送信元
$email->to( 'reciever@domain.com');                      // 送信先
$email->subject( 'メールタイトル');                      // メールタイトル

$email->emailFormat( 'text');                            // フォーマット
$email->template( 'templete');                           // テンプレートファイル
$var1 = "test1";
$var2 = "test2";
$email->viewVars( compact( 'var1', 'var2'));             // テンプレートに渡す変数

$email->send();                                          // メール送信
```

#### emailFormat
- text
- html
- both（templateでtext,html両方用意しておくとマルチパートメールを送信できる。）

#### template
`/app/View/Emails/`以下に保存

htmlの場合`/app/View/Emails/html/*ctp`
textの場合`/app/View/Emails/html/*ctp`

#### viewVars

必要な変数をcompactでまとめて引き渡せる。
`compact( 'var1', 'var2')`の場合

## メール送信の末尾のデフォルトメッセージを消す
下記を編集する
`/app/View/Layouts/Emails/text/default.ctp`
`/app/View/Layouts/Emails/html/default.ctp`
Pomodoro + Trello

ポモドーロテクニックとTrelloを直結しよう
==================================

そもそも集中力がないのでなんとかしようと思い、タスク管理とポモドーロを簡単に組み合わせられないかと思ってググったらあった。

[Introducing Trellodoro – Trello + Pomodoro = Personal Kanban Bliss](https://dillieodigital.wordpress.com/2014/06/10/introducing-trellodoro-trello-pomodoro-personal-kanban-bliss/)

わりと良さそう。

[Tomighty](http://www.tomighty.org/)みたいにカチカチなってくれると嬉しい。
UITableViewCellを、iPadでも透過する

散々既出ですが、UITableViewCellを透過しようとしてハマったのでメモ。
iPhoneシミュレータやiPhoneではStoryboardだけで透過されたが、
少なくともiPadシミュレータでは透過されなかった。iPad実機は未検証。

```swift:MyTableViewController.swift
class MyTableViewController: UITableViewController {
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        cell.backgroundColor = .clearColor()
    }
}
```

もちろん、cellForRowAtIndexPathの中で透過処理しても良いが、ここで一括処理するのが吉。

---
[既出です](http://qiita.com/hmuronaka/items/242ee2559ff5234a1efc)
PHP5.6.7の変更点

[新機能](http://qiita.com/rana_kualu/items/ae125aedbe9b491b07af) / [変更点](http://qiita.com/rana_kualu/items/b2477d4981445a084adf)

こちらはPHP5.6.1以降既存機能に変更点があったものをピックアップ。
ただしバグフィックスは除く。
あとFPM関連もよくわからないのでパスしてます。

# PHP5.6.7

## CURLPROXY_SOCKS4A / CURLPROXY_SOCKS5_HOSTNAME

libcurlの「--socks4a」「--socks5-hostname」オプションに対応する[定数](http://php.net/manual/ja/curl.constants.php)です。
SSHトンネル関連の機能のようですが、具体的にどう使うのかはよくわかりません。
つうか、これらが[libcurl](http://curl.haxx.se/changes.html)に追加されたのはJanuary 28 2008なのですがそれは。

# PHP5.6.6

## 複数行ヘッダの廃止

[RFC7230](http://www.hcn.zaq.ne.jp/___/WEB/RFC7230-ja.html#field.parsing)に従い、複数行ヘッダが[廃止されました](http://php.net/ChangeLog-5.php#5.6.6)。
って書いてあるんだけど、PHP5.1.2の時点で既に複数行[header()](http://php.net/manual/ja/function.header.php)はできないので、これがどういう意味なのかよくわかりません。

## システム関数にヌルバイトチェック

[exec()](http://php.net/manual/ja/function.exec.php)、[system()](http://php.net/manual/ja/function.system.php)、[passthru()](http://php.net/manual/ja/function.passthru.php)にヌルバイトチェックが入りました。
引数に%00が含まれるとE_WARNINGを出し、コマンドは実行されません。
もちろん[escapeshellarg()](http://php.net/manual/ja/function.escapeshellarg.php)は必要です。

# PHP5.6.5

## crypt_blowfishのバージョンアップ

[crypt_blowfish](http://php.net/manual/ja/function.crypt.php)がバージョン1.3になりました。
PHPは内部に[Blowfish](https://github.com/php/php-src/commits/master/ext/standard/crypt_blowfish.c)の実装を持っているのですが、そのバージョンが上がったようです。
[1.3](https://github.com/php/php-src/commit/e331f9af73ba6e34fd757f368fdf0d9a585f763c#diff-243b169f3d5e753b5314e8eb994e36bc)というバージョンが何処から来てるのかはよくわかりませんでした。

# PHP5.6.3

## pack()/unpack()に64ビット書式

[pack()](http://php.net/manual/ja/function.pack.php)/unpack()の書式にqQJPが追加されました。
実はそもそも根本的にpack()を何に使うのかがわかってません。

## CURL_SSLVERSION_TLSv1_0 / CURL_SSLVERSION_TLSv1_1 / CURL_SSLVERSION_TLSv1_2

[CURLOPT_SSLVERSION](http://php.net/manual/ja/curl.constants.php)で特定のSSL/TLSバージョンを指定する際に使います。
これまでもCURL_SSLVERSION_TLSv1という指定はあったのですが、[POODLE](http://blog.trendmicro.co.jp/archives/10564)のせいで必要になったのでしょう。

# PHP5.6.1

## Made DOMNode::textContent writeable.

[DOMNode::textContent](http://php.net/manual/ja/class.domnode.php#domnode.props.textcontent)が書き込み可能になりました。
って書いてあるのですが、直接値を突っ込んでも何も変わりません。
これはどういう意味でせう？

## sem_acquire()に第二引数が追加

[sem_acquire()](http://php.net/manual/ja/function.sem-acquire.php)はセマフォが取得できないとずっと止まったままですが、nowaitオプションが付けられるようになったみたいです。
第二引数にtrueを指定すると、セマフォ取得失敗時に待機せずに即falseが返ります。
でもPHPからセマフォなんて使う機会あるんですかね？

# 結論

POODLEを完全に塞がねばならない、という環境ならバージョンアップ必須でしょう。
それ以外はよくわからないものばかりでした。
ヌルバイトチェックはあると便利ですが、そもそもその前に防いでおくべきですし。
誰かwriteableの意味を教えてください。
Ethernet > Green Ethernet > ケーブル長の自動認識とそれに基づく消費電力低減

[platform]
(http://online.plathome.co.jp/common/cat/pdf/DGS-1000D_SERIES_GE_DS_R01.pdf)

「Green Ethernet」シリーズは、リンクステータスとケーブル長に応じて、消費電力を削減する仕組みです。
aws cli でのiamユーザー作成


# 前提

* "aws configure --profile profile名" が済んでいる前提とします。
* iamでグループつくるのが済んでいる前提とします。
* profile名は testとして書いています。
* コマンドの後ろに必ず --profile profile名とつけると変な環境に実行しないで済むので必ずつける方針にしています。

# 環境変数として設定値を指定しておく

```
AWS_PROFILE_NAME=test # 作りたいところのプロフィール名
USER_NAME=test-user # ユーザー名
PASSWORD=iD8Bkcd4-JrxUXQ5v # 初期パスワード
GROUP_NAME=developer # グループ名 先にiamで作っとく必要あります。
```

# ユーザー作成

ユーザー作成は名前をつけるだけです。ログイン情報は別のコマンドになります。

## コマンド
```
aws iam create-user \
 --user-name $USER_NAME \
 --path / \
 --profile $AWS_PROFILE_NAME
```
--path は / 以外指定したことないけどまあいいか…。

## 結果出力

```
{
    "User": {
        "UserName": "ユーザー名", 
        "Path": "/", 
        "CreateDate": "2015-04-03T04:00:19.899Z", 
        "UserId": "文字列", 
        "Arn": "arn:aws:iam::AWSアカウントID:user/ユーザー名"
    }
}
```

# ユーザーがWebコンソールからログインできるようにする

## コマンド

```
aws iam create-login-profile \
	--user-name $USER_NAME \
	--password $PASSWORD \
	--password-reset-required \
	--profile $AWS_PROFILE_NAME
```

--password-reset-required
パスワードは初回ログイン時にリセットしてもらうオプションを指定しときます。

## 結果出力
```
{
    "LoginProfile": {
        "UserName": "ユーザー名", 
        "CreateDate": "2015-04-03T04:00:21.142Z", 
        "PasswordResetRequired": true
    }
}
```

# ユーザーをなんかのグループに入れとく
入れないとなんの権限もないので、WEBコンソールでログインしてもなんもできないですね。

## コマンド
```
aws iam add-user-to-group \
	--group-name $GROUP_NAME \
	--user-name $USER_NAME \
	--profile $AWS_PROFILE_NAME
```

## 結果
何も出なかった気がする。

# ユーザーのaws access key を作る
API経由で色々やるために入るけど、WEBコンソール

## コマンド
```
aws iam create-access-key \
	--user-name $USER_NAME \
	--profile $AWS_PROFILE_NAME
```

## 結果出力
```
{
    "AccessKey": {
        "UserName": "ユーザー名", 
        "Status": "Active", 
        "CreateDate": "2015-04-03T04:10:43.927Z", 
        "SecretAccessKey": "シークレットキー", 
        "AccessKeyId": "アクセスキー"
    }
}
```

あとはこれをメールで送るだけ。
ログインして作るより相当楽ちんですね。
長時間の計算をするならsleep()ではなくyield()でCPUをちょくちょく解放

円周率を計算するようなホビープログラムに限らず、グラフ探索・組み合わせ探索のように長時間CPUを使うワークというのは実務でも出てきます。
こういうとき、UI設計の基本として「重い処理はワーカースレッドに任せ、UIスレッドはすぐに処理を返す」というのは最近では常識になってきた感がありますし、C#のasync/awaitのように処理系側のサポートも充実してきました。
これに加えてもう一つ大事な基本があります。
**【CPUをちょくちょく解放すること】**
です。

シングルコアのマシンで特に顕著な影響が出ますが、長時間CPUを使う計算をしていると他のプロセスはまったく動けなくなります。OSシェルさえ。マルチコアマシンでも、コア数と同じ数だけそういう重いプロセスが出現した時点で同じことになります。
プリエンプティブマルチタスクで動作する現代のOSでも、自発的にCPUを解放しないプロセスは高頻度に制御を奪われることなくある程度の長時間単独で走ってしまうものなのです。

ここら辺の事情をわかった上で、ループの先頭や最後に sleep(1); などとCPU解放処理を入れている方もおられることと思います。
しかし sleep(1); 、不合理ですよね。もしCPUを待っているプロセスがいなかった場合も、必ず1ミリ秒のタイムロスが入ってしまいます（OS実装次第で1ミリ秒よりも長くなります）。
つまり、待っているプロセスがいるならCPU解放、いなければそのまま続行という、sleep(0); 的な記述が本当はしたいわけです（実際にはこのコールは無視されます）。

yield
--

待っているプロセスがいるならCPU解放、いなければそのまま続行というシステムコールは存在し、一般的にはyieldと呼ばれます。

* POSIXなら sched_yield()
* Win32なら SleepEx(0,0)
* Javaなら Thread.yield()
* .NETなら Thread.Yield()
* C++なら std::this_thread::yield()

です。Javaだと Thread.sleep(1) に比べて try-catch で囲む必要もないのでコードもすっきりしてなお良いですね。
Ethernet > NWay > Auto negotiation

[Wikipedia](http://en.wikipedia.org/wiki/Autonegotiation)より引用

Auto-negotiation (formerly <font color=red>"NWay"</font>) 

The protocol that became IEEE 802.3 clause 28 was developed from a patented technology by National Semiconductor known as <font color=red>NWay</font>.

<hr>
[searchnetworking](http://searchnetworking.techtarget.com/definition/NWay)より引用


NWay is a telecommunications protocol used with Ethernet networking devices (such as router and switch) to automatically negotiate the highest possible common transmission speed between two devices.
Ethernet > MDI > Medium Dependent Interface

[e-words](http://e-words.jp/w/MDI-2.html)より引用

ツイストペアケーブルを利用するEthernet機器のポートの種類の一つ。

<hr>

[infraexpert]より引用(http://www.infraexpert.com/study/ethernet3.html)

Ethernet機器のポートは大きく2つのタイプがあります。MDI (Medium Dependent Interface) とMDI-Xです。
MDIは送信用にピン「 1, 2 」、受信用にピン「 3, 6 」を割り当てられたポート。PC、ルータ等が該当します。

MDIとMDI-Xの接続はストレート、MDI同士、MDI-X同士の接続はクロスケーブルを使用します。
古めのCentOS(HVM)でSR-IOVに対応させる


手元のAWS環境で動いているCentOS 6.6をSR-IOVに対応させたかったので、先人の知恵をお借りしながら作業手順をまとめました。
環境に依存する部分も大きいかと思うので、何か問題点などあればご連絡下さい。ご指摘をいただきより正しい文書に出来れば多くの方が幸せになれると考えています。

# 先人の知恵

http://understeer.hatenablog.com/entry/2014/04/10/151403
http://matetsu.hatenablog.com/entry/2014/08/12/132213

# 作業手順
## RPM作成
### 事前準備
カーネルのヘッダなどをインストールし、rpmbuildに備えます。
(コンパイル環境などはすでに整っているものとします)

```
yum install -y kernel-devel-`uname -r` kernel-headers-`uname -r`
```

## ソースの入手
ixgbevfのソースを取得します(URLは2015/04/03現在)

```
curl -O http://ufpr.dl.sourceforge.net/project/e1000/ixgbevf%20stable/2.16.1/ixgbevf-2.16.1.tar.gz
```

## RPM作成
ありがたいことに、入手したソースコードはrpmbuildに対応しているので以下1行でRPMが作成できます。

```
rpmbuild -tb ixgbevf-2.16.1.tar.gz
```

## RPMをインストールします

```
rpm -ivh ~/rpmbuild/RPMS/x86_64/ixgbevf-2.16.1-1.x86_64.rpm
```

# 設定
## ixgbevfの設定

```
rm /etc/udev/rules.d/70-persistent-net.rules
sed -i 's:^DRIVERS=="?*":#DRIVERS=="?*":g' /lib/udev/rules.d/75-persistent-net-generator.rules ; echo '# DRIVERS=="?*", IMPORT{program}="write_net_rules"' >> /etc/udev/rules.d/75-persistent-net-generator.rules
echo "options ixgbevf InterruptThrottleRate=1,1,1,1,1,1,1,1" > /etc/modprobe.d/ixgbevf.conf
poweroff
```

## インスタンスへのSR-IOV設定
以下の例では東京リージョンで起動している、i-XXXXXXXXというリソースIDのついたEC2をSR-IOV対応させることが出来ます。
アトリビュート変更はインスタンス停止中のみ有効です。

```
aws ec2 modify-instance-attribute --instance-id i-XXXXXXXX --sriov-net-support simple --region ap-northeast-1
```
確認は以下のコマンドを参考にして下さい。

```
aws ec2 describe-instance-attribute --instance-id i-XXXXXXXX --attribute sriovNetSupport --region ap-northeast-1
```

## 起動
インスタンスを起動して下さい。

# 問題が起こったら

- 状況を私宛に教えて頂ければベストエフォートで調査とこのドキュメントの修正を行います
- とりあえず立ち上げたい場合であれば、t2.microなどSR-IOVに対応*してない*インスタンスタイプへ変更して起動して下さい。
Yahoo提供の電力使用状況APIで遊ぶ


相変わらず美しくはないですが。
area は
hokkaido（北海道電力管轄内）
tohoku（東北電力管轄内）
tokyo（東京電力管轄内）
chubu（中部電力管轄内）
kansai（関西電力管轄内）
kyushu（九州電力管轄内
で取得エリアを変更できます。

```python:denryoku.py

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import requests
import json,urllib2
import sys, codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

url = "http://setsuden.yahooapis.jp/v1/Setsuden/latestPowerUsage?"
appid = "appid=**************************************************"
output = "&output=json"
area = "&area=tokyo"
req_seq = url + appid + output + area

r = requests.get(req_seq)
res = r.json()

for i in res:
	print json.dumps(res, sort_keys = True, indent = 4)
```
UInavigationControllerクラスを作り、UIViewControllerをコードで設定する


setViewControllersで直接ViewControllerの中身を設定しているんですが
他にスマートなやり方はあるんでしょうか？

```swift

import UIKit

class TestNavigationController : UINavigationController
{
	override func viewDidLoad() {
	let Stboard = UIStoryboard(name: "Test",bundle: NSBundle.mainBundle())
	        let TestView:UIViewController = ClientStboard.instantiateViewControllerWithIdentifier("Test") as UIViewController
	        var ClientNav = UINavigationController(rootViewController: TestView)
	        self.setViewControllers([TestView], animated: false)
	}
}
```
EC2 Autorecoveryの話

今年1月に発表されたEC2の自動リカバリ(Auto Recovery)が東京リージョンでも利用可能になりました。

+ 発表時blog
[【AWS発表】Amazon EC2の自動リカバリ(Auto Recovery)機能](http://aws.typepad.com/aws_japan/2015/01/new-auto-recovery-for-amazon-ec2.html"【AWS発表】Amazon EC2の自動リカバリ(Auto Recovery)機能")

+ 東京リージョン利用可能時Blog
[【機能アップデート】EC2のオートリカバリ（自動復旧機能）のリージョン拡大](http://aws.typepad.com/aws_japan/2015/03/ec2-auto-recovery-new-region.html"【機能アップデート】EC2のオートリカバリ（自動復旧機能）のリージョン拡大")

+ 界隈の方々の検証
 [EC2 のAuto Recoveryが東京リージョンにリリースされました](http://dev.classmethod.jp/cloud/aws/ec2-auto-recovery-tokyo/" EC2 のAuto Recoveryが東京リージョンにリリースされました")
 [EC2 Auto RecoveryはどのくらいAuto Recoveryなのか](http://yoshidashingo.hatenablog.com/entry/2015/01/15/140446" EC2 Auto RecoveryはどのくらいAuto Recoveryなのか")

詳しい設定方法は発表時のblogを参照してください。

注意点は、
設定できるインスタンスに制限があって、

>オートリカバリは現在以下をサポートしています。
・C3, C4, M3, R3, T2 の各インスタンスタイプ
・東京リージョン、およびAsia Pacific (Singapore), Asia Pacific (Sydney), EU (Ireland), EU (Frankfurt), South America (Sao Paulo), US East (N. Virginia), US West (N. California) , US West (Oregon) リージョンのインスタンス
・インスタンスはVPC内で稼働している必要があり、共有テナンシー、かつEBSバックのストレージのみを利用している必要があります。VPC外で動作しているインスタンス、Dedicatedインスタンス、およびローカルインスタンスストアは現在未サポートとなっています。

ということで、まとめると、

1. 現行世代のインスタンスタイプであれば利用可能
2. VPC内のインスタンスに適用可能(EC2-Classicは利用不可)
3. ストレージとしてEBSを利用し、Instance Storeは未サポート
4. Decicated(占有)インスタンス利用不可

となります。

たぶん最近出たD2インスタンスも対応していると思います。

1.はあえて旧世代のインスタンスタイプを選ぶ理由はないと思いますので問題なし。
2.最近はdefault VPCなので問題なし。
3.これは結構注意点かも（後述）
4.よっぽどのことがない限り占有にすることはないと思いますので、問題なし。

ということで、設定しておけば、何かあった時にはいいんじゃないかと、
設定を試してみたところ、
現行世代のインスタンスタイプでもできないことがありました。

同じ種類のインスタンスでも新規で起動すればできたので、
インスタンスによってできないのがあるのかなぁ・・・と悩んでいたら、
ちょうど、JAWS DAYS2015にあったADSJのSAさんに質問できるコーナーが
あったので、そこで聞いたところ、

+ 1度でもInstance Store付きで起動したEC2インスタンスは、Instance StoreをOS上でアンマウントしても、ゲストOS上はInstance Storeが存在するので、設定不可。
+ その状態のインスタンスは、Instance StoreをサポートしていないT2やC4インスタンスで起動しても、裏で持っているので起動不可。

とのことでした。
※ドンジャラで遊んだだけでなく、こういうこともしてきました(笑)

検証環境にあるインスタンスの中には、
一部Instance Storeを利用して検証していたインスタンスもあるので、
それらのインスタンスは利用できません。
※できないものは、選んだらエラーになります。設定画面によっては、最初から選べないケースもあります。

---

**まとめ**
備えあれば憂いなし。
trelloのカードをgithubのissueにslackから追加する

trelloでタスク管理を行っているとそのままgithubのissueにしたい場合があったので、slackからtrelloのカードをgithub issueに追加できるようにしてみた。

### npmで必要パッケージのインストール
```bash
npm install node-trello --save
npm install octonode --save
```

### trello token 取得
http://qiita.com/isseium/items/8eebac5b79ff6ed1a180#2-2

### github token 取得
http://qiita.com/rentalname@github/items/9a185d445e45b8b4857c

### hubot script
* `trello <shortLink> to <repository>` の形式でslackからhubotに指示を出す  
shortLinkは https://trello.com/c/xxx の `xxx` 部分  
repository は username から入れる。https://github.com/github/hubot の場合は `github/hubot` がそれ


```coffeescript
# Description:
#   Sample

trello = require("node-trello")
t = new trello("***", "***")
github = require('octonode')
g = github.client("***")

module.exports = (robot) ->
  robot.hear /\btrello\s+(\S+)\s+to\s+(\S+)/i, (msg) ->
    shortLink = msg.match[1]
    repository = msg.match[2]

    ghrepo = g.repo(repository)

    # shortlinkからtrelloカード情報を取得する
    t.get "/1/cards/#{shortLink}", (err, data) ->
      # カードのurlとdescriptionを追加する場合
      ghrepo.issue {title: data.name, body: "#{data.shortUrl}\n\n#{data.desc}"}, (err, body, headers) ->
        msg.reply "`#{body.title}`\n>>>\n#{body.html_url}\n```\n#{body.body}\n```"
```

### npm package
未だ手直し予定ありですが、npmに公開した。
https://www.npmjs.com/package/hubot-trello-to-github
Install Instruction: Spark on Ubuntu 14.04

# Install Spark on Ubuntu 14.04
## Preparation
### Install apt-add-repositories
[ubuntu 14.04 でのapt-add-repositoryのインストール]
(http://qiita.com/Hiroshi_Obata/items/8fa13972f7922ad3252f)

```
$ sudo apt-get install software-properties-common
```

### Install Git
Git command is used to build Spark.

```
$ sudo apt-get install git
$ sbt/sbt assembly
```
## Install Spark
### Basically, please follow this instruction.
[Install Apache Spark on Ubuntu-14.04]
(http://blog.prabeeshk.com/blog/2014/10/31/install-apache-spark-on-ubuntu-14-dot-04/)

### Annotation
#### Run Spark
spark-shell is in the directory "bin".

```
./bin/spark-shell
```

# Memos about Spark
[Quick Start - Spark 1.1.1 Documentation]
(http://spark.apache.org/docs/1.1.1/quick-start.html)
[PySpark入門1]
(http://www.slideshare.net/iktakahiro/pyspark1)
[Spark - ALBERT Engineer Blog]
(http://tech.albert2005.co.jp/?s=Spark)
[nose + Jenkins + HipChat で Python アプリケーションを自動テストして結果を通知してもらおう！]
(http://tech.albert2005.co.jp/blog/2014/07/10/notify-hipchat-from-jenkins/)