OmniAICreator/Qiita-1.07M huggingface dataset:
ベクトルOAとOBでなす、斜交座標系上に、新たな点Pが生成されたときの、点Pが第一象限にあるか判定する。

# なにがしたいか。
ランダムに生成された３点からできるエリアと、
適当に決めた点Pが重なるかどうかを調べたい。
ということを、javascript上で計算したい。

# ようするにこんな事。

![IMG_1271.JPG](https://qiita-image-store.s3.amazonaws.com/0/62259/650f0527-8801-c9ff-aed3-18a55029783b.jpeg)

上記写真をベースに書きます。
ランダムに生成された点というのは、``` 点O 点A 点B```のこと。

適当に決める点が、```点P```のこと。

点Oを起点にしたエリア（赤い斜線部分）に、点Pが存在するかどうかを調べる。

# 高校数学教師に聞いてみた。
ベクトルを使うと良いらしい。
ベクトルの基本がこれ。
![IMG_1270.JPG](https://qiita-image-store.s3.amazonaws.com/0/62259/3f825be0-3164-f441-823a-956f5fcf6f98.jpeg)

応用してこんな感じで計算すると良いらしい。
![IMG_1269.JPG](https://qiita-image-store.s3.amazonaws.com/0/62259/a4c48911-d8e4-714b-d858-c2f3cb403bed.jpeg)

# javascriptで書いてみた。

[デモ](https://jsfiddle.net/akiho/x7vpvhza/)

```js:script.js
// ランダムに生成する点を３つ生成。 点O 点A 点B
var o = {
        x: 1,
        y: 1
    },
    a = {
        x: 1,
        y: 2
    },
    b = {
        x: 3,
        y: 1
    };

// 判定に使う点P。
var p = {
    x: 100,
    y: 100
}

// ４つの頂点を与えると、そこから判定をし、trueかfalseを返してくれる関数。
function obliqueCoordinateCheck(params){
    var OPx = params.p.x - params.o.x,
        OPy = params.p.y - params.o.y,
        OAx = params.a.x - params.o.x,
        OAy = params.a.y - params.o.y,
        OBx = params.b.x - params.o.x,
        OBy = params.b.y - params.o.y;            
    
    // 連立方程式を計算。
    s = ( (OPx * OBy) - (OBx * OPy) ) / ( (OAx * OBy) - (OBx * OAy) );
    t = ( (OPy * OAx) - (OPx * OAy) ) / ( (OAx * OBy) - (OAy * OBx) );

    // 点Pがエリア内なら trueを返す。
    if( s>0 && t>0 ) return true;

    // 点Pがエリア外なら falseを返す。
    else return false;
}

// チェック開始
var test = obliqueCoordinateCheck({
    o: o,
    a: a,
    b: b,
    p: p
});

console.log(test);  // true or false が出力される。

```

## 考え方
ベクトルと座標の計算方法が分からなくて困ったけど、意外と簡単だった。

![IMG_1272.JPG](https://qiita-image-store.s3.amazonaws.com/0/62259/d170efc3-03df-afd0-9902-bf774b344e6d.jpeg)


``` t ```と``` s ```が0以上ならエリア内に点Pがあることになる。
もし0以下の場合、OAやOBの矢印の向きが反対方向になるので、点Pはエリア外になる。

# まとめ
高校生からしたら簡単な計算かもしれない。。
railsで複数ファイルをアップロードするときの落とし穴

HTML5で\<input name="file"\>にmultipleというものができて、
今まではフォームからファイルアップロードするときには、アップロードしたいファイル１つにつきinputタグを１つ１つ作って入力しなければなりませんでした。

multiple属性を使えるようになって、簡単にまとめてアップロードできるって感じです。
使ったのですが10分くらい悩んだのでメモ

```haml
%input{:type => "file", :name => "images" :multiple => true}
```

ってな感じでPOSTしてあげるとparams[:images]に配列で入ってるはず・・・
と思いきや１つしか入っていなかった

```haml
%input{:type => "file", :name => "images[]" :multiple => true}
```

配列で取得できるようにするにはnameに"[]"を付けます。
あとはコントローラーに

```rb
params[:images].each do |image|
  # ぷろぐらむ
end
```

とか書いて処理すればOK
rake db:migrateでMysql2::Error: Table・・になる

複数人で開発をしていて「このテーブルに新しいカラムが必要だな」と感じて追加したファイルを`rake db:migrate`を実行。
`rake aborted!Gem::LoadError: You have already activated rake 10.4.2, but your Gemfile requires rake 10.0.4. Prepending `bundle exec` to your command may solve this.`

あー、異なるversionを複数インストールしてんだったわ。。

` bundle exec rake db:migrate`

これでできたと思ったら
`rake aborted!An error has occurred, all later migrations canceled:Mysql2::Error: Table 'feature_categories' already exists`
「feature_categories」なんて作ったっけ？
このままだとmigrateできないのでぐぐってみた。そしたら

`rake db:migrate [VERSION=バージョン番号] [オプション]`

ってのがあるらしい。レファレンスによると「db/migrate内のスクリプトファイルからdatabaseにテーブル作成」。

なるほど、指定したファイルだけ実行したいときに使えるわけだな。
ってことで作成したファイルを見ると

`20150515072233_add_changed_at_to_staff.rb`

とあったので

`bundle exec rake db:migrate:up VERSION=20150515072233`

通ったー。
ブラウザで動かす。bottleで作るTwitterクライアント（POSTのみ

Djangoに挫折してとりあえず自分が理解できるフレームワークをと。
そこでbottleに行き着きました。
bottle.pyというスクリプトファイルだけで出来ているフレームワーク。
簡易的なWebアプリなら直ぐに実行できそうな気にさせてくれます。

というわけでブラウザでツイートを送信してみました。

```python:index.py

#!/user/bin/env python
# -*- coding: utf-8 -*-
from bottle import route, run, template, request
from requests_oauthlib import OAuth1Session
import json
import sys, codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout)

@route("/")
def post():
	return template("post")
	
@route("/show", method="GET")
def msg():
	msg = request.query.msg
	
	C_KEY = "****************************"
	C_SECRET = "****************************"
	A_KEY = "****************************"
	A_SECRET = "****************************"

	url = "https://api.twitter.com/1.1/statuses/update.json"
	params = {"status": msg,"lang": "ja"}
	tw = OAuth1Session(C_KEY,C_SECRET,A_KEY,A_SECRET)
	req = tw.post(url, params = params)

		
	return template("show", msg=msg)

run(host="localhost", port="8000", debug=True, reloader=True) 
```

次はテンプレートを作ります。
bottle.py と index.pyと同一ディレクトリに viewsというフォルダを作り、
以下のHTMLファイルをpost.htmlとして保存します。

```html

<!DOCTYPE html>
<html lang=ja>
  <head>
    <meta charset="UTF-8">
    <title>ツイートしよう</title>
  </head>

  <body>
    <h1>ツイートを入力しよう</h1>

    <form method="GET" action="/show">
    <p>ツイート：
    <input type="text" name="msg"></p>
    <input type="submit" value="送信する">
  </body>

</html>

```

同様にツイート完了画面を作るので、上記HTMLファイルと同じviewsフォルダにshow.htmlとして保存します。

```html

<!DOCTYPE html>
<html lang=ja>
  <head>
    <meta charset="UTF-8">
    <title>ツイート結果</title>
  </head>

  <body>
    <h1>ツイート完了！</h1>
    <p>あなたのツイート：　{{msg}} <p>
    <a href="/">Back</a>
    </p>
  </body>

</html>
```

ターミナルからindex.pyを実行して、
http://127.0.0.1:8000/
にアクセス。おしまい。

ちなみにbottleのテンプレートでは、

```
% if ～:
や
<%
for i in s:
  print i
%>
```

などと、%の間はPythonのコードを記載することが可能。


Djangoバージョンも書きました。
http://qiita.com/Gen6/items/735245423b65698428be
基底クラスのムーブコンストラクタの呼び出し

基底クラスとメンバ変数のコンストラクタの呼ぶ順番を調べた。
読む必要もない上に長ったらしいのでコードは以下に置いておく。
https://ideone.com/I9HRMf

当たり前だが、クラスは基底クラスから順に構築されていくので、コンストラクタは基底クラスのものから順に呼ばれていった。

当然、ムーブコンストラクタも基底クラスのものから順に呼ばれた。
しかし、ムーブコンストラクタを複数呼ぶというのは少し不可解な気がする。

```
/* 中略... */
  something( something&& right ) :
    base( std::move( right ) ),
    memval( std::move( right.memval ) ) noexcept
  {
  }
/* 中略... */
```

コンパイラの生成するムーブコンストラクタはこういうものなのだろうか？
ムーブ後のオブジェクトの状態は未定義である以上、基底クラスの部分しかムーブしてないとしても派生クラスの部分が無事である保障はない。
そして、コンパイラが生成する物は安全だとしても、自分でムーブ処理を書く場合、基底クラスのムーブコンストラクタを呼び出した後のゴミの切れっぱしが無事であると仮定してしまってもいいのだろうか。

規格を見てみないことにはどうにもわからない。
あるいは、もしご存じの方がいらっしゃったら教えてください！
USB抜き差しせずコマンドで再認識

USBデバイスが認識おかしくなり抜き差しをやむ得ないことはたまにある。
USBメモリやUSBHDDなどではしょっちゅう。

## 参考

* [コマンドでusbデバイスを操作 | Linux | マイノリティでいこう](http://blog.be-dama.com/2012/10/01/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7usb%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%82%92%E6%93%8D%E4%BD%9C/)

## コマンドでusb再認識

```bash:
# udevadm info --query=path --name=/dev/video0
/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1.2/2-1.2:1.0/video4linux/video0
```

> usb2/2-1

この2-1が該当のパスとなるので以下投入。

```bash:
# echo -n "2-1" > /sys/bus/usb/drivers/usb/unbind
# echo -n "2-1" > /sys/bus/usb/drivers/usb/bind
```

----

## usb-hdd

```bash:
sudo udevadm info --query=path --name=/dev/sdc
/devices/pci0000:00/0000:00:04.1/usb1/1-1/1-1:1.0/host2/target2:0:0/2:0:0:0/block/sdc
```

```bash:
echo -n "1-1" > /sys/bus/usb/drivers/usb/unbind
echo -n "1-1" > /sys/bus/usb/drivers/usb/bind
```
これもまたいつかまとめる

awk
http://akiniwa.hatenablog.jp/entry/2014/04/08/220430
http://hydrocul.github.io/wiki/commands/awk.html

sort
http://d.hatena.ne.jp/a_bicky/20110724/1311497192


join
http://yut.hatenablog.com/entry/20120907/1346975281

comm
http://codezine.jp/unixdic/w/comm
http://monmon.hateblo.jp/entry/20130722/1374477208

spreadsheetでtimestamp変換
`=SUM((J1 + 32400) / 86400 + 25569)`
Excelでシート一覧を表示する

# 概要
Excelのシート一覧をコピーしたい場合のVBAになります。

# 手順
1. `<Alt-F11>`
2. `<Ctrl-G>`
3. 次のソースを実行

```vbnet
for each s in worksheets: debug.print s.name : next
```

4. シート名が表示される
node_modules以下でbrowserifyされる側が自分のtransformを指定する


できないのかなーとTwitterで呟いたら@kumatch さんに教えてもらったので試してみた。

https://github.com/substack/node-browserify#browserifytransform

こんなファイル構成の時

```
index.js
package.json
node_modules/
  foo/
    index.js
    package.json
```

`node_modules/foo/index.js` はES6 moduleで書いて、babelでコンパイルして返したいようなケース。

`node_modules/foo/index.js` でbrowserify: {transform: ...} しておけば使ってくれる。

```json
{
  "name": "foo",
  "version": "1.0.0",
  "main": "index.js",
  "browserify": {
    "transform": "babelify"
  }
}
```

自分がやったときはホスト側のbabelifyを使っていたけど、たぶんpackage.jsonのdependenciesにあれば使ってくれそうな気がする。(未検証)

## flowtype

自分がやりたかったのは、flowtypeで書かれたモジュールを分割したかったのだけど、babelが一応superset的な位置にあるのでflowでチェックしつつ依存先との型を合わせるのは、うまく動いた。とはいえeslintないと辛そう。
Elixir で Hello world!


## Elixir とは	

- Erlang VM 上で動作する ruby ライクな関数型言語
- 作者は rails のコアメンバーの José Valim

Elixir について詳しくはこちらを参照

- [Elixir (プログラミング言語) - Wikipedia](http://ja.wikipedia.org/wiki/Elixir_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%29)
- [[翻訳] Elixir - 次に来る大物Web言語](http://qiita.com/HirofumiTamori/items/0dfdbada30c7d8f183fd)
- [Elixirだ 第1回 - 基礎だ -](http://www.slideshare.net/Joe_noh/elixir-01)
- [Elixir 基礎文法最速マスター](http://qiita.com/niku/items/729ece76d78057b58271)
- [Elixir Documentation - Elixir](http://elixir-lang.org/docs.html)


## install Elixir

### MacOSX

```
$ brew install elixir

# if use macports
$ sudo port install elixir

```

## Hello world!!

### IEx

ruby の irb のようにインタラクティブで実行する場合は iex コマンドを使用

```
$ iex
# Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

# Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> IO.puts "Hello world"

# Hello world
# :ok
```

### ファイルから実行

Elixir はコンパイルしてもしなくても実行できる。
コンパイルするファイルは拡張子を .ex にし、
コンパイルせずに実行するファイルは .exs にする慣習らしい。

``` elixir:hello.exs
defmodule Hello do

	def world do
		IO.puts "Hello world"
	end
end

Hello.world
```

```
$ elixir hello.exs

# Hello world
```

コンパイルする場合は elixirc コマンドでファイルを指定する

```
$ elixirc hello.ex

# Hello world
```

ファイル自体は Elixir.Hello.beam ってやつが作られるようだ

```
$ ls

# Elixir.Hello.beam hello.ex hello.exs
```
SSHについて〜ssh-keygenからssh-agentまで〜

#前書き
大学の課題でsshについて調べろと言われたので,sshを楽するための方法の一連を載せようかなと思います。
例えば

``
$ ssh user@hostname 
Password: 
``
を

``
$ hostname
``
だけでsshするようにするまでの設定です.

#ssh-keygen
ユーザー側

```shell-session
$ ssh-keygen -b 2048 -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/user/.ssh/id_rsa.
Your public key has been saved in /Users/user/.ssh/id_rsa.pub.
The key fingerprint is:                                         
The key's randomart image is:

$ scp ~/.ssh/id_rsa.pub [username]@[remotehost]:~/.ssh/

```
このような感じでssh-keygenによって鍵ペアを作成し公開鍵をリモートホストへ送ります.

リモート側

```shell-session
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

```
対してリモート側では認証時の公開鍵は~/.ssh/authorized_keysというファイルを参照するのでcatコマンドで公開鍵をそのファイルに追加する.

ここまででssh-keygenで鍵ペアを作った時にきめたパスフレーズでリモートホストにログインできる

#ssh-agent
ただパスワードをうつのがパスフレーズに変わっただけで手間は変わらないのでssh-agentの出番である.ssh-agentは公開鍵で使われる認証鍵を管理,認証を代行するエージェントプログラムなのでこれを利用すればパスフレーズの入力もいらなくなる.
ユーザー側

```shell-session
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /Users/users/.ssh/id_rsa: 
Identity added: /Users/users/.ssh/id_rsa

```

まずはssh-agentをbashで起動する.
そのあとに先ほどssh-keygenで作った鍵ペアの秘密鍵の方をssh-addで追加する.
これだけであとは

```shell-session

$ ssh username@hostname
```
でログインできるようになる.

#.ssh/config
今まででもパスワードもしくはパスフレーズの入力がなくなったので楽にはなったのだが
ログインするユーザ名などが固定であれば.ssh/configに書き込むことでさらに名称を略することができる

```
$ vim ~/.ssh/config/
Host name
    Hostname hostname
    User username

```

という感じでHostのあとに好きな名前(計算機の名前にしとくとわかりやすいかも)
Hostnameに今までログインする時に使ってたhostnameを
Userにログインするユーザ名を書く
すると次からは

```shell-session
$ ssh [Hostのところに書いた名称]
```

でログインすることができる.

#alias設定
最後にsshを除いて計算機の名前だけでログインできるように.bashrcにaliasの設定をする.

```shell-session
vim .bashrc
alias test="ssh [Hostのところに書いた名称]"

source .bashrc
```

こうすれば

```shell-session
$ test
```
とするとリモート側にsshできます

#最後に
なにかミスとかあったら教えてください.一応自分はcentOS7からGentooに試してできたので問題はないと思いますが
CentOS 6.6 + Intel compiler 15 で c++11 の機能を使う

インテルコンパイラでは -std=c++11 のオプションを用いて

```bash
icpc -std=c++11 test.cc
```

などとすると c++11 の機能が使えます。

しかし、icpc は gcc のライブラリを使用しており、
CentOS 6.6 ではデフォルトの gcc バージョンが 4.4.7で
あるためコンパイルが通りません。

そこで、まず devtools より gcc 4.8 をインストールします

```bash
  wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
  yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++ devtoolset-2-gcc-gfortran
```

(参考:http://abyssluke.hatenablog.com/entry/2014/07/07/202702)

これにより /opt/rh/devtoolset-2/root/usr/bin/ 以下に新しいバージョンの gcc が
入るので、これを用いてコンパイルします。

デフォルトの gcc と置き換えない場合は icpc のオプションに

```bash
icpc -std=c++11 -gxx-name=/opt/rh/devtoolset-2/root/usr/bin/g++ test.cc
```

などと書けばコンパイルが通ります。
Scala: キーの順番を保持したMapを作りたい

Scalaの`Map`はキーの順番が保持されません。順番を保持したいときは、`collection.immutable.ListMap`を使います。

次は普通の`Map`を使ったマップの実装です。

```scala
object Untitled {
	def main(args: Array[String]) {
		val map1 = Map[String, String]()
		val map2 = map1 + ("de" -> "German")
		val map3 = map2 + ("zh" -> "Chinese")
		val map4 = map3 + ("fr" -> "French")
		val map5 = map4 + ("ja" -> "Japanese")
		val map6 = map5 + ("en" -> "English")

		println(map2)
		println(map3)
		println(map4)
		println(map5)
		println(map6)
	}
}

```

この実装では、追加した順にキーが並ばないことがあります。

```
Map(de -> German)
Map(de -> German, zh -> Chinese)
Map(de -> German, zh -> Chinese, fr -> French)
Map(de -> German, zh -> Chinese, fr -> French, ja -> Japanese)
Map(fr -> French, de -> German, en -> English, ja -> Japanese, zh -> Chinese)
```

普通の`Map`の実装を`ListMap`で実装してみます。

```scala
import collection.immutable.ListMap

object Untitled {
	def main(args: Array[String]) {
		val map1 = ListMap[String, String]()
		val map2 = map1 + ("de" -> "German")
		val map3 = map2 + ("zh" -> "Chinese")
		val map4 = map3 + ("fr" -> "French")
		val map5 = map4 + ("ja" -> "Japanese")
		val map6 = map5 + ("en" -> "English")

		println(map2)
		println(map3)
		println(map4)
		println(map5)
		println(map6)
	}
}

```

順番が保持されます。

```
Map(de -> German)
Map(de -> German, zh -> Chinese)
Map(de -> German, zh -> Chinese, fr -> French)
Map(de -> German, zh -> Chinese, fr -> French, ja -> Japanese)
Map(de -> German, zh -> Chinese, fr -> French, ja -> Japanese, en -> English)
```
Scala: Mapにキーと値のペアを追加したい

Scalaのimmutable.Mapにキーと値のペアを追加する方法です。

```scala:Untitled.scala
object Untitled {
	def main(args: Array[String]) {
		val map1 = Map[String, String](
			"ja" -> "Japanese",
			"en" -> "English",
			"de" -> "German"
		)
		
		println(map1)
		
		val map2 = map1 + ("zh" -> "Chinese")

		println(map2)
		
		val map3 = map1 + ("zh" -> "Chinese", "fr" -> "French")

		println(map3)
	}
}

```

出力結果

```
Map(ja -> Japanese, en -> English, de -> German)
Map(ja -> Japanese, en -> English, de -> German, zh -> Chinese)
Map(fr -> French, de -> German, en -> English, ja -> Japanese, zh -> Chinese)
```
いつまでたっても綴りが覚えられない英単語ベスト20

* license
* necessary
* successfully
* process
* archive
* difference
* definition
* declaration
* maintainer
* maintenance
* customer
* customize
* idempotence
* recipe
* referer
* dereference
* irrelevant
* provisioning
* simplifying
* ammend

他にもあれば修正リクエストうけつけております。
ChocolateyでOpenSSHがunlistされている

表題の通りです。

よって
```
 cinst openssh
```

と打ち込んでもOpenSSHはインストールされません。

[Chocolatey Gallery | OpenSSH 5.3.1.2](https://chocolatey.org/packages/openssh)　によるとchocolateyのOpenSSHパッケージは2013/02/17 の5.3.1.2以降はメンテナンスされておらず、放置状態のようです。

さてどうしよう。

## 追記

結局 Git for Winodws のbinにパスを通してSSHを使うことにしました。


## 2016/05/08 追記

現状ではChocolateyにOpenSSHのパッケージがいくつか追加されています

- Win32 OpenSSH (Microsoft Port) https://chocolatey.org/packages/win32-openssh
- OpenSSH (mls-software) https://chocolatey.org/packages/mls-software-openssh

元のOpenSSHのパッケージもメンテナを変えて更新されているようなのですが、2016/05/08現在、パッケージがRejectされています。

たぶんMicrosoftの公式版を使うのがいいのかな、と思ったらコメント欄を見たらいろいろ問題がありそうな。
Heroku用のDockerfileを書く時のTips


[Introducing 'heroku docker:release': Build & Deploy Heroku Apps with Docker](https://blog.heroku.com/archives/2015/5/5/introducing_heroku_docker_release_build_deploy_heroku_apps_with_docker)

HerokuがDockerを使ったツールを提供し始めた．中身を追ってみて（ ["Herokuの'docker:release'の動き"](http://deeeet.com/writing/2015/05/07/heroku-docker/)）いろいろできそうだったので遊んでみた．

- [tcnksm/gox-server](https://github.com/tcnksm/gox-server)，Heroku上にGo言語のクロスコンパイル環境を立てた．`curl -A "uname -sp" https://gox-server.herokuapp.com/Soulou/curl-unix-socket`みたいなリクエスト投げると環境にあったバイナリをビルドしてダウンロードできる
- [tcnksm/heroku-docker-registry](https://github.com/tcnksm/heroku-docker-registry)，Heroku上で[Docker Registry](https://github.com/docker/distribution)を立てた．普通に`push`や`pull`できる．バックエンドドライバーを変えれば普通に使えるかも

あとコードは公開してないないけど[Apache Kafka](http://kafka.apache.org/)といったJVM系のツールも動かしてみた．他にも以下のようなものをインターネットで見かけた．

- [DockerでHerokuでPerlが動いたぞ!!!](http://hitode909.hatenablog.com/entry/2015/05/07/200611)
- [DockerでHerokuでmrubyが動いたぞ!!1](http://blog.kentarok.org/entry/2015/05/08/004452)

## Tips

いくつか書いてみてハマりそうなことをまとめておく（まだリリースされたばかりなのでそのうち変わると思う）．できることや内部の動きとかは["Herokuの'docker:release'の動き"](http://deeeet.com/writing/2015/05/07/heroku-docker/)に書いた．また気づきがあれば追記する．

### 最低条件

とりあえず以下は満たす必要がある．

- `heroku:cedar:14`イメージを使う
- 変更は全て`/app`以下に入るようにする

（`/app`以下に入れる必要があるのはリリースするSlugが`/app`の`.tgz`なので）


### デバッグ

`heroku docker:relase`でアプリケーションを起動するが普通にDockerコンテナが動いているだけなので中に入れる．コンテナの名前は`heroku-docker-${hash}-start`になる．

```bash
$ docker run -it heroku-docker-${hash}-start /bin/bash
```


動いているコンテナに入りたい場合は`docker exec`を使う．

### Slugのサイズ

リリースするSlugのサイズは300MB以下である必要がある（[https://devcenter.heroku.com/articles/slug-compiler#slug-size](https://devcenter.heroku.com/articles/slug-compiler#slug-size)）．作ってるやつがちゃんとそれを満たしているかを確かめるには以下を実行すれば良い．

```bash
$ docker run -it heroku-docker-${hash}-start /bin/bash
$ tar cfvz /tmp/slug.tgz -C / --exclude=.git --exclude=.heroku ./app
$ ls -lh /tmp/slug.tgz
```

(`tar`コマンドは`heroku docker:relase`が内部で実行するコマンドそのもの)

### apt-get

意味ない．ローカルでは使えるけどHerokuに上げたときに使えない．なのでソースコンパイルして依存すべて含めて`/app`以下にインストールされるように頑張る．

### Procfile

`Procfile`に起動コマンドを書くが，ここに`$PORT`環境変数を書くとHeroku上では動くがローカル環境ではうまく動かないかもしれない．`Procfile`はローカルでは`docker run`の引数として展開されるだけで，ここに環境変数が書いてあるとホストの環境変数を読んでしまう．両方の環境で動かしたいならProcfile以外から環境変数を読むようにする．

なので`Procfile`には`run.sh`とだけ書いて`run.sh`内で`$PORT`環境変数を読んで設定ファイルを書き換えるとかしてる（他に良いやりかたがあれば教えて下さい）．

### WORKDIR

`WORKDIR`でコマンド実行時の起点となるディレクトリを設定するが，ローカルでは動いてもHeroku上では動かない．`procfile.d`をちゃんと書く必要がある．例えば`WORKDIR`を`/app/bin`にしたのであれば以下を`Dockerfile`に書く必要がある．

```bash
ONBUILD RUN echo "cd /app/bin"  >> /app/.profile.d/init.sh
```

## まとめ

頑張れば何でも動かせる気がする．
バージョンを比較するときは Gem::Version が便利

バージョン文字列は Gem::Version でラップして比較すると意図した通りの結果になるので便利です。

```ruby
Gem::Version.create("1.9.0") <=> Gem::Version.create("1.8.0")    # => 1
Gem::Version.create("1.9.0") <=> Gem::Version.create("1.9.0pre") # => 1
Gem::Version.create("1.9.0") <=> Gem::Version.create("1.9.0")    # => 0
Gem::Version.create("1.9.0") <=> Gem::Version.create("1.10.0")   # => -1
```

こちらはあまり使う機会はないかもしれませんが覚えておくといつか役に立つかも。

```ruby
version = Gem::Version.create("1.2.3-4.5")
version.to_s                       # => "1.2.3.pre.4.5"
version.release                    # => #<Gem::Version "1.2.3">
version.bump                       # => #<Gem::Version "1.3">
version.segments                   # => [1, 2, 3, "pre", 4, 5]
version.prerelease?                # => true
version.approximate_recommendation # => "~> 1.2"
```
nvm-windowsインストール後に "ERROR open \settings.txt" でエラーになる場合の対処

windowsでnode.jsのバージョン管理をするためにnodist入れようと思ったら、nvm-windowsなんていうものがあるようなのでインストールしたもののハマったのでメモ。

(2015.5.18 バージョン情報の記述を忘れていたので追記)

前提
===
Windows 7 Professional 64bit
nvm-windows 1.0.6

インストール
===

インストール自体はインストーラが用意されているので
https://github.com/coreybutler/nvm-windows/releases
から最新の`nvm-setup.zip`を適当にダウンロード。

解凍すると`nvm-setup.exe`が出てくるので適当にインストール。

ただしインストール終了時点だとタイトルにもあるようにエラーが出て起動しない。

~~~
ERRRO open \settings.txt
~~~

---

※余談だけど、nvm-windowsはGo言語で出来ている様子。
外部ライブラリ不要な実行バイナリ作れるのは便利だよなぁ、としみじみ思った。


エラー対処
===

公式のIssueに対処方法が載ってた。

https://github.com/coreybutler/nvm-windows/issues/22
> Simply remove %NVM_HOME% and NVM_SYMLINK from the user environment variables.
> （意訳：環境変数の NVM_HOME と NVM_SYMLINK を消せばサクッと動くで）

消してみたらサクッと動きました。

【追記】コンソールは管理者権限で
===

nvm-windowsを使うときのコンソール(cmdとかminttyとか)は「管理者として実行」しないと`nvm use`で一部の処理が機能しません（エラーも出ないので戸惑います。）

通常権限でコンソールを起動していると、npmのグローバル領域の切替が行われないようです。
TwitterのStreaming APIを使い任意のキーワードでツイートを取得

TwitterのStreaming APIを使って、任意のキーワードを取得。
結局home_timelineだとフォローしている人だけだからStreaming使わないとデータ収集にならない。
ということで散々語り尽くされていますが今更Streaming APIを触ってみました。

```python:stream.py

#!/user/bin/env python
# -*- coding: utf-8 -*-
from requests_oauthlib import OAuth1Session
import json
import requests
import time, calendar
import sys, codecs

word = raw_input(u"input: ")

C_KEY = "*************************************"
C_SECRET = "*************************************"
A_TOKEN = "*************************************"
T_SECRET = "*************************************"


URL = "https://stream.twitter.com/1.1/statuses/filter.json"
 
def Client_key():
    return OAuth1Session(C_KEY,
        client_secret = C_SECRET,
        resource_owner_key = A_TOKEN,
        resource_owner_secret = T_SECRET
    )
 
def Response(client, **filter_data):
    return client.post(
        URL,
        data = filter_data,
        stream = True
    )


def YmdHMS(created_at):
    time_utc = time.strptime(created_at, '%a %b %d %H:%M:%S +0000 %Y')
    unix_time = calendar.timegm(time_utc)
    time_local = time.localtime(unix_time)
    return int(time.strftime("%Y%m%d%H%M%S", time_local))

def Print_l(r):	
	for line in r.iter_lines():
		tweet = json.loads(line)
		
		Created_at = YmdHMS(tweet["created_at"])
		User = (tweet["user"]["screen_name"].encode("utf-8"))
		Name = (tweet["user"]["name"].encode("utf-8"))
		Text = (tweet["text"].encode("utf-8"))
		
		try:
			if tweet["user"]["lang"] == "ja":
				print "ID: ", User
				print "ユーザー名: ", Name
				print "本文: ", Text
				print Created_at
				print "==" * 40
		except:
			pass
 
if __name__ == "__main__":
    client = Client_key()
    r = Response(client, track=word)
    Print_l(r)
```

リアルタイムなモノを取得するわけですから、変なキーワードの場合は見つからなくてjsonオブジェクトが無いよ！って怒られます。#ハッシュタグとかを一方的に取得しに行くほうが良さげ。

created_atの日本時間への変更は
http://blog.unfindable.net/archives/4302
上記URLを使用させていただきました。

スクリプトの終了はctr+cで。
ModernIEのVistaを日本語にする

以下のサイトを参考にした
https://www.youtube.com/watch?v=FsyTw6z-MJw

## 手順
1. 言語と地域とかのあたりを日本語にする
2. 以下のURLから言語パックを取ってくる
    - http://froggie.sk/jp/lp32sp2.html
3. 言語パックうをインストールしたら、コントロールパネルから言語を切り替える
c/c++ > 列挙型の変数に列挙子以外の値を設定した場合 / C#: System.Flags属性付与でフラグとして利用可能

```
typedef enum {
  MEM1 = 0,
  MEM2
} HOGE;

HOGE hoge;

...
hoge = MEM1 | MEM2;
```

上記の実装をしている例をみかけた。

自分の経験(組込み)からは列挙型の変数に列挙子として定義されていない値が代入されたときにワーニングなりエラーなりが出ていたと思っていたが、環境によるようだ。

#C++で実装した場合 (ideone)
http://ideone.com/3Q4T5F
```
error: invalid conversion from 'int' to 'HOGE'
   hoge = MEM1 | MEM2
```
上記のようにエラーとなった。
ただし、組込みでC++を使うかどうかや、組込みのC++のチェックが上記ほどでない場合はありうる。

#Cで実装した場合1 (ideone)
http://ideone.com/HalMZH

エラーなくコンパイルできた。

#Cで実装した場合2
自分が関連する組込みの環境(C言語使用)では以下のワーニングが出た。
```
Warning...: enumerated type mixed with another type
```

# C#の場合
(2017/01/18追記)

@gazamiさんに[C#でのコメント](http://qiita.com/7of9/items/a35a9017dbfd6b3a8706/#comment-132270cc97f05f0e2c4f)をいただきました。
Express Checkoutの定期支払について

いくつか難しい用語があるので補完しておきます。

【トライアル期間】
有償無償ともに設定が可能で、期間も任意に設定できます。
ただし、トライアル期間中に定期支払が解除された場合、トライアル期間がなかったとして、通常料金を請求することはできないようです。

【請求サイクル】
周期単位(BILLINGPERIOD)
周期(BILLINGFREQUENCY)
の組み合わせで指定可能です。
例えば、「3ヶ月ごと」という指定をしたい場合は、
周期単位(BILLINGPERIOD) = Month
周期(BILLINGFREQUENCY) = 3
という感じになります。

「15日」単位で指定したい場合は、
周期単位(BILLINGPERIOD) = Day
周期(BILLINGFREQUENCY) = 15
となります。

周期単位(BILLINGPERIOD)には、
Day
Week
SemiMonth
Month
Year
が指定可能です。

また、期間開始日に決済させたい場合には、APIで定期支払いを定義するとき、「PROFILESTARTDATE」というフィールドにて開始日時を指定します。この指定した日時に最初の決済が行われます。ただし指定された決済日(決済開始日)はアメリカ⻄海岸時間となります。またその決済日内での決済時刻はPayPal側で任意に決定するようです。(「トライアル期間」を設定してある場合はこの指定した日から「トライアル期間」が始まります)。
PayPal購入画面について

"SetExpressCheckoutにて商品名、購入金額等を渡していますが、PayPal購入画面に商品名、購入金額等が表示されなくて困ってます。
指定方法は以下のようになっています。
何か指定方法に不備があるか、わかる方ご解答お待ちしております。


\$ec_request =& PayPal::getType('SetExpressCheckoutRequestType');
\$ec_request->setVersion(""51.0"");

// Set request-specific fields.
\$paymentAmount = (\$aPurchaseCommodityInfo->unit_price * \$aPurchaseCommodityInfo->amount) + \$aPurchaseCommodityInfo->postage;
\$currencyID = 'USD'; // or other currency code ('GBP', 'EUR', 'JPY', 'CAD', 'AUD')
\$paymentType = 'Sale'; // or 'Order' or 'Authorization'

\$ec_details =& PayPal::getType('SetExpressCheckoutRequestDetailsType');
\$ec_details->setReturnURL(\$aReturnUrl);
\$ec_details->setCancelURL(\$aCancelUrl);
\$ec_details->setPaymentAction(\$paymentType);
\$ec_details->setNoShipping('1', 'iso-8859-1'); //PayPal画面に配送先住所未表示

\$amt_type =& PayPal::getType('BasicAmountType');
\$amt_type->setattr('currencyID', \$currencyID);
\$amt_type->setval(\$paymentAmount, 'iso-8859-1'); //購入金額
\$paymentDetailsItem = &PayPal::getType('PaymentDetailsItemType');
\$paymentDetailsItem->setName(\$aPurchaseCommodityInfo->commodityName); //商品名
\$paymentDetailsItem->setQuantity('1', 'iso-8859-1'); //購入数
\$paymentDetailsItem->setAmount(\$paymentAmount, 'iso-8859-1'); //購入金額
\$ec_details->setOrderTotal(\$amt_type); //購入金額合計

\$ec_request->setSetExpressCheckoutRequestDetails(\$ec_details);

\$caller =& PayPal::getCallerServices(\$this->profile);

// Execute SOAP request.
\$response = \$caller->SetExpressCheckout(\$ec_request);"
systemd KVM console

KVM のゲストで debian や Ubuntu を使用しているのですが、それぞれ jessie や vivid に dist-upgrade したらKVM のホストから sudo virsh console hoge で接続出来なくなった。

双方共に systemd に移行した為、従来の設定方法では getty が ttyS0 を見てくれない模様。

各ゲストで下記のコマンドを実行する事で KVM ホストから接続できるようになった。

```
# /etc/systemd/system/getty.target.wants/ にシンボリックリンクを作成
sudo systemctl enable serial-getty@ttyS0.service
# agetty を起動
sudo systemctl start serial-getty@ttyS0.service
```

参照：http://0pointer.de/blog/projects/serial-console.html
fswebcamでキャプチャ

* [elecom UCAM-DLE300T](http://antenna.infomixer.net/2015/02/19/%E8%B2%B7%E3%81%A3%E3%81%A6%E3%81%AF%E3%81%84%E3%81%91%E3%81%AA%E3%81%84usb%E3%82%AB%E3%83%A1%E3%83%A9%E3%80%80%E9%9C%B2%E5%87%BA%E8%A3%9C%E6%AD%A3%E8%83%BD%E5%8A%9B%E7%84%A1%E3%81%97%EF%BC%81/) を用いた。
  * fswebcamだとこのwebカメラでは暗く映るので、motionを使ったほうがよいかも。
  * [webcam - motionでwebカメラを活用する - Qiita](http://qiita.com/tukiyo3/items/140ec948fd1ffbabeaa8)

## 参考

* [man - fswebcam](http://manpages.ubuntu.com/manpages/lucid/man1/fswebcam.1.html)
* [Raspbian and web-camera](https://www.raspberrypi.org/forums/viewtopic.php?t=30032&p=265299
)
* [開発日記](http://mrdosukoi.blogspot.jp/)

## 簡単にwebカメラの写真を撮る

```bash:
pacman -Sy fswebcam
fswebcam foo.jpg
```

foo.jpg が保存される。

* 保存できない場合

```bash:yuyvで保存できた。
fswebcam -p YUYV a.jpg
```

```bash:mjpegで保存できた。
fswebcam -p MJPEG a.jpg
```

## メール送信

* sharutils をインストールしておく。

```bash:1通送る場合
IMG=capture.jpg
fswebcam -p MJPEG uuencode %IMG %IMG | mail -s "from:cap" hoge@hoge.com
```


## 解像度

```bash:
fswebcam -r 1920x1080 a.jpg
```


## Delayを入れるとより綺麗に映るっぽい

```bash:
fswebcam -D 5 a.jpg
```

# 定時メール送信君

```bash:~/cam/cam.sh
NOW=`date +%w-%H%M`
IMG=$HOME/cam/tmp/$NOW.jpg
fswebcam -p YUYV -q $IMG
```

```bash:~/cam/cam_mail.sh
NOW=`date +%w-%H`
TMPFILE=$HOME/cam/tmp/tmp.uuencode

if [ -e $TMPFILE ];then
  rm -f $TMPFILE
fi

NUM=0
for IMG in $HOME/cam/tmp/${NOW}??.jpg
do
  uuencode $IMG $NUM.jpg >> $TMPFILE
  NUM=`expr $NUM + 1`
done

cat $TMPFILE | \
 mail -s "from:$HOSTNAME" hoge@fuga.com
```

```bash:crontab
*/10 * * * * $HOME/cam/cam.sh
  51 * * * * $HOME/cam/cam_mail.sh
```
GOLFESというゴルフサービスをベトナムで開発してきたまとめ

今日で、ベトナム開発メンバーとの開発が最終日となるので、今日までの感想と実績をまとめます。

GOLFES (ゴルフェス）
https://golfes.jp

コミット数
---
3,405 commits

メンバーコミット数
---

![スクリーンショット 2015-05-15 13.00.36.png](https://qiita-image-store.s3.amazonaws.com/0/20933/de8cf766-3624-a8c9-3fa1-61d879c6487c.png)

プロジェクトコミット頻度
---

![スクリーンショット 2015-05-15 13.00.50.png](https://qiita-image-store.s3.amazonaws.com/0/20933/04633acf-3e05-8b1a-8793-6d6ad32fb916.png)

曜日/時期別コミット頻度
---

![スクリーンショット 2015-05-15 13.01.51.png](https://qiita-image-store.s3.amazonaws.com/0/20933/99cc18ce-0dda-1431-0043-df3e6b12c69c.png)

コード量
---

![スクリーンショット 2015-05-15 13.02.36.png](https://qiita-image-store.s3.amazonaws.com/0/20933/16ac0d6c-c076-cffa-edf6-4ee6bdc3b5b7.png)

感想
---

ぼくが、コミット数ビリだった。。泣
ベトナムメンバーは、gitの習得や新しいフレームワーク、いままでと違う開発フロー、自分で仕様を考えるなど、初めてのことばかりの中、全てを習得し、大きく成長してくれました。
元々仕事も早く、スキルも高いので、開発フローが定着してからは、かなりいい感じに開発できました。

また言葉の壁も優秀な日本語とベトナム語のコミュニケーターがいたので、ほとんど問題にはなりませんでした。いろいろと考え方やいままでの環境の違いから話し合うこともありましたが、多くはぼくの経験不足や配慮不足が原因だったと反省しています。

ただ、この1年でメンバーが全員が大きく成長できたことは、とてもうれしく思います。
これからは、違う場所で仕事をするようになりますが、それぞれ新たな道を楽しんでいってほしいです。

１年ちょっとでしたが、メンバーのみんなには本当に感謝しています。

ベトナム開発は、とてもよかったので、なにか聞きたいことがあれば、いつでもご連絡ください。
PythonでCPUのコア数を出力

Python3でも2でもCPUのコア数を出力するのは同様の流れです。
ただ、いつ使うのかと言われても、私自身よくわかりません…。


```py
>>> import multiprocessing
>>> multiprocessing.cpu_count()
8
```
上記の例は、HTT搭載の4コアCPU(Intel Core i7-3740QM)で試した場合です。
【PHP】全角半角混在の文字列をバイト数単位で切り出す際にmb_strcutを使うと便利

##概要
PHPでバイト数単位で文字列を切り出す際に、思いつくのはsubstrを利用する方法だろう。
このとき半角文字列のみや全角文字列のみを対象に処理をする場合など、1文字あたりのバイト数が同じであれば問題は生じない。
しかし全角半角混在の文字列など1文字あたりのバイト数が異なる文字列をバイト数単位で切り出す際には注意が必要だ。

##問題点
マルチバイトの文字列をsubstrで半端なバイト数単位で切り出すと、
文字列を中途半端な位置で切り出してしまい、不具合の温床となる。


##具体例
文字コードSJISにおいて、
```
Aあいうえお
```
という文字列があったとする。(Aは半角、それ以外は全角)
この文字列をsubstrで6バイトで切り出すと、
全角文字(2バイト文字)「う」の1バイト目だけを切り出してしまい文字列が壊れてしまう。
######テストコード
```php
<?php

	$target = "Aあいうえお";// 対象文字列
	$byte   = 6;            // 分割単位: byte
	$enc    = "SJIS";       // 文字コード
	$result = "";           // 処理結果
	$nl     = "<br/>";      // 改行用
	
	// 切り出し処理実行
	$result = substr($target, 0 , $byte);
	
	// 結果の文字数を取得
	$len_mb = mb_strlen($result, 'SJIS');
	
	// 結果のバイト数を取得
	$len = strlen($result);
	
	echo "対象文字列   =  ".$target.$nl;
	echo "切出バイト数 =  ".$byte.$nl;
	echo "結果文字列   =  ".$result.$nl;
	echo "結果文字数   =  ".$len_mb.$nl;
	echo "結果バイト数 =  ".$len.$nl;
?>
```

######テスト結果
```
対象文字列 = Aあいうえお
切出バイト数 = 6
結果文字列 = Aあい
結果文字数 = 4　　　←表示できない半端なコードが存在することを示している
結果バイト数 = 6
```
「Aあい」のあとにマルチバイト文字列の断片コードが残ってしまい不具合の原因になってしまう。


##解決方法
substr関数の代わりにmb_strcut関数を使用することで、
1文字に満たない半端なバイトコードを間引いてくれる。


######テストコード
```php

<?php

	$target = "Aあいうえお";// 対象文字列
	$byte   = 6;            // 分割単位: byte
	$enc    = "SJIS";       // 文字コード
	$result = "";           // 処理結果
	$nl     = "<br/>";      // 改行用
	
	// 切り出し処理実行
	$result = mb_strcut($target, 0 , $byte, $enc);
	
	// 結果の文字数を取得
	$len_mb = mb_strlen($result, 'SJIS');
	
	// 結果のバイト数を取得
	$len = strlen($result);
	
	echo "対象文字列   =  ".$target.$nl;
	echo "切出バイト数 =  ".$byte.$nl;
	echo "結果文字列   =  ".$result.$nl;
	echo "結果文字数   =  ".$len_mb.$nl;
	echo "結果バイト数 =  ".$len.$nl;
?>
```


######テスト結果
```html
対象文字列 = Aあいうえお
切出バイト数 = 6
結果文字列 = Aあい
結果文字数 = 3　　　←表示されている文字列と同じ文字数
結果バイト数 = 5
```
phpのmb_strcut関数を利用することで
6バイト目の文字列は「う」の1バイト目になってしまうため、
半端なバイト数を間引いて、ひとつ前までの切り出しとする結果を得ることができる。
DATAPUMPを使って、別インスタンス間のスキーマ単位の移行をする

```　lang:impdp_NEW_SCHEMA_FROM_OLD_SCHEMA.par
DIRECTORY=DIR_IKO
LOGFILE=DIR_IKO:impdp_NEW_SCHEMA_FROM_OLD_SCHEMA.log
PARALLEL=4
NETWORK_LINK=DBLINK
CONTENT=ALL
TABLE_EXISTS_ACTION=TRUNCATE
REMAP_SCHEMA=OLD_SCHEMA:NEW_SCHEMA
REMAP_TABLESPACE=TS_OLD_SCHEMA_1:TS_NEW_SCHEMA_1
REMAP_TABLESPACE=IS_OLD_SCHEMA_1:IS_NEW_SCHEMA_1
EXCLUDE=SYNONYM
EXCLUDE=TABLE:"='TABLE_NAME'" 
EXCLUDE=TABLE:"LIKE 'B%'"
SCHEMAS=OLD_SCHEMA
```

インスタンスの異なるスキーマ間の移行。
一回、ダンプファイルをエクスポートしてインポートしてもよいが、
NASをマウントしたり、ファイルをSCPするのがめんどくさいので、
DBLINKを張って直接データを流し込む。

```
TABLE_EXISTS_ACTION=TRUNCATE
```

としているのは、NEW_SCHEMAはカラム定義は変わらないが、パーティションやインデックスを見直して新規に一括作成したかったため。

・ポイント①
DBLINKはインスタンス間のどのスキーマ同士でもはってよいが、
DBLINKのFROMにEXP_FULL_DATABASE、TOにIMP_FULL_DATABASEのロールをそれぞれのスキーマに付与する必要がある。
FROMがOLD_SCHEMAになっていても、TOと対応したロールが必要らしい。
・ポイント②
DBLINKのTOのユーザーでimpdpコマンドを実行。（あたりまえだけど）

```
impdp NEW_SCHEMA/***** parfile=impdp_NEW_SCHEMA_FROM_OLD_SCHEMA.par
```

改善点：
インデックスのリビルドがオーバヘッドになるので、UNUSABLEにしてパーティション単位でリビルドした方が速いと思われる。インデックスの数がぐっと増えたこともある（DB負荷的にはエコだけど、手順は増えるのでめんどくさいか）

以下、NETWORK_LINKオプションの制限事項（ドキュメントより転載）

>ContentTypeセットがあるSecureFiles、または現在Oracle Database File System Linksを介してSecureFilesセグメントの外に格納されているSecureFilesが表に含まれている場合、インポートのNETWORK_LINKパラメータはサポートされません。

>ネットワーク・インポートは進化した型の使用をサポートしません。

>ネットワーク・インポートはLONG列をサポートしません。

>データ・ポンプ操作がネットワーク・リンクを介して行われる場合、ソース・データベースとターゲット・データベースのバージョンの差違が1バージョン以下である必要があります。たとえば、1つのデータベースがOracle Database 11gの場合、他のデータベースは11gまたは10gのいずれかである必要があります。データ・ポンプがチェックするのはメジャー・バージョン番号のみ(10g、11gなど)で、具体的なリリース番号(10.1、10.2、11.1、11.2など)ではありません。

>インポート・ジョブを実行するUSERIDがターゲット・データベースのDATAPUMP_IMP_FULL_DATABASEロールを持っている場合、そのユーザーは、ソース・データベースのDATAPUMP_EXP_FULL_DATABASEロールも持っている必要があります。

>データ・ポンプ・インポートでサポートされているデータベース・リンクのタイプは、パブリック、固定ユーザーおよび接続ユーザーのみです。現在のユーザーのデータベース・リンクは、サポートされていません。

>ネットワーク・モード・インポートではパラレル問合せ(PQ)スレーブは使用されません。「ネットワーク・モード・インポートにおけるPARALLELの使用」を参照してください。
package.json内の最新のバージョンを取得する

メモ

```
$ cat ./package.json | jq ".devDependencies" | jq "keys[]" | tr -d '"' | awk '{ print $1; system("npm info " $1 " version") }'

coffee-script
1.9.2

gulp
3.8.11

gulp-coffee
2.3.1

...
```
文字数を数える

```csharp:Program.cs

static int GetLength( string value )
{
    return value.Length;
}

static int GetLengthInTextElements( string value )
{
    var sinfo = new StringInfo( value );
    return sinfo.LengthInTextElements;
}

static void Main( string[ ] args )
{
    var str = "𠮟咤する";
    Console.WriteLine( "Length: {0}", GetLength( str ) );
    Console.WriteLine( "LengthInTextElements: {0}", GetLengthInTextElements( str ) );
}

```

```:標準出力

Length: 5
LengthInTextElements: 4

```
grunt-slim における partial の使い方。


## middleman(ruby) ではなく grunt(node) で slim 使いたいマン

先に書くと、今回トライしてみたもののあまりメリットが感じられませんでした。

ですが、昨今のフロントエンドは、HTMLテンプレートがあれもこれもありすぎて、これだけ使うんで(ドヤぁ)!という考えもアリといえばアリ。

そういう意味合いで、今回は grunt-slim を採用してみた。

## middleman でできたのに、grunt だと....

それもそのはず、多くの機能は(include 系 render 系)、railsやmiddlemanが準備してくれた helper じゃあ どうするか、 slim が提供している template 機能を使う。

具体的には、ここを読む。

https://github.com/slim-template/slim

## 実例

とりあえず、そんな大きな案件でもないので、parital で切り分けて、視界良好のうえ、作業がコンフリクトしない程度でよい。
つまり、 middleman でいう partial を使う

```
├── src
│   ├── index.slim
│   ├── parts
│   │   ├── hogehoge.slim

``` 

みたいな場合に index.slim で

	== Slim::Template.new('src/parts/hogehoge.slim').render
	
とすればよい。

注意点とすれば

	==

とする点である。こうしないと html コードではなく string で挿入される。
PHP 7.0をVagrant上のCentOS 7にインストール

Vagrant上のCentOS7でPHP 7.0をビルド＆インストールする方法です。
なお、私はVagrantもPHP初心者なので、不適切or余分な部分は適宜読み替えて下さい。

##VagrantをCentOS 7で起動
参考：http://qiita.com/ms2sato/items/1bcdf6ef37af51ae0fd6
Vagrantfileに以下を記述し、CentOS7を設定します。

```
config.vm.box = "centos7"
config.vm.box_url = "https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box"
```
仮想マシンを起動し、httpdをインストールします。
（後のphpのビルドで必要なため、apxsも入れます）

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

```
$ sudo yum install httpd-devel
```
httpで接続できるよう、firewalldの設定を変更しておきます。
（/etc/firewalld/zones/public.xmlに追記）

```
<service name="http"/>
```

## PHP 7.0をビルド
基本的には、
http://linoxide.com/linux-how-to/install-php-7-centos-7-fedora-21/
http://maplesystems.co.jp/blog/all/programming/9640.html
のものと同じです。
ただ、`./configure` のオプションは少々変更を加えています。
まず、ソースコードをダウンロードします。

```
$ sudo yum install git autoconf gcc bison
$ git clone https://git.php.net/repository/php-src.git
```
必要なライブラリをダウンロードします（余分なものがあるかもしれません）。

```
$ sudo yum install libxml2-devel bzip2-devel libcurl-devel libjpeg-devel libpng-devel libXpm-devel freetype-devel t1lib-devel gmp-devel mysql-devel aspell-devel recode-devel
$ sudo rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/7/x86_64/e/epel-release-7-5.noarch.rpm $ epelレポジトリのインストール
$ sudo yum --enablerepo=epel install libmcrypt-devel
```
PHP 7.0をビルドします。
`./configure`のオプションに関しては、上のページのものから--prefix, --with-mysqlを削除し、--with-apxs2を追加しています（ここも余分なものがあるかもしれません）。
なお、私の環境ではmakeの段階でwarningがでましたが、phpは動きました。

```
$ ./buildconf
$ ./configure --with-config-file-path=$HOME/php7/usr/etc --enable-mbstring --enable-zip --enable-bcmath --enable-pcntl --enable-ftp --enable-exif --enable-calendar --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-curl --with-mcrypt --with-iconv --with-gmp --with-pspell --with-gd --with-apxs2 --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-freetype-dir=/usr --with-t1lib=/usr --enable-gd-native-ttf --enable-gd-jis-conv --with-openssl --with-mysql=/usr --with-pdo-mysql=/usr --with-gettext=/usr --with-zlib=/usr --with-bz2=/usr --with-recode=/usr --with-mysqli=/usr/bin/mysql_config
$ make
$ sudo make install
```

ここまでくれば、`php -v` で
> PHP 7.0.0-dev (cli)

などと出るはずです。
あとは`/etc/httpd/conf.d/php.conf`あたりに設定を書けば終わりです。
wgetで取ってきたものがおかしい

##はじめに
　やらかしたらメモる。恥ずかしいことほどメモる。公開する。後悔する。より深く傷つけばより強く覚える。多分もう忘れなくなる。ミスらない。新手の自傷系勉強スタイル。これを見たお前もちょっと覚える。俺に良し！お前に良し！会社に良し！玄人に悪し(こんな凡ミス読むだけ時間の無駄だ)！

キーワード: wget, Linux, コマンド
##なにをやらかしたか
　**URL間違っとった！**
##つまりどういうことだってばよ
　`wget http://sorceforgeほにゃらら.tar.gz`の**url部分が多少おかしくてもwgetさんはレスポンス(エラーページでも対象物だと思い込んで)でファイル作っちゃうからな！**ちゃんと目的のファイル落とせてると思いこんで作業してたら落ちてなかった、気付かず**アイエエエ!ナンデ!?**とならないように気をつけろ！
##どないしたらいいん？
　`file 落としてきたファイル`しよう！fileコマンドは中身がどういうデータなのか教えてくれる。これやってなんか関係なさそうなHTMLなんちゃらとか返って来たら大概間違ってる。だから落としたら確認しよう。お兄さんとの約束だ！
##あとがき
　もっとこないしたらええでいうのがあったら教えてくれ工藤。

※恥ずかしすぎてテンションがおかしいです
rspec featureで小数点（ピリオド）を扱う

featureで、たとえばお小遣い２万円を選択する場合

```
かつ お小遣い「money」の「2万円」を選択する
```

って書いてテストしてたんだけど、小数点のテストができていなかった。

お小遣い２．５万円を選択する場合

```
かつ お小遣い「money」の「2.5万円」を選択する
```

ってやったら

```
# No such step: 'お小遣い「money」の「2.5万円」を選択する'
# ./spec/features/my_settings/monthly_details.feature:31
```

ってなってpendingになってしまった。

どうやらピリオドが入るとうまく解釈してくれないらしい。

ってことでエスケープしたりとかいろいろ試したんだけど、最終的に適当に打ったらいけたｗ

```
かつ お小遣い「money」の「"2.5万円"」を選択する
```

ダブルクォーテーションで括ることによって文字列って判断してくれるのかな。
仕組みはよくわからんけど無事解決！


お小遣いは上がっていないけどな！！
RectangleVisual3Dに画像を貼り付ける方法


##概要
HelixToolkitは、オブジェクトに対してマテリアルとして画像を貼ることができます。
貼る方法の備忘録です。
##XAMLで指定する方法
XAMLで、RectangleVisual3Dに画像を貼り付ける方法は、下記のとおりとなります。
画像は何故か90度転倒した状態で表示されるためRotateTransformを使って補正しています。
カメラ位置の問題かとも思ったのですが、ViewCubeの表示からすると正しいようなので、画像の方で対応しています。

```xml
<Window x:Class="HelixToolkitTestSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:helix="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf"
        Title="MainWindow"
        Width="800"
        Height="600"
        Background="Black">

    <Grid>
        <helix:HelixViewport3D x:Name="viewport3d"
                               ShowCameraInfo="True"
                               ShowViewCube="True">
            <!--  カメラ  -->
            <helix:HelixViewport3D.DefaultCamera>
                <PerspectiveCamera FieldOfView="45"
                                   LookDirection="0.0,0.0,-122.334"
                                   NearPlaneDistance="0.125"
                                   Position="0.966,0.831,68.597"
                                   UpDirection="0.0,1.0,0.0" />
            </helix:HelixViewport3D.DefaultCamera>
            <!--  光源  -->
            <helix:SunLight />

            <helix:RectangleVisual3D Width="30" Length="40">
                <helix:RectangleVisual3D.Material>
                    <DiffuseMaterial>
                        <DiffuseMaterial.Brush>
                            <ImageBrush ImageSource="pack://application:,,,/Images/grayscale28.jpg">
                                <ImageBrush.Transform>
                                    <RotateTransform CenterX="0.5" CenterY="0.5" Angle="90" />
                                </ImageBrush.Transform>
                            </ImageBrush>
                        </DiffuseMaterial.Brush>
                    </DiffuseMaterial>
                </helix:RectangleVisual3D.Material>
            </helix:RectangleVisual3D>
        </helix:HelixViewport3D>
    </Grid>
</Window>
```
![RectangleVisual3D画像貼り付け.png](https://qiita-image-store.s3.amazonaws.com/0/7839/6320f6eb-358c-d7c7-9add-78ff865f75ae.png)

##コードビハインドで指定する方法
DiffuseMaterialクラスを使って、画像を指定する方法は一緒です。
HelixToolkitには、MaterialHelperクラスというユーティリティクラスが用意されておりMaterialHelper.CreateImageMaterialメソッドなどを利用すると簡単にBitmapImageをマテリアルへ変換する事ができます。

```csharp
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var image = new BitmapImage(new Uri("pack://application:,,,/Images/grayscale28.jpg"));
            var brush = new ImageBrush(image);

            brush.Transform = new RotateTransform(90, 0.5, 0.5);

            var material = new DiffuseMaterial(brush);
            var rect = new RectangleVisual3D() { Width = 30, Length = 40, Material = material };

            viewport3d.Children.Add(rect);
        }
    }
```
Gitでremoteリポジトリから新規にbranchを持ってくる方法 

新規にbranchを切って、それをremoteのリポジトリにpushしたとします。
別のPCでremoteにある、新しいbranchをpullしてくる方法です。

まずはremoteの新規リポジトリをpullする用のbranchを作ります。

```:新規branch作成
git branch new_branch_name origin/new_branch_name
```

次に新規branchにcheckoutしてremoteのbranchをpullします。

```:pull
git checkout new_branch_name
git pull origin new_branch_name
```

以下のようなエラーが出る場合はリモートの確認

```:error
fatal: Cannot update paths and switch to branch 'new_branch_name' at the same time.
Did you intend to checkout 'origin/new_branch_name' which can not be resolved as commit?
```

リモートのブランチのリストを確認

```:リモートの確認
git branch -r
```

branch 表示されない場合は更新

```:更新する
git fetch --prune
```

これで、リモートからブランチを作成可能。
Atom 0.199.0 リリース

[Atom](https://atom.io/)

使い始めてまだ日が浅く、しかもWindows環境(Cygwinとかなし）で使ってるためそんな人があんまりいなく試行錯誤で使ってるみゅみゅですが（cygwinなくてもgitできるぞー）なにげに右下を見ると可愛い青いリスっぽい生き物がいました。  

ということでクリックしてみると

```
0.199.0 2015/5/15 4:59:09

Notable Changes

Atom now bundles Autocomplete Plus and the completion providers for HTML, CSS, Less, Sass, snippets, and the Atom API
Opening editors is now significantly faster than previously releases
Fixed an issue where packages with invalid Git repository URLs in their package.json file wouldn't load
Running atom with no arguments from the command line now re-opens the previously-opened windows. Use atom . to open the current working directory
Fixed an issue that prevented Atom from re-opening its previously opened windows during startup on Linux and Windows
The Fuzzy Finder now highlights the portions of the file path that match the search text
The Command Palette now highlights the portions of the command name that match the search text
Fixed an issue on Linux and Windows 7 where the spell checker would fail to highlight misspelled words
Fixed an issue where fs and path would be accidentally available as global variables
```
新しいバージョンのリリースのお知らせでした。　　（なんでリスなんだろう？）  

**significantly faster**
「significantly」、、、まじですか？？  

というわけでアップデート！

こころなしかMarkdown previewがはやくなってるような！！
しばらくつかってみまーす！
jQueryでカンタンにh1タグの中身をtitleと同じにする

## ■やりたいこと
・PHPもjQueryも使えるwebサイトでheader.phpでヘッダーを共通化している。（WordpressなどのCMSではない）
・共通ヘッダー部にh1タグを入れたい。titleタグと同じにしたい。
・PHPでもできるけどjQueryのほうがシンプルにコード量少なくできそう。

## ■やり方
※下記例はわかりやすくする為、共通headerではなく個別のページとしています。

```html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>該当ページのタイトル</title>
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

<script type="text/javascript">
  $(function(){
    // h1タグの中身をtitleと同じにする
    var title_text = $("title").html();
    $("#h1_title").html(title_text);
  });
</script>
	<h1 id="h1_title">jQueryがうまく動かない場合に表示したいタイトル</h1>
</body>
</html>
```

## ■参考にさせて頂いたページ
jQueryを使ってHTMLのhead内にアクセス：実験メモ
http://h2ham.seesaa.net/article/108298317.html
node,expressでとりあえず静的ファイルを公開したい

expressのバージョン更新したら動かなくなっていたので。。。
すくなくとも 4.12.x はこれで動きます。

```js
var express = require('express');
var app = express();
var port = process.env.PORT || 5010;

app.use(express.static('public'));

app.listen(port);
console.log("surver running at localhost:" + port);
```

###### 参考：
[本家のページ](http://expressjs.com/starter/static-files.html)
プログラマーがRを始める時に知っていると便利なコマンドのまとめと3D散布図をつくる話 - RStudio は入れておきましょう

こんにちは自称**計量東村アキコ学**第一人者の @makito です。

Excelはバージョンによっては散布図の作成がとても苦手です。例えば、プロットにラベルを付けたい時に、古いExcelのバージョンではVBA（マクロ）を書いて実行する必要がありました。最新版では簡単になっているらしいのですが、手元にあるExcel2010では少なくともマクロを実行しなければなりません。

Rはラベル付きの散布図も作成可能です。さらに、**rgl**というパッケージで3次元プロットまで作れます。**主成分分析**結果の第二主成分までの累積寄与率が低く、第三主成分でようやく8割近くなるといったときには第三主成分まで含めて検討したくなります。そうなったらいよいよExcelにお別れを告げる時なのかもしれません。

```
                          PC1    PC2    PC3     PC4     PC5
Standard deviation     1.4313 1.1319 0.8872 0.69908 0.62791
Proportion of Variance 0.4097 0.2562 0.1574 0.09774 0.07885
Cumulative Proportion  0.4097 0.6660 0.8234 0.92115 1.00000
```

例によって東村アキコ先生の「かくかくしかじか」第一巻のセリフ末記号の使用頻度を使用します。使用頻度は各話、各キャラクター毎に集計されたものです。

![image](https://qiita-image-store.s3.amazonaws.com/0/75068/e09b0a7c-3e1a-8cbf-2ef5-9d2d8620d49a.png)

# :bar_chart: さっそくつくってみました

使用した **rgl** というパッケージもア○ゾンみたいなロゴで目立っている @hoxo_m さんのブログで見つけました。

![image](https://qiita-image-store.s3.amazonaws.com/0/75068/dbad666d-92c1-7634-952f-234e5ff6a150.png)
図１．plot3dを使った三次元散布図の例

例えばこんな散布図を作ろうとすると、

* データはどうやって渡すの？
* プロットへのラベル付けはどうするの？
* 色はどうやってつけるの？

といった疑問が出てきます。そんな時に知っていると便利なコマンドをまとめました。

※ :+1: @awakia さんが投稿した『 統計用R言語データ解析用チートシート - Qiita - http://goo.gl/rc0OGZ 』もとても良いです

# :wrench: コードを書く時に使えるRの便利なコマンド

## パッケージの内容を調べる

```r
library(help=rgl)
```

## 関数のヘルプを見る

```r
?plot3d
```

## クラスのメソッドを調べる

```r
methods(plot3d)
```

## オブジェクトがどのクラスのインスタンスなのか確認する

```r
class(hoge)
```

## オブジェクトの概要を確認する

```r
summary(hoge)
```

# :bar_chart: 3D散布図のつくりかた

使用するデータ

```example.csv
name,ex,qu,dot,tsu,cho,type
NAR(1),0.127272727,0,0.054545455,0,0.018181818,NAR
NAR(2),0.025,0,0,0,0,NAR
NAR(3),0,0,0.087719298,0,0,NAR
NAR(4),0,0.018867925,0.132075472,0,0,NAR
NAR(5),0.011494253,0.011494253,0.068965517,0,0,NAR
NAR(6),0.024096386,0,0.096385542,0,0,NAR
NAR(7),0,0,0.065217391,0,0,NAR
```


```r

library("rgl") # ライブラリの読み込み

data <- read.csv('example.csv', head=T, row.names=1) # データの読み込み

pca <- prcomp(data[1:5], scale=T, cor=TRUE) # 主成分分析実行

pca # 主成分分析結果を表示

summary(pca) # サマリーを表示

pcScores <- pca$x[, 1:3] # 第三主成分までのデータ

###########################
# ここから3D散布図描画
###########################

# col は色を指定する、6列目はファクタになっているデータ
# size はドットの大きさを指定
plot3d(pcScores, col=as.integer(data[,6]), size=5)

# プロットにラベルをつける
# texts でラベルになる文字データを指定
# cex は文字の大きさ（小さめに） 1がデフォルトサイズらしい
text3d(pcScores, texts=rownames(data), cex=0.5)

# WebGLで描画
writeWebGL(width=500, height=550)
```


# :heart: おまけ

## Excelっぽい色にする

@hoxo_m さんのブログ記事『 R で Excel っぽい色を出す - ほくそ笑む - http://goo.gl/Wt1MhB 』を読んだら、元Excel使用者としてやってみたくなりました。色の彩度が低いので、プロットのサイズを大きめにしています。

![image](https://qiita-image-store.s3.amazonaws.com/0/75068/e2175d4d-bf42-61e6-5cf5-a50eea2c6983.png)

図２．Excelっぽい色で三次元プロットした例

### :smile: Excelっぽくなりました！！

## ホクソエム :question:

R界隈をめぐっていると、とても参考になる情報に助けられているのですが、一つどうでもよい疑問が湧いてきました。 @hoxo_m さんをはじめとして、 @uri さんはTwitterの名前がホクソエムになっていたり、タイムラインにホクソ○○といった違うユーザーの名前が出てきたりします。Rや統計界隈にはホクソ教というか、そういう邪教というか土着の宗教みたいのがあるのでしょうか？R及び統計界隈の **コード** のようなものでしょうか？

不思議です :smile:
RWD CSS つらい

# RWD CSS つらい
レスポンシブだけどIE8+（IE8はレスポンシブ無し）なサイトを作る時に、

```css:
.block__element{
  border-bottom: 1px solid #333;
}

@media only screen and (max-width: 640px) {
  .block__element{
    border-bottom: none;
  }  
}
```

みたいに、定義したものを取り消す無駄な記述が多くなるのがつらい。
もしくは、

```html:
<link rel="stylesheet" media="screen and (min-width: 641px)" href="css/pc.css">
<link rel="stylesheet" media="screen and (max-width: 640px) and (min-width: 0px)" href="css/sp.css">
```

のパターンだと逆に共通で持たせたいスタイルを継承できなくて、結局つらい。
Go: 計算なしのFizzBuzz

割り算などの計算をせず、時に身を任せるFizzBuzzです。絶妙なバランスでなりたっています。

```go
package main

import (
	"time"
)

func main() {
	i := 1
	skip := false

	fizz := time.Tick(3 * time.Second) // 3秒ごとに送信するチャネル
	time.Sleep(10 * time.Millisecond)  // 前後のチャネルの開始時刻を微調整
	buzz := time.Tick(5 * time.Second) // 5秒ごとに送信するチャネル
	time.Sleep(10 * time.Millisecond)  // 前後のチャネルの開始時刻を微調整
	num := time.Tick(1 * time.Second)  // 1秒ごとに送信するチャネル

	for {
		select {
		case <-fizz:
			print("Fizz")
			skip = true
		case <-buzz:
			print("Buzz")
			skip = true
		case <-num:
			if !skip {
				print(i)
			}
			print("\n")
			skip = false
			i++
		}

		if i > 100 {
			return
		}
	}
}

```

[このコードを実行してみる](http://play.golang.org/p/Qmg03iZGBx)
AndroidのManifestでBroadcast Receiverを登録した⇒あれ？受け取れない

サービスからActivityへ通知をしたくてBroadcastを受け取るようにしました。
常時監視したかったのでActivityでregisterReceiver使うのではなく、AndroidManifest.xmlへ記載。

こんな単純なのはミスしてるわけないよねーっと動かしてみると。。。あれ？受け取れない(´・ω・`)

applicationタグのandroid:label属性と同じ感覚で

```xml:AndroidManifest.xml
<action android:name="@string/my_action_receive" />
```

とかしてたのがダメらしいです。
まさかと思い、リソース参照せずに直接アクションの定数（文字列）を記述したらちゃんと受信できるようになりました。

```xml:AndroidManifest.xml
<application ...>
    ...
    <receiver android:name=".SampleReceiver">
        <intent-filter>
            <action android:name="mydomain.sample.RECEIVE_ACTION" />
        </intent-filter>
    </receiver>
</application>
```

リソース参照できるとことできないとこがあるとか辞めてほしい...
特定のディレクトリ配下のファイルすべてのmd5値を取得する

忘備録です。

特定のディレクトリ配下のファイルのmd5値をすべて取得します。

`$ find <target_dir> -type f -exec md5sum {} \;`

例）
`$ find /var/hoge/ -type f -exec md5sum {} \;`
Lubuntu15.04でcapsLockとctrlをswapする方法


`/etc/default/keyboard`の、**XKBOPTIONS**を下記のように修正する。

```lang:/etc/default/keyboard
XKBOPTIONS="ctrl:swapcaps"
```

編集の際にはこちらのコマンドでどうぞ。
`sudo vi /etc/default/keyboard`