OmniAICreator/Qiita-1.07M huggingface dataset:
Maven の Eclipse プラグインで CheckStyle の設定を自動インポートするメモ

Maven の Eclipse プラグインを使うとコマンド一発で Eclipse にインポート可能なプロジェクトを作ることができます。

```
mvn eclipse:eclipse
```

上記のコマンドを実行する際に、 pom.xml の設定で下記のようにすると、
CheckStyle の設定も自動で設定済みの状態にできます。

また、この方法を使えば、コードフォーマッタなども同様に初期化ができます。

```:pom.xml

　　　：　　　：　　　：
　　　：　　　：　　　：

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <configuration>
          <additionalProjectnatures>
            <projectnature>org.eclipse.jdt.core.javanature</projectnature>
            <projectnature>org.eclipse.m2e.core.maven2Nature</projectnature>
            <projectnature>net.sf.eclipsecs.core.CheckstyleNature</projectnature>
          </additionalProjectnatures>
          <buildcommands>
            <buildcommand>org.eclipse.jdt.core.javabuilder</buildcommand>
            <buildcommand>org.eclipse.m2e.core.maven2Builder</buildcommand>
            <buildcommand>net.sf.eclipsecs.core.CheckstyleBuilder</buildcommand>
          </buildcommands>
          <classpathContainers>
            <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
            <classpathContainer>org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER</classpathContainer>
          </classpathContainers>
          <useProjectReferences>true</useProjectReferences>
          <additionalConfig>
            <file>
              <name>.checkstyle.xml</name>　←★CheckStyleの設定内容が書かれたファイル
              <content>
<![CDATA[ ★XMLファイルの中身★ ]]>
              </content>
            </file>
            <file>
              <name>.checkstyle</name>
              <content>
<![CDATA[<?xml version="1.0" encoding="UTF-8"?>　↓★ここでCheckStyleの設定ファイルをインポートする
<fileset-config file-format-version="1.2.0" simple-config="false" sync-formatter="false">
  <local-check-config name="MyCheckstyle" location=".checkstyle.xml" type="project" description="">
    <additional-data name="protect-config-file" value="false"/>
  </local-check-config>
  <fileset name="All" enabled="true" check-config-name="MyCheckstyle" local="true">
    <file-match-pattern match-pattern="^src/main/java/myproject/" include-pattern="true"/>
  </fileset>
</fileset-config>
]]>
              </content>
            </file>
          </additionalConfig>
        </configuration>
      </plugin>

　　　：　　　：　　　：
　　　：　　　：　　　：

```
react-templatesをさわってみた

`ReactJS`を「もしプロダクトに使うことになったら」という点でちょいちょい最近見ているのですが、必要かどうかは別としてまず思いつく疑問の１つに、**テンプレートの部分を別ファイルに切り出す**ことはできないか、というものがあると思います。

イメージ的にはこんなの。

```js:sample.js
var HelloMessage = React.createClass({
  render: function() {
    return HelloMessageTemplate; //ココ!!
  }
});
```

