OmniAICreator/Qiita-1.07M huggingface dataset:
ActiveAdmin でフリーワード検索

Userクラスのmemoカラムをフリーワード検索（全文検索）するにはどうすれば良いかという話。

```rb:app/admin/user.rb
filter :memo_cont
```
としておくと部分一致検索が可能だが、`hoge fuga`で検索すると `"hoge fuga"` による部分一致検索となってしまう。
検索ワードをスペースで区切った単語で部分一致によるAND検索を行いたい。

つまり、検索ワードとして `hoge fuga` が入力された時に次のSQLが発行されるようにしたい。

```sql
SELECT * FROM "users" WHERE "memo" ILIKE '%hoge%' AND "memo" ILIKE '%fuga%'
```

## ranscker の作成
ActiveAdmin は ransack を利用しているので、まずは対象のモデルに ransacker を作ってあげる。

```rb:app/models/user.rb
scope :memo_freeword_all, -> (search) {
  User.search(memo_cont_all: search.split(/ |　/)).result
}

def self.ransackable_scopes(auth_object = nil)
  %i(memo_freeword_all)
end
```

これで次のように利用できる。

```rb
User.search(memo_freeword_all: 'hoge fuga').result
#=> 上記のSQLが発行される
```
## filter の指定

あとは `memo_freeword_all` を filter で指定してあげればよい。

```rb:app/admin/user.rb
filter :memo_freeword_all, as: :string
```

### ラベルのI18n対応

ちなみに辞書ファイルに次のように定義しておけばラベルとして利用される。

```yaml:config/locales/ja.yml
ja:
  activerecord:
    attributes:
      user:
        memo_freeword_all: 'メモ（いずれかの語を含む）'
```

## その他、検索条件の書き方

```rb:app/admin/user.rb
# '含まれる', '等しい', 'で始まる', 'で終わる' を選べる 
filter :memo

# 完全一致検索
filter :memo_eq

# 部分一致
filter :memo_cont

# 前方一致
filter :memo_starts_with

# 後方一致
filter :memo_ends_with
```
qiita > 検索 > qiita検索api > @paramなどの検索用 / 検索オプションのページ


## @つきの検索

`@param`などQiita自体の検索ではうまく検索できないのでgoogleを使う。

以下を開いて、`@param`などを追加入力して使う。

https://www.google.co.jp/#q=site:qiita.com

サイトによって、`site:`なのか`insite:`なのかよくわからなくなる。
それを調べるのが手間である。

## 検索オプションの説明が見えるページ

Qiitaの最初のページで検索オプションがわからないので。

http://qiita.com/search?utf8=%E2%9C%93&q=aaa&sort=rel
JavaScriptで現在日から前後x日を取得する

