OmniAICreator/Qiita-1.07M huggingface dataset:
補色の計算

気になったのでメモ
(a) R=50 G=100 B=200 の補色の計算

1. RGBの内の最大値と最小値を足す
50(R) + 200(B) = 250

2. 1の結果(250)からRGBの各値を引いた結果が補色
R'= 250 - 50(R) = 200
G'= 250 - 100(G) = 150
B'= 250 - 200(B) = 50
(b) R'=200 G'=150 B'=50
 
(a) ![RGB1.png](https://qiita-image-store.s3.amazonaws.com/0/65637/f5de185e-3fdc-576e-9aa6-a6c5fbcdc7c6.png)　(b) ![RGB2.png](https://qiita-image-store.s3.amazonaws.com/0/65637/a435ca29-cae5-172f-bd76-5ca9268f57eb.png)
nginxをport 80でlistenさせるときにハマった

http://derickbailey.com/2014/12/27/how-to-start-nginx-on-port-80-at-mac-osx-boot-up-log-in/

ここを参考にnginxを80番ポートで動かそうとした。コマンドは通るが、ブラウザからのリクエストに答えない。

原因はPowだった。Powは、事前にストップしていたが、uninstallするまでnginxはまともに駆動しなかった。

もしかすると、Powをlaunchctlから外して、pcを再起動でも大丈夫かもしれない。
Knockout.jsでイベントが発生しているタグを取得する

knockout.jsでイベント発生のタグを意識する必要がある場合、第二引数まで指定してやれば取得できます。

```coffeescript
class ViewModel
  func_1: (item,event)=>
    me = $(event.currentTarget)
    # イベントが発生しているタグのvalueを表示
    alert(me.attr('value'))

```

viewとの結合が強くなるからあまり推奨されていないんだろうな。。。
[JAWS-UG CLI] CloudWatch Logs:#6 ロググループの削除

AWS CLIを利用して、CloudWatch Logsのロググループを削除してみます。


前提条件
========


CloudWatchLogsへの権限
----------------------

* CloudWatch Logsに対してフル権限があること。


AWS CLIのバージョン
-------------------

* 以下のバージョンで動作確認済

  * AWS CLI 1.7.24

```bash:コマンド:
aws --version
```

```text:結果(例):
      aws-cli/1.7.24 Python/2.7.5 Darwin/13.4.0
```


0. 準備
=======


0.1. リージョンの決定
---------------------

削除するロググループの存在するリージョンを指定します。

(カレントユーザが利用するカレントリージョンも切り変わります。)

```bash:コマンド(東京リージョンの場合):
export AWS_DEFAULT_REGION='ap-northeast-1'
```


0.2. 変数の確認
---------------

プロファイルとリージョンが想定のものになっていることを確認します。

```bash:変数の確認:
aws configure list
```

```text:結果(例):
            Name                    Value             Type    Location
            ----                    -----             ----    --------
         profile cloudwatchFull-prjZ-mbp13             env    AWS_DEFAULT_PROFILE
      access_key     ****************LOAQ shared-credentials-file
      secret_key     ****************I1O1 shared-credentials-file
          region           ap-northeast-1              env    AWS_DEFAULT_REGION
```


1. 事前作業
===========


ロググループの指定
------------------

削除するロググループを指定します。

```bash:コマンド:
LOGS_GROUP_NAME='<ロググループ名>'
```

```bash:コマンド:
aws logs describe-log-groups \
        --log-group-name-prefix ${LOGS_GROUP_NAME}
```

```json:結果(例):
{
    "logGroups": [
        {
            "storedBytes": 0, 
            "metricFilterCount": 0, 
            "creationTime": 1430119514618, 
            "logGroupName": "test/sample", 
            "retentionInDays": 3653, 
            "arn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXXXX:log-group:test/sample:*"
        }
    ]
}

```


2. 削除
=======

ロググループを削除します。

```bash:変数の確認:
cat << ETX

        LOGS_GROUP_NAME ${LOGS_GROUP_NAME}

ETX
```

```bash:コマンド:
aws logs delete-log-group \
        --log-group-name ${LOGS_GROUP_NAME}
```

```text:結果:
      (戻り値なし)
```


3. 事後作業
===========

削除したロググループが存在しないことを確認します。

```bash:コマンド:
aws logs describe-log-groups \
        --log-group-name-prefix ${LOGS_GROUP_NAME}
```

```json:結果:
      {
          "logGroups": []
      }
```


完了
====

以上で、CloudWatch Logsにおける各エンティティの削除は完了しました。
Vagrant WebServer から DBServer へ MySQL 外部接続（CentOS 6.5）

## Vagrant ファイル

```
Vagrant.configure(2) do |config|
  config.vm.box = "chef/centos-6.5"

  config.vm.define "web" do |web|
  	web.vm.network "private_network", ip: "192.168.33.10"
  	web.vm.provision :shell, path: "webServer.sh"
  end

   config.vm.define "db" do |db|
  	db.vm.network "private_network", ip: "192.168.33.11"
  	db.vm.provision :shell, path: "dbServer.sh"
  end
end

```

dbServer.sh には msyql を突っ込むための shell が書いてある。こんなかんじな。

```bash

yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum -y install mysql mysql-devel mysql-server mysql-utilities

```

他にも yum のアプデだの kernel、kernel-devel、gcc だの突っ込んでたり、「お決まりの設定」をしているけどここでは省く。
これらを vagrant provision でセットアップしておく。


## DBサーバーの調整

これらも自動化しときゃよかったんだけど躓いたのでメモっとく。

mysql_secure_installation　では root のパスワード設定をすること、Disallow root login remotely?に対し n で答え、リモートからのログインを許可すること。

mysql にログインし、root ユーザーに対し次の操作。

```

mysql > grant all privileges on *.* to 'root'@'%' identified by 'yourPassword';
```

これだけの設定でつながった。伝え漏れがあったら済まない（確信犯
Heroku上のRailsアプリにBasic認証をかける

（主にHerokuの環境変数の入れ方を）すぐ忘れて毎度のようにググってる気がするので、メモしておく。

## application_controller.rbを編集
```
http_basic_authenticate_with :name => ENV['BASIC_AUTH_USERNAME'], :password => ENV['BASIC_AUTH_PASSWORD'] if Rails.env == "production"
```

をコントローラーの上部にでも設定する。

## Herokuで環境変数をセットする
```
$ heroku config:add BASIC_AUTH_USERNAME="admin" BASIC_AUTH_PASSWORD="password"
```

これだけでおっけー。
クリップボード上のテキストデータをサクっと正規表現置換

場所を選ばず使えるのでかなり汎用性高そう。

```bash
$ pbpaste | sed s/置換前/置換後/g | pbcopy
```

パイプで毎回繋ぐのが面倒だったらオレオレ関数を作りましょう。

```bash:.bashrc
function pbsed() {
    pbpaste | sed $@ | pbcopy
}
```
before_action、after_actionが使えないクラスにフィルタリング機能を追加する

moduleを追加するだけで任意のアクセッサーにbefore_action、after_actionが使えないクラスにフィルタリング機能を追加できるようにしてみる。

定義モジュール

```ruby:filters.rb
module Filters
  # attr_accessorを意識してメソッド定義にattrをつけたネーミングにしています。
  # メソッド名と処理内容をhashで定義しメソッドを動的に作成
  {
      #指定したシンボルに対応するインスタンス変数をtrimする
      attr_trim_filter: lambda { |value| value.strip },
      # 指定したシンボルに対応するインスタンス変数を小文字に変換する
      attr_downcase_filter: lambda { |value| value.downcase },
      # 指定したシンボルに対応するインスタンス変数を大文字に変換する
      attr_upcase_filter: lambda { |value| value.upcase }
  }.each do |k, v|
    define_method k do |*targets|
      sym = k.to_s.sub /^attr\_/, ''
      # 元のメソッドをalias chainで退避しておく
      targets.each { |target|
        self.new.send "#{target}=", nil
        define_method "#{target}_with_#{sym}=" do |value|
          next unless value.kind_of?(String)
          send "#{target}_without_#{sym}=", v.call(value)
        end
        alias_method_chain "#{target}=", sym.to_sym
      }
    end
  end

end
```

使用モジュール

```ruby:user.rb
class User
  extend Filters
  attr_accessor :value_1, :value_2
  # trimしたい項目を定義
  attr_trim_filter :value_1, :value_2

end
```
yumでNo package kernel～ available.

* VirtualBoxのCentOS6.5のBoxファイルでこうなっていて
* kernel関係のyumパッケージをアップデートしたいときに
```
No package kernel～ available.
Error: Nothing to do
```
となっていて

```
/etc/yum.conf
の
exclude=kernel*
```
をコメントアウトする必要があった。
ubuntuにkibanaを入れる

ふとkibanaを触ってみたくなったのでメモ。

# 環境
 * VirtualBox 4.3
 * ubuntu 14.04
 * java8(1.8.0_25)
 * elasticsearch(1.5.0)
 * kibana4

## kibanaインストール

ここで最新版を取得できます
https://www.elastic.co/downloads/kibana
※kibana4を動かすにはelasticsearch1.4以上が必要のようです

```bash
$ cd 
$ wget https://download.elastic.co/kibana/kibana/kibana-4.0.2-linux-x64.tar.gz
$ cd /usr/local
$ sudo mv ~/kibana-4.0.2-linux-x64.tar.gz ./
$ sudo tar zxvf kibana-4.0.2-linux-x64.tar.gz
$ sudo ln -s kibana-4.0.2-linux-x64 kibana
```
```kibana.yml
$ sudo cp -p kibana.yml kibana.yml.org
$ sudo vim kibana.yml
-----
elasticsearch_url: "http://localhost:9200"
-----
※elasticsearch設定のhostとportを指定する
```

## kibana起動確認

```bash
$ cd /usr/local
$ sudo ./elasticsearch/bin/elasticsearch
※まずはelasticsearchを起動
$ cd /usr/local
$ sudo ./kibana/bin/kibana
```
ブラウザで確認
http://localhost:5601/
※host,portはそれぞれの環境に合わせてください![kibana4.jpg](https://qiita-image-store.s3.amazonaws.com/0/70737/dfc3d7f1-33dd-4821-0211-7d1673286902.jpeg)
【海外】IoTソリューション(デバイス)

## Onion Omega

![スクリーンショット 2015-04-27 11.55.37.png](https://qiita-image-store.s3.amazonaws.com/0/74972/b01263fd-705b-ff8e-860e-1afe2d6987b3.png)

http://www.itmedia.co.jp/news/articles/1504/07/news116.html
【海外】IoTソリューション(社内)

## Connected Coffee

![スクリーンショット 2015-04-17 12.33.30.png](https://qiita-image-store.s3.amazonaws.com/0/74972/b19f34a8-d37a-75f6-de52-45acc1cb04f1.png)

http://www.digitalversus.com/connected-coffee-what-else-n23450.html

- 社内向けIoTソリューション
- コーヒーメーカーの故障の状態、コーヒーの残量を知らせてくれる。稼働時間の情報も取得できる。
- メモ: 残量を知らせてくれたのちに発注までいけると嬉しいと思う。
関数にパターンを追加する

↓のような関数があったけどパターンを追加した関数が欲しい。

```scala
scala> val f: Int => String = { case 1 => "one" case _ => "none" }
f: Int => String = <function1>
```

PartialFunctionで定義して、

```scala
scala> val fp: PartialFunction[Int, String] = { case 2 => "two" }
fp: PartialFunction[Int,String] = <function1>
```

元の関数もPartialFunctionにすればorElseできる。

```scala
scala> val fpf = fp orElse PartialFunction(f)
fpf: PartialFunction[Int,String] = <function1>

scala> fpf(1)
res7: String = one

scala> fpf(2)
res8: String = two

scala> fpf(3)
res9: String = none
```

PartialFunctionはFunction1の子なので、これでパターンを追加した関数が得られた。よかった。

```scala
scala> Seq(1,2,3,4,5).map(fpf)
res10: Seq[String] = List(one, two, none, none, none)
```
【国内】IoTソリューション(工場)




## フォークリフト向けテレマトリクス

![スクリーンショット 2015-04-17 12.56.30.png](https://qiita-image-store.s3.amazonaws.com/0/74972/def5eee8-0014-4292-e2ad-cd55f5ffdd70.png)

http://www.mbel.co.jp/product/casestudy/solution/telematrix.html

- フォークリフトにおける、オペレーターの運転監視レポート(車体情報、GPS情報、加速度センサ情報)や車両の稼働監視の高効率分析(位置情報、エンジン回転数、指導からの経過時間、バッテリ残量、故障高度の確認)ができる。
- メモ: データをクラウドに集める。上記の画像のように、エンドユーザー販売店、情報提供システム利用実態も集められるので、より効率的な営業ができる。
【国内】IoTソリューション(農業)

## 無線LANを標準搭載したクボタの田植え機

![スクリーンショット 2015-04-12 11.45.54.png](https://qiita-image-store.s3.amazonaws.com/0/74972/30b0a986-6f9e-0e03-67b7-0f578b707847.png)

http://itpro.nikkeibp.co.jp/atcl/watcher/14/334361/090200042/?SS=imgview&FD=-194445930&ST=cio

- 農業向けIOTソリューション

- 無線LANの情報から、場毎の肥料散布データや稼働情報や作業記録を収集。現在は、トラクター、コンバイン、田植え機に搭載。
- 無線LANの通信範囲の関係上、スマートフォンのテザリングとセットで使う必要有り。

- 対象は「担い手農家」をターゲットと呼ばれる大規模農家。

- 大規模農家は各田んぼの作業情報を手作業で管理しているので、記入漏れや作業漏れ、また生育が期待できない場所に肥料を過剰に撒くという無駄も生じていた。
- 上記の問題を解決するために、トラクターからはどの田んぼをどの程度耕したか把握し、田植え機の電動肥料調整期のデータからその場所の施肥量の情報を集め、作業ミスの改善を行う。
-コンバインからは収量・食味(平均タンパク、平均水分)の情報を収集。このデータをもとに、収量・食味の値が良い場所は高く売れる「ブランド米」などを植えて改善を図る。

- 狙い:日本のコメ農家の競争力向上。
- メモ:データをクラウドに置く形。


## 宮崎県の農業をリードする次世代の農業経営者の育成

![スクリーンショット 2015-05-01 11.02.58.png](https://qiita-image-store.s3.amazonaws.com/0/74972/772ab5f6-8f84-5f21-71fc-cd39b3621bc9.png)

http://jpn.nec.com/case/takanabe-ah/index.html

- 農業系統の学校の現状は、農作物を手で収穫、その記録を取るだけで、本来の農作物の生育状況や環境を考えるという考え方まで意識することが困難であった。
- ハウスにセンサー機器を設置することで、データを自動収集できて可視化ができるように。生徒自身の煩雑な記録作業が不要になり、情報をもとに考える習慣が身につくようになった。
【海外】IoTソリューション(介護)


## beclose

![スクリーンショット 2015-04-10 23.49.15.png](https://qiita-image-store.s3.amazonaws.com/0/74972/fa16d517-1baf-adb1-9758-f0264f100915.png)

http://beclose.com/

- 部屋にセンサーを設置して介護人の動向を追うもの。医者、家族、介護人に共有可能で、長時間ベットを離れたり、食事をしていないなど、異変があった時に介護人に届く仕組みになっている。
- メモ:データは集められるし、クラウドに転換できる。
Web-Aniamtion-js が Android で動かない


## なぜか

なぜなら、requestanimationframes を使用してつくられている

Android の多くの端末だとこれに対応していない。

## 解決策

Polyfill いれよう

https://gist.github.com/paulirish/1579671#file-raf-js

## でも Android 2.3 だと動かない

もう対応したくないよえーん
【海外】IoTソリューション(スマートシティ)

## ロンドン地下鉄に見る IoT 監視システム

http://iot.mb.cloud.nifty.com/iotcolumn/iot%E5%B0%8E%E5%85%A5%E4%BA%8B%E4%BE%8B_%E3%83%AD%E3%83%B3%E3%83%89%E3%83%B3%E5%9C%B0%E4%B8%8B%E9%89%84

![スクリーンショット 2015-04-09 17.50.10.png](https://qiita-image-store.s3.amazonaws.com/0/74972/be2f03dc-5d53-d0aa-f891-7491dcead055.png)

- 交通機関向けIOTソリューション
- 列車の運行状況と設備稼働状況をリアルタイムに監視。
- 管理画面から、各駅の設備稼働状況, 問題発生箇所から分かる形になっている。(温度、湿度、振動など)
- 稼働状況のパターンから事前トラブルを防止するシステムも完備。
- メモ:データを集められて、管理画面から管理することが可能になっている。

## 公共輸送システムにIOTの技術を導入 @ ヘルシンキ

http://www.microsoft.com/ja-jp/business/industry/gov/govcase/helsinki.aspx

![スクリーンショット 2015-04-09 18.10.12.png](https://qiita-image-store.s3.amazonaws.com/0/74972/9e724ed0-0aa2-b98a-e571-07268d305b70.png)

- ヘルシンキにある公共機関の全バスにセンサー取り付け加速度、走行速度、エンジン温度、燃料消費量、ブレーキ動作、GPSからの位置情報を収集。
- 燃料消費量の削減、運転手の技能の向上、バスの乗り降りの円滑化と安全の確保を達成。
- メモ：クラウドにデータを集めて、改善する形。


## バルセロナ市のスマートシティ

![スクリーンショット 2015-04-11 18.56.11.png](https://qiita-image-store.s3.amazonaws.com/0/74972/246a3b86-05b2-c6ca-a187-53d7e5d6ca16.png)

http://www.microsoft.com/enterprise/it-trends/big-data/articles/barcelona-shapes-a-futuristic-city.aspx#fbid=MQ1D05DENBj

- ①スマートパーキングメーターと②スマートバス停を設置. ①は住民に駐車可能な地点の情報をリアルタイムで提供,パーキングもスマートフォンを利用して駐車料金を支払える。②は気温、大気質、騒音レベル、通行人の通行状況などに関する情報を提供。
-こういった情報をシステムで構築して、公共こう交通サービスの改善やイベントの計画、ツーリズムの影響の把握などに活用。

## IOTを使うことによる生産性の向上

![スクリーンショット 2015-04-12 11.13.30.png](https://qiita-image-store.s3.amazonaws.com/0/74972/84cf1314-1c85-e194-0820-f7ab451858c2.png)

http://www.iiconsortium.org/vertical-markets/energy-utility.htm

- エネルギー産業における生産工程の中のある部分からデータを収集し、オペレーションのコスト削減、生産の効率化をはかる。
- エネルギー(再生可能なエネルギー、石油、天然ガス、シェールガス)採掘に関して、それらを送るためのパイプライン、電線系統の情報をセンサーを通して情報をクラウドに集約、それらのデータから効率化を図る。また、リモート操作も可能。
- 課題は天候によって機械がダウンすること。現在研究中。

## スマートパーキングメーター(サンフランシスコ)

![スクリーンショット 2015-04-17 11.05.36.png](https://qiita-image-store.s3.amazonaws.com/0/74972/7333fd04-19d0-881c-0725-21c6de903112.png)

http://japanese.engadget.com/2010/08/08/sfpark/

- パーキングメーターでクレジットカードやデビットカードの使用ができる。また、パーキングの空き場所数に応じて価格が変動され、空き状況はWebやメールでリアルタイムに確認できる。
- 飛行機と同じで繁忙期は高く、それ以外は安く価格は設定される。
- メモ: センサーから空き情報を取得可能。今後、交通渋滞認知のため、通りすがりの車の速度、空気の汚れ具合、事件発生認知のための騒音モニターを導入予定。

## ごみの容量をセンシングする「SmartBin」

![スクリーンショット 2015-04-17 11.35.26.png](https://qiita-image-store.s3.amazonaws.com/0/74972/4b8a6723-147c-4f57-869c-8b86e706ff37.png)

http://japan.cnet.com/sp/cnetjapanlive_2014s/35049712/

- ごみの容量をセンサーによって検出、一杯になると、無線を通じて回収を依頼するシステム。
- 定期的に回収するよりも30%程度の回収コストが削減できる。

## ![スクリーンショット 2015-05-01 11.20.32.png](https://qiita-image-store.s3.amazonaws.com/0/74972/61861a84-00cb-cf5a-ee11-1192bd818518.png)
エレベーター最大手が IoT と Azure の「機械学習」サービスで運用保守を変革(Microsoft,ThyssenKrupp Elevator)

http://www.microsoft.com/enterprise/ja-jp/the-lounge/cases/201409-thyssenkrupp.aspx#fbid=WrsoBypRKMh

- エレベーターにモーターの温度、シャフト、アライメント、ドア機能を監視できる装置を設置。クラウドでデータを収集、故障が発生する前に修理すべき場所の改善通知を行っている。これにより、ワークフローを効率化し、運営コストを削減ができる。
【海外】IoTソリューション(家庭用)

## Filip 
![スクリーンショット 2015-04-09 15.31.30.png](https://qiita-image-store.s3.amazonaws.com/0/74972/08a00c29-8d3c-899e-1ab9-3a6fbc8cd886.png)

http://www.myfilip.com

- 子供向けIoTソリューション
- 子供の現在地情報、子供が行っていない危険エリアの通知、他携帯と同様の処理が可能。(電話、時計、ショートメッセージ)
- 子供がどこにいるかコントロール可能。
- メモ：データは集められるがスマホ内に蓄積するが、そもそもの危険エリア、子どもの行くところ等はデータの蓄積をしていそう。

## Akerun


![スクリーンショット 2015-04-09 16.50.46.png](https://qiita-image-store.s3.amazonaws.com/0/74972/456f406b-1e4e-7792-dc62-d116cea1740b.png)

http://support.akerun.com/hc/ja

- スマホでオートロック可能、友人と共有して鍵の管理等がスマホでできる。
- 日本:家事代行サービス等と連携し、鍵の情報が家事代行側が分かる状態になっている。
- 海外:Airbnb向けに提供している部屋の掃除などでを利用するユーザーもいる。
- メモ：他者と連携することで、クラウドソーシングを利用したソリューション。

http://jp.techcrunch.com/2014/07/28/149728-amytimes/

## Neo

![スクリーンショット 2015-04-09 17.04.39.png](https://qiita-image-store.s3.amazonaws.com/0/74972/1c124495-75de-c839-944d-3afeac628050.png)
https://www.indiegogo.com/projects/neo-smart-jar

- 家庭向けIoTソリューション
- 食材の残量から、含まれる栄養素が分かる。
- 利用する食材ごとに手動で食材のデータを入れるかバーコードで設定を行う。
- 食材データのトラッキング、取得カロリーと消費カロリーの比較も可能(フィットネスとの組み合わせもできる)。冷蔵庫にある食材もアプリに記録することで、ジャーに残っている食材と組み合わせて作成できる料理のレシピを探すことも可能。

## Sky Bell Video Door Bell

![スクリーンショット 2015-04-17 11.43.52.png](https://qiita-image-store.s3.amazonaws.com/0/74972/c5a72bbf-86c1-2ef5-061d-57a59b41a0c9.png)

http://www.msn.com/ja-jp/news/techandscience/%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%A7%E5%BF%9C%E7%AD%94%E3%81%A7%E3%81%8D%E3%82%8Bwi-fi%E3%83%89%E3%82%A2%E3%83%95%E3%82%A9%E3%83%B3%E3%80%8Cskybell-video-doorbell%E3%80%8D%E3%81%8C%E6%B5%B7%E5%A4%96%E3%81%A7%E4%BA%BA%E6%B0%97/ar-BBgjtrc#page=2

- 家庭向けIOTソリューション
- Wi-fiを利用してスマートフォンで来訪者の確認やビデオ通話ができる。カメラから、来訪者の撮影もできるので、防犯カメラとしても活用できる。
- メモ: 来訪者が来た際に自動でどんな人か分かるとまた楽になるかもしれない。
【海外】Iotソリューション(農業)

## Parrot Flower Power
![スクリーンショット 2015-04-09 12.55.49.png](https://qiita-image-store.s3.amazonaws.com/0/50813/89b726b4-6754-8eb9-46bd-ee25146294aa.png)
http://www.parrot.com/jp/products/flower-power/

- 植物の水やりが自動で可能。光・温度・土の湿度・肥料レベルを検知可能、土の湿度の状況によって自動的に水が撒かれる。
- 水は2.2L分貯蓄可能、目安として1月1回 程度追加する
- メモ：データは集められるがスマホ内に蓄積され、クラウドにデータを置くようにはなってないように見える

## John DeereのField Connectシステム

![スクリーンショット 2015-04-10 22.39.18.png](https://qiita-image-store.s3.amazonaws.com/0/74972/4f85c997-b645-21ab-eeaf-5dc77670bb08.png)


https://www.deere.com/en_US/products/equipment/ag_management_solutions/field_and_crop_solutions/john_deere_field_connect/john_deere_field_connect.page


- 水分レベル、気温と土壌の温度、風速、湿度、日射、雨量、植物の葉の水分量について計測できる。
- 農家が側がその情報を見て、収穫時期を判断できたり、季節の変化が水分の保持率に与える影響についたりできる。
- メモ:データは集められるが、ビックデータに寄っている。

## 植物からメッセージが届く -Botanicalls-

![スクリーンショット 2015-04-17 11.23.43.png](https://qiita-image-store.s3.amazonaws.com/0/74972/ac16bc59-2d8c-8576-a38c-5492139a393a.png)

http://ideahack.me/article/5

- 植物から土の湿り気を確認してくれることによって、水が必要になり次第、指定番号に電話をしてくれる。Wi-fi経由でネット接続すると、植物からTweetすることも可能。
- モイスチャーセンサーを使用している。
SugarRecordでSwiftからCoreDataをお手軽に使う


iOSでデータを永続化する方法としてCoreDataがありますが、コード量が多く面倒に感じる人も多いかと思います。

ここではより簡単にCoreDataを使うためにSugarRecordという便利なフレームワークを導入し、SwiftからCoreDataを使ってみます。Objective-CのMagicalRecordのような位置付けのフレームワークです。

- [SugarRecord/SugarRecord](https://github.com/sugarrecord/sugarrecord)


## 環境
- SugarRecord 1.0.7
- Swift 1.2
- Xcode 6.3
- iOS 8.3
- CocoaPods 0.36.3

## インストール

CocoaPodsを使います。

1. Podfileに以下を追記します。

	```
	pod 'SugarRecord/CoreData', :git => 'https://github.com/SugarRecord/SugarRecord.git'
	```

2. インストールします。

	```
	pod install
	```

## 初期化処理

`AppDelegate.Swift`の`application`に以下を追加します。

```
let stack: DefaultCDStack = DefaultCDStack(databaseName: "database.sqlite", automigrating: true)
stack.autoSaving = true
SugarRecord.addStack(stack)

//ログレベルを設定(任意)
SugarRecordLogger.currentLevel = .logLevelError
```

- DBとしてiOS標準のSQLiteだけでなく3rdパーティのRealmも利用可能です。

## モデル作成

1. File -> New -> File -> iOS -> Data ModelでModel.xcdatamodeldを作成して選択します。

2. Add EntityでEntityを作成しAttributesにAttributeと型を設定します。

3. Editor -> Create NSManagedObject Subclassを選択してEntityのクラスを作成します。

4. ConfigurationsのClass欄を以下のように修正します。

	変更前
	
	```
	PRODUCT_MODULE_NAME.[Entity名]
	```

	変更後

	```
	[プロジェクトのtarget名].[Entity名]
	```

## 操作

例として以下のようなモデルのクラスを想定します。画像をCoreDataに保存する例です。

```
class Icon: NSManagedObject {
    @NSManaged var url: String
    @NSManaged var image: NSData
}
```

### 保存

```
if let icon:Icon = Icon.create() as? Icon {
	icon.url = "http://example.com/1.png"
	icon.image = image
	icon.save()
}
```

### クエリ

```
if let icon: Icon = Icon.by("url", equalTo: url).find().firstObject() as? Icon {
	imageView.image = UIImage(data:icon.image)
}
```

### カウント

```
let num:Int = Icon.count()
```

### アップデート

```
if let icon: Icon = Icon.by("url", equalTo: url).find().firstObject() as? Icon {
	icon.beginWriting()
	icon.image = new_image
	icon.endWriting()
}
```

## 参考

詳細はGitHubの公式ドキュメントに記載されています。

- セットアップ:[Setup SugarRecord](https://github.com/SugarRecord/SugarRecord/wiki/Setup-SugarRecord)
- 操作:[Operations](https://github.com/SugarRecord/SugarRecord/wiki/Operations)
【国内】IoTソリューション(スマートシティ)

## T-connect(トヨタ)

![スクリーンショット 2015-04-27 15.22.38.png](https://qiita-image-store.s3.amazonaws.com/0/74972/5a40cbc2-bb01-f064-b527-d3a8b6e67386.png)

http://news.ameba.jp/20140623-86/
JavaScriptの小数の計算の誤差を少なくする

小数を四則演算すると微妙な誤差が生じます。
消費税の計算などきっちりした値がほしいときには困ります。

10進数で計算すると誤差は生じないので変換して計算するというアプローチを取ります。

[decimal.js](https://mikemcl.github.io/decimal.js/)を使います。

## インストール

es5を内部で使っているのでes5-shimをいれておきます。

```shell-session
bower install es5-shim
bower install "decimal.js"
```

上から順番にincludeしてください。

## 使ってみる

0.1 * 0.2をchromeで実行すると

0.020000000000000004

となります。

これをDecimalを使ってやると0.02でちゃんと出力してくれます。

```js
    var a = new Decimal(0.1);
    var b = new Decimal(0.2);
    out = a.times(b).toNumber();
```

速度についても調べてみました。

- ブラウザ Chrome 
- OS Yosemite 10.10

decimalJS: 4385.760ms
number: 2881.052ms

chromeの中でいい感じに解釈してそうな感もありますが、
思ったより遅くなかったです。
古いブラウザだともっと差がでそうな気もしますが。

検証ソース

```js
(function () {
    var out;


    var a, b, c, d;

    a = new Decimal(0.1);


    console.time("decimalJS");
    for (var i=0;i < 100000;i++)
    {
        b = new Decimal(Math.random().toFixed(2));
        out = a.times(b).toNumber();
        $("#co").append(out + " ");
    }
    console.timeEnd("decimalJS");

    c = 0.1;
    console.time("number");
    for (var i=0;i < 100000;i++)
    {
        d = Math.random().toFixed(2);
        out = c * d;
        $("#co").append(out + " ");
    }
    console.timeEnd("number");
}());

```
aws cloudformation コマンドラインで CommaDelimitedList パラメータを渡す

`Parameters` で `"Type": "CommaDelimitedList"` を指定すると、コンマ区切り文字列によって配列を渡すことができる。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html

コマンドラインからもやってみる

```
$ aws cloudformation create-stack (略) --parameters ParameterKey=MyKey,ParameterValue='value1,value2'

Error parsing parameter '--parameters': should be: Key value pairs, with multiple values separated by a space.
--parameters ParameterKey=string,ParameterValue=string,UsePreviousValue=boolean ParameterKey=string,ParameterValue=string,UsePreviousValue=boolean
```
エラーになった。ぐぬぬ

以下のように重ねてエスケープすればよい。

```
$ aws cloudformation create-stack (略) --parameters ParameterKey=MyKey,ParameterValue='value1\\\,value2'
```
Unity: Destroy(gameObject)とDestroy(this)の違い

```lang:gameObject
Destroy(gameObject)
```
と

```lang:this
Destroy(this)
```

の違い。

Destroy(gameObject)は、コンポーネントを持つgameObjectが削除される。
Destroy(this)は、コンポーネントが削除される（this=Destroyを呼び出したコンポーネント）
【国内】IoTソリューション(商業)

## スマート座布団 (keyvalue)

![スクリーンショット 2015-04-27 14.50.30.png](https://qiita-image-store.s3.amazonaws.com/0/74972/7ec328fc-6881-e2c1-efe7-3700a8f0242c.png)

- 感圧センサーとiBeaconモジュールを内蔵したスマート座布団
- 設置した椅子や畳の上に人が座るとスマホやタブレットに情報が通知される。
- 飲食店などに設置することで混雑状況や回転率の調査が可能に、O2Oとして空席情報を元に割引したり、座席に座るとクーポン発行もできるようになる。
OpenCVのMatの中身をVisual Studioのデバッガで綺麗に表示

Visual Studio 2013で、OpenCVのプログラムをデバッグするときの小ネタ。覚書き。


# 課題
3x3 の単位行列を出力する OpenCV のプログラム（実質2行）を書いてみる。

```cpp:opencv_eye.cpp
#include <iostream>
#include <opencv/core.hpp>

int main(void)
{
    cv::Mat eye = cv::Mat::eye(3,3,CV_32FC1);
    std::cout << eye << std::endl;
    return 0;
}
```
実行するとこんな感じ。

![output.png](https://qiita-image-store.s3.amazonaws.com/0/50772/8f2f3e5a-a424-5bab-6188-65eb5b96076d.png)

Visual Studio 2013 の **デバッガー** から、変数 `eye` の中身を見たい。
しかし、ローカル変数のウィンドウでは、こんな風に `0 '\0'` と表示されてしまう。

![local_variable.png](https://qiita-image-store.s3.amazonaws.com/0/50772/f653fa2f-e5f7-cbcb-e75c-5824373f79f6.png)

デバッガーはOpenCVの型情報を解釈できないので、仕方なし。

メモリウィンドウで覗いても良いのですが、カラム数など毎回設定するのは面倒。
どうしたら、cv::Mat の中身を 3x3 の行列として、簡単に見られるのか？

ヒント：ウォッチ式でキャストを使う。


# 解１

`cv::Mat.data` を 3 要素の1次元 `float` 配列にキャストし、それを3行分表示する。

ウォッチ式： `(float (*)[3]) eye.data, 3`

![watch1.png](https://qiita-image-store.s3.amazonaws.com/0/50772/e59a1687-da0b-65dc-27d7-0ea1262abd52.png)

『 , n 』で修飾すると **n 個分のデータを表示してくれる** ナイス機能を利用。

 - 関連する StackOverflow の記事
    - [How to display a dynamically allocated array in the Visual Studio debugger?](http://stackoverflow.com/questions/75180/how-to-display-a-dynamically-allocated-array-in-the-visual-studio-debugger)


# 解２

`cv::Mat.data` を 3x3 要素の2次元 `float` 配列にキャストして表示する。

ウォッチ式： `(float (*)[3][3]) eye.data`

![watch2.png](https://qiita-image-store.s3.amazonaws.com/0/50772/cb05be8b-ee2d-77b7-57e3-a8e8f339fa58.png)

こちらの方が素直ですかね！

型は `float [3][3] *` という風にポインタ扱いになる模様。
同じ手は、3次元配列にも通用します。


# まとめ

ウォッチ式でキャストを工夫すると、Continuous な cv::Mat の中身を簡単に確認することができる。

おわり。
VMWareで、CentOS7を簡易インストール

VMWareの簡易インストールは、手っ取り早くCentOS環境を作りたい場合に便利です。
自動でvmware-toolsも入ります。
カスタムインストールみたいに、後からカーネルヘッダを準備する必要もありません。

１．言語選択と日本語入力ソースの追加
初回起動時は英語なので、日本語に切り替えます。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/76564/41428153-d4e7-c8d1-b2f4-ec954ea00057.png)
「日本語」を選択→「次へ」ボタンをクリック。

次に、入力ソースから「英語(us)」を削除して「日本語」を追加します。
（「日本語(Kana Kanji)」はそのまま残します）
![2.png](https://qiita-image-store.s3.amazonaws.com/0/76564/afed4f10-e7c7-8828-eee6-88fca56a98c9.png)
「英語(US)」を選択→「-」ボタンをクリックする。
「+」ボタンをクリック→入力ソースの選択から「日本語」を選択→「日本語」を選択→「追加」ボタンをクリックする。「次へ」ボタンをクリックする。

すると「コンピュータを使用する準備ができました。」と表示されますが、これは嘘です。
（設定を反映するには、再ログインが必要です）
![1.png](https://qiita-image-store.s3.amazonaws.com/0/76564/7add7045-eb86-7e68-c49c-6814a149eef9.png)
「Start using CentOS linux」ボタンを押してメッセージを閉じてください。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/76564/725df5eb-f10a-5dee-b838-e64281ea3b58.png)
その後表示される「GNOME Help」も閉じてください。
設定を有効にするために、一度ログアウトして、再ログインしましょう。

表示が日本語に切り替わりました。
フォルダ名を日本語に切り替えるかどうか聞いてくるので、素直に切り替えましょう。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/76564/818a809e-750e-5113-bbfd-95871ed9d3d4.png)
「名前を更新する」ボタンをクリックする。

★ここで重要ポイントです。
Windowsボタン+スペースなどで、入力モードを「日本語(Kana Kanji)」から「日本語」に切り替えて、もう一度「日本語(Kana Kanji)」に戻してください。
これをやらないと、キーボードレイアウトの設定が反映されずに英語キーボードになっている事があります。

２．タイムゾーンを日本に設定する。
次に表示時間のずれを直しましょう。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/76564/baa63393-3c92-d98f-4c3c-af016d118254.png)
右上の曜日と時間の部分をクリックして、「日時の設定」を選択する。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/76564/33ae7fc4-6eed-fd20-951d-5b1c5e11ac29.png)
「ロック解除」ボタンをクリックする。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/76564/04976299-f6f1-d493-8e93-0d364df7e5ba.png)
地域は「アジア」、都市は「東京」を選択して「ロック」ボタンをクリックする。

これで、設定は完了です。
unsigned.apkに署名をつける

外部サービスの人から送られてきたサンプルapkが無署名のapkだったりすると、試しにインストールすると以下のような署名がないよエラーがでます。


```shell-session

$ adb install -r Demo-release-unsigned.apk 
1955 KB/s (1538499 bytes in 0.768s)
	pkg: /data/local/tmp/Demo-release-unsigned.apk
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
```
署名付きのサンプルくれよ…って思うのですが、自分で付ける方法もあります。

##やり方
### 1. zipalignしたapkファイルを生成する
まずは、apkが適切に動作するようにzipalignしたapkを作ります。zipalignについては[こちら](http://qiita.com/kazuqqfp/items/8eae69e309c6ed75d661)に詳しいです。

```shell-session

$ /Applications/sdk/build-tools/21.1.1/zipalign -v 4 Demo-release-unsigned.apk Demo-release-unsigned_c.apk
```

### 2. debugkeyを生成する

```shell-session
keytool -genkey -v -keystore debug.keystore -alias hoge -keyalg RSA -keysize 2048 -validity 20000
```
名前、組織などなど問われますが検証なので適当に記入します。パスワードだけ覚えておきます。

### 3. apkに適用する
[jarsigner](https://docs.oracle.com/javase/jp/1.4/tooldocs/win32/jarsigner.html)を使って署名を適用します

```shell-session

$jarsigner -verbose -keystore debug.keystore Demo-release-unsigned_c.apk hoge(キー作成時に設定したalias名)

キーストアのパスワードを入力してください: 
   追加中: META-INF/MANIFEST.MF
   //...
```

以上です。
弥生会計のCSVフォーマット

弥生会計のCSVフォーマットです。備忘録的に

```弥生会計.CSV
"識別フラグ","伝票No.","決算","取引日時","借方勘定科目","借方補助科目","借方部門","借方税区分","借方金額","借方税金額","貸方勘定科目","貸方補助科目","貸方部門","貸方税区分","貸方金額","貸方税金額","摘要","番号","期日","タイプ","生成元","仕訳メモ","付箋1","付箋2","調整"
```

こちらの記事を参考にしました。ありがとうございます。
[CSVエクスポートと弥生会計フォーマット対応表](http://crowdcast.desk.com/customer/portal/articles/651979-csv%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%81%A8%E5%BC%A5%E7%94%9F%E4%BC%9A%E8%A8%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E5%AF%BE%E5%BF%9C%E8%A1%A8)
Gitのリモートリポジトリの名前を付け替える　〜Railsのアップグレードを例にして〜


git-flowで開発をしていて、master, develop, 各フィーチャーブランチというような状況で、
大きな変更、たとえばRails3.2からRails4系に上げるなどをした場合に
通常のdevelopにマージするより、featureブランチをdevelopにしたほうがよい。

理由はこんな感じ
* developで別のエラー修正をしてcommitが先に進んでいるなんてあると、マージ時にデグレード起こす危険性がある
* develop進んだ部分のマージはdevelopからフィーチャーブランチに対して、ローカルで丁寧に1ファイルずつ確認するするのが安全

今回はrails3.2のdevelopのプロジェクトを、feature/rails4.2というRails4.2版のFeatureブランチをdevelopにするのを例に上げる(例に上げるというか、最近それやっただけだけど)

----


### 前提条件

#### 動作環境
* クライアント: Mac OS X10.10
* リモートリポジトリのホスティング先: Github
* リポジトリのスタイルはgit-flowで開発
* ※ gitでリモート管理していればだいたいどの環境でも大丈夫だろう

#### 求めるbranchの形

| 旧 | 新 |
|:--|:--|
|develop | rails3.2|
|feature/rails4.2 | develop|
|master(旧developと同じcommit番号)| master(新developと同じcommit番号)|


### 作業一覧
1. ローカルgitブランチのリネーム
	2. developをrails3.2にする 
	3. rails4.2のフィーチャーブランチをdevelopへリネームする
2. リモートgitブランチのリネーム
	3. 新rails3.2(旧developブランチ)ブランチをリモートブランチに置く
	4. 新develop(旧rails4.2ブランチ)ブランチをリモートブランチに置く
3. リモートmasterブランチをdevelopと同じにする
 

## ローカルgitブランチのリネーム

### developをrails3.2にする

```sh
# developをrails3.2へリネームする
> git branch -m develop rails3.2 

# リネームされていることを確認
> git branch | grep rails3.2
rails3.2
```

### rails4.2のフィーチャーブランチをdevelopへリネームする

```sh
> git branch -m feature/rails4.2 develop

# リネームされていることを確認
> git branch | grep develop
develop
```

##リモートgitブランチのリネーム

ローカルのgitブランチ内ではリネームは完了しているが
リモートgitブランチはまだ以下の様な状態である

* remote側には、rails3.2ブランチがまだなく、
* developには古いRails3.2版のブランチがいることになる


### 新rails3.2(旧developブランチ)ブランチをリモートブランチに置く

```sh
> git push origin rails3.2 

> git branch -r | grep rails3.2
```



### 新develop(旧rails4.2ブランチ)ブランチをリモートブランチに置く

```sh
# -f オプションを付けて強制的にpushしないと、別ブランチなので怒られる
git push origin develop -f

> git branch -r | grep develop

# リネーム前のfeature/rails4.2リモートブランチを削除する
git push --delete origin feature/rails4.2

```

## リモートmasterブランチをdevelopと同じにする
git masterのブランチも

### ローカルのmaterブランチを削除して、developからmasterブランチを作る

```sh
> git branch -d master
# developブランチをに移動して 
> git checkout develop
# master ブランチを再度構築する
> git branch master
```

### masterブランチを、リモートのmasterブランチにpushする

```sh
# masterブランチへ移動
> git checkout master
# ローカルのmaterブランチを、リモート監視させつつpushするが、既存のmasterブランチがあるため-f　オプションを付ける
> git push -u origin master -f
```


#### 参考文献
ref:[リモート操作](http://www.backlog.jp/git-guide/reference/remote.html)
ref:[[Git] ローカルとリモートのブランチ名を変更する](http://www.d-wood.com/blog/2014/04/01_5945.html)
【国内】IoTソリューション(娯楽)

##coconachi(ユカイ工学)

![スクリーンショット 2015-04-27 13.39.15.png](https://qiita-image-store.s3.amazonaws.com/0/74972/c40497c7-a61f-7bbe-27fb-7840c48714b8.png)

http://www.coconatch.com/

- facebookやtwitterと連携している。通知やメッセージを受信すると、色や動きでデバイスが反応して通知する。

##望遠メガフォン

![スクリーンショット 2015-04-27 14.27.19.png](https://qiita-image-store.s3.amazonaws.com/0/74972/58717ae7-ffdf-57b4-2106-0d90b06827a7.png)

http://www.fujixerox.co.jp/company/ad/4d-project/megaphone.html

- スコープで照準を合わせて喋ると、遠く離れた相手にも声が届く。
【国内】Iotソリューション(デバイス)

## konashi

![スクリーンショット 2015-04-27 13.33.43.png](https://qiita-image-store.s3.amazonaws.com/0/74972/42fc349c-270f-6aef-65ec-27315a082780.png)

http://www.ux-xu.com/product/konashi

- スマホ・タブレット端末を連携端末として想定したフィカルコンピューティングのためのツールキット。
- JavaScript、Objective-Cで制御できる。

- 備える機能の一覧は以下。
![スクリーンショット 2015-04-27 13.37.34.png](https://qiita-image-store.s3.amazonaws.com/0/74972/e278c065-5fb4-e082-1c4d-9bd3ba05bc32.png)
【海外】IoT 関連情報

## Asia Pacific の Internet of Things (IoT) 

![スクリーンショット 2015-04-27 13.01.47.png](https://qiita-image-store.s3.amazonaws.com/0/74972/1ab7aa23-5a6e-e399-a1cf-38f856171730.png)


- 大手 ICT ベンダーに加えてスタートアップの注目を集めている。つまり、誰もが、成長していく IoT マーケットで、シェアを掴もうとしている状態にあるらしい。(APSC)。
- 今後重要なのは、複数の業界にまたがるソリューション・ポートフォリオのための細分化である。
- セールスとマーケティングを整理していかないと効果的なソリューションにはならない。
-  メモ: バックボーンはHuawei や ZTEに委ねられるかもしれない。

## IoTはダボス会議の提唱した「ソフトウエアドリブン」の「アウトカム・エコノミー」に注目

![スクリーンショット 2015-05-01 8.17.09.png](https://qiita-image-store.s3.amazonaws.com/0/74972/0dd12970-1d8c-9270-24ac-1c21a3addfb4.png)

http://blogs.itmedia.co.jp/borg7of9/2015/04/iot_5.html

- 今後のIoTの発展の順序がダボス会議によって提唱された。
- 1、 第一段階　オペレーショナル・エクセレンシーの実現
-  工業、農場、ヘルスケアの領域で効率化効果が現れ、生産性が向上される。特に予防保守や遠隔資産管理系統の効率化向上が挙げられる。
- 2、 第二段階　新製品と新サービス
- ネットがより発達したこと(ソフトウェア・ドリブン)により、これまで不可能だった新製品、新サービスが誕生する。
- 3、 第三段階　成果型経済（Outcome Economy）
- 産業インターネット分野のプラットフォーム型エコシステムの完成し、かつ新しいお客様とのよりコネクテッドな環境ができる。例えばコマツ(例:鉱山機械の自動運転)のような同じプラットフォームの上で顧客企業と同じ目線を持つパートナー関係が重要になる。
- 4、第四段階　自動化の徹底、予測需要に基づくプル型経済
- エンドからエンドまで自動運転、自動監視などスマート機器による自動化が実現する。予測に基づく経済が主流になっていく。

## 富士通･山本社長「IoTは､やった者勝ち」

![スクリーンショット 2015-05-01 9.07.16.png](https://qiita-image-store.s3.amazonaws.com/0/74972/ed27970c-93c6-3e03-eced-82af2fed0106.png)
 
- http://toyokeizai.net/articles/-/56279

- IoTのシステム構築から機器まで一貫で提供
- 主にターゲットはBtoB向け。
- 力を入れていく分野はMVNOやSIMフリーのスマホの需要の取り組み。また、医療・健康関連や農業関連にも力を入れていく予定。
複数のhtmlファイルの文言を一発で置換した時のメモ

先日、htmlファイル内のhttpを全てhttpsにする必要があり

その際に使用したワンライナーをメモ。

下記で、htmlディレクトリ以下のhtmlファイルのhttpを全てhttpsに置換してくれる。

```find html -type f -name "*.html" | xargs sed -i 's/http:/https:/g'```



実行前にバックアップをとっておく場合は下記
```mkdir ./bak_dir
find html -type f -name "*.html" | xargs -i cp {} ./bak_dir```
Office365 ODTの使い方メモ

Office365アカウントを作る（Microsoftアカウントが必須のよう）
Microsoft Office 365 ProPlus? 
https://technet.microsoft.com/ja-jp/evalcenter/hh973391.aspx

プラン一覧
https://products.office.com/ja-jp/business/compare-office-365-for-business-plans

クライアントにOfficeを展開するために「クイック実行」を利用する
https://technet.microsoft.com/ja-JP/library/jj219427.aspx 

クイック実行を使うためODT（オフィス展開ツール）をダウンロードする
http://www.microsoft.com/en-us/download/details.aspx?id=36778
（解凍するとexeファイルとxmlファイルだけが出てくる。このxmlファイルを編集していく。）

Office 365 クイック実行インストールのカスタマイズおよび展開の方法
https://technet.microsoft.com/ja-jp/library/jj219422.aspx
 
設定ファイルカスタマイズ方法
http://technet.microsoft.com/ja-jp/library/jj219426.aspx

クイック実行用 ツールの利用方法
製品と言語のインストール ソースを社内の場所にダウンロードするには、<b>download モード</b>を使用する。
>\>setup.exe /download \<path of Configuration.xml file\>

製品と言語を構成およびインストールするには、<b>configure モード</b>を使用する。
>\>setup.exe /configure \<path of Click-to-Run Configuration.xml file\>

App-V パッケージを クイック実行 インストール ソースから作成するには、<b>packager モード</b>を使用する。
>\>setup.exe /packager \<Configuration.xml file path\> \<output path\> 




XML編集とコマンド実行方法
###configuration_dl.xml(ダウンロード用)
```
<Configuration> 
 <Add OfficeClientEdition="32"> 
   <Product ID="O365ProPlusRetail" >
   <Language ID="ja-jp" />
   </Product>
 </Add>
   <Logging Path="\\Server\Office365\log" />
</Configuration>
```

SouecePath :ソースの保存先を指定を削除。指定しない場合、setup.exeと同じ場所になる。
OfficeClientEdition :Office2013 クイック実行 製品のエディションの指定。（32bit or 64bit）
これを管理者権限のあるユーザのデスクトップなどに置く。

ダウンロードコマンド
ファイルサーバ上にsetup.exeとxmlを用意してダウンロードを実行すると非常に時間が
かかってしまったので、デスクトップで実行した。
デスクトップにコピー(ODTフォルダ)し、コマンドラインから下記のようにコマンドを実行する。
>\> cd C:\Users\administrator\Desktop\ODT
>\> setup.exe /download configuration_dl.xml

C:\Users\administrator\Desktop\ODTに 「Office」フォルダが出来る。１５分くらいかけて約1.7GBがダウンロードされる。

###configuration_install.xml(インストール用)
```
 <Configuration>
 <Add SourcePath="\\Server\Office365\source" OfficeClientEdition="32">
    <Product ID="O365ProPlusRetail">
      <Language ID="ja-jp" />
      <ExcludeApp ID="InfoPath" />
      <ExcludeApp ID="Groove" />
      <ExcludeApp ID="OneNote" />
      <ExcludeApp ID="Publisher" />
      <ExcludeApp ID="SharePointDesigner" />
      <ExcludeApp ID="Project" />
      <ExcludeApp ID="Visio" />
      <ExcludeApp ID="Lync" />
    </Product>
 </Add>
  <Updates Enabled="TRUE" UpdatePath="" />
  <Display Level="None" AcceptEULA="TRUE" />
  <Logging Path="\\Server\Office365\log" />
 </Configuration>
```
SourcePathでソースの場所を指定する。ダウンロードされた「Office」を指定の場所にコピーしておく。
ExcludeApp IDでインストールしない製品を指定する。
Updateのコメントを外し、UpdatePathを空にしてマイクロソフトから取得するように設定。 
Display Levelのコメントを外し、使用許諾契約に同意。
Loggingのコメントを外し、ログ保存場所を指定。 

デスクトップのODT配下にできたOfficeフォルダを\\\Server\Office365\source 配下に移動
ODT（setup.exeとxmlファイル）は\\\Server\Office365\ODT 配下に保存し、
インストールコマンド (ファイルサーバにsetup.exeとxmlを置く場合)を実行。
 > \\\Server\Office365\ODT\setup.exe /configure \\\Server\Office365\ODT\configuration_install.xml
Git/GitHubの逆引きTipsリンク集

git/githubで○○したい、な時の逆引き用リンク（自分用)

# ディレクトリ名を変更したい
Gitでファイル名&ディレクトリ名の大文字/小文字を変更方法
http://qiita.com/narumi888/items/95b5a050cd3d20dab81c

# コミット先のブランチを間違えた
Gitでブランチを作るのを忘れてmasterにコミットしてしまったときの対処法
http://qiita.com/atskimura/items/a90dfa8bfc72e3657ef9

# ブランチ名を間違えた
Git でブランチ名を変更する
http://easyramble.com/modify-git-branch-name.html

# プルリクエストを取得する
github の pull req ブランチを手元に持ってくる方法
http://qiita.com/sonots/items/16df445132e704198e3e

```
EC-CUBEのPRを取得するばあい
git fetch upstream  '+refs/pull/*:refs/remotes/pull/*'
git checkout pull/764/head
```

# ブランチを間違って消してしまった
http://qiita.com/hikutsu/items/33be3987c100ebcd1547
searchkickで多対多のデータを同期的にインデックスさせる

ElasticseachをRubyから扱えるようになる[searchkick](https://github.com/ankane/searchkick)というgemがある。

このgemには、例えばUserというモデルにデータが追加されるとそれと同時にElasticsearch側にそのインデックスを作ってくれる便利機能がある。

また、Userを親に持つAddressという子モデルがある場合も以下のように書くとUserに紐づくAddressが新規に追加されたとき同時にインデックスを作成してくれる。

```
class Address < ActiveRecord::Base
  belongs_to :user

  after_commit :reindex_user

  def reindex_user
    user.reindex
  end
end
```

1対1や多対1のような関連の時にはこのやり方でいいのだけど、多対多のときは少し工夫が必要になる。

例えば、
(親)Article
(中間)ArticleTagging
(親)Tag
のような多対多の構成の関連があったとき、Articleに紐づくTagが追加されたときにそのTagをインデックスしたいとする。

公式のやり方に則ると下記のようになるけれども、

```
class Tag < ActiveRecord::Base
  has_many :article_taggings
  has_many :articles, through: :article_taggings

  after_commit :reindex_article

  def reindex_article
    article.reindex
  end
end
```

これだとうまくいかない。

多対多でもうまく同期的にインデックスさせるためには、下記のように中間モデルに記述する。

```
class ArticleTagging < ActiveRecord::Base
  belongs_to :tag
  belongs_to :article
  after_commit :reindex # after_saveだとFactoryGirlを使っているときにコケる

  def reindex
    article.reload.reindex
  end
end
```

これでうまくいく。

【参考】

- [searchkick](https://github.com/ankane/searchkick)
- [Rails, SearchKick and ActAsTaggableOn](http://jeremymarc.github.io/2014/08/18/rails-searchkick-and-actastaggableon/)
sortコマンドのバグ？

何の変哲もないテキストファイル

```
$ cat a.txt
012
-012
-123
123
124
```

ソートしてみます

```
$ sort a.txt
012
-012
123
-123
124
```

えっ？？

環境は以下です。

```
$ sort --version
sort (GNU coreutils) 8.21
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and Paul Eggert.
$ cat /proc/version
Linux version 3.13.0-49-generic (buildd@akateko) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #83-Ubuntu SMP Fri Apr 10 20:11:33 UTC 2015
```
ベクトルの角度を求める

三角関数とかもう覚えてないわーってことでメモ。
原点から x, y の座標へのベクトルが x 軸から何度あるのか求めるのを javascript で。
（chrome の console で気軽に求められるので）

```js
calculate_cosine = function (x, y) { return x / Math.sqrt(x*x + y*y); };
calculate_radian = function (cos) { return Math.acos(cos) / (Math.PI / 180); };
```

座標 x = 50, y = 20 のときはこうなる。

```js
> calculate_radian( calculate_cosine(50, 20) );
21.80140948635181
```
Qiita::Teamとesaの料金比較


単純に料金のみを比較する（2015/4/27現在）


![image.png](https://qiita-image-store.s3.amazonaws.com/0/7676/3992a69e-552c-b38a-9301-f621322fe3ab.png "image.png")


|  人数 | qiita | esa |
|  ------- | ------- | ------- |
|  1 | 1490 | 500 |
|  2 | 1490 | 1000 |
|  3 | 1490 | 1500 |
|  4 | 4800 | 2000 |
|  5 | 4800 | 2500 |
|  6 | 4800 | 3000 |
|  7 | 4800 | 3500 |
|  8 | 6900 | 4000 |
|  9 | 6900 | 4500 |
|  10 | 6900 | 5000 |
|  11 | 15000 | 5500 |
|  12 | 15000 | 6000 |
|  13 | 15000 | 6500 |
|  14 | 15000 | 7000 |
|  15 | 15000 | 7500 |
|  16 | 15000 | 8000 |
|  17 | 15000 | 8500 |
|  18 | 15700 | 9000 |
|  19 | 16400 | 9500 |
|  20 | 17100 | 10000 |
|  21 | 17800 | 10500 |
|  22 | 18500 | 11000 |
|  23 | 19200 | 11500 |
|  24 | 19900 | 12000 |
|  25 | 20600 | 12500 |
|  26 | 21300 | 13000 |
|  27 | 22000 | 13500 |
|  28 | 22700 | 14000 |
|  29 | 23400 | 14500 |
|  30 | 24100 | 15000 |
|  31 | 24800 | 15500 |
|  32 | 25500 | 16000 |
|  33 | 26200 | 16500 |
|  34 | 26900 | 17000 |
|  35 | 27600 | 17500 |
|  36 | 28300 | 18000 |
|  37 | 29000 | 18500 |
|  38 | 29700 | 19000 |
|  39 | 30400 | 19500 |
|  40 | 31100 | 20000 |
|  41 | 31800 | 20500 |
|  42 | 32500 | 21000 |
|  43 | 33200 | 21500 |
|  44 | 33900 | 22000 |
|  45 | 34600 | 22500 |
|  46 | 35300 | 23000 |
|  47 | 36000 | 23500 |
|  48 | 36700 | 24000 |
|  49 | 37400 | 24500 |
|  50 | 38100 | 25000 |


- https://teams.qiita.com/pricing
- https://esa.io/pricing
Scalaのラムダ式の_ぽい事をRubyでする便利Gemを作ったヨ！

# Kasen
![kasen.png](https://qiita-image-store.s3.amazonaws.com/0/30440/7ac5c816-ad6d-dd62-1783-a2c435455fde.png)

Kasen(下線)という名前のGemです.
↑は僕が２時間くらいかけて作ったGemのロゴマーク的なやつです.
（両端の曲度に拘りアリ）

Github: https://github.com/gogotanaka/_
Rubygems: https://rubygems.org/gems/kasen

# タイピング量が0.2%減る

`0.2%`て響きが好きなだけで実際はもっとあるかも！？

    echo "gem 'kasen'" >> Gemfile; bundle

or

    gem install kasen



```rb
require 'kasen'

# 以下の２つは等しい
[[1, 2], [3, 4]].map &_[1]
[[1, 2], [3, 4]].map { |ary| ary[1] }

# 以下の２つは等しい
['0', '1', '2'].select &_.to_i.zero?
['0', '1', '2'].select { |s| s.to_i.zero? }

# 以下の２つは等しい
[['1', '2'], ['3', '4']].map &_.select(&_.to_i.eql?(1))
[['1', '2'], ['3', '4']].map { |ary| ary.select { |n| n.to_i.eql?(1) } }

# 以下の２つは等しい
[1, 2, 3].map &_ + 1
[1, 2, 3].map { |n| n + 1 } 

```

上の４つの例から雰囲気は掴んで頂けたと思うのですが、bodyがメソッドチェーンからなる1引数のブロックを`_`をチェーンにして楽々生成してます.

```rb
{ |x| x.method1('arg1').method2('arg2-1', 'arg2-2') }
```

一般に引数が１つでbody内でその引数に対してメソッドをチェーンするようなBlockは

```rb
&_.method1('arg1').method2('arg2-1', 'arg2-2')
```

に書き換える事が出来ます.

note: `_`が他の役割を果たす場合にはエイリアスである`k`を使ってください！
（`irb` の`_`は潰したのでチョロっと何かいじる時に力を発揮すると思います.）


```rb
[[1, 2], [3, 4]].map &k[1]
```

（ちょっとカッコ悪い...）

見た目がちょっとキモかったらパーレンを付けるとイイ感じに！！！

```rb
[1, 2, 3].map &(_ + 1)
#=> [2, 3, 4]
```



`[1,2,3].map &:to_s` のメソッドチェーン、引数取る版程度に考えて頂ければなと.


# 意味論的にもより好ましい

pure Rubyでも

```rb
[1, 2, 3].map { |n| n.to_s }
```

よりも

```rb
[1, 2, 3].map &:to_s
```

が好まれるようにブロックを無名関数的に使う際には自明な引数や変数は省略する方がその意味論からしても好ましい.

といった種の文脈は

メソッドチェーンや

```rb
[1, 2, 3].map { |n| n.to_s.length }
```

引数を取るメソッド

```rb
[1, 2, 3].map { |n| n + 1 }
```

にも適応されるべきで、

```rb
[1, 2, 3].map &_.to_s.length
[1, 2, 3].map &_.+(1)
```

みたいにかけるべきですよね、といった話は至って自然に思われる.

# `_` について
`_` は思わぬところで予約されているので注意が必要です.

そもそもそのスコープで変数として存在していると非常に面倒です.（なんとかしたい）

エイリアスである`Kernel#k` を使ってもいいですが見た目的に`_`がいいですよね.


# めちゃクリーン
この手のハック系のやつはなんとなく自身の大事なコードに持ち込むのがためらわれますが、

50行ほどのコードですので、こんなGemをインストールせずとも、ご自身で読み解いて忍ばせてもOKですb

# 仕組みちゃん

仕組みを簡単に説明します.

すべての組み込みメソッドを取り除いた`EmptyObject`クラスを作ります.

```rb
class EmptyObject
  # 警告を潰す
  verbose, $VERBOSE = $VERBOSE, nil
  begin
    instance_methods(true).each { |meth| undef_method(meth) }
    private_instance_methods(true).each { |meth| undef_method(meth) }
  ensure
    $VERBOSE = verbose
  end
end
```

これで`EmptyObject` クラスのオブジェクトに対するメソッド呼び出しは全てメソッドmissingでひっかけられるようになりました.

`Context ` クラスをこんな感じで作る.

```rb
class Context < EmptyObject
    def initialize
    @__kasen__ = Proc.new { |o| o }
  end

  def to_proc
    @__kasen__
  end

  def method_missing(name, *args, &block)
    __kasen__ = @__kasen__
    @__kasen__ = Proc.new { |o| (__kasen__.(o)).send(name, *args, &block) }
    self
  end
end
```

全くの空である`Kasen::Context`クラスのオブジェクトに対してメソッドが呼ばれる度に、そのコンテキストを再帰的にProcに詰めて最後ひとつのProcにして取り出すという感じです.

あとは`Kernel#_`に`Kasen::Context.new` を生やすとかそんな感じ！


```rb
module Kernel
  def _; Kasen.new; end
end
```


`IRB`のように変数`_`が使われている環境では

```rb
class ContextGenerator < EmptyObject
  def initialize
  end

  def method_missing(name, *args, &block)
    Kasen::Context.new.send(name, *args, &block)
  end
end
```

みたいな`Context`を発生させるやつを`_`に渡しておきましょう.
JSで切り替えたページにBackで戻れるようにする

ページを読み込み直さずにJavaScriptでタブ切り替えやページャーで表示を変えた場合、そこからリンクをクリック等で別のページに遷移した後にブラウザのBackやhistory.backで戻って来ると、初期表示のページになってしまいます。
そこで、HTML5で導入された`history.replaceState()`を使って現在の履歴を表示状態を含むものに書き換えて、Backで遷移直前の表示状態に戻れるようにします。

以下、jquery.pajinateを使ったページングがあるページを例に挙げます。

```html:index.html
<div id="link-list">
    <ul class="content">
        <li><a href="path/detail/page1.html">リンク1</a></li>
        <li><a href="path/detail/page2.html">リンク2</a></li>
        ・・・
        <li><a href="path/detail/page29.html">リンク29</a></li>
        <li><a href="path/detail/page30.html">リンク30</a></li>
    </ul>
    <div class="page_navigation"></div>
</div>

<script type="text/javascript" src="/js/jquery.pajinate.min.js"></script>
<script type="text/javascript">
$(function(){
    var total_items = 30;
    var current_page = 1;
    var target_page = 0;
    var total_page = Math.ceil(total_items / 5);
    // ハッシュを元に表示するページを決定
    if (location.hash.match(/^#page-(\d)$/)) {
        if (0 < RegExp.$1 && RegExp.$1 <= total_page) {
            target_page = RegExp.$1 - 1;
        }
    }
    $('#link-list').pajinate({
        items_per_page : 5,
        num_page_links_to_display : 10,
        start_page : target_page,
        onPageDisplayed : function (n) {
            current_page = n;
        }
    });
    $('ul.content>li>a').click(function() {
        // ページ遷移前に履歴上の現在のURLを書き換える
        history.replaceState(null, 'title', location.protocol + '//' + location.host + location.pathname + location.search + '#page-' + current_page);
    });
});
</script>
```

例えば、index.htmlの2ページ目を見ているとします。
`<a href="path/detail/page7.html">リンク7</a>`をクリックして遷移する場合、履歴に残る現在のページはindex.htmlですが、`history.replaceState()`で、ページ番号を含めたハッシュ『#page-2』を追加したものに書き換えています。
履歴が書き換えられたので、page7.htmlに遷移した後にBackで戻ると、index.html#page-2に戻ってくることになり、ハッシュの『#page-2』からtarget_page(0から始まるので1引いています)を決定してstart_pageを指定し、2ページ目が表示されることになります。
gulp-sass から gulp-ruby-sass へ

『[これからはじめるGulp #9：Ruby版Sassが使えるgulp-ruby-sassへの乗り換え](http://dev.classmethod.jp/client-side/javascript/gulp-solo-adv-cal-09/)』 こんな記事があったので、gulp-ruby-sass に変更してみる。

そして、gulp-ruby-sass 1.0.0 からタスク自体の書式が変更になったようだ。
旧書式で記述されている記事が多いので注意。
⇒　[gulp-ruby-sass 1.0.0 から記述方法が変わるらしい](http://bunlog.d-s-b.jp/2015/01/26/regulate-gulpfile-to-use-gulp-ruby-sass/)
⇒　[Gulp TypeError: Arguments to path.join must be strings](http://stackoverflow.com/questions/28140012/gulp-typeerror-arguments-to-path-join-must-be-strings)

タスクの書式　gulp.src ⇒ sass に変更。
それに伴いオプションの設定書式も変更。
↓ 旧書式

```gulpfile.js
gulp.task('sass', function() {
    return gulp.src('scss/*.scss')
        .pipe(sass({ style: 'expanded' })
        .pipe(gulp.dest('./public/css'));
});
```

↓ ver.1.0.0 からの書式

```gulpfile.js
gulp.task('sass', function() {
    return sass('scss/', { style: 'expanded' })
        .pipe(gulp.dest('./public/css'));
});
```

[gulp-ruby-sass 1.0.0 から記述方法が変わるらしい](http://bunlog.d-s-b.jp/2015/01/26/regulate-gulpfile-to-use-gulp-ruby-sass/)
こちらの記事にご親切にも書いてありますが、ファイル名にアスタリスクや配列を利用するのがNGになったようです。
scss/*.scss　⇒　こういう指定はNG。
viewのrspecでrenderを複数回呼ぶ方法

分かるまでに時間がかかったので、共有します。

#方法
`rendered.class == String`なので、`rendered.clear`をします。

#使用例
マッチする文字列の数を数えないと、表示されていることの確認ができないカラムをテストする場合

````spec/equipments/show.html.erb_spec.rb
describe "books/show", type: :view do
  before do
    @book = Book.new
  end

  it '販売累計が表示されること' do
    old_sold_count = 1
    new_sold_count = 2

    @book.sold_count = old_sold_count
    render

    expect(rendered).to match old_sold_count.to_s
    before_old_sold_count = rendered.scan(old_sold_count.to_s).count
    before_new_sold_count = rendered.scan(new_sold_count.to_s).count

    @book.sold_count = new_sold_count
    # renderedを消してから、再度render
    rendered.clear
    render

    after_old_sold_count = rendered.scan(old_sold_count.to_s).count
    after_new_sold_count = rendered.scan(new_sold_count.to_s).count
    expect(after_old_sold_count - before_old_sold_count).to eq(-1)
    expect(after_new_sold_count - before_new_sold_count).to eq(1)
 end
end
````

#まとめ
`rspec view render twice`とかでググっても情報が出ませんでしたが、`rendered`は`string`なので、この方法で問題ないと思います。

以上、誰かのお役に立てれば幸いです。

#参考
https://www.relishapp.com/rspec/rspec-rails/v/3-2/docs/view-specs/view-spec
WKWebViewでAirPrintした話と、MacをAirPrintサーバーにしてMacのプリンタでAirPrintした話

Stack OverflowにUIWebViewでAirPrintする話が載っていた（[airprint - iOS Air print for UIwebview - Stack Overflow](http://stackoverflow.com/questions/6544733/ios-air-print-for-uiwebview)）ので、同じようにWKWebViewで出来るかやってみた。

出来た。

## WKWebViewでAirPrintした話

以下、WKWebViewのインスタンスは`self.wkWebView`。

```
    UIPrintInfo *pi = [UIPrintInfo printInfo];
    pi.outputType = UIPrintInfoOutputGeneral;
    pi.jobName = self.wkWebView.title;
    pi.orientation = UIPrintInfoOrientationPortrait;
    pi.duplex = UIPrintInfoDuplexLongEdge;
    
    UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
    pic.printInfo = pi;
    pic.showsPageRange = YES;
    pic.printFormatter = self.wkWebView.viewPrintFormatter;
    [pic presentAnimated:YES completionHandler:^(UIPrintInteractionController *pic2, BOOL completed, NSError *error) {
        // indicate done or error
    }];
```

## MacをAirPrintサーバーにしてMacのプリンタでAirPrintする

AirPrint対応のプリンタがない開発環境では、
MacをAirPrint Serverにして、
Macに接続されたプリンタからAirPrintすることが出来る。

[Netputing » handyPrint v5]
(http://www.netputing.com/applications/handyprint-v5/)は、MacをAirPrintサーバーにしてくれるアプリ。

![スクリーンショット-2015-04-27-11.33.39.png](https://qiita-image-store.s3.amazonaws.com/0/26921/189f551f-24a5-9ae1-1b4b-05348daaa4c2.png)


上手くいかない場合、設定>共有>プリンタ共有 を有効にする必要があるかも。
【海外】Iotソリューション(ツール)

## 高速処理の視覚化ツール(Tableau)

![スクリーンショット 2015-04-27 11.24.56.png](https://qiita-image-store.s3.amazonaws.com/0/74972/634710da-d8c5-1002-bd63-18801b665d1f.png)

http://www.tableau.com/about

- Iotツールソリューション
- データを採取した際の視覚化及びデータを集めた後のダッシュボードの作成を数分で、共有を数秒で行う。
- プログラミングの必要がない。

- 導入例:

![スクリーンショット 2015-04-27 11.35.12.png](https://qiita-image-store.s3.amazonaws.com/0/74972/10f7937a-b855-ea2b-d040-a87ced23a7bd.png)
![スクリーンショット 2015-04-27 11.35.03.png](https://qiita-image-store.s3.amazonaws.com/0/74972/702a56a4-4789-0f14-e10b-5a7b0b7cfcfa.png)



- ①カンファレンスに関するツイートの時系列推移、②誰が最もアクティブなユーザーであったか、③誰がトップインフルエンサーであったか、④時系列順の具体的なツイート が閲覧できる。

- メモ：無印食品が導入している。

- Iot ツールソリュション
- ボードの大きさは28.2ミリ、400Mhz動作のMIPS、64Mバイトメモリ、16Mバイトストレージ、無線/有線LAN、USB2.0が搭載されている。
- Linux環境から動作、JavascriptやPHP、Python、Rubyなどの複数の言語による開発が可能。

## TrapX 360 Platform(TrapX Security社)

![スクリーンショット 2015-04-27 14.10.29.png](https://qiita-image-store.s3.amazonaws.com/0/74972/9c1e9bbc-8405-980a-8541-ff92e219b67f.png)

- 仮想ハニーポットを備えていてハッカーの攻撃を検知すると、ハッカーの攻撃対象をまねたシステムが起動、そっちにハッカーを誘導する。
- その後、正式ネットワークに介入しないようにする。サンドボックスのみでしか動作できないようにする技術。