で、調べればこういうのはもちろんあるもので、[react-templates](https://github.com/wix/react-templates)というの（これ書いている時点ではスター数が900ちょいくらい）をさわってみた。

## 概要

`.rt`というファイルにテンプレートを書いていって、それを`.js`ファイルにコンパイルして使うというもの。自分は`CommonJS`を利用しているのですが、それにも対応済みとのこと。

> (amd|commonjs|es6|typescript|none)

## インストール

```
npm install -g react-templates
```

自分は`gulp`使っているので

```
npm install --save-dev gulp-react-templates
```

ただし今回は`gulp`での操作はなし。

## 変換する

```html:helloTemplate.rt
<p>test</p>
```

このような`.rt`をつくって

```
rt ./templates/helloTemplate.rt --modules commonjs 
```

とすると、`helloTemplate.rt.js`というファイルが生成される。

```js:helloTemplate.rt.js

'use strict';
var React = require('react/addons');
var _ = require('lodash');
module.exports = function () {
    return React.createElement('p', {}, 'test');
};
```

## 組み込む

あとは以下のように書いて無事表示されることが確認できました。

```js
var HelloTemplate = require('./templates/helloTemplate.rt.js');

var HelloMessage = React.createClass({
  render: function() {
    return HelloTemplate
  }
});
```

テンプレートだけ切り出して、環境による処理分けなど出来ないかなみたいなところで少しさわってみました。
ここらへんにまつわるところで有益な情報あれば教えていただけると助かります m(＿ ＿)m
ProxyPassと301リダイレクトを駆使して無理やりサイトコンテンツを引越する

昔々、siteA.comとsiteB.comという二つのサイトがありました。
siteAは主にロングテールSEO、siteBは主に広告をぶん回して、
それぞれが順調に別の方法にて成長していましたが、
ビジネスリソース戦略上の観点から、
siteA.comはsiteB.comに統合される事となりました。

二つのサイトの統合作業というのは殆どの場合において大変で、
時にはびっくりするほど長い時間がかかってしまう事もあります。
「これからその長い時間を統合の為に頑張るのか・・」と考えていると
偉い人が「検索エンジンのインデックスだけは統合先のsiteBに選考して移そう」と言い出しました。
エンジニアにとっては良い迷惑です。

しかし偉い人にやれと言われればやらざるを得ないのがこの世界の常です。
エンジニアは考えました。
「インデックスを別ドメインに移す場合は301リダイレクトを使わなくては」
「siteA.comからsiteB.comに301リダイレクトすればよいか」
「・・・あれ？でもロングテールSEOのコンテンツはsiteAにあるんだぞ」
「リダイレクトは良い、しかしどうやってsiteBのコンテンツとして表示するんだ・・？」
「そうか、リバースプロキシだ！」

そしてエンジニアは世にも奇妙な下記の様なプロキシー設定を実行しました。
（絵が雑すぎるのはご容赦下さい・・）
![IMG_2150.JPG](https://qiita-image-store.s3.amazonaws.com/0/31077/115eab14-10db-26e6-83e6-f5aeb45f9d81.jpeg)

```nginx
  # siteA.com 301 redirect setting
  location ~ ^/contents {
    return 301 http://siteB.com/$uri;
  }
```
```apache
  # siteB.com proxy pass setting
  ProxyPass /contents http://siteA.com/contents
```
「よし、これで完璧・・・あれ？リダイレクトループするぞ？」



この設定だと５の部分、同じURIで正引きしてるので301リダイレクトとリバースプロキシがループするのです。
「ぐぬぬ・・ならば同じリソースを別名でルーティングしてその先にプロキシすればどうだ」

```apache
  # siteB.com proxy pass setting
  ProxyPass /contents http://siteA.com/temp_contents
```

```rb
  # routes.rb
  resources :contents, only: [:show]
  resources :temp_contents, controller: :contents, only: [:show]
```

エンジニア「偉い人さん、出来ました！」
偉い人「たかだかリダイレクトなのに、もっとパッと出来ないの？（心の声：お疲れ様、ありがとう！）」
エンジニア「」

ニッチすぎて誰が使うんだという感じですが、SEO対策を頑張ると「何だソレ」みたいな設定が結構出てくるので一応残してみます。

ちなみにコード例で推察できますが、実際にやった際の構成は・・
siteA.com：nginx＋Ruby on Rails
siteB.com：httpd＋某phpフレームワーク
でした。
railsのルーティングはルールと柔軟性のバランスが良く、本当に便利ですね。
GetComponent<Rigidbody>().velocityと書くのが面倒な時

オブジェクトにアタッチしたRigidbodyのvelocityを取得するときは`GetComponent<Rigidbody>().velocity`と書きますが、冗長ですよね。

そんな時は、こう書くとスッキリして良いかも。

```csharp

Vector3 velocity{
	get{
		return GetComponent<Rigidbody>().velocity;
	}
	set{
		GetComponent<Rigidbody>().velocity = value;
	}
}
```

参考
[プロパティ - C# によるプログラミング入門 | ++C++; // 未確認飛行 C](http://ufcpp.net/study/csharp/oo_property.html)
swift2.0 コメントについて

備忘録。
コメントのドキュメントの書き方がswift2.0から変わっているのでメモ。
ドキュメントの確認方法は、optionを押しながらクリック。

```swift
/**
説明説明

- parameter param1: パラーメータ説明
- parameter param2: パラーメータ説明
- parameter param3: パラーメータ説明

- returns: Void

Sample Code
@```
class ViewController: UIViewController {

...省略...

}
@```
*/
```

注意）「@」は不要。マークダウン対応で入れているだけです。
Rails: ActiveModel でバリデーションエラーを自分で起こす ( raise ActiveRecord::RecordInvalid )

クラスの定義。

```rb:app/models/book.rb
class Book
  include ActiveModel::Model

  def self.raise_validation_error
    raise ActiveRecord::RecordInvalid.new(self.new)
  end
end
```

そして例外発生用のメソッドを呼ぶ。

```rb
Book.raise_validation_error
```

# ポイント
- クラスメソッドでは引数として self.new を渡す。
- インスタンスメソッドでは引数として self を渡す。
- 詳しい例外メッセージを渡したい場合は、バリデーションを判定した後のモデルを引数として渡す。（後述）

# 必要性

new メソッドはバリデーションチェックをおこなわない。

```rb
Book.new(params)
```

という風に、モデルチックな関連付けをする場合に。
new の時点でバリデーションチェックをおこない、例外も起こしたかった。

以下は new! メソッドを定義した例。

```rb:app/models/book.rb
class Book
  include ActiveModel::Model

  attr_accessor :title

  validates :title, presence: true

  def self.new! (params = [])
    model = self.new(params)

      # invalid? は破壊的メソッド。ここで model にエラー情報が入る。
      if model.invalid?
        # エラー内容を反映した例外が起こる
        raise ActiveRecord::RecordInvalid.new(model)
      end
    model
  end
end
```



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
ES async/awaitを全力で使ってみて発見したイディオム


// 注意: 最初のバージョン、async function がundefinedを返すと思い込んでて、色々間違えてた

手元の趣味コード(諸事情により未公開)に向けて全力で適用してみた結果学びがあった。以下babel。

## 事前に確認

- async/await は Promise と Generator の糖衣構文である
- await は Promiseのインスタンスの式を与えると(見た目上)停止する
- await するには async functionで囲う必要がある
- async function は必ず非同期で実行され 
undefined
Promise を返す

以下イディオム

## とりあえず実行したい

```js
(async () => {
  await new Promise(done => {
    setTimeout(1000, done);
  })
})();
```

解説: async ブロック作ってからの即時実行。asyncブロックなしにawaitは呼べない。PubSubのSub側でreturn する必要がないときに何度か使った。

## Promiseを返す関数の中で使う

fetchParamsは `fetchParams() => Promise<Params>` な関数だと思ってほしい。以下使いまわす。

```js
// without async/await
function fetchXXX(){
  return fetchParams()
};

// with async/await
function fetchXXX(){
  return (async () => {
    const params = await fetchParams();
    return params;
  })();
};
```

解説: Promiseのラッパー関数がasyncブロックをとる。このままだと元のコードのほうが短くて見通しはいいんだけど、複数回 await する場合はthenで繋がない分、後者のほうが見通しがよくなる。

## Promiseの直列化

```js
// parallel without async/await
const p = Promise.all(items.map(item => fetchParamsByItem(item)));

// serial with async/await
const p = (async () => {
  const results = [];
  for (let item of items) {
      const params = await fetchParamsByItem(item);
      results.push(item);
  }
  return results;
})();
```

解説: 元の例がかなりショートコーディング気味だが、要は複数のPromiseをPromise.allで並列にさばいているという例。async/await版は直列なので遅くなっている。
注意すべきは、ここでただのmapを使うとコールバック関数によって async function から外れるので、for of で回している。 `items.map(async (i) => {}` みたいなコードも試したがasyncの中でasyncはbabelが例外を吐いてた。仕様の側に問題があるのかbabelに問題があるかはよくわかってないので誰か教えてくれ。

## Promise関数の同期部分を待ってからawaitしたい

```js
(async () =>{
  var p = fetchParams();
  app.registerPromiseWithPopup(p);
  await p;
})();
```

解説: app.registerPromiseWithPopup(p) は名前の通りpromiseを受け取って終了までポップアップでカバーをかける関数なのだが、最初のfetchParams() を await してしまうとpromiseのインスタンスが取得できない。一旦await するタイミングをずらす。

## Mochaのテストケース

```js
it('pass', async () => {
  const params = await fetchParams();
  assert.equal(params, {});
});
```

解説: テストケースは基本的に返り値要求されないので最初からasync関数として扱う
(実はmochaは最後にpromiseを受け取って終了を待てるのだが、非同期のハンドルという目的では同一なので使わなくて良い)

## 以上


async function は評価した時にfunction抜けた時にresolveされるPromiseを返してほしいなと思った。
 Promise返してた。

あと見通し悪くなる可能性あるけど、awaitはどのノードでも使える式の方が嬉しい。結合順がややこしいが。
間違ってたら教えてほしい。
S3ストレージクラス変更


# aws cli s3 コマンド
```
aws s3 cp s3://[s3-key] s3://[s3-key] --storage-class REDUCED_REDUNDANCY
```

# aws cli s3api コマンド
```
aws s3api copy-object --copy-source [buket]/[s3-key] \
 --bucket [bucket] \ 
 --key [s3-key] \
 --storage-class REDUCED_REDUNDANCY
```
一見速そうだが、MultiPartが効かないので遅い。

# 動作
どのみちcopyしか効かない。s3は追記・変更が出来ないので、実質的には`copy-object`APIになる
AtomでCoffeeScriptの開発環境を整える

AtomでCoffeeScriptの開発環境を作ったので作業メモ。

## TL;DR

以下の2つをインストールしました

- [preview](https://atom.io/packages/coffeescript-preview)
- [linter-coffeelint](https://atom.io/packages/linter-coffeelint)

## preview

変換後のJavaScriptを適宜確認しながら実装したいので`settings`から`install`タブで`preview`を検索してインストールします。

![スクリーンショット 2015-09-10 13.35.45.png](https://qiita-image-store.s3.amazonaws.com/0/18007/994230a6-70e2-be84-8fdc-3d6cb9887bfe.png)

インストールが環境したらCommand Paletteを開いて`preview`で表示します。

`preview`表示直後はCoffeeScriptのコードに問題がなくてもなぜかPreviewing Failedが表示されるのですが、エディタを選択し直すと変換後のJavaScriptが表示されます。

![image](https://qiita-image-store.s3.amazonaws.com/0/18007/5eeaf0cd-29ee-0569-ca70-c857bf94642d.png)

正常に表示されたら以下のようになります。

![スクリーンショット 2015-09-14 16.53.29.png](https://qiita-image-store.s3.amazonaws.com/0/18007/75e9a7d9-ea9d-ec08-4754-624e5a1ff1a8.png)

## linter-coffeelint

コーディングスタイルを統一するために静的解析ツールである`coffeelint`もインストールします。

`preview`と同様にパッケージインストーラで検索するとそれっぽいのが2つ出てきますが`linter-coffeelint`の方をインストールします。`linter`が入っていなければ一緒にインストールされます。

![スクリーンショット_2015-09-10_16_27_48.png](https://qiita-image-store.s3.amazonaws.com/0/18007/bfcbf718-377d-1179-158e-9a47c23ccfed.png)

デフォルトのルールで運用してもよいですし、独自ルールを使いたい場合はスクリプトと同じディレクトリに`coffeelint.json`を置いておくとそのルールが適用されます。

## 他には…

とりあえず最低限必要なものは入れたつもりですが、他に入れたほうがよいパッケージがあればコメントください！

## SmarbyではCoffeeScriptとRuby on Railsを使っているエンジニアを募集しています！

- [成長中のEコマースを支えたい若手エンジニア募集！](https://www.wantedly.com/projects/22558)

## 参考

- [CoffeeScript Preview for Atom](https://atom.io/packages/coffeescript-preview)
- [linter-coffeelint](https://atom.io/packages/linter-coffeelint)
- [CoffeeLint](http://www.coffeelint.org/)
不要になったデータセットを削除する

![image](https://qiita-image-store.s3.amazonaws.com/0/32377/e06086f0-d23e-ab76-1e7c-5b6d6163783b.png)
Analytics Cloudで、データセットビルダを使い、Salesforceの商談やケースの情報を色々なデータセットとして取り込んでいくと、不要なデータセットがでてきます。

単純にデータセットの編集画面から、「データセットを削除」ボタンを押しても、上記のようなエラーが出て削除できない場合があります。

この原因として、メッセージのとおりに、データフローの定義にこのデータセットが定義されたままになっているため、削除できないのであり、下記の手順にて削除が可能です。(※2015/09/14バージョン時点)

#データフロー定義の編集方法
現時点では下記の2つの方法があります。

1. Salesforce Analytics Cloud Dataset Utilsを利用
2. ELT Editorを利用

##1. Dataset Utilsを利用
###Githubからダウンロード 
[https://github.com/forcedotcom/Analytics-Cloud-Dataset-Utils](https://github.com/forcedotcom/Analytics-Cloud-Dataset-Utils)から、DatasetUtilsをダウンロードします。
### DatasetUtilの起動
Mac環境用のdmgファイルからインストールすると、アプリケーションにDatasetUtilというものが追加されます。このアプリを起動することで、ブラウザが起動し、ユーティリティ画面(デフォルトでは[http://127.0.0.1:3174/](http://127.0.0.1:3174/))が表示されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/32377/b168ab23-36ab-bb59-36b9-f39b39fe1d0b.png)
###Dataflowの定義編集
- 右上のアイコンをクリックし、Dataflow Listを開きます。表示されたDataflowのリンクをクリックし、JSON編集画面に遷移します。
![image](https://qiita-image-store.s3.amazonaws.com/0/32377/6ba2ec68-8067-becf-300b-d387b8b5fe3e.png)
- JSONを編集します。主なたどり方としては、
 1. "action": "sfdcRegister"となっている箇所を探し、nameが削除したいデータセットを見つけ、
 2. その"source"に指定されている値を持つ、別の箇所を探し、"source"、"left"、"right"の値を持って同じように関係先を探します。
 3. 関係したJSONを削除し、下部の「Save Dataflow」ボタンを押します。
![image](https://qiita-image-store.s3.amazonaws.com/0/32377/d9f45c91-04bb-7e8b-a66c-9a84a1828c32.png)

参考) データフローを使用したデータセットの作成<br/>(https://help.salesforce.com/apex/HTViewHelpDoc?id=bi_integrate_create_dataset_with_dataflow.htm&language=ja)

##2. ELT Editorを利用
###内部URLから同じようにして、Dataflow定義を更新
[https://< instance >.salesforce.com/analytics/wave/web/editorELT.apexp](https://<instance>.salesforce.com/analytics/wave/web/editorELT.apexp)を開き、ELT Editorを表示します。
![image](https://qiita-image-store.s3.amazonaws.com/0/32377/e8a5dab5-8972-b30b-7335-4e4bc204b75a.png)

1のセクションと同様の方法で、定義を変更し、「Update Workflow Definition」ボタンを押下して、Dataflowを更新します。

#最後に
1もしくは2の方法で定義を更新した後、データセットの編集画面から、データセットを削除できます。
1、2のいずれの方法も現時点で可能な方法ですが、今後のバージョンアップによっては利用できない可能性もありますので、ご了承下さい。
OpenCV3.0とopencv_contribをubuntuに入れた作業メモ

## 依存パッケージのインストール

```bash
sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff4-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
```

## ソースのダウンロード

公式のgithubから落としてくるとめっちゃ遅い。相当なサイズになってるのでzipで落とす。

```bash
cd ~
wget https://github.com/Itseez/opencv/archive/3.0.0.zip -O opencv-3.0.0.zip
unzip opencv-3.0.0.zip
```

## opencv_contribのダウンロード

公式のgithubから全部落としてくるとめっちゃ遅い。最新のコミットだけ取ってくる

```bash
cd ~
git clone --depth 1 https://github.com/Itseez/opencv_contrib.git opencv_contrib
```

今回使用したのは以下のリビジョン

`22f5843 Merge pull request #338 from patricksnape:msvc_python_fixes`

## cmake

```bash
cd opencv-3.0.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules ..
```

この時にpython libraryがNOになっていると失敗する。その時は以下のように環境変数を設定する

```bash
export PYTHON_INCLUDE_DIRS="/usr/include/python2.7"
export PYTHON_LIBRARYS="/usr/lib/x86_64-linux-gnu/libpython2.7.so"
```

## ビルド

```bash
make -j 4
sudo make install
sudo ldconfig
```

## ライブラリへのパスを通す

virtualenvなどで必要であれば以下のようにパスを通す。virtualenvの設定では `~/.virtualenvs` にディレクトリが無い可能性もある。

```bash
ls -s ~/.virtualenvs/<WORK>/lib/python2.7/site-packages/cv2.so /usr/local/lib/python2.7/dist-packages/cv2.so
```

## 動作確認

```python
"""
importのテスト
"""
import cv2

# OpenCVのバージョン
print cv2.__version__

# モジュールの配置先
print cv2.__file__

# opencv_contribのモジュールが使えるか
sift = cv2.xfeatures2d.SIFT_create()
```

    3.0.0
    /usr/local/lib/python2.7/dist-packages/cv2.so
MapのリストからCSV出力する場合にnullを空文字に変換するーjava8ー

#概要
StreamAPIを使って、csv出力をした時のメモ
・ヘッダー項目からMapにアクセスして出力データを取得する、必ず値が存在するわけではない
・ヘッダー項目を定数定義により可変にしている

#実装

変数定義とか

```lang:java
List<Map<String, String>> items = new ArrayList<>();
String[] header = {"福岡", "佐賀", "長崎", "熊本", "大分", "宮崎", "鹿児島"};
```

データ

```
Map<String, String> item1 = new HashMap<>();
item1.put("福岡", "100");
item1.put("佐賀", "200");
item1.put("長崎", "300");
item1.put("大分", "10");
item1.put("宮崎", "20");
item1.put("鹿児島", "30");
item1.put("熊本", "40");
item1.put("沖縄", "70");
items.add(item1);

Map<String, String> item2 = new HashMap<>();
item2.put("佐賀", "800000");
item2.put("大分", "1200000");
item2.put("宮崎", "1100000");
item2.put("熊本", "1800000");
item2.put("福岡", "5000000");
item2.put("長崎", "1400000");
item2.put("鹿児島", "1700000");
item2.put("沖縄", "1400000");
items.add(item2);


Map<String, String> item3 = new HashMap<>();
item3.put("鹿児島", "かごしま");
item3.put("長崎", "ながさき");
item3.put("福岡", "ふくおか");
item3.put("宮崎", "みやざき");
item3.put("佐賀", "さが");
item3.put("沖縄", "おきなわ");
items.add(item3);
```

出力時

```lnag:java
	File file = new File("d:/test.csv");
	try (PrintWriter writer = new PrintWriter(file)) {
		// ヘッダ出力
		writer.println(Arrays.stream(header).collect(Collectors.joining(",")));
		// データ出力
		for (Map<String, String> item : items) {
			writer.println(Arrays.stream(header)
							.map(m -> Optional.ofNullable(item.get(m)).orElse(""))
							.collect(Collectors.joining(",")));
		}
		writer.flush();
	}
```

出力結果

```lang:test.csv
福岡,佐賀,長崎,熊本,大分,宮崎,鹿児島
100,200,300,40,10,20,30
5000000,800000,1400000,1800000,1200000,1100000,1700000
ふくおか,さが,ながさき,,,みやざき,かごしま
```

#ポイント
.mapでOptionalを使い、値が存在しない時に空文字を出力するようにする。
　　Optional.ofNullable(item.get(m)) **→ nullを許容するOptionalを生成する。**
　　.orElse("") **→ nullの場合に空文字を返すようにする。**
あとは通常通り、.collect(Collectors.joining(","))でカンマ区切りに連結する。
[Ruby] ユーザに Y/n を1行で求める

```ruby:y_or_n.rb
require 'highline/import'
p 'yes' if HighLine.agree('Do it? [Y/n]')
```
require含め2行か

##参考
https://gist.github.com/botimer/2891186
http://www.rubydoc.info/gems/highline/1.6.21/HighLine:agree
react-routerが1.0.0になってたらいろいろ仕様が変わっていた話

あたらしくプロトタイプ作ろ〜って思って、
必要なライブラリをinstall。

とりあえず、indexページだけ表示できるようにしよう。

サーバーサイドにプログラム用意して、クライアントサイドにindex.html置いた。
routeファイルも作ったから、とりあえず動かしてみるぞー。

nodeコマンド実行して、さてブラウザで確認した。
。。あれ、画面が真っ白。Router.runのところでコンソールに
`undefined is not function`
と出ておる。

しばし試行錯誤の後、react-routerで何か手が加わったのかと邪推し、
gitページ( https://github.com/rackt/react-router )を眺めてみる。

ファイル一覧にUPGRADE_GUIDE.mdというそれらしいファイルを見つける。
https://github.com/rackt/react-router/blob/master/UPGRADE_GUIDE.md
0.13.3 -> 1.0.0
---------------

Thanks for your patience :) Big changes.


ですって。やれやれ。

```lang:route.js
var ReactRouter = require('react-router'); 
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var IndexRoute = ReactRouter.IndexRoute;

var Index = React.createClass({
  render: function () {
    return (
      <div>
        <header>
          this is header
        </header>
        {this.props.children}              //routerで切り替えたい箇所
        <footer>
          this is footer
        </footer>
      </div>
    );
  }
});

var Entrance = React.createClass({
  render: function () {
    return (
      <div>
        <span>ENTRANCE</span>
      </div>
    );
  }
});

var NotFound = React.createClass({
  render: function () {
    return (
      <div>
        <span>NOT FOUND</span>
      </div>
    );
  }
});

var routes = (
  <Route path="/" component={Index}>              //Indexページ
    <IndexRoute component={Entrance}/>            //Indexページに遷移した際に表示するページ
    <Route path="*" component={NotFound}/>    //存在しないページに遷移しようとした際に表示するページ
  </Route>
);

React.render(
  <Router>{routes}</Router>, 
  document.getElementById('content')
);
```
Pepperの目と肩の色の状態まとめ

Pepperの目の色によって状態がなんだったかよく忘れるので、まとめてみました。

#目の色

* 目のふちがピンク：顔を認識中
* 目と耳が青色回転：話を聞いている
* 目が緑色：聞いた言葉に対して考え中

#肩の色

* 白色：正常
* 緑色：通知情報あり
* 黄色：警告
* 赤色：エラー、使用不可　※電源投入時も


##参考URL
[Softbankサポート Pepperが届いたら](http://www.softbank.jp/robot/support/start/)
iPhone iPad LaunchImageのサイズ、image作り方

## iPhone iPad LaunchImageのサイズ
![スクリーンショット 2015-09-14 14.07.41.png](https://qiita-image-store.s3.amazonaws.com/0/88911/6ab3fdea-f929-91ca-1649-608281b95b5e.png)
iPhone Portrait iOS8 Retina HD 5.5 1242 x 2208 pixels
iPhone Portrait iOS8 Retina HD 4.7  750 x 1334 pixels
iPhone Landscape iOS8  Retina HD 5.5 2208 x 1242 pixels
iPhone Portrait iOS7,8 2x  640 x  960 pixels 
iPhone Portrait iOS7,8 Retina 4  640 x 1136 pixels
iPad Portrait iOS7,8 1x  768 x 1024 pixels
iPad Portrait iOS7,8 2x 1536 x 2048 pixels
iPad Landscape iOS7,8 1x 1024 x  768 pixels
iPad Landscape iOS7,8 2x 2048 x 1536 pixels

## LaunchImageの各イメージの作り方・LaunchScreen.xibを使用した方法
LaunchImage.xibを作る。
XcodeのSimulatorで起動する。
![スクリーンショット_2015-09-14_16_28_36.png](https://qiita-image-store.s3.amazonaws.com/0/88911/986ca91d-2037-7b47-b1a8-bdb8f233bf6e.png)
iOSのシミュレータで　^⌘C　で画面をコピーして画像を作成する。
画像を加工する。(上部ステータスバーの部分を塗りつぶしたり削除したり)
iPad 2 portrait 768 x 1024 pixels
iPad 2 landscape 1024 x  768 pixels
iPad Retina portrait 1536 x 2048 pixels
iPad Retina landscape 2048 x 1536 pixels
iPhone 4s 640 x  960 pixels
iPhone 5 640 x 1136 pixels
iPhone 6 750 x 1334 pixels
iPhone 6 Plus Portrait 1242 x 2208 pixels
iPhone 6 Plus Landscape 2208 x 1242 pixels
※もっといい方法があると思う。私は見いだせていない。
※画面作成用の1画面Projectを作って画面配置してステータスバーを非表示にしてそれを画面キャプチャするなどができそう。まだXcode始めて日が浅いので出来るかどうかは不明
Capybara + rspec で selected の状態を判定する : Rails

次のように書く。

```rb
expect(page).to have_select('book[id]', selected: 'ソフィーの世界')
``` 

テストの例。

```rb:spec/features/selected.rb
require 'spec_helper'

feature '/books', type: :feature do
  before do
    visit book_path
    select 'ソフィーの世界', from: 'book[id]' #いちど選択状態にする
  end

  scenario "要素が選択状態になっている" do
    expect(page).to have_select('book[id]', selected: 'ソフィーの世界') # 選択状態を判定する
  end
end
```

```html:app/views/books/index.html
<select id="book" name="book[id]">
  <option>我輩は猫である</option>
  <option>ソフィーの世界</option>
  <option>ガリバー旅行記</option>
</select>
```

#ポイント
- Capybaraは「外側から見えた状態」を判定するので、```<option vallue="">``` の値ではなく、 ```<option></option>``` の中身（ユーザーに見えるテキスト）を検証する。
- have_select / select に渡すのは `<select id="">` の値でも、`<select name="">` の値でも良い。どちらかを勝手に探してくれる。( 1ページ内に、name と id で同名があるとエラーが起こるので注意。id / name のどちらかを明示する方法はないっぽい )
- なので本当は[こちら](http://qiita.com/jnchito/items/607f956263c38a5fec24#セレクトボックスで特定の項目が選択されていることを検証する)のように、 ```<label for=""></label>``` のテキストで指定した方が良いと思う。
- have_select は selected を直接判定するマッチャではない。```<select></select>``` 全体の状態を判定する。だから ```selected``` を判定するために、オプションで selected: を指定する。



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
gitでaddする前の状態で別ブランチに移動したくなった時に変更内容を避けておく方法。

#gitでaddする前の状態で別ブランチに移動したくなった時に変更内容を避けておく方法。

例えばこういう場合。

```
$ git status
On branch hogehoge_20150914
Untracked files:
  (use "git add <file>..." to include in what will be committed)

	hoge.php

nothing added to commit but untracked files present (use "git add" to track)
```

この状態でブランチを移動しようと知ると、

```
$ git checkout master 
error: Your local changes to the following files would be overwritten by checkout:
	hoge.php
Please, commit your changes or stash them before you can switch branches.
Aborting
```
と怒られる。


##そういうときは`git stash`を使う

```
$ git stash
Saved working directory and index state WIP on hogehoge_20150914: 3a158e0 '直前のコミットの内容'
```

##もう一度`git status`して状態を見てみる

```
$ git status
# On branch hogehoge_20150914
nothing to commit, working directory clean
```

##これで安心してbranchを移動できる

```
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
```

##`git stash`で避けていた変更内容を元に戻すとき"

```
$ git stash list
stash@{0}: WIP on dev_auto_point_log_20150914: 3a158e0 '直前のコミットの内容'
```
でstashしたlistを見ることができる。

さらに、`git stash apply`をすると、

```
$ git stash apply
On branch dev_auto_point_log_20150914
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   hoge.php

no changes added to commit (use "git add" and/or "git commit -a")
```

stashで避ける前の状態に戻すことができる。


#参照

 [Git-のさまざまなツール-作業を隠す](http://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E4%BD%9C%E6%A5%AD%E3%82%92%E9%9A%A0%E3%81%99)
新規事業をはじめる前に知りたかったコト

どこからはじめればいいか分からない新規事業を
成功に近づけるためのチェックリスト。


#１：ゴールを明確に
曖昧な目標からは曖昧な行動しかできないのでゴールを決める。
そもそも、なんのための新規事業ですか？
ゴールがなければ成功も無いです。

##２：計画を立てずに作業を開始しない
毎日、毎週、毎月と「末」までに何を完了させるか決めるまで作業を進めない。
初めはやることだらけなので、やることを分割、タスク化して消化する。

##３：考えすぎない
アイデアを煮詰めすぎない。
##３.５：社内のメンバーをできるだけ巻き込む
他事業部に関わる場合は上長への確認と共有は必要。

##４：失敗に引きずられない
ほとんどの新規事業は失敗する。　失敗を振り返って次に活かすのは重要ですが
いつまでも引きずられない、引きずらないようにする。[新規事業の終わり方 -執筆中-](www.yahoo.jp)

##５：開始時に極端に悲観的な人は側におかない。
シンプルにモチベーションが落ちます。　都合のいい人をまわにおくのではなく、実際新規事業の経験のある人、複数人に相談して改善すべき点をくれる人を巻き込む。　アイデアを広げるときと厳しい現実を受け入れるときと場合に合わせて意見をもらう相手を選ぶ。

##６：お金=成功としない
お金は重要ですがお金のみで成否を決めない。　とてもつまらない事業案になっていると思います。

##７：感謝を忘れない
新規事業をやっていると一つ一つ、色んな人の協力があって達成できている場面に遭遇するはずです。　
そんな人々への感謝の気持ちは常に持ち続けて欲しいです。

##８：常に勉強。
恐らく出来ないこと、知らないことだらけでしょう。　少しづつでも良いので勉強しましょう。
新規サービスに必要な分野 を一つ選んで毎日最低でも１時間程度を裂いて勉強する。

以上
play + heapstats

Play Java のアプリを監視するために、HeapStatsを導入した際のメモ。

## HeapStatsのインストール

playがあるサーバにエージェントをインストール。
詳しくは公式サイトを参照。
http://icedtea.classpath.org/wiki/HeapStats/jp

収集データのローテーションや出力先の設定例も公式サイトにあるので、実際使う場合はそれも設定すること。

## 起動スクリプトでagentを指定

`play dist`で作成された起動スクリプトの実行時に、bin/app_nameにagentlibの値を指定する。

```
./bin app_name -J-agentlib:heapstats
```

## まとめ

HeapStatsの良いところは、データの収集と解析が切り分けられているところ。
本番環境が顧客のところにあっても、収集データを連携してもらえれば、手元で解析できる。
http://www.slideshare.net/chi9rin/heap-stats-35885661

Javaアプリの監視手段の候補としてもっておくと、良さそう。
[Elixir+Phoenix]実行したコントローラとアクションを表示する

#Goal
実行したコントローラとアクションを表示する、デバッグ出力を実装する。

#Dev-Environment
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.5
Phoenix Framework: v1.0.0

#Wait a minute
デバッグ出力を作成します。

私の環境で申し訳ないのですが、以下のような表示をできるようにします。(赤枠の部分)
![02.png](https://qiita-image-store.s3.amazonaws.com/0/80934/e8a1b29d-efb2-0dd5-eee0-cf3d9bb2b0d2.png)

コントローラ名とアクション名が出力されています。

#Index
Phoenix-Framework debug dump
|> web.exでインポートする関数を追加
|> レイアウトテンプレートを変更
|> LayoutViewへ関数を追加
|> Debugテンプレートを作成
|> おまけ

##web.exでインポートする関数を追加

web.exのview/0でインポートする関数を追加します。
(action_name/1、controller_module/1の関数)

ファイル: web/web.ex

```ex
def view do
  quote do
    ...

    # Import convenience functions from controllers
    import Phoenix.Controller, only: [get_csrf_token: 0, get_flash: 2, view_module: 1,
                                      action_name: 1, controller_module: 1]

    ...
  end
end
```

##レイアウトテンプレートを変更
レイアウトテンプレートへデバッグを表示するテンプレートを追加します。

ファイル: web/templates/layout/app.html.eex

```html
<!DOCTYPE html>
<html lang="en">
  ...

  <body>
    ...

    <div class="container">
      <%= render "debug.html", conn: @conn %>
    </div>

    ...
  </body>
</html>
```

##LayoutViewへ関数を追加
実行中のアクション名とコントローラ名を取得する関数を追加しています。

ファイル: web/views/layout_view.ex

```ex
defmodule SampleApp.LayoutView do
  use SampleApp.Web, :view

  def get_controller_name(conn), do: controller_module(conn)
  def get_action_name(conn), do: action_name(conn)
end
```

##Debugテンプレートを作成
デバッグ内容を出力する新しいテンプレートを作成します。

ファイル: web/templates/layout/debug.html.eex

```html
<div class="debug_dump">
  <p>Controller: <%= get_controller_name @conn %></p>
  <p>Action: <%= get_action_name @conn %></p>
</div>
```

##おまけ
デバッグを出力するためのCSSを作成します。

ファイル: priv/static/css/custom.css

```css
/* miscellaneous */
.debug_dump {
  clear: both;
  float: left;
  width: 100%;
  margin-top: 45px;
  color: inherit;
  background-color: #eee;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

.debug_dump p {
  margin-bottom: 1px;
  font-size: 15px;
  font-weight: 200;
}
```

#Speaking to oneself
ブログの方に掲載している、
Phoenix Tutorialの書き直しの過程で作成しましたので、記事にしました。

無くても何とでもなりますが、
あった方が便利、あれば使う程度の機能ですよね。

#Bibliography
[Phoenix-Framework - Guides - templates](http://www.phoenixframework.org/docs/templates)
致命的な失敗を避けるための新規事業のはじめかた

新規事業を担当したことがあるヒトはわかると思いますが、新規事業を凍結した方がいいか判断を迫られるタイミングが発生します。　判断に迷って日にちだけが経過するのはプロジェクトチームの士気低下、会社としても致命的な失敗は避けたいかと思います。　正しく素早い判断は事前準備の有無で大きく変わるので、その中でも今回はフェーズを分ける方法を紹介します。

一つの新規事業でも立ち上げフェーズを分ける事で、
- 判断を楽にする、スッキリ辞める
- 「凍結」 = 「悪」では無くダメな方法をひとつ排除できたとして成功への一歩と捉えられるような意識に転換
- 苦しんでも１円にもならない事実を受け入れ
PDCAをまわす事で次の新規事業が成功する可能性を高めるためのナレッジを収集します。
※大原則として、法人の場合は経営理念に沿った事業案で無いと意味がありません（説明は割愛）

##最重要事項：100点を狙わない、
各フェーズで「進める→調整→進める→調整…繰り返す」この行程をできるだけ多く短期間で実施。
うぬぼれないでください、普通に失敗する前提で計画してください。

#Phase１　アイデアの検証
これはオモシロイと思えるアイデアが実際に需要があるか客観的に確認します。
####目安：２０日間
####進捗管理：chatwork&trelloなど
##タスク
1. 市場調査（対象ユーザー数、市場規模、競合他社、参入障壁など複数の側面から検討）
2. ユーザーヒアリング（ネット検索では無く実際に対象ユーザーに話を聞く）
3. 事業計画
4. ビジョンの共有 ← 最重要項目です、新規事業の目指す将来のあるべき姿を明示。

#Phase２　MVPの開発と検証
Phase１で確認したユーザーやクライアントのニーズを実際に確かめるフェーズです。
####目安：３０日間
####進捗管理：chatwork&trelloなど
##タスク
1. MVPの設計／制作（MVPの種類参考／MVPとは？）
2. ペルソナ／ユーザーシナリオの見直し
3. UXの期間ごとの企画検討
4. KPI設定
5. 事業計画見直し（CPAなどフィージビリティも検討）

#Phase３　アルファ版の開発と検証
Phase２で確認した課題や新規事業を拡大する上で必要なシステムや体制を整えます。
ここまで進めばある程度、新規事業の需要があることが確認できているので予算も付けやすいかと思います。

####目安：６０日間
####進捗管理：開発の規模に合わせてbacklogやredmineなどを導入
##タスク
1. アルファ版の設計／制作
2. ペルソナ／ユーザーシナリオの確定
3. UXの期間ごとの企画検討
4. KPI設定（CPA／LTVなどなど新規事業の内容に合わせて）
5. 事業計画見直し

以上

何より、中止や想定外の結果を「悪」とするのでは無く、成功へつながる一歩として捉える事が必要です。
IntelliJ IDEAでJavaを書く時によく使うLive Template5つ

IntelliJ IDEAのJavaのLive Template一覧が、ググっても出てこなかったので、ここによく使うだろって5つをまとめておきます。

# よく使うテンプレート一覧

| 入力       | 動き        |
|:-----------|:------------|
| soutv | 現在の値を標準出力 |
| soutm | 現在のメソッドを標準出力 |
| psvm | mainメソッド |
| iter | Java1.5以降のIterableを使ったループ |
| fori | forループ |


`psvm`が最初なかなか覚えられなかった...。

# よく使うテンプレーの詳細

### soutv (Prints a value to System.out)
```java
System.out.println("$EXPR_COPY$ = " + $EXPR$);
```

### soutm (Prints current class and method names to System.out)
```java
System.out.println("$CLASS_NAME$.$METHOD_NAME$");
```

### psvm (main() method declaration)
```java
public static void main(String[] args){
  $END$
}
```

### iter (Iterate Iterable | Array in J2SDK 5.0 syntax)
```java
for ($ELEMENT_TYPE$ $VAR$ : $ITERABLE_TYPE$) {
  $END$
}
```

### fori (Create iteration loop)
```java
for(int $INDEX$ = 0; $INDEX$ < $LIMIT$; $INDEX$++) {
  $END$
}
```


他にもgeti (Inserts singleton method getInstance) ももしかしたらよく使うかもしれないけれども、自分だけかもしれないのでこれは省きました。
MacでのCaps Lockの解除


## Caps Lockを無効にした設定でCaps Lockするには

`Fn + Tab`

これでCaps Lockを解除することができる。

## 経緯
自分には不要なのでCaps Lockは無効にしてある。
しかし、たまにガチャガチャとキーボードを操作していると、思いもよらぬ時にCaps Lockされた状態になってしまうことがある。

このような状態になってしまった時に、当然だけれどCaps Lockを無効にしているので解除する方法がわからなかった。
確か以前にも同じ状態になった時に`Fn` + 何かのキーで解除した記憶があったので、`Fn`と一緒に色々なキーを押して確認してみた。


今度はこれを忘れないようにメモしておく。
というメモをDay Oneに書いていたことを忘れてしまっていたのでQiitaにおいておく。
has_manyな関連性のモデルを、元レコードの保存時に削除する


ActiveRecordでhas_manyを指定しているモデルを操作する画面を作る時に、以下の様な事で悩んでいた

```ruby
class Account < ActiveRecord::Base
  has_many :roles
end

class Role < ActiveRecord::Base
  belongs_to :account
end

# コントローラー側のメソッド内
def update 
  account = Account.find_by(params[:id])

  account.roles = [] #=> ここでrolesがdeleteされてしまう
  params[:roles].each do | role | 
    # ...
  end

  unless account.save
    render :action => "edit"
  end
end
```

account.rolesにパラメータが来てないものは削除したいが、削除するために=[]とするとその時点で保存されてしまう

has_manyで保存時に作成するものはbuildで良いが、削除はどうするのか……
と探していたらあった。
> has_many側の不要なやつはdeleteして更新したい
http://d.hatena.ne.jp/itmammoth/20120422/1335087511

```ruby
def update 
  account = Account.find_by(params[:id])

  params[:roles].each do | role | 
    # ...
  end
  account.roles.each do | role | 
    role.mark_for_destruction unless roles.map{|r| r[:name]}.include?(role.name)
  end

  unless account.save
    render :action => "edit"
  end
end
```

なお、このレコードが削除フラグが立っているかは marked_for_destruction?で見れば良い

```ruby
role.marked_for_destruction?
```


もっと良い方法があれば是非教えてください
実行中のjavaアプリのシステムプロパティなどを確認

`jinfo <pid>` でゲットできる。

jdkをいれてあれば、/usr/java/<version>/binの下にある。(jreだけだと多分ない)

システムプロパティの他に、classpathやjvmに渡した引数なども表示される。
【TravisCI】「No output has been received in the last 10 minutes, this potentially indicates a stalled build or something wrong with the build itself.」と出たときにこの"10分"をのばす方法

# はじめに
* 前にこんな記事を書きました
 * [TravisCIは10分間何もコンソール出力がなければビルド失敗と扱われる](http://qiita.com/oh_rusty_nail/items/220dd656c53e2199357b)

# 今回試したこと
* この10分経ったら諦めたくないのでのばすにはどうやれば？！
 * 「諦めたらそこで試合終了だよ！」
* 以下のようにすれば延長できる(以下の例では30分に延長)

```yaml:.travis.yml
...
script: travis_wait 30 script.sh
...
```

# ただ、これ使う場面あるのか・・・CIですよね、早くしたいですよね
* 前に画像処理環境をTravisでやろうとしたことがありました
 * 今ならdockerとか・・・
* そのときにインストール時のログでTravisのコンソールが10000行超えたら怒られるからコンソールには出さないようにしよう
 * No output has been received in the last 10 minutes... おい！
* 今回書いたことをやれば、解決しちゃいますがそもそもその工程Travisに毎回やらせんの？！いやしないっしょ　と 
 * 結局、そのときは１回だけ真面目にやらせてあとはディレクトリで指定したcacheを利用してやっていました

# 結論
* ただ、単に時間がかかっているっぽいから長くするのは危険！
* 手段として提供されているので、やるのに適切な場面もあるはず。。
 * 長くするのではなく、早くkillするときにいいのかも！！

----

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
GuzzleでBASIC認証のページにアクセスする

## 概要

[Guzzle](http://guzzle.readthedocs.org/en/latest/)を使って、Basic認証がかかったページにアクセスする方法です。

完全に備忘録ですが・・

```php

$client = new Clinet();
$request = $client->get('http://example.com');
$request->setAuth('{ユーザ名}', '{パスワード}');
$request->send();
```

で、OK。
`get`メソッドの第二引数に`$headers`ってのを渡せるので、↓でも行けそうな気がしたけどなぜか上手く行かなかった。

```php
$request = $client->get('http://example.com', array('auth' => array('{ユーザ名}', '{パスワード}'));
``
TravisCIのbundlerのcacheの扱いで２日ハマった

# どのようにはまったかをざっくりと
* featureブランチのビルドでは **成功** してPull Requestビルドのでは **失敗** するという事態が起きました
 * featureブランチについては [git-flowの5つのブランチモデル](http://www.atmarkit.co.jp/ait/articles/1311/18/news017_2.html) を参照
* Pull RequestビルドはPull Requestがあったらそのブランチに対してテストして、Pull Requestしたコードの影響がないかどうかを知ることができます
* コードは同じなのになぜかPull Requestビルドだけ失敗するという状況でした

## 前提
* bundlerのcacheは有効
* ビルドするブランチの対象はdevelop,featureブランチ
* Pull Requestは有効

## 違いが出た原因は
* Gem自身がDBのレコードを保持するようなGemを使っていて、bundlerのcacheを有効にしていたため、そのcacheを利用するビルドはそのDBのレコードを既に持っている
 * 詳細は書きませんが、"DBのレコードを既に持っている"がビルド失敗の原因でした
 * それはさておき、肝心なcacheの扱いについてです

# cacheの扱い
* 以下は **私のところのでの** TravisCIの仕組みの話です
 * featureブランチのビルドでは、初回のcacheは使われず、２回目以降は該当するfeatureブランチのcacheが使われる
 * Pull Requestビルドでは、初回にdevelopブランチのcache、２回目以降は該当するPull Requestのcacheが使われる

# TravisCIのコンソールログから学んだこと
* TravisCIのcacheは以下のようにSTEP1、STEP2と捜索していくわけです
 * 上で、"私のところでの"といったのは、ビルド対象にmasterを選択していないからです
 * なので、実質developまで探してなかったら"ナイ"と判断されます

|　| feature | Pull Request | develop |
|:-----|:-----------|:------------|:------------|
|STEP1| featuresample-branch | PR.467 |develop|
|STEP2| (master) | develop |(master)|
|STEP3| - | (master) |-|


## TravisCIのコンソールログ

```
### featureブランチビルド実行時の Setting up build cache
Setting up build cache
$ export CASHER_DIR=$HOME/.casher
0.06s$ Installing caching utilities
0.67sattempting to download cache archive
fetching featuresample-branch/cache--rvm-default--gemfile-Gemfile.tgz
fetching featuresample-branch/cache--rvm-default--gemfile-Gemfile.tbz
fetching master/cache--rvm-default--gemfile-Gemfile.tgz
fetching master/cache--rvm-default--gemfile-Gemfile.tbz
could not download cache

### Pull Requestビルド実行時の Setting up build cache
Setting up build cache
$ export CASHER_DIR=$HOME/.casher
0.07s$ Installing caching utilities
0.90sattempting to download cache archive
fetching PR.467/cache--rvm-default--gemfile-Gemfile.tgz
fetching PR.467/cache--rvm-default--gemfile-Gemfile.tbz
fetching develop/cache--rvm-default--gemfile-Gemfile.tgz
fetching develop/cache--rvm-default--gemfile-Gemfile.tbz
found cache

### developブランチビルド実行時の Setting up build cache
Setting up build cache
$ export CASHER_DIR=$HOME/.casher
0.06s$ Installing caching utilities
4.09sattempting to download cache archive
fetching develop/cache--rvm-default--gemfile-Gemfile.tgz
found cache
```

----

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Selenium, SauceLabs, TravisCI, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
msgpackのデシリアイズ性能比較（C++/Python/Ruby)

C++, Python, Rubyで各msgpackのライブラリを使用した読み込みがどの程度の性能なのか調べました。厳密さは求めておらずざっくりとした性能感を知りたかったのが目的なので、細かい調整などはしていません。以下が10,000,000メッセージを標準入力で読み込ませた時の性能です。

| 環境                                                                               | user time | sys time | total  | performance          |
|------------------------------------------------------------------------------------|-----------|----------|--------|----------------------|
| C++ (Apple LLVM version 6.1.0 (clang-602.0.53) + msgpack-c 1.2.0)                  |     6.13s |    1.38s |  7.649 | 1,307,360.43 msg/sec |
| Python (Python 2.7.6 +,msgpack-python 0.4.6)                                       |    17.50s |    1.62s | 20.561 |   486,357.66 msg/sec |
| Ruby (2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14] + msgpack-ruby 0.6.2) |    26.67s |    0.95s | 27.729 |   360,633.27 msg/sec |

以下、詳細です。

測定環境
------------

- MacBook Pro (Retina, Mid 2012)
- OSX Yosemite 10.10.4 (14E46)
- CPU: 2.3 GHz Intel Core i7
- Memory: 16 GB 1600 MHz DDR3

測定方法
------------

- 10,000,000件のメッセージを標準入力で読み込ませる。
- 読み込んだメッセージがArrayかどうかを確認し、数え上げる
- 実行時間測定はtimeコマンド
- 数回実行して最も短かった実行時間を記載

測定に利用したコード
------------

### C++

```cpp
#include <msgpack.hpp>
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
#include <time.h>

int main(int argc, char *argv[]) {
  static const size_t BUFSIZE = 4096;
  msgpack::unpacker unpkr;
  int rc;
  int array_count = 0;
  
  char buf[BUFSIZE];

  while (0 < (rc = read(0, buf, sizeof(buf)))) {
    unpkr.reserve_buffer(rc);
    memcpy(unpkr.buffer(), buf, rc);
    unpkr.buffer_consumed(rc);

    msgpack::unpacked result;
    while (unpkr.next(&result)) {
      const msgpack::object &obj = result.get();
      if (obj.type == msgpack::type::ARRAY) {
        array_count++;
      }
      result.zone().reset();
    }
  }
  printf("%d\n", array_count);

  return 0;
}
```

### Python

```py
#!/usr/bin/env python

import msgpack
import sys

array_count = 0
for msg in msgpack.Unpacker(sys.stdin):
    if isinstance(msg, list): array_count += 1

print array_count
```

### Ruby

```rb
#!/usr/bin/env ruby

require 'msgpack'

array_count = 0

unpkr = MessagePack::Unpacker.new(STDIN)
unpkr.each do |msg|
  if msg.instance_of? Array
    array_count += 1
  end
end

puts array_count
```
SIMDいろいろ

#fabs
fabs: !sign_mask & x

```c:
__m256d sign_mask = _mm256_set1_pd(-0.); // -0. == 0b100000...
ymm = _mm256_andnot_pd(sign_mask, ymm);
```

#型変換
floatからintへ。`_mm256_cvtps_epi32` か `_mm256_round_ps`を使う。
_mm256_round_psにはマクロがある。

```
#define _mm256_ceil_ps(val)   _mm256_round_ps((val), _MM_FROUND_CEIL)
#define _mm256_floor_ps(val)  _mm256_round_ps((val), _MM_FROUND_FLOOR)
```

```c:
int main() {
    int x;
    float a[] = {1.1f, -2.2f, 3.3f, -4.4f, 5.5f, -6.6f, 7.7f, -8.8f};
    int i[8];
    float j[8];
    float k[8];
    float l[8];
    __m256  mm_a = _mm256_loadu_ps(&a[0]);
    __m256i mm_i = _mm256_cvtps_epi32(mm_a);
    __m256  mm_j = _mm256_floor_ps(mm_a);
    __m256  mm_k = _mm256_ceil_ps(mm_a);
    __m256  mm_l = _mm256_round_ps(mm_a, _MM_FROUND_TO_NEAREST_INT);
    _mm256_storeu_si256((__m256i *)&i[0], mm_i);
    _mm256_storeu_ps(&j[0], mm_j);
    _mm256_storeu_ps(&k[0], mm_k);
    _mm256_storeu_ps(&l[0], mm_l);
    for (x=0; x<8; x++) {
        printf("[%d] %+.2f:  %+d  %+.2f  %+.2f  %+.2f\n", x, a[x], i[x], j[x], k[x], l[x]);
    }
    return 0;
}

    input:cvtps floor   ceil   near
[0] +1.10:  +1  +1.00  +2.00  +1.00
[1] -2.20:  -2  -3.00  -2.00  -2.00
[2] +3.30:  +3  +3.00  +4.00  +3.00
[3] -4.40:  -4  -5.00  -4.00  -4.00
[4] +5.50:  +6  +5.00  +6.00  +6.00
[5] -6.60:  -7  -7.00  -6.00  -7.00
[6] +7.70:  +8  +7.00  +8.00  +8.00
[7] -8.80:  -9  -9.00  -8.00  -9.00
```

#並び替え
|7|6|5|4|3|2|1|0| ⇒ |7|5|3|1|6|4|2|0| にしたい
shuffleでは128ビット境界を越えられないのでpermute

```c:
void permute()
{
  int src[] = {0, 1, 2, 3, 4, 5, 6, 7};
  int dst[8] = {0};

  __m256i ymm_src = _mm256_loadu_si256((__m256i*)(src));
  __m256i ymm_idx = _mm256_set_epi32(7,5,3,1,6,4,2,0);
  __m256i ymm_dst = _mm256_permutevar8x32_epi32(ymm_src, ymm_idx);
  _mm256_storeu_si256((__m256i*)(dst), ymm_dst);
  printf("src:"); for (int i=0; i<8; i++) { printf(" %d", src[i]);} printf("\n");
  printf("dst:"); for (int i=0; i<8; i++) { printf(" %d", dst[i]);} printf("\n");

  return;
}
```
src: 0 1 2 3 4 5 6 7
dst: 0 2 4 6 1 3 5 7
Swift2.0 + ObjectMapper + RealmでローカルDB構築に挑戦

アプリのローカルにRealmを作って、そこにデータをいれこんで検索等を行う必要があり、やってみました。シミュレーター(iOS8.4)で確認しただけなので、そこは悪しからず..

##使ってるライブラリ

- Realm
- ObjectMapper ~> 0.16
- Alamofire ~> 2.0

RealmはCocodPodsで、それ以外はCarthageで入れました。ドキュメント見たら、RealmのSwift2.0用はCarthageで入らないそうなので。

##モデルの宣言
AlamoFireで取得したJSONをオブジェクトにする為に、ObjectMapperを差し込んでおります。Realmオブジェクトでも簡単にシリアライズ出来ます。

```swift:Item.swift
import ObjectMapper
import RealmSwift

class Item: Object,Mappable {
    dynamic var item_id = 0
    dynamic var itemcode = ""
    dynamic var name = ""
    dynamic var lot = 1
    dynamic var price = 0
    dynamic var jancode = ""
    
    required convenience init?(_ map: Map) {
        self.init()
    }
    
    func mapping(map: Map) {
        item_id <- map["item_id"]
        name <- map["name"]
        price <- map["price"]
        lot <- map["lot"]
        jancode <- map["jancode"]
        itemcode <- map["itemcode"]       
    }
}
```
##ViewController

やってることは下記の通りです。データ数は1万件。

1. AlamofireでJSONを取得
2. ObjectMapperでRealmオブジェクト配列にパース
3. 初期化したいので、Realmを全部削除
4. 2で取得した配列を1件ずつbegin→add→commit

```swift:ViewController.swift
import UIKit
import ObjectMapper
import Alamofire
import RealmSwift

class LoginViewController: UIViewController {

    @IBOutlet weak var btn: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        btn.addTarget(self, action: "btnPressed:", forControlEvents: .TouchUpInside)
        
        let json_url = "http://fkcorporation.co.jp/files/sample_10k.json"
        //1.
        Alamofire.request(.GET, json_url).responseJSON { _, _, result in
            //2.
            if let item_data_arr:[Item] = Mapper<Item>().mapArray(result.value) {
                do {
                    let realm = try Realm()
                    //3.
                    realm.beginWrite()
                    realm.deleteAll()
                    try realm.commitWrite()
                    //4.
                    for v in item_data_arr {
                        realm.beginWrite()
                        realm.add(v)
                        try realm.commitWrite()
                    }
                } catch {
                }
            }
        }
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    func btnPressed(sender:AnyObject?) {
        do {
            let realm = try Realm()
             let records:Results = realm.objects(Item).filter("itemcode BEGINSWITH '0'").sorted("itemcode")
            for v in records {
                print(v) //Itemオブジェクトがprintされる
            }
        } catch {
            
        }
    }
}

```

##よくわかってないこと

- Realmのコンストラクタ並びにcommitWriteにthrowsがあるので呼び出し時にtryをつけるのだけど、どんなエラーをcatchしたら良いのか。RealmException的なものが分からなかった。このままでは握りつぶしてしまっているで...
- 全削除→複数件INSERTをする際には、2回トランザクションを開始するものなのか。
- realmオブジェクトはメンバ変数でも..って思ったけどバックグラウンドでスレッド立てた時に同期されなそうだから、使う時に都度インスタンス生成したほうが良さげ。 ファクトリーメソッド的なものは必要かな。do-try-catchの散在はだるい。
 
とりあえずこれで動いたので、ローディングウインドウを出して、そのコールバックで上記初期化処理を行うように作って、リファクタリングに移行したいと思います。
HTMLってどうなの? JSそれぞれの立場


最近のJavaScript業界で「HTMLへの思い」を聞いてみました。

![Artboard 1.png](https://qiita-image-store.s3.amazonaws.com/0/1858/fd9b6869-efe5-d79c-59cb-a60aa40b49fa.png "Artboard 1.png")


*Angular先生*
> HTMLはもっと出来る子さ。もっと進化できるはず、もっと頑張れよ!

*React先輩*
> もうHTMLに期待するのは飽き飽きしたよ。すべてはJavaScriptでいいんだ、クールだろ?

*Polymer君*
> HTMLは進化して帰ってきたよ! エッ、Safariッテナンデスカ?

このあたり、モダンブラウザ・ネイティブ世代のライブラリたちとの温度差があるようですね。少し、意見を聞いてみましょう。

*Riot君*
> 先生、僕たちゆとり世代なんで頑張りたくないです。というかHTMLは十分高機能だし。先輩には悪いけど、ビューはHTMLで書くのが自然ですね。(というか、先輩たちのHTMLアレルギーがナゾ)

*vue.jsさん*
> 私はわたしですから。あんまりいろいろやりすぎるのはクールじゃないし。HTMLはHTML、JavaScriptはJavaScript、これからもシンプルにありたいです。

Polymer君についてはどうなんでしょうか?

> うん、Polymer君のことはもちろん応援してるよ。でも、すぐの話ってわけじゃないよね? 僕たちは、どちらかというと「今ある技術」に集中したいんだ。ブラウザは、実のところすでに扱いきれないほど高機能だからね。

ちなみに、Backbone爺さんからは「喝ッ」のひとことだけ頂きました。Emberおばさんは忙しいのかケータイが繋がりませんでした。あしからず。

## 補記

Angularは本当にHTMLを便利なものにしたかった、でもちょっと思いが強すぎて難しい面もあって、それを見ていたReactはHTMLから距離を置いていきます。Angularでの試行錯誤は、WebComponentを通じて間接的にPolymerに繋がります。そんなこんなの数年間に、ブラウザはいつの間にか総モダンブラウザ時代。

モダンブラウザしか考えていない「ゆとり世代」は、徐々に既存プロダクトに違和感を覚えて...、その結果が昨今のフレームワークありすぎの事態ですが、まあ選択肢が多いのは、本来、悪いことではないですね。

不毛と思っていても、みんな大好きフレームワーク論争ですが、論争の前の足場が違うことを確認すると、あんまり論争にならないものです。「寿命」や「負債」に尻込みするのも理解はできるし(共感はしない)、ちょっと分野が変われば業界標準なんてあってないようなもの。ソースを読んで、できればコミットしてみて、話はそれからです。
Proxy環境でIntel Edisonのビルド環境を構築する

Proxy環境下だと、 `./meta-intel-edison/setup.sh --dl_dir=./dl --sstate_dir=./sst` を実行した際に、gitのプロトコルがproxyにはじかれてcloneがtime outを起こすことがある。

以下のコマンドでgitのプロトコルをhttpsに変更する設定にしても、 `git.yoctoproject.org` が httpsでリポジトリを提供していないのでclone出来ない。

```
git config --global url."https://".insteadOf git://
```

なので、その対処方法として./meta-intel-edison/setup.shの159行目のgit cloneを書き換える

```
# The repo does not exist. Clone it.
# git clone --mirror git://git.yoctoproject.org/$1.git $1-mirror.git
git clone --mirror http://git.yoctoproject.org/git/$1 $1-mirror.git
```

これで、 http://download.intel.com/support/edison/sb/edisonbsp_ug_331188007.pdf のビルド手順までは実施できた。
プロ野球速報をしてくれる ruboty-npb_report をつくった


# 概要
[p1ch-jp/BotchAPI](https://github.com/p1ch-jp/BotchAPI)
こちらを利用した、今日のNPB速報をしてくれます。

## Github
[nozayasu/ruboty-npb_report - Github](https://github.com/nozayasu/ruboty-npb_report)

## RubyGems
[ruboty-npb_report - RubyGems.org](https://rubygems.org/gems/ruboty-npb_report)

# 参考
[Botchというプロ野球のAPIを作った - Chiraura](http://chiraura.me/create-botch-api/)
[r7kamura/ruboty](https://github.com/r7kamura/ruboty)
[Ruboty の Plugin のつくりかた #ruboty - Qiita](http://qiita.com/tbpgr/items/8a2a3cda68770f91eb4f)
[PHP - プロ野球速報APIを使ってみた - Qiita](http://qiita.com/satthi/items/ab2f3a010229e64e5d6a)
unity > string / System.Environment.NewLine > stringの最後のCRLFを取り除く > .Trim ('\r', '\n');

```txt:動作確認
Unity 5.1.3-f1 on MacOSX 10.8.5
```

stringの最後についている`<CR><LF>`を取り除きたい。

参考 [SO](http://stackoverflow.com/questions/873043/removing-carriage-return-and-new-line-from-the-end-of-a-string-in-c-sharp)

rcvd = rcvd.Trim ('\r', '\n');
でいいとのこと。


```sample.cs
using UnityEngine;
using System.Collections;

public class CRLFCheckCS : MonoBehaviour {

	bool hasTrailingCRLF(string txt) {
		string removed = txt.TrimEnd ('\r','\n');

		if (txt.Length == removed.Length) {
			return false;
		}
		return true;
	}

	void Test_CheckCRLF() {
		string rcvd;
		bool res;

		rcvd = "TEST1" + System.Environment.NewLine;
		res = hasTrailingCRLF (rcvd);
		Debug.Log (res.ToString ());

		rcvd = rcvd.Trim ('\r', '\n');
		res = hasTrailingCRLF (rcvd);
		Debug.Log (res.ToString ());
	}

	void Start () {
		Test_CheckCRLF ();
	}	
}
```

```txt:結果
True
False
```

https://msdn.microsoft.com/ja-jp/library/system.string.trimend(v=vs.110).aspx
を見ると
> 現在の String オブジェクトの末尾から、配列で指定された文字セットをすべて削除します。

つまり`<CR><LF>`終わりだけでなく`<LF><CR>`終わりでも取り除かれる。
普通の実装であれば`<CR><LF>`終わりが大半であるとは思われる。
unity > string / System.Environment.NewLine > stringの最後にCRLFが含まれているかのチェック

```txt:動作確認
Unity 5.1.3-f1 on MacOS X 10.8.5
```

stringの最後に`<CR><LF>`が含まれないかどうかのチェックをしたい。

参考 [SO](http://stackoverflow.com/questions/873043/removing-carriage-return-and-new-line-from-the-end-of-a-string-in-c-sharp)


以下のように　hasTrailingCRLF() として実装した。
`<CR><LF>`をTrimEndで抜いた場合と元のstringの長さが異なれば、`<CR><LF>`つきだったという実装。

```sample.cs
using UnityEngine;
using System.Collections;

public class CRLFCheckCS : MonoBehaviour {

	bool hasTrailingCRLF(string txt) {
		string removed = txt.TrimEnd ('\r','\n');

		if (txt.Length == removed.Length) {
			return false;
		}
		return true;
	}

	void Test_CheckCRLF() {
		string rcvd;
		bool res;

		rcvd = "TEST1" + System.Environment.NewLine;
		res = hasTrailingCRLF (rcvd);
		Debug.Log (res.ToString ());

		rcvd = "TEST2";
		res = hasTrailingCRLF (rcvd);
		Debug.Log (res.ToString ());
	}

	void Start () {
		Test_CheckCRLF ();
	}	
}
```

string関連はまだ勉強不足で、実はbuild-in関数で<CR><LF>終わりがわかるのかもしれない。
CentOS上にSubversionをインストール

subversionが欲しくなったのでメモ。

```
$ sudo yum install subversion
$ sudo yum install mod_dav_svn
$ svn --version --quiet
1.6.11
$ mkdir -p /path/to/repos
$ sudo svnadmin create /path/to/repos/sample
$ echo "export SVN_EDITOR=vim" >> ~/.bashrc
$ . .bashrc
$ svn mkdir file:///path/to/repos/sample/trunk
$ sudo vim /etc/httpd/conf.d/subversion.conf
<Location /repos>
    DAV svn
    SVNPath /path/to/repos
    AuthType Basic
    AuthName "Authorization Realm"
    AuthUserFile /data/repos/.htpasswd
    Require valid-user
</Location>
$ sudo htpasswd -c /path/to/repos/.htpasswd USERNAME
$ sudo /etc/rc.d/init.d/httpd restart