この記事は移行しました！[最新の内容はこちら](https://naoqoo2.github.io/blog/JavaScript%E3%81%A7%E7%8F%BE%E5%9C%A8%E6%97%A5%E3%81%8B%E3%82%89%E5%89%8D%E5%BE%8Cx%E6%97%A5%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/)をご覧ください😀

#はじめに
jsで日付を処理するときってちょくちょくありますよね。
その度にどうやるんだっけ？ってなってました。
年月日までだったり時刻も欲しかったりとフォーマットもいろいろでめんどくさい。
そこで。。

#関数を作りました
今後はこれに統一しようと思います。
使い方はこんな感じ。

```js:現在日時を取得
getDateTime('Y/m/d H:i:s'); // 2015/10/09 12:24:22
```
```js:3日前の日付を取得
getDateTime('Y年n月j日（w_jp）', -3); // 2015年10月6日（火）
```

## 説明
```js
string getDateTime ( [ string $format = '' ] [, int $add_day = 0 ] )
```
指定された引数 add_day を、与えられた フォーマット文字列によりフォーマットし、日付文字列を返します。
formatが与えられない場合は連想配列を返します。
add_dayが与えられない場合は、現在日時が使われます。

## パラメータ

### format
出力される日付文字列の書式。
※[PHPのdate()](http://php.net/manual/ja/function.date.php)とあわせています。

| format文字 | 説明                                     | 戻り値の例            |
|------------|------------------------------------------|-----------------------|
| Y          | 年。4 桁の数字。                         | 例: 1999または2003    |
| m          | 月。数字。先頭にゼロをつける。           | 01 から 12            |
| n          | 月。数字。先頭にゼロをつけない。         | 1 から 12             |
| d          | 日。二桁の数字（先頭にゼロがつく場合も） | 01 から 31            |
| j          | 日。先頭にゼロをつけない。               | 1 から 31             |
| H          | 時。数字。24 時間単位。                  | 00 から 23            |
| G          | 時。24時間単位。先頭にゼロを付けない。   | 0 から 23             |
| i          | 分。先頭にゼロをつける。                 | 00 から 59            |
| s          | 秒。先頭にゼロをつける。                 | 00 から 59            |
| w          | 曜日。数値。                             | 0 (日曜)から 6 (土曜) |
| w_jp       | 曜日。日本語。                           | 日から土              |
|            |                                          |                       |

### add_day
前後x日を指定。0は現在日。
2で2日後。
-3で3日前。

# ソースコード
コピペして使えます。

```js:getDateTime
getDateTime = function(format, add_day){
    if (format == null) format = null;
    if (add_day == null) add_day = 0;

    var obj = {};
    var dt = new Date();
    dt.setTime(dt.getTime() + add_day * 60*1000*60*24);
    var week_jp = ['日','月','火','水','木','金','土'];
    obj.Y = dt.getFullYear();
    obj.m = ('0'+(dt.getMonth() + 1)).slice(-2);
    obj.n = dt.getMonth() + 1;
    obj.d = ('0'+dt.getDate()).slice(-2);
    obj.j = dt.getDate();
    obj.H = ('0'+dt.getHours()).slice(-2);
    obj.G = dt.getHours();
    obj.i = ('0'+dt.getMinutes()).slice(-2);
    obj.s = ('0'+dt.getSeconds()).slice(-2);
    obj.w = dt.getDay();
    obj.w_jp = week_jp[dt.getDay()];
    if(format != null){
        var str = format;
        str = str.replace('w_jp', obj.w_jp);
        str = str.replace('Y', obj.Y);
        str = str.replace('m', obj.m);
        str = str.replace('n', obj.n);
        str = str.replace('d', obj.d);
        str = str.replace('j', obj.j);
        str = str.replace('H', obj.H);
        str = str.replace('G', obj.G);
        str = str.replace('i', obj.i);
        str = str.replace('s', obj.s);
        str = str.replace('w', obj.w);
        return str;
    }else{
        return obj;
    }
};
```

ステキです。
注文詳細APIのクーポン利用額について

@ydnjp 
Yahoo!デベロッパーネットワーク ご担当者様

お世話になります。
掲題について質問が御座います。

注文詳細APIを利用してクーポン利用額を取得したいと考えています。
商品代引きで合計額を計算する際に必要となるからです。
TotalMallCouponDiscountキーを使うとモールクーポン利用額を取得できますが、TotalCouponDiscountキーを利用してもモールクーポン利用額が取得できません。

TotalCouponDiscountキーの説明文には「クーポンの合計値引き額」と記載されているので、モールクーポンとストアクーポンの合計値が取得できると理解していたのですが違うのでしょうか？
当店では現在クーポンを発行しておりませんが、将来的にクーポンを発行して集客を図りたいと考えておりますので、上記ご回答頂けると助かります。

以上よろしくお願い申し上げます。
cf env から vcap_services を取得して環境変数にセットする

ローカルでアプリ開発する場合に、環境変数をセットするのは面倒なので、cf env から取ってきてセットするbashスクリプト

OS: mac
cf version: 6.12.4-b4b6af1-2015-09-18T17:54:54+00:00

```bash
export VCAP_SERVICES=`cf env <appname> | awk -v RS= -v ORS='\n\n' '/System-Provided:/' | awk 'BEGIN{lines=""}NR>1{lines=lines$0}END{print lines}'| python -c "import sys,json;print json.dumps(json.loads(sys.stdin.read())['VCAP_SERVICES'])"`
```
Proxy環境下でMaven3プロジェクト

## 事の起こり

社内Proxy環境でMaven3プロジェクトを開発しているチームに入ったのでリポジ
トリから`git clone`してきた。

ワクワクしながらIntelliJを立ち上げてインポートして、まずは`mvn install`
かなーと思ってやってみると

```
Plugin org.apache.maven.plugins:maven-plugin-plugin:3.4 or one of its
dependencies could not be resolved: Failed to read artifact descriptor
for org.apache.maven.plugins:maven-plugin-plugin:jar:3.4: Could not
transfer artifact org.apache.maven.plugins:maven-plugin-plugin:pom:3.4
from/to central (http://repo.maven.apache.org/maven2): null to
http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugin-plugin/3.4/maven-plugin-plugin-3.4.pom:
UnresolvedAddressException -> [Help 1]
```

あれー！

## こうしたら直った

[stackoverflow](http://stackoverflow.com/questions/22193688/maven-
project-failed-to-read-artifact-descriptor)とか見てみたけど、「いや、普
通に勝手に読み込むで。」みたいな答えしかなく。

結果先輩に相談したら「 **proxy設定にhttps追加して、~/.m2/にsetting.xml配
置してみて。インストールディレクトリにあるのと同じやつ。** 」と教えてい
ただいて解決。

`~/.m2/`にも`setting.xml`を配置しておかなければいけなかったらしい。
Maven2についてのエントリにはそのようなことが書いてあることもあったけど、
Maven3についての記事にはインストールディレクトリ配下の`setting.xml`につ
いてしか記述がなかったので、勝手に仕様が変わったんだと思ってた…。

**やれることは全部試せ** 、ってことですね。
ラズパイとAWS IoTを接続してS3にデータを送る

# 概要
AWS IoTが発表されましたね！ってことで早速Raspberry Pi 2
Model BからAWS IoTを通してS3にデータをpushするサンプルデータで一連の流れを試してみました

# マネジメントコンソールからAWS IoTの設定をする
![スクリーンショット 2015-10-09 11.24.52.png](https://qiita-image-store.s3.amazonaws.com/0/65478/0fc07efd-4e6e-8de4-53c5-1850176d354c.png)
まずはmanangement consoleからAWS IoTにアクセスして「Create Resoure」のボタンをクリックすると上記の画面になります。では、順に登録していきましょう

## Create a thing
![スクリーンショット 2015-10-09 11.28.04.png](https://qiita-image-store.s3.amazonaws.com/0/65478/14f6c05b-60ce-6a7d-0dca-b7eb3acca03c.png)
まずはデバイス自体の登録してあげましょう。Nameを最低限入力すればOKです。
入力してCreateをクリックすれば登録完了です。

## Create a rule
![スクリーンショット 2015-10-09 11.32.08.png](https://qiita-image-store.s3.amazonaws.com/0/65478/d1dd3315-33bd-7b2c-f9af-1314962ca90a.png)
ルールを登録します。AWS IoTではRules Engineを通して必要なデータのみをフィルタリングしてデータのやり取りをします。これもSQLの形式になっているので直感的にわかりやすいですね。

今回使用したAWS SDKのサンプルコードはtopic_2というトピックを送信します。なので、キャプチャのようなルールを設定することにします。

![スクリーンショット 2015-10-09 12.09.40.png](https://qiita-image-store.s3.amazonaws.com/0/65478/86d1ff8f-0bf3-7879-8bbb-bbfe66ad3a6f.png)

合わせてここでデータの送信先も設定します。

今回はS3にデータを送りたいので「Store the message in a file and store in the cloud (S3)」を選択して、Bucket等の設定を行います。正しくデータが送信されれば「panpan」というファイルができているはずです

## Create a Certificate
![スクリーンショット 2015-10-09 11.36.17.png](https://qiita-image-store.s3.amazonaws.com/0/65478/c5c1265e-be85-0c1e-a009-8852cca73b75.png)
次は証明書や鍵の生成を行います。証明書と秘密鍵と公開鍵が生成されますが、ラズパイの方に設定するのは証明書と秘密鍵になります。これをダウンロードして、scpコマンドでラズパイ側に送ってあげます。

以上でマネジメントコンソールの設定は終わり

# Raspberry Pi側の設定
今回はラズパイにnode.jsの[aws-iot-device-sdk-js](https://github.com/aws/aws-iot-device-sdk-js)をインストールして、それからAWS IoTに接続することにします。

ラズパイにsshアクセスしてasw sdkと必要なモジュールをnpmでインストールします

```
$ git clone https://github.com/aws/aws-iot-device-sdk-js.git
$ cd aws-iot-device-sdk-js
$ npm install mqtt
$ npm install blessed
$ npm install blessed-contrib
$ npm install minimist
```

そしてマネジメントコンソールからダウンロードした証明書と秘密鍵も設置します。
![スクリーンショット 2015-10-09 11.52.46.png](https://qiita-image-store.s3.amazonaws.com/0/65478/d1e97ddc-854e-8a0d-f3c0-f2b290695cdb.png)
cert.pemが証明書。peivkey.pemが秘密鍵です。また、aws-iot-rootCA.crtには[Symantec](https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem)からルート証明書を取得して設置します。

これで準備完了。

# 実行
aws sdkで準備されているサンプルプログラムを動かしてみましょう。
プログラムの内容としてはループを回してカウントアップしていく数値をひたすら送信しつづけるというものです。

そして以下でプログラムを実行します

```
$ nodejs examples/device-example.js -f ~/certs
```

# 実行結果
以下のとおりS3のBuketを見てみると正しくpanpanというファイルができています。
![スクリーンショット 2015-10-09 11.58.20.png](https://qiita-image-store.s3.amazonaws.com/0/65478/cd9b9e98-b6fd-45b6-f6d4-d1b88a144aba.png)

ファイルの中身を確認するといかの通りです。右側の数字がずっとカウントアップして更新されてます。
![スクリーンショット 2015-10-09 11.59.53.png](https://qiita-image-store.s3.amazonaws.com/0/65478/efde904e-3646-5906-4156-7e040288165a.png)

## まとめ
という感じで、AWS IoTを接続してS3にデータを送る一連の流れをデモしてみました。
うん、楽しい！というわけでよいIoTライフを！
【Ruby+Unity】開発に便利!簡易Webサーバを立ち上げ通信内容を確認

# 内容と仕様
スマホアプリの開発してるとHTTP通信のheaderやpost値を確認したくなることがたまにあるのでRubyで簡易Webサーバを立ち上げ、通信の中身を確認する

# 簡易Webサーバ

```rb:server.rb
# -*- coding: utf-8 -*-
IP       = '0.0.0.0'
PORT     = '8080'
DOC      =  './'

require 'webrick'
opts  = {
    :BindAddress    => IP,
    :Port           => PORT,
    :DocumentRoot   => DOC,
}

server = WEBrick::HTTPServer.new(opts)
server.mount_proc("/") { |req, res|
  res.body = req.to_s
}

#コマンドラインでCtrl+Cした場合止めるイベントハンドラ
Signal.trap(:INT){ server.shutdown}

#サーバースタート
server.start
```

```shell-session:サーバ起動
>ruby server.rb 
[2015-10-09 11:36:25] INFO  WEBrick 1.3.1
[2015-10-09 11:36:25] INFO  ruby 2.2.3 (2015-08-18) [x86_64-darwin13]
[2015-10-09 11:36:25] INFO  WEBrick::HTTPServer#start: pid=91225 port=8080
```

# 動作確認
■ ブラウザでHTTP GETの試験
![スクリーンショット 2015-10-09 11.41.10.png](https://qiita-image-store.s3.amazonaws.com/0/65312/1019bcc4-eb59-73f1-38d2-5ac030d6cbed.png)

■ curlでHTTP POSTの試験

```shell-session
>curl -F "name1=value1" -F "name2=value" http://localhost:8080/hoge/hoge
POST /hoge/hoge HTTP/1.1
User-Agent: curl/7.30.0
Host: localhost:8080
Accept: */*
Content-Length: 245
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------af153bdb71ef

------------------------------af153bdb71ef
Content-Disposition: form-data; name="name1"

value1
------------------------------af153bdb71ef
Content-Disposition: form-data; name="name2"

value
------------------------------af153bdb71ef--
```

■ Unityから接続試験
![スクリーンショット 2015-10-09 11.57.21.png](https://qiita-image-store.s3.amazonaws.com/0/65312/ef9b8ffb-d462-f81c-bcb8-520d1473b67f.png)

```csharp:UnityCode
		// Web
		Debug.LogWarning("-----------");
		using(WWW www = new WWW("http://127.0.0.1:8080/unity/from_unity?v1=1&v2=2")){
			yield return www;
			Debug.LogWarning(www.text);
		}
		Debug.LogWarning("-----------");
```

# 特徴
どんなURLでも応答を返す
peco で eb ssh インタラクティブに環境を選択する

# これはなに

Elastic Beanstalk CLI を利用していると `eb ssh your-env-name` コマンドを使って、
任意のインスタンスに SSH 接続することができます。

けれど毎回環境名を記述するのは面倒ですよね。

そこで peco を使ってインタラクティブに環境を選択デキるようにしちゃいましょう！

# 事前準備

- [peco](https://github.com/peco/peco) のインストール
- [EB CLI](http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb-cli3-install.html) のインストール


# 実装

`.zshrc` や `.bashrc` にコマンドを追加します。

```bash:.zshrc
function ebssh {
    F=$(eb list | peco)
    if [ $? -eq 0 -a "${F}" != "" ]
    then
      echo "SSH to ${F}..."
      eval "eb ssh ${F}"
    fi
}
```

読み込みしなおして...

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

あとはプロジェクトディレクトリでコマンド打って


```bash
$ ebssh
```

peco から環境を選択すると

```bash
QUERY>
xxx-dev
xxx-prd
xxx-stg
xxx-stg-20151001
xxx-stg-20151004
```

接続できます！便利！

```bash
SSH to xxx-prd-20151004...
INFO: Attempting to open port 22.
INFO: SSH port 22 open.
Last login: Fri Oct  9 02:46:41 2015 from xxxxx
 _____ _           _   _      ____                       _        _ _
| ____| | __ _ ___| |_(_) ___| __ )  ___  __ _ _ __  ___| |_ __ _| | | __
|  _| | |/ _` / __| __| |/ __|  _ \ / _ \/ _` | '_ \/ __| __/ _` | | |/ /
| |___| | (_| \__ \ |_| | (__| |_) |  __/ (_| | | | \__ \ || (_| | |   <
|_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
                                       Amazon Linux AMI

This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH 
WILL BE LOST if the instance is replaced by auto-scaling. For more information 
on customizing your Elastic Beanstalk environment, see our documentation here: 
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
[ec2-user@ip-xxxxx ~]$ 
```
MacPortsの掃除

（Node.jsはnvmにしたし、Rubyはrbenvにしたし、TeXはTeX Liveにしたし、最近はGitでリポジトリごとcloneして使うことも増えたし、ということでMacPortsで使ってないパッケージも増えてきた感があるので、）ちょっとパッケージの掃除しようかなということでやってみた。

```bash:バージョンの確認
$ port version
Version: 2.3.4
```

```bash:本体のアップグレード
sudo port selfupdate
```

```bash:インストールされているパッケージのアップグレード
sudo port upgrade installed
```

```bash:非アクティブなパッケージをアンインストール
sudo port uninstall inactive
```

```bash:中間ファイルの削除
sudo port clean all
```
- 久々にMacPortsをアップグレードしたらコマンドのオプションの指定方法が変わったっぽい？（helpやmanと違うんですけどー。）
- `/opt/`のファイルサイズは11 GBから8.2 GBになった。（なんか多くない？）
HomeKitで出来ること


HomeKit対応デバイスが出来ること

- ボタン電池で動く
- iOSデバイスに通知出来る
- iOSデバイスからコントロール出来る

>
- 「シーン」でデバイスをシーケンシャル制御（IFTTTみたいに）
- 「サービスグループ」でデバイスをひとまとめに出来る（電球など）
- 外出先から制御 ※Apple TV必須


そのほか

- iCloudアカウントがあるユーザを招待出来る
- Apple TVをHubに出来る（外出先からの利用では必須）
※iCloudにログインしなおすとHubになる

HomeKitデバイスに対応した専用アプリで各種設定をする。
（アプリインストール直後自動的にAppleTVをHubになるわけではないので、AppleTVでiCloudにログインし直す）

注意
しかしまだ外出先からの利用は出来ていない（AppleTV経由のelgato eveの室温取得出来ないorz）

update 2015/11/5
Apple TV 4gen買ったら出来た。
※同期の立ち上がりにしばらく時間がかかります。
c++ builder XE4, 10.2 Tokyo > SenderからNameを取得 > TComponent *work = (TComponent *)Sender; / work->Name

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/26)
```

`TObject *Sender`を引数にとり、そのNameプロパティを取得したい。

参考 [Q0021：イベントを発生させたのは誰？](http://www.watercolor-city.net/ct_delphi/delphi_quiz/quiz_original/quiz_0021_eventhandling.htm)


```
void __fastcall TForm1::someFunc(TObject *Sender)
{
	TComponent *work = (TComponent *)Sender;
	String name = work->Name;
}
```
3DTouchを検出してみよう

#内容
3DTouchの生データを取得して、利用してみよう。

#用意するもの
* iPhone6s/iPhone6s plusのいずれか
* Xcode7.0.1
* 実機動作環境

#3DTouchとは
`あなたがディスプレイに加えた圧力の大きさを、iPhoneが初めて感知するようになったのです。`
- apple
要するに、画面をどれくらい強く押しているか分かるようになりました。

#押している強さを取得してみよう
画面を押している強さは、UITouchのプロパティとして追加されました。

![スクリーンショット 0027-10-09 午前11.13.25.png](https://qiita-image-store.s3.amazonaws.com/0/24979/c2afc622-0381-4b61-c99a-7a4632cedc7b.png)

`force`と、`maximumPossibleForce`です。

forceは画面を押している`強さ`
そして、maximumPossibleForceは画面を押した際に感知できる`最大値`です。

まずは、UITouchはtouchesMovedで取得するのが良いでしょう。

```swift:ViewController.swift

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let touch = touches.first
        let force = (touch?.force)!/(touch?.maximumPossibleForce)!
        print(force)
    }
```
touchesMovedは複数のUITouchを引数としています。
これは画面を複数の指でタッチした際に感知するためです。
今回は１つの指だけで良いので、touchesセットから最初のtouchを抜き出します。

次に`(touch?.force)!/(touch?.maximumPossibleForce)!`という計算式が出てきました。
これは、`強さ/最大値`という計算式になっておりタッチの強さを0.0~1.0の間で扱えるように変換しています。
こうすることで、ディスプレイの品質や劣化によってmaximumPossibleForceが変化した場合も全てのデバイスで同様にタッチの強さを扱うことが出来ます。

上記のコードを実行して、iPhoneの画面を強く押してみましょう。

```
0.418749993760139
0.490624992689118
0.568749991524965
0.649999990314245
0.737499989010394
0.83124998761341
0.921874986262992
1.0
1.0
```

このように、強くおした時は1.0その間は0.xを指します。
離した際は必ず0.0になるわけではないので、その処理を使う場合はtouchesEndedを通すのが良いです。
BigQuery で WHEN CASE 文が書けない時の対処法

# 問題

次のクエリは使えない。

```sql
SELECT
 CASE fruit
   WHEN 'Apple' THEN 'is apple'
   WHEN 'Orange' THEN 'is orange'
   ELSE 'none'
END AS fruit_kind;
```

```
Query Failed
Error: searched case expression not supported at: 
```

（サポートされていません）

# 解決

「WHEN 1行ごとに CASEの対象を、重複して書く」方法ならいけた。

```sql
SELECT
 CASE
   WHEN fruit = 'Apple' THEN 'is apple'
   WHEN fruit = 'Orange' THEN 'is orange'
   ELSE 'none'
```

結果：

```
Row	fruit_kind	 
1	is apple	 
```

# 補足

- 2015年10月9日現在の情報。



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
1ページに複数のページングを組み込むには

1ページに複数モデルのページングを独立して組み込みたい。
それぞれのURLを変更できればいいのだが方法が見つからず、
やむを得ず以下のように無理やり実装した。

```rb:samples_controller.rb
class SamplesController < ApplicationController
  respond_to :html, :js

  def index
    @type = params[:type]
    if !@type || @type == "hoge"
      @hoges = Hoge.page(params[:hoge])
    end
    if !@type || @type == "fuga"
      @fugas = Fuga.page(params[:fuga])
    end
  end
end
```

```js+erb:index.js.erb
<% if !@type || @type == "hoge" %>
  $("#hoge").html("<%= escape_javascript(render :partial => 'hoges/index') %>")
<% end%>
<% if !@type || @type == "fuga" %>
  $("#fuga").html("<%= escape_javascript(render :partial => 'fugas/index') %>")
<% end %>
```

```html+erb:samples/index.html.erb
<%= render 'hoges/index' %>

<%= render 'fugas/index' %>
```

```html+erb:hoges/_index.html.erb
<div id="hoge">
  <%= paginate @hoges, remote: true,
      param_name: "hoge", params: { type: "hoge" } %>
  <div class="table-responsive">
    <table class="table table-striped table-bordered table-hover">
      <tbody>
        <%= content_tag_for(:tr, @hoges) do |hoge| %>
          <td><%= hoge.id %></td>
          <td><%= hoge.name %></td>
        <% end %>
      </tbody>
    </table>
  </div>
</div>
```

```html+erb:fugas/_index.html.erb
<div id="fuga">
  <%= paginate @fugas, remote: true,
      param_name: "fuga", params: { type: "fuga" } %>
  <div class="table-responsive">
    <table class="table table-striped table-bordered table-hover">
      <tbody>
        <%= content_tag_for(:tr, @fugas) do |fuga| %>
          <td><%= fuga.id %></td>
          <td><%= fuga.name %></td>
        <% end %>
      </tbody>
    </table>
  </div>
</div>
```
AndroidStudioでdumpしたhprofがMATで開けないとき


メモリの解析をしようと、AndroidStudioでdumpしたhprofをeclipseのMemory Analyserで開こうとしたところ、下記のようなエラーが出た。

> Parsing heap dump from 'dump.hprof' has encountered a problem.
> Error opening heap dump 'dump.hprof'. Check the error log for further details.

以前は問題なかったが、どうも変換しないといけないらしい。
sdkディレクトリに変換ツールが入っている。

```
$ {path_to_sdk}/platform-tools/hprof-conv dump.hprof dump_conv.hprof
```

これでdump_conv.hprofのほうをMATで読み込ませると、以前通りに解析ができる。
第12回elasticsearch勉強会の個人的な議事メモ


## 概要

- 勉強会の情報は[こちら](https://elasticsearch.doorkeeper.jp/events/31846)
- すでにいろんな人がブログで概要書いています。
	- [第12回elasticsearch勉強会に参加してきました](http://dev.classmethod.jp/study_meeting/elasticsearch-study-12/)
	- [第12回 Elasticsearch 勉強会で Makuake の事例を発表してきた](http://kakakakakku.hatenablog.com/entry/2015/10/09/003705)
- この記事より、上のブログ読んだほうがちゃんとまとまっています…。

## Elasticsearch 2.0.0 の紹介

#### Jun Ohtani
- lucene-gosen コミッター
- 日本語版の翻訳
- OSS: Elasticsearch, Logstash, Kibana, Beats
- Commercial プラグイン
	- Marvel：クラスタを監視 
	- Sheild：セキュリティ製品、HTTPの制限
	- Watcher：Notification用の製品

### ざっくり
- Lucent 5ベース
- 2500以上のPull Request
	- 850 以上が新規
- 496コミッター

### Simplifiation

#### 廃止された機能
- River
	- Logstash などの利用を。プロセスを外に出そうという思想
- Facet
	- aggregation
- _shutdown API
	- プラットホームの機構を
- Thrift / Memcached protocol
- Bulk UDP
	- 通常のbulk APIか、LogstashにUDPで経由で

#### プラグインになった機能
- Delete by query
- murmur3
- size
- multicast discovery
	- ./bin/plugin install discovery-multicast
	- クラスタ組むのが簡単なものも、便利なような便利じゃないような

#### プラグインのインストール

同梱プラグインのインストールが簡易化。クロモジとか。

```
$ bin/plugin install [plugin-name]
$ bin/plugin install analysis-icu
```

#### Mappingの変更
- Conflicting field mappings
- short nameでのフィールド指定の禁止
- Type name prefixの廃止
- フィールド名にドットが使用不可
- ドットで始まるタイプ名も禁止
- 255文字以上のタイプ名を禁止
- タイプの削除を禁止
- index_analyzerの廃止

結構変わってるので悩みそう

#### QueryDSL

#### Security
- デフォルトの変更
	- unicast
		- multicastはプラグインに
	- localhostにバインド
		- IPv4 / IPv6
		- よりセキュアに
	- transport.tcp.portの最初の5ポートがデフォルトに
		- これまで通り手元で起動した場合に簡単にクラスタ構成可能
- Security Managerの導入
	- Elasticsearchのプロセス起動にJavaのSecurityManagerが起動

#### データ
- index操作をより冗長に
	- ファイルに吐かれるのがより柔軟に
- 複数data.pathによるストライピング
	- パスごとにそれぞれのシャードを配置

#### その他
- Cluster stateの差分更新
- doc values がデフォルト
	- 2.0でインデックスを作成した場合
	- not analyzedなフィールド
	- メモリの負担が減る

#### Pipelien Aggregations
- Derivatives
- Moving average
- Holt

#### Index Compression
- インデックスサイズが10〜30％小さく
- インデキシングやマージの処理に影響あり
- 環境に合わせたデータ圧縮を選択
- 時系列インデックスに最適化したもの

### 2.0.0へのUpgrade
- ローリングアップグレードは不可
	- Clusterの停止が必要
	- 先に2.0.0のクラスタを先に作ったほうがいい
- ダウングレードは不可
- バックアップを取りましょう
	- まずはテスト
- 移行が結構大変（作りなおした方がいいかも）なのでご注意をとのこと
	- 本番環境の人は大変そう

#### Migration プラグイン
- 1.X 系のプラグインとしてインストールして問題点チェック
- あくまで移行できるかのチェックツール
- 便利そう。

#### Elastic ユーザカンファレンス
- 詳細は[こちら](https://www.elastic.co/elasticon/tour/2015/tokyo)
	- よさそう
- 12/16(水)
- ElasticのCTO、Kibanaのエンジニアとかが来ます。

#### リファレンス
- Discussは[こちら](https://discuss.elastic.co/)
	- 日本語の質問もできる

#### 質問
- Solrからの移行
	- xmlが嫌だ
	- 内部実装があんまりいけてないらしい


## Elasticsearch を使った位置情報検索について

#### 内藤雄介 @Yu_7110
- ホリデー株式会社（クックパッド株式会社より出向） 
- 2014年度新卒入社
- Holidayの開発・運営

#### 今日話すこと
- 基本編
	- 中心点からの距離で絞り込む
	- 距離順に並べる
- ちょっとだけ応用編
	- より柔軟な応用編
		- 全文検索と組み合わせる

#### 中心点からの距離で絞り込む

#### 距離順に並べる
- Geo Distance filter

#### 複数拠点
- より柔軟な位置情報検索

## Elasticsearch at Makuake

#### 株式会社サイバーエージェント・クラウドファンディング 吉田慶章 @kakakakakku
- elasticsearch-hands-on
- Makuake

#### スライドはアップされている
GoogleDriveにJavaプログラムでファイルアップロードする

# まだTBD

## 









---

# 以下は参考URLリスト

とりあえず参考になりそうなURLを集めた。

[A-AUTO 50 開発者ブログ：Drive REST APIを使ってJavaでGoogle Driveにファイルをアップロードする方法](http://a-auto50.blogspot.jp/2015/06/drive-rest-apijavagoogle-drive.html)

[GoogleDevelopers公式 Drive REST API](https://developers.google.com/drive/web/quickstart/java)
[GoogleDevelopers公式 Sheets API](https://developers.google.com/google-apps/spreadsheets/)

[Google APIs Client Library for JavaからGoogle Drive APIを使用する](http://qiita.com/kubotaku1119/items/9df79c568e100c0c7623)

[Google Drive SDK 使ってみると便利](http://qiita.com/pollseed/items/44e99481500c4be0e912)

[Google Drive APIによるファイル管理 (1/5)](http://libro.tuyano.com/index3?id=1166003)

[Google API 用のアクセストークンをサービスアカウントで取得 - Google API Client Library for Java](http://fits.hatenablog.com/entry/2015/06/08/223006)

[Google Sheets API (Java)を使用してGoogle スプレッドシートを更新する](http://qiita.com/rubytomato@github/items/11c401d581492d3c0361)
WPF DataGridでダブルクリックしたセルを得る

DataGridでダブルクリックされたセルをお手軽に取得する方法。

MouseDoubleClickイベントでマウスカーソル下のFrameworkElementを得れば対象のセルまで辿り着けます。

```xml:xaml
<DataGrid ItemsSource="{Binding dataSource}" MouseDoubleClick="DataGrid_MouseDoubleClick">
（略）
</DataGrid>
```

```C#:コードビハインド
private void DataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    var elem = e.MouseDevice.DirectlyOver as FrameworkElement;
    if (elem != null)
    {
        DataGridCell cell = elem.Parent as DataGridCell;
      　if (cell == null)
        {
             // ParentでDataGridCellが拾えなかった時はTemplatedParentを参照
             // （Borderをダブルクリックした時）
             cell = elem.TemplatedParent as DataGridCell;
        }
        if (cell != null)
        {
            // ここでcellの内容を処理
            // （cell.DataContextにバインドされたものが入っているかと思います）
        }
    }
}
```
【無料！！】Googleスライドでプレゼン資料をつくろう！

「今度プレゼンしてほしいから、スライド用意しといて！」って言われたけど、PowerPointもKeynoteも持ってないよというあなたにぴったりなのがコレ！

そう、**Googleスライド**

しかし、使ってみると
「あれ、文字の配置ってどうやって変えるの？」
「画像の挿れ方わかんない…」
なんてことになりがち

基本的な操作方法をぜひマスターしましょう！

#Googleスライドにアクセスしよう！
ーGoogleスライド
https://www.google.com/intl/ja_jp/slides/about/
ーログイン
※アカウントを持っていない場合
ここからつくりましょう
https://accounts.google.com/signup
こんな画面が開ければOK！
![無題のプレゼンテーション - Google スライド-2.png](https://qiita-image-store.s3.amazonaws.com/0/93907/0a18eaa9-e0fb-7c04-b720-a7ff073b03e4.png)

#絶対に覚えておきたい**「5つ」**のこと
スライド作成を行ううえで次に紹介する5つのことを覚えていれば、大概のスライドは作成することができます。
##テキスト
メニューバーから以下のアイコンをクリックすることで、文字を入力するためのテキストボックスを配置することができます。

![無題のプレゼンテーション - Google スライド-11.png](https://qiita-image-store.s3.amazonaws.com/0/93907/b75e8a6f-2c9c-20ba-caa7-c91108b53491.png)

テキストボックスを入力状態にすると、メニューバーに以下のアイコンが表示されます。ここから文字の編集を行うことができます。
![mozi.png](https://qiita-image-store.s3.amazonaws.com/0/93907/06f2144f-dd3e-b43e-1419-b4802a8705d2.png)

①文字のフォント
②文字のサイズ
③太字・斜体・下線
④文字の色

文字の配置の変更も行うことができます。
![haiti.png](https://qiita-image-store.s3.amazonaws.com/0/93907/bb71da2d-c154-dcf9-7e34-123b0d88c9b4.png)

①左揃え
②中央揃え（水平）
③右揃え
④上揃え
⑤中央揃え（垂直）
⑥下揃え

同様にテキストボックス本体も編集することができます。
![waku-1.png](https://qiita-image-store.s3.amazonaws.com/0/93907/94e75506-45c1-ed41-971e-c3f55a99608e.png)

①背景の塗りつぶし
②枠線線の色
③枠線の太さ
④枠線の種類

##画像
画像の挿入方法を大きく２つです。
①スライド上に画像データを直接ドラッグ&ドロップする
②上部メニューより、「挿入」→「画像」→「アップロードする画像を選択」

##図形
メニューバーの以下のアイコンから、選択することができます。
![無題のプレゼンテーション - Google スライド-4.png](https://qiita-image-store.s3.amazonaws.com/0/93907/0a21c89e-2315-f877-51d4-ab036ffb8ea8.png)

吹き出しなど様々な図形を挿入することができます。
![zukei.png](https://qiita-image-store.s3.amazonaws.com/0/93907/bc405981-f2f8-5aef-a5f9-2853bdd9992e.png)


##重ね順
【before】
![かさね-1.png](https://qiita-image-store.s3.amazonaws.com/0/93907/bd44d66b-33cb-2d32-d184-161003c5e29e.png)
吹き出しが「こんにちは！」というテキストに重なってしまいました…
こういったときは、**重ねる順番を入れ替える**ことで解決します。

■手順
1. テキストボックス（こんにちは！）を選択した状態で右クリック
2. 「順序」→「前面へ」を選択
　

【after】
![無題のプレゼンテーション - Google スライド-5.png](https://qiita-image-store.s3.amazonaws.com/0/93907/5ff37482-6712-7391-c9c0-61a614032235.png)


##グループ化
![無題のプレゼンテーション - Google スライド-10.png](https://qiita-image-store.s3.amazonaws.com/0/93907/90c66d05-45b1-a3a6-a577-025c528141bb.png)

赤い長方形と犬の画像を使って上のようなオブジェクトをつくったとき、そのまま移動させようとするとレイアウトがくずれてしまいます。
そんなときは**グループ化**を使って一つのオブジェクトとしてまとめておくのが便利！

■手順
1. ２つのオブジェクトをドラッグでまとめて選択
2. 1.の状態で右クリック
3. 「グループ化」を選択

#最後に
以上がGoogleスライドを使用する上で覚えておきたい基本的な操作方法です。
まずは手を動かして様々なスライドを作ってみましょう！
RのUTF-8で漢字などが入っている場合read.tableができない

[この記事](http://qiita.com/rita_cano_bika/items/2185a66f89123538ad58)を書くことになった原因。
そもそもなんでread.tableが使えないの、ということに対する記事。

CSVファイルがUTF-8のため起こった問題。
read.tableのエンコード指定にUTF-8を行っているのに、区切り文字が認識されずエラーがでる。

前提条件：「C:\hoge\piyo.csv」のファイルを読み込むとする。エンコードはUTF-8。使用機はWindows 7 32bit。

```text:piyo.csv
test1,test2,test3
1,普通,2
3,簡単,4
```

```R:エラー内容
> d <- read.table("C:\\hoge\\piyo.csv", sep=",", skip=0, header=T, stringsAsFactors=F, encoding="UTF-8")
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  line 1 did not have 3 elements
> 
```

エンコード指定しているのにUTF-8で読みこめてない・・？
![ユニコード.png](https://qiita-image-store.s3.amazonaws.com/0/93950/0570f37c-6467-629c-7afa-48de9909f517.png)
たぶんこんな感じで読みこんでいるイメージ

UTF-8で読み込めていないので、どうやら区切り文字がくっついている模様。
これでいろいろ行ってみましたが解決できなかったので、read.tableしない選択を選びました。
~~もし原因分かる方いたらよろしくお願いします。~~

* * *
追記：さっくり解決してしまった。コメントありがとうございます。

```R:
 d <- read.table("C:\\hoge\\piyo.csv", sep=",", skip=0, header=T, stringsAsFactors=F, encoding="UTF-8")
```

この`encoding="UTF-8"`の部分が間違っていたようで、`fileEncoding="UTF-8"`とするだけ！
encodingは読み込んだ後の文字コードの指定らしいです。なるほど・・。

```R:
 d <- read.table("C:\\hoge\\piyo.csv", sep=",", skip=0, header=T, stringsAsFactors=F, fileEncoding="UTF-8")
```

※fileEncodingの「E」は大文字なので注意！
* * *
ResqueのSetup


1. Redisのインストール

  `brew install redis`

2. Redisの起動

  `redis-server /usr/local/etc/redis.conf`

3. Resqueのインストール

    2015/8/16現在、ver.1.52.2 がインストールされる。
  
  ```Gemfile
  gem 'resque'
  ```
  プレリリースの2.0.0は以下でインストールできる。
  
  ```Gemfile
  gem 'resque', '~> 2.0.0.pre.1', github: 'resque/resque'
  ```

4. インストール実行 

  `bundle install`

5. workerの起動

  1系の場合、workerはrake taskとして起動する。
  
  ```lib/tasks/resque.rake
  require 'resque/tasks'
  task 'resque:work' => :environment
  ```
  
  workerの起動。
  
  ```
  TERM_CHILD=1 QUEUE=* bundle exec rake resque:work
  ```

  TERM_CHILD=1を指定しないとWarningが出る。
  
  ※`resque.rake`の2行目を書かずに、rakeコマンド実行時に指定することもできる。
  
  ```
  TERM_CHILD=1 QUEUE=* bundle exec rake environment resque:work
  ```
  
  2系の場合、コマンドで実行できる。
  
  ```
  bundle exec resque work
  ```
Android Studio on Mac でオプションキー ⌥ のキーバインディングが効かないときの対処方法

# 環境
Mac: OS X Yosemite 10.10.5
Android Studio: 1.4 (141.2288178)
JRE: 1.7.0_79-b15
JVM: Java HotSpot(TM) 64-bit Server VM by Oracle Cooperation

# 現象
自分は Android Studio のキーバインディングを Emacs 風にしているのだが、時々、`⌥ + (何かのキー)` を入力したときに、ルート記号のような特殊文字が入力されるだけでバインドされたコマンドが実行できないことがある（キーバインドは正しく設定されている）。

たとえば、 `⌥ + V` で PageUp をしたいのに、`√` が入力されたり、 `⌥ + ⇧ + 5` (つまり `Alt + %`) で置換をしたいのに、 `ﬁ` が入力される。これは Emacs キーバインディングに慣れた自分としてはかなりストレスが溜まる。しかも、別のマシンでは再現しないこともあるので何らかの解決方法がありそう。

# 原因
そもそも、オプションキーは Mac 上で特殊記号の入力に使われており、そちらが優先されているものと思われる。

![](https://upload.wikimedia.org/wikipedia/commons/a/aa/Special-Characters-Mac.png)

（[Option key - Wikipedia, the free encyclopedia](https://en.wikipedia.org/wiki/Option_key)より）

以前、[IntelliJ プラグイン勉強会](http://connpass.com/event/18057/) でサムライズムの方にこの問題について聞いたところ、JRE のバージョン依存であるという話を伺った（Java のバグ？）。

# 解決方法
結論から言うと、Java 8 をインストールして Android Studio が Java 8 を使うようにすれば解決する。

以下、具体的な手順。
1. Java 8 を Oracle のページからダウンロードしてインストールする
2. Android Studio を閉じる
3. `/Applications/Android Studio.app/Contents/Info.plist` を確認する
4. もし、 `JVMVersion` のところに、以下のように `1.6*,` という記述があったら、その部分を削除して `1.6*,1.7+` ⇨ `1.7+` のようにする

```lang:xml
      <key>JVMVersion</key>
      <string>1.6*,1.7+</string>`
```
続いて、
5. Android Studio を起動する
6. メニューの `Android Studio` > `About Android Studio` を開き、使われている JRE のバージョンが 1.8 になっていることを確認する
![androidstudio.png](https://qiita-image-store.s3.amazonaws.com/0/36306/9e448ec4-1454-e68e-66c6-09b896278757.png)

# 補足
具体的にどのバージョンの JRE で上記の現象が直っている（あるいは再現する）のかは分かっていない。とりあえず最新版の Java 8 で治っているようなので、時間あったら調べます。
Debianでrbenvを使ってRailsの環境を作る。（島根県CMSの環境構築）

島根県CMSをデプロイできる環境を構築するために以下のような設定を行う。



```rb:Ruby
Ruby 2.1.0
JRuby 1.7.5
# Rubyの環境はrbenvを使用する。
```

```:DB
PostgreSQL 9.4.4
```

```:サーバ環境
vagrant + virtualbox
Debian8.0
```

```:その他
Java 7
```

## VagrantでDebianをインストール

```bash
$ cd ~
$ mkdir vagrant
$ cd vagrant
$ vagrant box add debian80 https://github.com/holms/vagrant-jessie-box/releases/download/Jessie-v0.1/Debian-jessie-amd64-netboot.box
...
# ダウンロードで時間がかかります。
...
$ vagrant init debian80
```

ダウンロードが終わり初期化(init)が終了したら`Vagrant`ファイルが作成されてることを確認してください。  
 Vagrantファイルを下記のように編集してします。

```bash:Vagrant
Vagrant.configure(2) do |config|
  config.vm.box = "debian80"
  # ローカルネットワーク内で接続するために下記の一行を追加
  config.vm.network "public_network"
end
```

編集が終わったらサーバを起動してsshで接続します。

```bash
$ vagrant up
$ vagrant ssh
```

vagrant の使い方については下記のページを参照ください。

[Vagrantの初期設定、コマンド、スナップショットの設定]
(http://qiita.com/yoshiokaCB/items/b0f6a2784670482c6c7e)

# debianの環境設定

※コマンドはrootに変身してから実行しています。ご注意ください。

```bash
$ sudo su
```

```bash
$ apt-get update
$ apt-get install imagemagick postgresql python libpq-dev libmagickwand-dev g++ build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison
```

## rbenvの設定

```bash
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
```

## ruby-buildの設定

```bash
$ mkdir -p ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git
```

## JRuby用にJavaのインストール
```bash
$ apt-get install openjdk-7-jdk
```


## Ruby, JRubyのインストール

```bash
$ rbenv install 2.1.0
$ rbenv install jruby-1.7.5
```
csharp > 拡張メソッド > Signal.Next()

参考: 即効入門 C#プログラミング すぐに現場で使える知識 by 中 博俊さんら
8.4 拡張メソッドの利用

拡張メソッドでSignal に対してNext()メソッドを追加した例を本から引用。

http://ideone.com/lfunQz

```csharp
using System;

enum Signal {
	Red, Green, Yellow
}

static class SignalExtentions
{
	public static Signal Next(this Signal s)
	{
		if (s == Signal.Yellow) return Signal.Red;
		return (Signal)s + 1;
	}
}

public class Test
{
	public static void Main()
	{
		var s = Signal.Green;
		Console.WriteLine(s.Next()); // Yellow
	}
}
```

```txt:結果
Success	time: 0.05 memory: 24112 signal:0
Yellow
```

拡張メソッドの利点と欠点の把握がきちんとできていない。

拡張メソッドでなくとも `getNextSignal(Signal *s);`のような処理でも実装できるのではないかと思っている。

例えば、Next()という名前の拡張メソッドで定義した時と、getNextSignal()という名前の通常のメソッドで定義した時、定義部分の検索は後者の方がしやすくソースリーディング時に楽な気がする。

<hr>
(追記 2015/10/09)
ozwk さんのコメントにあるように、パイプライン処理を書くときには拡張メソッドを使ったほうが、確かに読みやすいように思った。
技術英語 > It appears you are correct. / It seems / It looks > use seem to talk about more objective facts

@ Star Trek Voyager > FACES

> It appears you are correct.

It appears と It seems の違いについては以下のitalkiのページで議論されている (<font color=red>Facebookのウィンドウが開くので注意</font>）
http://www.italki.com/question/68513

上記の回答にあるBBCのページには
http://www.bbc.co.uk/worldservice/learningenglish/grammar/learnit/learnitv353.shtml

> Look, seem and appear are all copular verbs and can be used in a similar way to indicate the impression you get from something or somebody.

BBCのページの続きには以下の項目などがある

- look / seem - as if / like
- seem / appear to + infinitive
- appear / seem - differences in meaning
- non-copular use of appear and look

上記のうち
- appear / seem - differences in meaning
にて
>You can use seem to talk about more objective facts or impressions and about more subjective and emotional impressions. We do not usually use appear to refer to emotions and subjective impressions. 

感情や主観的なものを表す場合にseemを使って、そうでない場合はappearを使う場合もあるようだ。


copularというのは何かというと
http://ejje.weblio.jp/content/copular
> a copular verb
> 連結詞的動詞
autosshとsshポートフォワードでルータ内のマシンにアクセスする

# 閉じたネットワークのAndroidにsshでアクセスしたい

仕事はAndroidを使って[フォトブース](http://selfiew.me)を作ってます。
物理的に(600kmも)遠く離れたところにあるフォトブースをなんとか管理しなければならないのです。
困ったことにフォトブースで使っているモバイルルータは外部からアクセスができません。
モバイルルータなので、固定IPなんてものもありません。

![network1.png](https://qiita-image-store.s3.amazonaws.com/0/39529/5ec4cf47-736e-b324-509d-e8198d5c9751.png)

# ubuntuからサーバーにautosshでポートフォワードする

サーバ経由でsshをできるようにするには、sshコマンドで次のようにできます。

```
(ubuntu上で実行)
$ ssh www.server.com -R 13334:192.168.80.100:3334
```

でもsshコマンドだとネットワークが切れた時にアクセスできなくなるので、autosshコマンドを使います。

```
(ubuntu上で実行)
$ autossh photobooth@www.server.com -M 0 -C -N -f -R 13334:192.168.80.100:3334
```

これで一度サーバーにログインして、13334ポートにssh接続すれば、ルータ内にあるandroidにアクセスできるわけです。

```
(サーバー上で実行)
$ ssh -p 13334 admin@localhost
```

![network2.png](https://qiita-image-store.s3.amazonaws.com/0/39529/010f3ef2-97a4-f9bc-e1e0-af90b8789e37.png)

いや、そもそもターゲット(今回の例ではAndroid)でautosshが動けば、それでOKなのですが、なんせAndroidなので、そんなコマンドは使えません。

# もう一つsshポートフォワード

上記までだと、一度サーバにログインしなければならないので面倒です。
そこでlocalからserverでもsshポートフォワードをすることにします。
サーバー上では同じ13334ポートを指定しているので、localからのsshコマンドはそのままandroidまで転送されます。

```
(local上で実行)
$ ssh -L 3334:localhost:13334 -f -N maintenance@www.server.com
```
![network3.png](https://qiita-image-store.s3.amazonaws.com/0/39529/e10e8aa1-25da-9a8d-b16f-413f758f4da4.png)

最後はlocal上でsshをすればOKです。
androidに直接ログインしているように扱えます。

```
(local上で実行)
$ ssh -p 3334 admin@localhost
```

もちろんscpだって同じように使えます。

```
(local上で実行)
$ scp -P 3334 targetFile admin@localhost:/sdcard/
```

# 参考

- [SSHポートフォワード（トンネリング）を使って、遠隔地からLAN内のコンピュータにログインする](http://www.clear-code.com/blog/2014/9/12.html)
- [sshポートフォワーディング](http://qiita.com/mechamogera/items/b1bb9130273deb9426f5)

# ForwardAgentを使う

SSHコマンドでForwardAgentという機能を使うと、今回説明したような多段接続の際に便利です。
ForwardAgentとは、簡単にいえば、ssh-agentがインストールされて動いていれば、一度接続したことのあるマシンの場合に再度キーを指定しないで接続してくれます。
しかも多段接続の場合でも動いてくれます。

例えば、一度ログインしたことのあるマシンから、以下のようにすれば入れるはず。

```
$ ssh -A maintenance@www.server.com
```

多段接続の場合は -tオプションも併用してできます。

```
$ ssh -A maintenance@www.server.com -t ssh -p 13334 admin@localhost
```

ForwardAgentについては[ssh-agentの基本](http://qiita.com/yudoufu/items/82f752807893c63f06db)を参照してください。
Pentaho BI Server環境構築

・Pentaho BI Serverのインストール
- 前準備

適当にUbuntuのサーバを立てる。
Javaの最新版(1.8)を入れると動かないので、1.7をダウンロード、インストール。
sudo apt-get install openjdk-7-jre
sudo apt-get install openjdk-7-jdk

/etc/environmentに下記を追記。
JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/"
下記は必要か分からないけど、試行錯誤しているときに追加した。
PENTAHO_JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/"
_PENTAHO_JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/"

- Pentaho

最新版のバイナリを落としてきてダウンロード。下記のURLの下の方にある、Downloadの中の Business Analytics Platformの Download をクリック。
http://community.pentaho.com/

その後、Ubuntuのサーバ内の適当なフォルダに配置して、Unzip。
解凍したフォルダの、 start-pentaho.sh を実行。
あとは、http://localhost:8080/にアクセスするとログイン出来るようになる。ただし、最初のアクセスには時間がかかるみたいで、URL入力後、数分待つ必要あり。

- Pentaho BI Serverのポート変更

BI Server内の tomcatの設定ファイル、server.xml(*1)を書き換える。
<Connector>タグのportの値を8081等に変更。同一サーバに複数立てている場合は、redeirectPortも8444等に変更必要。

*1) <Pentaho解凍フォルダ>/biserver-ce/tomcat/conf/server.xml







----
以下、失敗版インストール。Dockerのイメージを使って設定をさぼろうとしたがあえなく撃沈。。
・Pentaho BI Serverのインストール、失敗版。。

Dockerのイメージが落ちていたので、そちらを利用。
下記のページを参照。
http://forums.pentaho.com/showthread.php?165218-Pentaho-Rapid-Deployment-with-Docker

Dockerの環境を別途、準備した後、上記のページに従って、下記のコマンドを実行。
docker run -p 8080:8080 -d wmarinho/pentaho
Docker imageをダウンロードして、バックグラウンドで実行してくれる。

別のマシン等から、下記のURLにアクセス。
http://\<IP Address\>:8080
admin/passwordでログイン

![image](https://qiita-image-store.s3.amazonaws.com/0/90251/eb86871e-5073-3b08-b5bc-dcf42b6a13ab.png)

MarketPlaceが出ていない。。

・MarketPlaceのプラグインをインストール
下記のページの一番下からMarketPlaceプラグインをダウンロード。
http://community.pentaho.com/marketplace/plugins/

FTP等でDockerを動かしているホストにファイルをコピー。その後、下記のコマンドを実行。ホスト側のhomeフォルダをコンテナのmntフォルダにマウント。
sudo docker run -p 8080:8080 -d -v /home:/mnt wmarinho/pentaho

その後、プラグインのファイルをコピー。
cp /mnt/marketplace-5.4.0.1-130.zip /opt/pentaho/biserver-ce/pentaho-solutions/system/

zipファイルを解凍。
unzip ./marketplace-5.4.0.1-130.zip

BI Serverを再起動。
/opt/pentaho/biserver-ce/stop-pentaho.sh
/opt/pentaho/biserver-ce/start-pentaho.sh

再度ログイン。やった、Marketplaceが出現。でもMarketplaceの先の画面が真っ白。。うーむ。

![image](https://qiita-image-store.s3.amazonaws.com/0/90251/43f13b87-00f3-4c2f-c04b-09e6059abfbd.png)
laravel で getHogeAttribute の値も json の出力などに自動的に含めたい時の方法

## 結論

Model に toArray() メソッドを実装し、その中でよしなに設定すると良い。

## 例と方法

### 前提:

- User Model には first_name, last_name フィールドが存在している。
- `$user->full_name` とすると、`$user->first_name . ' ' . $user->last_name` が表示される様に getAttribute を用いて設定している。

```php
<?php
class User extends Model {

    protected $fillable = [
        'first_name',
        'last_name',
    ];

    public function getFullNameAttribute()
    {
        return $this->first_name . ' ' . $this->last_name;
    }

}

```

上記の Model の状態だと、以下のように `$user->full_name` が使える

```php

User::create([
    'first_name' => 'さんぷる',
    'last_name' => 'いちごう',
]);
$user = User::find(1);
echo $user->full_name; // 「さんぷる いちごう」となる

```

getFullNameAttribute メソッドは echo など、文字列化の必要に迫られた際に toString マジックメソッド経由で呼び出される。

### getFullNameAttribute にアクセスできない例:

どこからも文字列化されない(toStringからアクセスされない)場合は、 `$user->full_name` が使えない。

例えば、 Json で値を返却する時など。

以下の様なケース。

```php

$user = User::find(1);
return response()->json(['user' => $user]);

```

このとき、上記の response を受け取った javascript などでは、`response.user.full_name` が存在しない。(toString 通ってないから。)

※`response.user.first_name` と `response.user.last_name` だけが存在する状態。

### Json 化した際なども `response.user.full_name` でアクセスさせる方法:

結論から書くと、 Model に toArray メソッドを実装することで実現できる

```php
<?php
class User extends Model {

    protected $fillable = [
        'first_name',
        'last_name',
    ];

    public function getFullNameAttribute()
    {
        return $this->first_name . ' ' . $this->last_name;
    }
    
    /**
     * このメソッドを追加
     */
    public function toArray()
    {
        return array_merge(
            parent::toArray(),
            ['full_name' => $this->full_name]
        );
    }

}

```

`response()->json('user' => $user);` の中で、 `$user->toArray()` が呼ばれて配列化される。

User Model に toArray を実装していない場合は、 `Illuminate\Database\Eloquent\Model` の toArray メソッドが呼ばれる

このため、 User Model の toArray メソッドで適切に処理をすることで、 json 化した後でも `full_name` にアクセス可能となる。

おしまい。
PythonでNetworkXを使う時に役立つサイトメモ

#環境構築
+ Python 2.7 (Python 3じゃないよ)
+ networkx (ネットワークグラフを取り扱うライブラリ)
+ numpy (数値計算をしてくれるライブラリ)
+ matplotlib (図や折れ線グラフなどを書いてくれるライブラリ)

の順番でインストールする



## Mac環境構築

[Pythonのライブラリをpipで管理する](http://joppot.info/2014/01/29/522)
[pipインストールメモ](http://qiita.com/who_you_me/items/831d62f396e6d66dda66)


##Windows環境構築
32bit環境の場合
[Python for Windows インストールメモ](http://www.aoki.ecei.tohoku.ac.jp/~ito/python_windows.html)

[64bit環境でPythonのNumpy/Scipy/Matplotlibをインストール](http://www.amelt.net/imc/programming/python/4402/)

【numpy】
「numpy-1.10.2+mkl-cp27-none-win_amd64.whl」
【matplotlib】
「matplotlib-1.5.0-cp27-none-win_amd64.whl」
をダウンロードする。

# NetworkX
https://networkx.github.io/

#ネットワークデータセット
[SNAP](https://snap.stanford.edu/data/)

# オススメエディタ
https://www.jetbrains.com/pycharm/
Unityに関して役立つサイトメモ

Unityについて調べてる時にお世話になったサイトをどんどん追加していくメモ

#Unity公式
ドキュメント
http://docs.unity3d.com/ja/current/Manual/UnityManualRestructured.html
アンカーの意味が直感的にわかるページ
http://docs.unity3d.com/ja/current/Manual/UIBasicLayout.html
#初期段階
オブジェクトの配置に役立つ知識
http://tsubakit1.hateblo.jp/entry/2015/04/21/031048
#Unityの書き出し、公開
##WebPlayer
Unityアップローダー、Unityのゲームを気軽にアップできるサイト
http://unitygameuploader.jpn.org/
WebPlayerやWebGLをGoogleDriveを使ってアップロードする方法がわかるページ
http://gameyoshiki.blog.fc2.com/blog-entry-38.html
##Android
External Toolsを選択してAndroid SDK Location を設定する
http://tech.gmo-media.jp/post/52903538536/create-android-game-with-unity
Google Playの登録について
http://iritec.jp/android/5745/
ファイルサイズが50MB超えた時の対処
http://kan-kikuchi.hatenablog.com/entry/Android50MB
http://mizoguche.info/2014/12/unity_android_50mb_over/
#CSVファイル
CSVファイルを読み込む
http://hwks.hatenadiary.jp/entry/2014/08/03/023235
#オススメGitHub
Takahashi Keijiro のさんの Github
https://github.com/keijiro
Rでread.tableを使わずに同じようにデータフレームとしてCSVを読み込む

read.tableが使えない事情があって、そのまま読み込むことになり苦戦したのでメモ。
もっとスマートな方法があるかもしれない。

前提条件として「C:\hoge\piyo.csv」を読み込むとする。Windows機でやったけどLinuxとかでもできると思う。

```text:piyo.csv
test1,test2,test3
1,2,3
4,5,6
7,8,9
```

# 普通のread.tableを使った読み込み

```r:read.table.R
# CSVファイルからデータフレームへ読み込み
d <- read.table("C:\\hoge\\piyo.csv", sep=",", skip=0, header=T, stringsAsFactors=F)
```

```text:実行結果
> d
  test1 test2 test3
1     1     2     3
2     4     5     6
3     7     8     9
> class(d)
[1] "data.frame"
> sapply(d, class)
    test1     test2     test3 
"integer" "integer" "integer" 
```

データフレーム型で中身はintegerとなっている。

# read.tableを使わない読み込み
strsplitで分割する際にリストの中のリストになるのでそれを取り出す作業が必要になる。


```r:no_read.table.R
# ファイルオープン
kInputFile <- file("C:\\hoge\\piyo.csv","r")  # ファイル読込みモード
line <- readLines(kInputFile)                 # ファイル読込み
sp <- strsplit(line,",")                      # カンマ区切りで分割（この時点でspの中身がリストの中のリストになる）

# データ格納領域の初期化
matx <- NULL       # 途中の作業用として作成
d <- data.frame()  # 最終的にデータフレームで処理したいのでデータフレーム型で作成

# マトリックス型に格納
for (i in 1:length(sp)) {
  matx <- rbind(matx, sapply(sp[[i]], as.character))  # リストの中のリストから取り出し、マトリックス型に格納していく
}

# 列名設定
colnames(matx) <- sp[[1]]  # 最初の行＝タイトル行を各列名として設定

# タイトル削除
matx <- matx[2:length(sp),]  # 最初の行の削除（実際はmatxの2行目～最後の行までを格納しなおす）

# マトリックス型→データフレーム型へ
d <- as.data.frame(matx)

# ファイルクローズ
close(kInputFile)
```

```text:実行結果
> d
  test1 test2 test3
1     1     2     3
2     4     5     6
3     7     8     9
> class(d)
[1] "data.frame"
> sapply(d, class)
    test1     test2     test3 
"factor"  "factor"  "factor" 
```

このままだと中身がファクター型になっているため以下を追加。

```r:ファイルクローズの前辺りに追加
d$test1 <- as.character(d$test1)
d$test1 <- as.integer(d$test1)

d$test2 <- as.character(d$test2)
d$test2 <- as.integer(d$test2)

d$test3 <- as.character(d$test3)
d$test3 <- as.integer(d$test3)
```

一度character型へ変換しているのは、
ファクター型ではlabelがcharacter型、levelがnumeric型（labelのインデックス）になっていて、そのままas.integerするとlevelの値つまりlabelのインデックス値が返ってくる。
そのため一度characterへ変換して、labelの値を引き出す必要がある。

この部分のコードはもっと短くできそう。

* * *
追記：`data.frame()`とか`as.data.frame()`などにもstringsAsFactorsの指定ができるみたい。
これにより`as.character(d$test1)`などの処理は省ける。

```r:
d <- as.data.frame(matx)
```

　　　　　↓

```r:
d <- as.data.frame(matx, stringsAsFactors=F)
```

* * *

あとは中身を見てみる。

```text:実行結果
> sapply(d, class)
    test1     test2     test3 
"integer" "integer" "integer" 
```

これで同じように使える！

「`sp <- strsplit(line,",") `」の「`","`」を変えればカンマ区切り以外のものにも対応できる。
また、ファイルオープンの際にUTF-8で読込みたい場合は~~「`encoding="UTF-8"`」を追加する。~~
ファイルオープン時の読み込みエンコード指定はこっちでした「`fileEncoding="UTF-8"`」
UITableViewCellのフォントとフォントサイズを変更する

フォントサイズを変更したい場合は

```swift:
cell.textLabel!.font = UIFont(name: "Arial", size: 22)
```
swift 2.0
xcode 7.0.1

(UITableViewCellの高さを変更する方法)
http://qiita.com/Masaaki/items/d02bce38b6bb40b0e036
El CapitanでTeXが動かない問題

ふざけんじゃねぇよオイ！誰がフォントの位置変えていいっつったおいオラァ！！

#初めに
皆様知っての通り、OSX 10.11通称エル・カピバラサンさreleaseされたわけですが、
**アップデートしたらTeXが動かなくなったんですけど？**という報告が多々。
Webの某を見ていたら、ふーんフォントの位置が変わったのねはいはい埋め込みが正しく動かないのか

**そういうの今どうでもいいから。**
今僕らにとっては何でとかそういうのよりも**象の卵**(伝われ)だから。
というわけで、動くまでに何やったかをメモ書き。
個々の操作の意味は知ったこっちゃありません。

#TeX関連の再インストール
##下準備
まず、`Application/TeX`をどっかに退避。
##MacTeXダウンロード and install
<a href="http://tug.org/mactex/mactex-download.html">ここ</a>から落としてインストール
##TeXShopインストール
<a href="http://darkwing.uoregon.edu/~koch/texshop/obtaining.html">ここ</a>から落として、
`Application/TeX`内のTeXShopを上書き。
##TeXShop設定
TeXShopの**環境設定**から**設定プロファイル**で**pTeX(ptex2pdf)**を選ぶ。
##フォント問題解決
<a href="http://doratex.hatenablog.jp/entry/20151008/1444310306">ここ</a>に書いてある事を上から一個一個やってく
##象の卵をコンパイルする
多分動く！

#動かなかったという人向け
![img_1.jpeg](https://qiita-image-store.s3.amazonaws.com/0/44457/ed8cfc6d-1e28-69c1-c057-2735e1c92450.jpeg)
select_allで複雑なSELECT文を生SQLで取得

開発をしていたら、どうしても複雑なSQLを書く必要がでてくる。あまり使用したくないが、生SQLを書いた方がわかりやすかったりする。なので、生SQLでの取得方法も覚えておくと良いと思う。

## 生SQLでの取得例
生SQLの取得方法はいくつかあるが、今回はActiveRecord::Base.connection.select_allを使用した場合の例になる。

```
     sql = 'select
         u.*,
         h.name hoge_name,
         t.name task_name,
         COUNT(*) cnt,
         SUM(CASE WHEN t.completed_at IS NOT NULL THEN 1 ELSE 0 END) task_complete
       from
         user u
       INNER JOIN
         hoge h
       on h.user_id = u.id
　　　　INNER JOIN
         task t
        on t.user_id = u.id'

    # SQL実行
    result = ActiveRecord::Base.connection.select_all(sql)
```

* カラム名がかぶると上書きされるので、別名にするようにした方がいい。


## 返り値
```
result # => #<ActiveRecord::Result:0xdeadbeef>

result.columns
# => ["id", "name", "hoge_name", "task_name", "cnt", "task_complete"]

result.rows
# => [[1, "名前", "hoge名", "タスク名", "10", "5"],
      [2, "名前2", "hoge名2", "タスク名2", "25", "15"],
      ...
     ]

result.to_hash
# => [{"id" => 1, "name" => "名前", "hoge_name" => "hoge名", "task_name" => "タスク名", "cnt" => "10", "task_complete" => "5"},
      {"id" => 2, "name" => "名前2", "hoge_name" => "hoge名2", "task_name" => "タスク名2", "cnt" => "25", "task_complete" => "15"},
      ...
     ]

result.each do |row|
  puts row['name'] + " " + row['task_name']
end
```

## sanitize_sql_arrayを使用する場合

```
sql = 'select
         u.*,
         h.name hoge_name,
         t.name task_name,
         COUNT(*) cnt,
         SUM(CASE WHEN t.completed_at IS NOT NULL THEN 1 ELSE 0 END) task_complete
       from
         user u
       INNER JOIN
         hoge h
       on h.user_id = u.id
　　　　INNER JOIN
         task t
        on t.user_id = u.id'
      where
         t.id = ?
      and u.name = ?

    # SQL実行
    sanitize_sql = ActiveRecord::Base.send(:sanitize_sql_array, [sql, 1, '名前'])
    result = ActiveRecord::Base.connection.select_all(sanitize_sql)
```
32bit入力/任意bit出力 ハッシュ関数

32bit値から指定ビット長へのハッシュ関数。linuxカーネルより。

```c
unsigned long hash_long(unsigned long val, unsigned int bits)
{
  unsigned long hash = val * 0x9e370001UL;
  return hash >> (32 - bits);
}
```

マジックナンバー`0x9e370001`(16)/`2654404609`(10)は、32bit値の黄金比 2^32 * (sqrt(5) - 1) / 2 = 2654435769.5 に近い素数が選択されている。

// 2^32 * (sqrt(5) - 1) / 2 = 2^31 + 2^29 - 2^25 + 2^22 - 2^19 - 2^16 + 1 = 2654404609