OmniAICreator/Qiita-1.07M huggingface dataset:
JavaScript のTemplate Literal を使う

php や Perl でよく使う「ヒアドキュメント」。

JavaScriptでは、ES2015から「Template Literal」 として、ヒアドキュメント的な記述ができることを知りました。

備忘録がてらメモしておきます。

## Template Literal (テンプレートリテラル)とは

JavaScriptで複数行の文字列や文字列内挿入ができる仕様、いわゆるヒアドキュメントに近い。

## 書き方

文字列をバッククオート(バックティック)で囲む。

```
`aaa`

`
aaa
bbb
`

// 変数にも格納できる

const text = `
aaa
bbb
ccc
`

```


## 文字列の出力

```
const text1 = `
aaa
bbb
ccc

// htmlもコメントもそのまま出力される

<h1>見出し1</h1>
<p>パラグラフ</p>

`

console.log(text1)

```

出力結果は

```
aaa
bbb
ccc

// htmlもコメントもそのまま出力される

<h1>見出し1</h1>
<p>パラグラフ</p>

```

## 変数の展開

変数を出力するときは

${変数}

として展開する

```
const char = 'ddd';

const text2 = `
aaa
bbb
ccc

${char}
`
console.log(text2)
```

出力結果は

```
aaa
bbb
ccc

ddd
```



## 式の展開

計算式も ${式} として展開する

```
const char = 'ddd';

const number = 10;

const text3 = `
aaa
bbb
ccc
${char}
${number * 10}
`

console.log(text3)
```

出力結果は

```
aaa
bbb
ccc
ddd
100
```

## 参考URL
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/template_strings
ImageEffect用のスクリプトをCameraにアタッチする

# この記事の目的
- UnityのEditor上でImageEffectの効果を見れるようにする。

# PostEffectとは

レンダリング後の画像にかかるエフェクトの事をPostEffectと言う。
（UnityではImageEffectと呼ばれる。

下の画像みたいに、ゲーム画面に描画された画像をPostEffectによってモザイクをかけたりする事が出来る。

Before:
![FxNone.png](https://qiita-image-store.s3.amazonaws.com/0/141994/12bb8623-cb56-bb67-03fb-286761000f73.png)

After:
![FxBlurNoise.png](https://qiita-image-store.s3.amazonaws.com/0/141994/2ed1335c-7e2f-f8f5-d07b-c9b593bea1a5.png)

# スクリプト上でレンダリングされた画像を受け取る

```csharp:MyImageEffect.cs
using UnityEngine;

[RequireComponent(typeof(Camera)) ExecuteInEditMode]
public class GrayScaleEffect : MonoBehaviour {

    private Material material;

    void Awake()
    {
        material = new Material (Shader.Find ("Custom/redScale"));
    }

    void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        Graphics.Blit (source, destination, material);
    }

}
```


```redScale.shrder
Shader "Custom/redScale"
{
	SubShader
	{
		// No culling or depth
		Cull Off ZWrite Off ZTest Always

		Pass
		{
			CGPROGRAM
            #pragma vertex vert
			#pragma fragment frag
					
			fixed4 _Color;

            float4 vert(float4 v:POSITION) : SV_POSITION {
                return mul (UNITY_MATRIX_MVP, v);
            }

			fixed4 frag () : COLOR
			{
				return fixed4(1, 0, 0, 1);
			}
			ENDCG
		}
	}
}
```

Cameraコンポーネントを持つGameObjectのスクリプト上で
**void OnRenderImage(RenderTexture source, RenderTexture destination)**
を実装すると、毎フレームカメラで描画されたRenderTexture(source)とレンダリングされる移動先(destination)を引数から渡されます。

**Graphics.Blit**を使って、カメラで描画されたsourceにShader(material)でレンダリングしてその結果をdestinationに書き込みする事で画面にImageEffectの効果を表しています。

# スクリプトをカメラにアタッチ
Shaderとスクリプトを作成。

![スクリーンショット 2017-02-15 23.21.43.png](https://qiita-image-store.s3.amazonaws.com/0/141994/7df8daab-e007-b23e-f28f-13207df394dd.png)

![スクリーンショット 2017-02-15 23.20.03.png](https://qiita-image-store.s3.amazonaws.com/0/141994/9b54a6bb-f5b8-41b6-fa76-73c7b72d87c2.png)

そうすると、以下のように画面が赤くなった事が分かったと思います。

Before:
![スクリーンショット 2017-02-15 22.39.35.png](https://qiita-image-store.s3.amazonaws.com/0/141994/b79b3bfc-0050-d89d-af79-f908febcd540.png)

After:
![スクリーンショット 2017-02-15 23.20.18.png](https://qiita-image-store.s3.amazonaws.com/0/141994/0696afab-991e-b218-472a-0ffed3fb5e87.png)

あとはShaderの中身を書き換えることで様々なImageEffectを試すことが出来ます。
SQLをFirebaseで書き換えるためのチート集

##RDSのデータ構造
![スクリーンショット 2017-02-15 23.13.32.png](https://qiita-image-store.s3.amazonaws.com/0/95143/7224c9fe-24fe-046d-ec3d-c188d1fb045c.png)

##Firebaseのデータ構造
![スクリーンショット 2017-02-15 23.13.44.png](https://qiita-image-store.s3.amazonaws.com/0/95143/6cbf5e18-bd8b-70f1-9342-835ea34d9ba0.png)


//rootRef points every single piece of data in the database.
const rootRef = firebase.database().ref();

```sql:no1.sql
select * from Users where UID = 1;
conts oneRef = rootRef.child('users').child('1');
```

```sql:no1.sql
select * from Users where Email = 'david@hoge.com';
cont twoRef = rootRef.child('users').orderByChild('email').equalTo('alice@email.com');
```

```sql:no2.sql
select * from Users LIMIT 10;
const threeRef = rootRef.child('users').limitTofirst(10);
```

```sql:no3.sql
select * from Users where Name LIKE 'D%';
const fourRef = rootRef.child('users').orderByChild('name').startAt('D').endAt('D\ut8ff');
```

```sql:no4.sql
select * from Users where age < 50;
const fiveRef = rootRef.child('users').orderByChild('age').endAt(49);
```

```sql:no5.sql
select * from Users where age > 50;
const sixRef = rootRef.child('users').orderByChild('age').startAt(51);
```

```sql:no6.sql
select * from Users where age >= 20 $$ age <= 100;
const sevenRef = rootRef.child('users').orderByChild('age').startAt(20).endAt(100);
```

```sql:no7.sql
select * from Users where age = 28 && location = 'Tokyo'
↓This is NG!!↓
const eightRef = rootRef.child('users').orderByChild('age').equalTo(28)
									   .orderByChild('location').equalTo('Berlin');
↓You should change Data structure of Object..When you use two conditions↓
const eightRef = rootRef.child('users').orderByChild('age_locatoin').equalTo('28_Tokyo');
```

[参考はこちら](https://www.youtube.com/watch?v=sKFLI5FOOHs)
Gitで過去のバージョンに戻る方法～Git Bashから～

#はじめに
Gitで過去のバージョンに戻る方法を書いていきます。
#どのバージョンに戻るか

```
git log オプション
```

を使っていきましょう。

##特定の期間・件数のlogを見る


```
 git log --after="2016-03-15T00:00:00+0900" --before="2016-03-15T23:59:59+0900" 
```

このとき出てくるcommitのIDをコピーしましょう。
そして今自分がどのブランチにいるか確認しときましょう。(ここでは、hogehogeブランチにいるとします)

##昔のバージョンに戻る

```
git checkout commitのID
```

これで戻ることができます。

##昔のバージョンから帰ってくる

```
git checkout hogehoge
```
WindowsでX Serverを構築

WindowsでX Serverを構築したのでメモ．
今回は，Cygwinを用いた．

#Cygwinのダウンロード

以下のURLからCygwinのインストーラをダウンロード
https://cygwin.com/install.html

今回のOSは64bitなので**setup-x86_64.exe**をダウンロードした．

#Cygwinのインストール

* Choose A Download Source --- とりあえず "Install from Internet"．
* Select Root Install Directory --- 特にこだわりがなければデフォルトのままで．
* Select Local Package Directory --- 色々なパッケージがここに入るので，管理のし易いとことに．
* Select Your Internet Connection --- Proxyがあればここで設定．
* Choose A Download Site --- サーバを選択するので，「jp」のドメインの方が早い??

#Cygwin パッケージの選択

構築する環境にインストールするパッケージを選択する．
今回必要な，**OpenSSH**と**X Server**は，デフォルトではインストールされないので，自分で設定する．

##OpenSSH
Viewを「Category」に変更して，OpenSSH で検索
"Net"の中の「openssh:The OpenSSH server and client programs」のBinをチェック
![openssh2.jpg](https://qiita-image-store.s3.amazonaws.com/0/152224/b8acbf9f-ba67-5ae3-1bea-cf704cd22f13.jpeg)

##X11
Categoryの「X11」の "Default" を "Install"に変更する．

![x11.jpg](https://qiita-image-store.s3.amazonaws.com/0/152224/ff135952-455e-e409-6e20-f5783f857e90.jpeg)

あとは，特別なセッティングが必要でなければ，次へに進んでインストールを完了する．


#Cygwin XWinの起動

Windowsの「スタート」--> 「すべてのプログラム」 --> 「Cygwin-X」 --> 「XWin Server」でX Serverが起動する．

CygwinからコマンドラインでX Serverを起動したい場合は，Cygwinで
```
startx
```
これで，X Serverが起動する．

#接続確認
起動したXWinのターミナルで，Ubuntuに接続してみる．
```
ssh -X -Y -C ユーザ名@クライアントのIPアドレス
```
オプション

* X --- X Serverでの接続
* Y --- X11 Security拡張機能が無効になるため，動作は軽くなるが，セキュリティが・・・
* C --- 通信データを全て圧縮するため，回線が遅い場合は，設定する方が速くなる．

これで，WindowsからUbuntuにX Serverで接続できた．
Tensorflowメモ【随時更新】

#Tensorfowメモ
自分なりに書き残しているメモです

##Tensorflowの構造
グラフ、演算ノード、テンソルの構想


# グラフとは?
複数のニューロンからなる一つの層を表す図形
φ(X * W + b)

ノードとノードを結ぶ辺によって構成
演算ノード・変数ノード・プレスホルダーノードなどが存在



# テンソルとは
グラフを流れる量

テンソルはn次元の配列あるいはリスト

# 主な表記

変数 tf.Variable
行列の積 tf.matmul
φの適用　tf.nn.relu


## グラフの定義
```graph.py
# Wを入れる変数の定義
weights = tf.Variable()
# bを入れる変数の定義 
bias = tf.Variable()
# 層の働きを φ(X*W+b) で定義
#ここではφはreluを使用
#imagesは、この層が受ける入力
#hidden1はこの層の出力

#1層目
hidden1 = tf.nn.relu(tf.matmul(images, weights) + bias)

#2層目
hidden2 = tf.nn.relu(tf.matmul(hidden1,weights) + bias)
#images, weights, bias, hidden1はいずれもテンソル
```
  
## 変数定義
#変数の初期化
```init.py
w = tf.Variable(tf.random_norml([784, 200], stddev = 0.35), name = "weights")
b  =tf.Variable(tf.zeros([200], name = "biases")

#この変数を初期化する演算
#注意！ここではまだ実行されずノードが追加されただけである。
init_op = tf.initialize_all_variables()


#モデルを起動したあとで、この初期化を呼び出す
#定義したモデルはSessionで初めて動く。
#呼び出しには run を使用
with tf.Session() as sess:
    # Run the init operation.
    sess.run(init_op)




```

**変数の保存とリストア

``` save.py
#変数を作る
v1 = tf.variable(..., name = "v1")
v2 = tf.variable(..., name = "v2")

#変数を初期化する init_opノード
init_op = tf.initalize_all_variables()
#すべての変数をsave, restoreするsaveノードの追加
saver = tf.train.Saver()

#モデルを起動し、変数を初期化し、何かの仕事をしたあとで
#変数をディスクにsaveする
with tf.Session() as sess:
  sess.run(init_op)
  #モデルで何かの仕事をする
  ##########
  
  #変数をディスクにsaveする
  save_path = saver.save(sess, "/tmp/model.ckpt")
  print("Modef saved in file: %s" % save_path)

  #変数のrestore
  saver.retore(sess, "/tmp/model.ckpt")
  print ("Modell restored")

```

# パラメータの最適化(訓練)

## パラメータ(重みとバイアス)の最適化
1. グラフを組んで、そのグラフで入力データで出力を計算
2. 出力結果を正しい答えと比較。比較には損失関数を用いる
3. Gradient Descent(勾配降下法)を使って、損失関数の値を小さく修正する
4. 新しいパラメータで出力を計算。損失関数が小さくなるまで繰り返す

##主な関数

#GradientDescentOptimizer()
パラメータ最適化のための最適化演算。このOptimizerを使って損失関数を最適化

```opt.py

###数値予測の場合###
 loss = tf.reduce_mean(tf.square(y - y_data))
#学習率0.5で勾配降下
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

###クラス分けの場合###
y_ = tf.placeholder("float", [None , 10])
cross_enttopy = -tf.reduce_sum(y_ * tf.log(y))
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(cross_entropy)



```
RStudioからQiitaに直接投稿できるアドインを作りました

表題の通りなんですけど、作りかけのまま放置してたやつにちょっと手を入れました。

-   [yutannihilation/qiitaddin: An RStudio addin to post a knitted R Markdown file to Qiita](https://github.com/yutannihilation/qiitaddin)

これを使うと、こんな感じでRStudioからQiitaに投稿できます。

![](https://i.gyazo.com/1dd72f57301794d526aad45afdee95a3.png)

準備
----

### インストール

``` r
devtools::install_github("yutannihilation/qiitaddin")
```

### Qiitaの個人用アクセストークンを環境変数に指定する

Qiitaの個人用アクセストークンを`QIITA_ACCESSTOKEN`という環境変数に指定する必要があります。この辺は[qiitrの紹介](http://qiita.com/yutannihilation/items/2730ec3cbfacdc965e4d#%E5%80%8B%E4%BA%BA%E7%94%A8%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%AB%E6%8C%87%E5%AE%9A)に書いたので、そちらを参考にしてください。

### ImgurかGyazoのアカウントを作成

Qiita APIには画像アップロード用の機能がありません。そのため、別サービスを頼らざるを得ないわけですが、3つ選択肢を用意しています。

1.  ImgurにOAuth認証を使ってアップロード
2.  GyazoにOAuth認証を使ってアップロード
3.  Imgurに認証を使わずにアップロード

このうち、3.にするとアカウントは要らないんですけど、画像の削除ができません。Imgurはデフォルトでは非公開（URLを知っている人はアクセスできる）なので、うっかりまずい画像を上げてしまってもそこまであわてる必要はありませんが、あまりおすすめしません。アカウントを作りましょう。

使い方
------

Qiitaに投稿したいR Markdownファイルにフォーカスがある状態で、アドインから「Post To Qiita」を選びます。頻繁に使うなら[キーボードショートカットを設定](https://rstudio.github.io/rstudioaddins/#keyboard-shorcuts)しておくと便利でしょう。

![](https://i.gyazo.com/3707145c987c53536d9b66e6d2245366.png)

または、コンソールから立ち上げることもできます。

``` r
qiitaddin::qiitaddin_knit("path/to/file.Rmd")
```

R Markdownのknitが終わると冒頭に貼ったようなプレビュー画面が表示されます。ここでは以下の項目を設定できます。

After knitting the document is finished, the preview window appears. Review the document and edit the following items if necessary.

-   `coediting`: 共同編集モードにするかどうか(Qiita:Teamでのみ有効)
-   `private`: 投稿を非公開にするかどうか(Qiitaでのみ有効)
-   `Upload images to`: イメージのアップロード先
-   `update an existing item`: 既存の投稿を更新するかどうか
-   `Item ID`: 既存の投稿のID

ここで、`private`にはとりあえずチェックを付けておくことをおすすめします。「test」みたいな内容の記事を公開で投稿すると怒られたりするからです。

「Done」を押すと、右下にプログレスバーが出て、アップロードが完了したらブラウザを立ち上げてそのQiitaのページに飛びます。内容に問題がないことを確認したら記事を公開しましょう。

エラー、要望などがあれば
------------------------

[GitHub](https://github.com/yutannihilation/qiitaddin/issues)でお知らせください。英語はちょっと...という方はこの記事のコメント欄かTwitterあたりで声をかけていただければうれしいです。
Slack emojinator使ってみた

# TL;DR

slackへのemoji登録を自動化する話。

# Slack emojinatorのインストール

https://github.com/smashwilson/slack-emojinator
ここに書いてある通り。

```shell-session
git clone https://github.com/smashwilson/slack-emojinator.git
cd slack-emojinator
pip install -r requirements.txt
```

# 複数個のemojiを登録するための準備

![emoji_irai.png](https://qiita-image-store.s3.amazonaws.com/0/31245/23ae939d-8dd2-bd0a-fe29-bec4723490fc.png)

ちょうどこんな依頼も来たので試してみた。

## セッションのクッキー取得

1. ssmjpのemojiページを開く
2. 開発者ツール起動(ChromeなWindowsならF12)し、ネットワークタブを開く
3. emojiページをリロードする
4. "name"が"emoji"の項目を押す
5. 新たに開いたタブから"Headers"を選ぶ
6. "Request Headers"から"Cookie"の中身をコピーする

```shell-session
cp .env.sample .env
vim .env
```

```bash:.env
export SLACK_TEAM=ssmjp
export SLACK_COOKIE="(ダブルクオーテーションで囲って全部貼る)"
export SLACK_API_TOKEN=  #ここは空のまま
export EMOJI_DIR=
```

## まずは一個登録

```shell-session
wget http://cultofthepartyparrot.com/parrots/parrot.gif

source .env
```

```shell-session:output
python upload.py parrot.gif
Processing parrot.gif.

Uploaded 1 emojis. (0 already existed)
```

これで```:parrot:```というemojiを追加できた。

# いざ全部登録

## gif画像取得

```shell-session
git clone https://github.com/jmhobbs/cultofthepartyparrot.com
```

## プレフィックスを付ける

```shell-session
cd cultofthepartyparrot.com/parrots
for f in * ; do mv "$f" "parrot_$f" ; done
```

## 登録

```bash:.env
export EMOJI_DIR=../cultofthepartyparrot.com/parrots
```

```shell-session
source .env
python upload.py ${EMOJI_DIR}/*.gif
```
Gitに監視されないディレクトリ gitignore/ を登録しておく

Gitで共有するまでもない、自分のみが利用するデータ等は『[git の監視から逃れる方法](http://qiita.com/sqrtxx/items/38a506e59df67cd5d3a1)』にて諸々設定をすればよいですが、必ず無視されるディレクトリをひとつ `.gitignore_global` に登録しておくと便利です。

```diff:~/.gitignore_global
...
# 以下を追加
/gitignore/
```

この設定で、すべてのリポジトリルートでの `gitignore/` ディレクトリが無視されるようになりました。
Google Driveへのシンボリックリンクや、関連書類の置き場所に利用できるでしょうか。
AWSのサブネット内で使用できるプライベートIPアドレス

# サブネット内でインスタンスに割り当てならない IP アドレスがある
サブネット内で EC2 に割り当てることができない AWS が予約済みの IP アドレスがある。
良く忘れるから覚え書き。

## インスタンスに割り当てられない IP アドレスの定義
 - CIDR ブロックの最初の 4 つの IP アドレス
 - CIDR ブロックの最後の IP アドレス

## 割り当てられないIPアドレスの例
 - CIDR ブロック 10.0.0.0/24 や 10.0.0.128/25 の場合、次のIPアドレスがインスタンスに割り当てられない

| 10.0.0.0/24 | 10.0.0.128/25 | Description |
|:----------:|:----------:|:----------------------:|
|10.0.0.0    |10.0.0.128  | ネットワークアドレス |
|10.0.0.1    |10.0.0.129  | VPC ルーター用 |
|10.0.0.2    |10.0.0.130  | DNS サーバーの IP アドレス |
|10.0.0.3    |10.0.0.131  | 将来の利用のために AWS で予約 |
|10.0.0.255  |10.0.0.255  | ネットワークブロードキャストアドレス |

[VPC とサブネット](http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_Subnets.html)
Eclipse(neon)のUIのフォントサイズを変える

とりあえずテキストのみで。

Eclipseなどを使っていると，最近のディスプレイは解像度が昔より上がっているのに
なんか昔VisualStudioを使っていた頃に比べて「画面が狭い」ような気がしていたが，
最近になって「フォントサイズが大きい」事にやっと気づいた。

Preferencesから変更すればいいのかなと思ったけども，どうも「エディタの中」のフォントサイズしか変えるところが見つからない。
調べてみると「ECLIPSE_HOME/plugins/org.eclipse.ui.themes_*/css/e4_default_gtk.css」を書き換えればいいぜという情報が見つかったが，Eclipse Neonだからか，そんなファイルはない。
OSの設定を変えればいいんだぜという情報も見つかったが，普段ファイルマネージャを使ったりするにあたっては，あまりフォントサイズを小さくしたくはない。

いろいろ調べたところ，こんなところにあった。

```
（ホームディレクトリ）/.p2/pool/plugins/org.eclipse.ui.themes_1.1.200.v20160815-0536/css/e4_default_gtk.css
```
多分細かいバージョンは場合によって変わると思われる。

そのcssの一番最後にこんな風に書き足してやる。

```css:e4_default_gtk.css
*{font-size:9;}
```

いい感じになる。
Cloud Spannerをまずは動かしてみる

Cloud Spannerがリリースされたので、まずは以下のクイックスタートに従って動かしてみる。
https://cloud.google.com/spanner/docs/quickstart-console

# Spannerのインスタンスを生成
インスタンス名やリージョン、ノード数を指定してSpannerのインスタンスを生成する。

# Databaseの作成
データベース名を入力し、データベースを作成する。

# クエリの実行
画面の上部にある"Query"をクリック

<img width="924" alt="Screen Shot 2017-02-15 at 21.40.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/95399/dc35f659-d1dc-151e-736c-bdf178bc727b.png">

クエリを入力し、"Run query"をクリック。※BigQueryのUIに似ていて使いやすい。

<img width="932" alt="Screen Shot 2017-02-15 at 21.42.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/95399/777f5d72-b9a3-5619-9282-6c10e025ea93.png">

# スキーマを作成
"Create TABLE"をクリックし、"Edit as text"モードにスイッチ
"DDL statement"フィールドに以下を入力し、"Create table"をクリック。※少し(数分)時間がかかる。

```
CREATE TABLE Singers (
  SingerId INT64 NOT NULL,
  FirstName STRING(1024),
  LastName STRING(1024),
  SingerInfo BYTES(MAX),
  BirthDate DATE,
) PRIMARY KEY(SingerId);

CREATE INDEX SingersByFirstLastName ON Singers(FirstName, LastName);

CREATE TABLE Albums (
  SingerId INT64 NOT NULL,
  AlbumId INT64 NOT NULL,
  AlbumTitle STRING(MAX),
  MarketingBudget INT64,
) PRIMARY KEY(SingerId, AlbumId),
  INTERLEAVE IN PARENT Singers ON DELETE CASCADE;

CREATE INDEX AlbumsByAlbumTitle ON Albums(AlbumTitle);

CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle) STORING (MarketingBudget);

CREATE TABLE Songs (
  SingerId INT64 NOT NULL,
  AlbumId INT64 NOT NULL,
  TrackId INT64 NOT NULL,
  SongName STRING(MAX),
  Duration INT64,
  SongGenre STRING(25),
) PRIMARY KEY(SingerId, AlbumId, TrackId),
  INTERLEAVE IN PARENT Albums ON DELETE CASCADE;

CREATE INDEX SongsBySingerAlbumSongNameDesc ON Songs(SingerId, AlbumId, SongName DESC), INTERLEAVE IN Albums;

CREATE INDEX SongsBySongName ON Songs(SongName);

CREATE TABLE Concerts (
 VenueId                 INT64 NOT NULL,
 SingerId                INT64 NOT NULL,
 ConcertDate             DATE NOT NULL,
 BeginTime               TIMESTAMP,
 EndTime                 TIMESTAMP,
 TicketPrices    ARRAY<INT64>,
) PRIMARY KEY(VenueId, SingerId, ConcertDate);
```

<img width="471" alt="Screen Shot 2017-02-15 at 21.48.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/95399/33bf35bd-4e9a-70af-6766-d8d2609f4721.png">

作成されると以下のようになる。

<img width="1191" alt="Screen Shot 2017-02-15 at 21.54.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/95399/20456e10-ef94-326b-956c-301a819d6ac9.png">

# クエリ実行プランの確認
まだデータは入ってないが、"Query"をクリックし、以下のようなクエリを入力。

```
SELECT * FROM Singers
```

"Run query"をクリックし、"Explanation"をクリックするとクエリ実行プランを確認できる。

<img width="900" alt="Screen Shot 2017-02-15 at 21.57.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/95399/d714c12e-554f-bee7-baa9-171896c831e2.png">

とりあえずWebUIを使ってざっと動かせた。まだデータ投入やJavaなどから操作してないので、それは次回試す。
Pythonで実行環境がmacOSのときに通知センターを使って通知する

`platform.system()`でスクリプトを実行しているOSを確認して，シェルに`osascript -e 'display notification "hoge"'`を投げる．macOSなら`platform.system()`は`'Darwin'`がかえってくる．

```py3:
import os,platform

def main():
  if platform.system() == 'Darwin':
    os.system("osascript -e 'display notification \"これはMacです\"'")

if __name__ == '__main__':
  main()
```


参考にしたもの:

- [platform – システムのバージョン情報にアクセスする - Python Module of the Week](http://ja.pymotw.com/2/platform/)
- [Macの通知センターにPythonから通知する - Qiita](http://qiita.com/repli/items/51845d35d851590a07db)
Ubuntuで日本語入力ができなったとき

環境：Ubuntu16.10

OS起動時に、日本語入力が出来なくなった時の対処法。

#まずは事象の確認
右上のキーボードマークが表示されていないことを確認。
（表示されている場合は、別の原因と思われます）

#ごみファイル？の削除
「.mozc」ディレクトリ内のごみファイル？を削除。
これらのせいで、fcitxが上がってこないみたい。

```shell-session:bash
$ cd ~/.mozc
$ rm -f .session.ipc .server.lock
$
```

#最後に、fcitxの起動
仕上げに、以下のコマンドを叩くと、めでたく日本語入力ができるように！！

```shell-session:bash
$ fcitx
$
```

以上です。
npm のパッケージをまとめて消すときの正解がよくわかりません

`npm install` で、パッケージをまとめていれました。

まとめて消したいときは、どうするのがよいのでしょうか？ どれでもいいのでしょうか。

1. `rm -fr node_modules`
2. `cd node_modules; npm uninstall *`
3. ``for package in `ls node_modules`; do npm uninstall $package; done;``

:bow:
Linkis絶対許さないphp+JavaScript

Linkis経由でやられると、知識ない人がうちのサイトを悪く言われるので…
せっかくSSLにしてるのにiframeに押し込めるのやめろ！！！！！！！

あとでコピペする時のメモも含め

かっこよくはないが、alertで出力させる方法
リファラチェックしてscriptタグを直接埋め込むのが楽かもって思い、/body 直前に挿入した。
出力させるページは403とかにしました。
JavaScriptだけでやってもいいけど、ページが表示されるのがムカつくからphpでコントロール

X-FRAME-OPTIONS使うのもいいかもしれないけど、それじゃユーザー側が気づかないと思うし、教えてあげたほうが気づきになるかなと

```php:php
if(isset($_SERVER["HTTP_REFERER"])){
    $ref=parse_url($_SERVER["HTTP_REFERER"]);
    if($ref['host']==="linkis.com"){
        $meta='<script>alert("Linkisを経由したアクセスのため表示できません。ツイート者へアプリ連携の解除を教えてあげてください。");</script>';
    }
}
```

こんな感じです
![サンプル](https://qiita-image-store.s3.amazonaws.com/0/92042/f0340acd-00f4-c8a6-fb08-a25c0d42956e.png)

このアプリケーション自体はスパムではないと思うんですけど、せっかくwebサイトちゃんと作ってもこんなクソアプリ経由されると見づらかったりしてがっかりする
Pythonのinは演算子でもある

Pythonでは、`in` は、`for`分の一部である他に、ある値が`list`や`tuple`といったコンテナの要素として含まれているかどうかを調べるための演算子としても使え、うまく活用するとPythonicな表現ができます。

次の例では、コマンドライン引数を格納しているリスト`sys.argv`に`--debug`という文字列が含まれる場合、`DEBUG`に`True`、そうでなければ`False`がセットされます。

```py
DEBUG = '--debug' in sys.argv
```
また、その反対として次のように`not in`も使うことができます。

```py
SHORT = '--verbose' not in sys.argv
```
災害時アプリケーションの設計

# 災害時アプリケーション

いつかくる大震災に向けて、大切な人とつながるスマホアプリケーションを開発するプロジェクトで、開発・設計・実装で考えたこと

# 基本機能

+ iOS、Androidのアプリケーション
+ データはクラウドに配置する
+ 地震速報をアプリケーションにパブリッシュする
+ その時にあらかじめ登録しておいた***大切な人***（以降、家族と記述する）の現在地が地震速報通知と一緒に通知する
+ あらかじめ登録しておいた***家族***の現在地は、他人には見えない
+ 地震速報の履歴が確認できる

# 基本設計

+ クライアント、サーバーでhttp[s]通信をするViewアプリケーション
+ クライアントアプリケーションは、iOS:Objective-C、AndroidはJava で開発
+ サーバアプリケーションは、java.netty が利用されているvertx + mysql
+ サーバはAWSに配置
+ データアクセスは、全てStoredProcedure実装として、アプリケーションロジックはソースコードには含めない

# 特徴

地震速報をpush受信したクライアントアプリケーションは、地震速報と、家族の現在地を表示する。この表示のためのデータは、push通知のユーザテキストに格納している。また、家族の現在地は、刻々とスマホから通知、データベースにアップデートされている。

***つまり***、いつ来るかわからない地震速報に備えて、家族それぞれのスマホから通知される現在地情報を家族別の現在地情報としてデータベースに保存しておき、そのデータを地震速報をトリガーとして、家族位置情報を対象家族のみに配信するサービス

# 従来イメージ

![0000.png](https://qiita-image-store.s3.amazonaws.com/0/165490/b7bbac9c-fdfc-8795-2385-cddd16419565.png)


# 本当に大震災が来た時に通信できるのか？

開発チームの面々はそれぞれ、特定アプリケーションにおけるtcp輻輳をFPGAとでなんとかしようとした人、RTOSで巨大なステートマシンを書いていた人、等雑多な経歴を持つチームでしたので、災害時でもアプリケーションが正常動作することについて、それなりに検討された

+ 例えば、10万ユーザがアプリを利用すると仮定して、大震災が発生した時、同時にhttp[s]でそもそも通信できるのか？

  + network-経路のどこかで、トラフィック過負荷によってパケットがドロップした場合、tcpがそれを検知して再送を行ったとする、そうすると、再送によってさらにトラフィック過負荷状況を悪化させる
  + httpsに限定すると、証明書ハンドシェークフェーズのコストが大きいため、災害発生時にはSSL通信ではなく、udp/ip等軽量プロトコルとする必要がある
  + 仮に、tcp, http,httpsで通信が確立されたとし、その後に各プロトコルにカプセル化した、アプリケーションデータを送信することになる、それは、重要な通信パケットの邪魔をすることになるのではないか

## udp/ipを検討

tcpプロトコルスタックによって、輻輳状況が悪化すると仮定してtcp実装はやめて、NAT/over udpをプトロコルスタックを経由せずに、タイムスライスQOS、スケジューリングFIFO、netmap + Numa + MultiQueueNic 設計を検討した

### 双方向でのタイムスライス

![0001.png](https://qiita-image-store.s3.amazonaws.com/0/165490/d88756c4-0171-e9ab-b9a8-02a8f183e079.png)

### スケジューリング

![0002.png](https://qiita-image-store.s3.amazonaws.com/0/165490/c211b8b0-1b99-51a6-cfe4-aecb3e676e84.png)

## 経路のスケールアウト

とはいえ、tcp(http[s])はデファクトスタンダードなので、tcpプロトコルスタックは利用することとし経路を分散：スケールアウトする。
その上で災害発生時の通信回数、通信パケットを最小限にすることを検討した

### イベントドリブン差分配信

![0003.png](https://qiita-image-store.s3.amazonaws.com/0/165490/87f53851-336d-8834-0a12-a364fd419c34.png)

### 災害発生時シーケンス

![0005.png](https://qiita-image-store.s3.amazonaws.com/0/165490/384dc0f2-a9ed-05a2-c0a4-6e4ffdfcec8f.png)

### 差分変更通知シーケンス

![0004.png](https://qiita-image-store.s3.amazonaws.com/0/165490/2d9cd4e9-75a7-a3cd-dc85-d014fb05384a.png)


# 実装設計の落とし所

+ GAE + DataStore + FCM
    + TaskQueue(家族ハッシュで分散）
+ Queryは使わない（遅い、価格が、心配）、key-valueのみ
+ エンティティのリンクは利用しない（遅い、結局Commitタイミングが、）
+ golang

# いろいろ検討したけれど

ストレス評価を実施し、運用コスト（普通にサーバコストと、理想の実装udp+...とした場合の人的コスト）を考慮すると、GAE + イベントドリブン + 経路負荷分散（スケールアウト）は、現実的な落とし所であると、納得
Qiitaのアイコン画像を高画質(クッキリ)にする方法

Qiitaって普通に画像をアップロードしてアイコンに使っていると
こんな感じにマイページのアイコンがボケボケになっちゃいますが、

![スクリーンショット 2017-02-15 20.58.12.png](https://qiita-image-store.s3.amazonaws.com/0/155509/382ead20-6c50-92e8-5ae0-f98845eb6d16.png)

github連携を利用することで高解像度な画像がマイページで使えました。
(github連携して同じプロフィール画像を使っている方は是非やってみましょう)

# やり方

## 1.githubとアカウントを連携させる

持ってない人は作ってください
https://github.com

## 2.アイコンをgithubのものを流用するように設定
マイページプロフィールを編集する > 共通中の「アカウント」をクリックしてアカウント設定のページへ移動

アイコンのチェックをアップロード画像からgithubに変更
![スクリーンショット 2017-02-15 20.59.04.png](https://qiita-image-store.s3.amazonaws.com/0/155509/3164f2a2-8f21-d1ce-baaf-352a7e099c36.png)


## 3.マイページに遷移すると画像が高解像度になった。
![スクリーンショット 2017-02-15 20.57.31.png](https://qiita-image-store.s3.amazonaws.com/0/155509/69bf8ffe-fb4b-3e35-7a13-552148942cd8.png)


# 参考
http://qiita.com/YumaInaura/items/0fa97d5f19d2b1665a8d
http://qiita.com/takuya0301/items/654931f3aa18cf4be00c
ビックデータ解析の環境構築

#ビックデータ解析の環境構築
##開発環境
 - MacBook Pro (Retina, 13-inch, Mid 2014)
 - OS X Yosemite version 10.10.5
 - zsh
 - iTerm2
 - homebrew
 
##gnuplotのインストール
###gnuplotとは
　**gnuplot**は、グラフの描画ソフトです。主に、データの解析結果を表示する時に使用します。gnuplotを用いることで、データを可視化することができ、データの内容を理解する助けをします。
　また、MicrosoftのExcelのグラフ描画機能とは異なり、コマンドラインで操作するソフトウェアで、様々なプロットが可能です。

###インストール方法
　まず、**xcode**がインストールされていない場合は、下記のサイトからインストールしてください。
　https://itunes.apple.com/jp/app/xcode/id497799835?mt=12

　次に、**Aquaterm**をインストールしてください。Aquatermは、下記のサイトからダウンロードすることができます。
　http://aquaterm.sourceforge.net/
　ダウンロードが終わったら、**AquaTermInstaller.pkg**を開いてインストールすることができます。

　最後に、iTerm2（ターミナル）を開いて、下記のコマンド（%以降のコマンド）を実行してください。そうすると、インストールが開始されます。

```
% brew install gnuplot --with-aquaterm
```

　インストールされたことを確認するためには、下記のコマンドを実行してください。インストールする時によって、バージョンが異なります。ですので、一行目のコマンドで移動したら、lsコマンドで確認をしてからcdコマンドで移動してください。五行目のlsコマンドで、**gnuplot\***が存在すれば、インストールが完了です。

```
% cd /usr/local/Cellar/gnuplot
% ls
5.0.5_2/
% cd 5.0.5_2/bin/
% ls
gnuplot*
```

###Aquatermとは
　**Aquaterm**とは、Mac OS XのAquaウィンドウ環境にベクトルグラフィックスを表示するアプリケーションです。gnuplotから、APIを介して描画要求を受け取り、グラフをウィンドウに出力します。

##Rのインストール
　iTerm2（ターミナル）を開いて、下記のコマンド（%以降のコマンド）を実行してください。そうすると、インストールが開始されます。
　一行目のコマンドは、homebrewのデフォルトでは参照されないscienceリポジトリを有効にするために必要です。

```
% brew tap homebrew/science
% brew install r
```

　インストールされているか確認するためには、下記のコマンドを実行していください。その前に、ターミナルのシェルが**zsh**の場合は、コマンドの**r**がシェルの組み込みコマンドで存在しています。
それを無効にする必要があるので、下記のコマンドを実行する必要があります。コマンドの**r**以降が出力されれば、インストールが完了しています。

```
# シェルがzshの場合
% disable r

# インストール後の確認
% r

R version 3.3.2 (2016-10-31) -- "Sincere Pumpkin Patch"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin14.5.0 (64-bit)

R は、自由なソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。

R は多くの貢献者による共同プロジェクトです。
詳しくは 'contributors()' と入力してください。
また、R や R のパッケージを出版物で引用する際の形式については
'citation()' と入力してください。

'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' で HTML ブラウザによるヘルプがみられます。
'q()' と入力すれば R を終了します。
```
AmazonLinuxに古いバージョンのnginxをインストールする

2017/2/15現在、AmazonLinux（2016.09）で　`sudo yum install nginx`とやると バージョン1.10.1がインストールされます。
1.8が入れたかったのでその際の作業メモです。

#nginxのリポジトリを追加
※[公式ドキュメント](http://nginx.org/en/linux_packages.html#stable)に書いてあるけど、一応説明。
http://nginx.org/packages/
上記から自分の環境にあったものを追加する。
AmazonLinuxはCentOS6互換なので、baseurlは　http://nginx.org/packages/centos/6/$basearch/　 が正解。

```/etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
```
#失敗
これで `sudo yum install nginx-1.8.1`とやれば終了〜:raised_hands:とはならない。
amzn-mainリポジトリにnginxが存在しており、amzn-mainリポジトリには以下のようにpriorityが設定してある。

```/etc/yum.repos.d/amzn-main.repo 
[amzn-main]
name=amzn-main-Base
mirrorlist=http://repo.$awsregion.$awsdomain/$releasever/main/mirror.list
mirrorlist_expire=300
metadata_expire=300
priority=10
failovermethod=priority
fastestmirror_enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-amazon-ga
enabled=1
retries=5
timeout=10
report_instanceid=yes

[amzn-main-debuginfo]
name=amzn-main-debuginfo
mirrorlist=http://repo.$awsregion.$awsdomain/$releasever/main/debuginfo/mirror.list
mirrorlist_expire=300
metadata_expire=300
priority=10
failovermethod=priority
fastestmirror_enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-amazon-ga
enabled=0
retries=5
timeout=10
report_instanceid=yes
```

nginxリポジトリにはpriorityを設定していないので、amzn-mainリポジトリ > nginxリポジトリ となり、
amzn-mainリポジトリでnginxが見つかるのでnginxリポジトリを見に行かない→1.10.1がインストールされる。
なので、以下のようにamzn-mainを一時的に無効化しておく。
#インストールできるバージョンの確認

`yum --showduplicates --disablerepo=amzn-main list nginx`

```bash:結果
nginx.x86_64                            1.8.0-1.el6.ngx                             nginx
nginx.x86_64                            1.8.1-1.el6.ngx                             nginx
nginx.x86_64                            1.10.0-1.el6.ngx                            nginx
nginx.x86_64                            1.10.1-1.el6.ngx                            nginx
nginx.x86_64                            1.10.2-1.el6.ngx                            nginx
nginx.x86_64                            1.10.3-1.el6.ngx                            nginx
```

#インストール
`sudo yum install -y --disablerepo=amzn-main　nginx-1.8.1`

#バージョン確認
`nginx -v`

```bash:結果
nginx version: nginx/1.8.1
```

#参考情報
[CentOSにちょっと古いバージョンのNginxをインストールする](http://qiita.com/segawa/items/bb1d0cd78e890a1e4170)
[Amazon Linux で Nginx & PHP の最新版をインストールした際の記録](https://techblog.recochoku.jp/682)
sshfsでリモートをマウントするとgitが遅すぎる

#環境
- Mac
- Wordpress(EC2上。以下WP)：単純なTipsをWP上で書き溜めている。
- git：bitbucket


#やろうとしたこと
WPはCIツールを使うほどでもなくEC2にcloneして直接vimで編集し、CUIでcommitしていたが、ふとsshfsでマウントすればローカルのSourceTreeとか、SublimeTextとかいけんじゃね？と思ったので試してみた。

#結果
タイトルのようにGitが遅いのではなく、sshfsの通信が遅すぎて使い物にならない模様。どうしてもやるならrsyncとかでやるのがベターみたい。

#参考
[Using git over sshfs is too slow | Stackoverflow](http://stackoverflow.com/questions/7245837/using-git-over-sshfs-is-too-slow)
頭悪いからカービィシェーダー作ったったw

#ぽよみ
あ～ぽよみが足りない、ぽよみが足りないよ～:sob::sob::sob:



そーだ、全てをぽよみにしよう(唐突)

#シェーダーを書こう
とりあえず全てカービィになってしまうという超絶頭の悪いシェーダーを書こう!

##やりかた

* まず、色を取得するあたまの悪い関数を作ります。
* 次にピクセルシェーダーを書いてuv座標からその位置の色をさっきの関数から取得します。
* できた！

##コード



```cpp:kirby.hlsl
float4 GetColor(int x, int y)
{

	static const int kirbyDot[16][16] =
	{
		{0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0},
		{0,0,0,0,1,1,2,3,3,3,2,1,1,0,0,0},
		{0,0,0,1,2,3,3,3,3,3,3,3,2,1,0,0},
		{0,0,1,2,3,3,3,3,3,3,3,3,3,1,0,0},
		{0,0,1,3,3,3,3,3,3,3,3,3,3,2,1,0},
		{0,1,3,3,3,3,3,3,3,1,3,1,3,2,1,0},
		{1,2,3,3,3,3,3,3,3,1,3,1,3,3,3,1},
		{1,3,3,3,3,3,3,3,3,1,3,1,3,3,3,1},
		{1,3,3,3,3,3,2,2,3,3,3,3,2,2,3,1},
		{1,2,3,3,2,3,3,3,3,3,3,3,3,2,3,1},
		{0,1,2,3,1,3,3,3,3,3,1,3,3,1,2,1},
		{0,0,1,1,2,3,3,3,3,3,3,3,2,1,1,0},
		{0,0,0,1,1,2,2,3,3,3,3,2,1,1,0,0},
		{0,0,1,2,2,1,1,1,1,1,1,1,2,2,1,0},
		{0,1,2,2,2,2,2,1,1,1,1,2,2,2,2,1},
		{0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,0},
	};

	int colorNum = kirbyDot[y][x];

	switch (colorNum)
	{
	case 0:return float4(1, 1, 1, 0);
	case 1:return float4(0, 0, 0, 1);
	case 2:return float4(0.9137,0.3411,0.5843,1);
	case 3:return float4(0.949,0.6352,0.7411, 1);
	}

	return float4(0, 0, 0, 0);

}




//ピクセルシェーダ
float4 PS(OutputVS input) : SV_Target
{
	float4 outPut = input.color;
	const float2 uv = input.tex;

	int x = uv.x * 16;
	int y = uv.y * 16;

	outPut = GetColor(x, y);


	if (outPut.a == 0)
		discard;

	return outPut;
}
```

#実行

![2017-02-15 (1).png](https://qiita-image-store.s3.amazonaws.com/0/104703/5a5d8c8b-5a6e-22fa-d44a-02ce6732c3e3.png)

:blush::blush::blush::blush::blush:






#まとめ

* ぽよみが得られた
* カービィ25周年おめでとう
コマンドラインで実行するmavenプラグインのバージョンを指定する

mvn archetype:generate コマンドのように， pom.xml なしで実行する Maven プラグインを実行するとき， Maven プラグインのバージョンを指定する方法です。

```
mvn グループID:アーティファクトID:バージョン:ゴール
```

例えば mvn archetype:generate であれば，グループ ID が org.apache.maven.plugins ，アーティファクト ID は maven-archetype-plugin ，バージョンが 2.4 を指定するとき，次のようになります。

```
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate
```
VisualStudio2015の起動方法

環境-------------------------------------------------------------------------
VisualStudio2015 
Version 14.0.25431.01 Update 3
Microsoft .NET Framework
Version 4.6.01055

方法---------------------------------------------------------------------------
方法1(スタートから)
Visual Studio 2015
Visual Studio Tools
Remote Debugger Folder
VS2015 用 MSBuild のコマンド プロンプト
開発者コマンド プロンプト for VS2015

方法2(マウス右クリックから)
プログラムから開く(H)＞Microsoft Visual Studio 2015

方法3(自作バッチファイル)
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe" /dde

-------------------------------------------------------------------------------
初めてのプログラムを実行する。
①方法1,方法2,方法3の違いは何でしょうか
②たまに以下のファイルを見ますが、何物でしょうか？
種類:Microsoft Visual Studio Solution
③実行したら、警告がでてきた。(詳細省略)
CentOS7でrpmを作るためにfpm使ってみた

## fpm

```rb:インストール
RUN yum -y install ruby ruby-devel ruby-libs rubygems rpm-build \
 && gem install fpm --no-rdoc --no-ri
```

```rb:使い方
RUN fpm -s dir \
  -v 4.0.30 \
  -t rpm \
  -n opt-mysql-client \
  -p opt-mysql-client-4.0.30.el7.x86_64.rpm \
  -C /opt/mysql \
  -a x86_64
```

### version指定

* `-v`指定する。[version一覧](https://fpm.readthedocs.io/en/latest/)
* ubuntu 14.04 の ruby に対応しているのは 0.4.32 まで。

```go
gem install fpm --no-rdoc --no-ri -v "1.10.2"
```


## checkinstall

checkinstallも動くがrpm作成に失敗することがあった。fpmだと作れた。

```rb:インストール
RUN yum install -y -q git gettext which && yum clean all
WORKDIR /usr/local/src/
RUN git clone http://checkinstall.izto.org/checkinstall.git
WORKDIR /usr/local/src/checkinstall
RUN sed -i 's@CONFDIR=$(PREFIX)/lib/checkinstall@CONFDIR=$(PREFIX)@g' Makefile \
 && sed -i 's@EXCLUDE=""@EXCLUDE="/selinux"@g' checkinstallrc-dist \
 && sed -i 's@LIBDIR=$(PREFIX)/lib@LIBDIR=$(PREFIX)/lib64@g' installwatch/Makefile \
 && make -s \
 && make install \
 && mkdir -p /root/rpmbuild/SOURCES
RUN checkinstall -y -R --pkgname=checkinstall
```
MATLABでエディタ画面が開かなくなった場合の対処


# 一言で

- 設定を初期化しよう(最終手段)

# 問題の概要

MATLAB R2016b (on OSX El Capitan) において，MATLAB scriptファイル(\*.m)を開こうとした場合に，MATLABのエディタが開かず以下のエラーがMATLABターミナルに出力される．
ただし，MATLAB ライブスクリプト(\*.mlx)は開くことができる．

```
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: Could not initialize com.mathworks.widgets.text.mcode.MSettingsInitializer
        at com.mathworks.widgets.text.mcode.analyzer.CodeAnalyzer.isMLintEnabledInPreferences(CodeAnalyzerLayer.java:411)
        ...
```

# 対処

エラー内容でググると，

- Javaのヒープサイズを変更する
- 再インストール

などが出てきたが，どちらも効果はなかった．

# 設定初期化 (今回の解決策)
MATLABの設定を初期化したらなんとかなるのでは？と思ったので，ドキュメントの[設定](https://jp.mathworks.com/help/matlab/matlab_env/preferences.html "設定 - MATLAB & Simulink - MathWorks 日本")を読んで設定を初期化することにした．
MATLABは起動時に`prefdir`にある`matlab.prf`を読みに行く，とのことなのでこれを削除する．

```MATLAB
>> prefdir

ans =

/path/to/prefdir
```

MATLABを終了し，ターミナルから該当ファイルを削除する[^1]．

[^1]: 今回は，`matlab.settings` も削除した

```shell
% cd /path/to/prefdir
% ls -lah
total 1232
drwxr-xr-x  22 ****  staff   748B  2 15 19:00 .
drwxr-xr-x   4 ****  staff   136B  4  6  2016 ..
drwxr-xr-x   4 ****  staff   136B  1 17 20:05 ExportSetup
-rw-r--r--   1 ****  staff    87K  2 15 18:30 History.bak
-rw-r--r--   1 ****  staff    88K  2 15 19:00 History.xml
drwxr-xr-x   2 ****  staff    68B  4  6  2016 HtmlPanel
-rw-r--r--   1 ****  staff   6.1K  2 15 19:02 MATLABDesktop.xml
-rw-r--r--   1 ****  staff   6.1K  2 15 18:35 MATLABDesktop.xml.prev
-rw-r--r--   1 ****  staff   371B  1 19 18:32 MATLAB_Editor_State.xml
-rw-r--r--   1 ****  staff    38B  8  3  2016 MLintDefaultSettings.txt
-rw-r--r--   1 ****  staff   4.0K  1 17 22:04 comparisons.settings
drwxr-xr-x   2 ****  staff    68B 12  6 09:03 fop
-rw-r--r--   1 ****  staff   6.2K  2 15 14:43 matlab.prf
-rw-r--r--   1 ****  staff    16K  2 15 19:00 matlab.settings
-rw-r--r--   1 ****  staff   234B  1 17 20:05 matlabprefs.mat
-rw-r--r--   1 ****  staff   1.3K  4  6  2016 mwKeyStore
-rw-r--r--   1 ****  staff   1.2K  2 15 18:07 publish_configurations.m
-rw-r--r--   1 ****  staff   184B  2 15 18:07 run_commands.m
-rw-r--r--   1 ****  staff   681B  1 17 22:04 shared.settings
-rw-r--r--   1 ****  staff   223B  4  6  2016 shortcuts_ja_2.xml
-rw-r--r--   1 ****  staff   763B  4  6  2016 thisMatlab.pem
-rw-r--r--   1 ****  staff   359K  2 15 18:35 toolbox_cache-9.0.0-2848434722-maci64.xml

% rm -f matlab.*
```

MATLABを再起動後，エディタを開くことができることを確認した．
HTML文字列をElementに変換する

- `document.createElement`で適当な`Element`を作成し、`innerHTML`でHTMLの文字列を設定する。
- 差し込んだHTMLが`firstElementChild`で`Element`として取得できる。

```javascript:createElementFromHTML
/**
 * HTML文字列をElementへ変換する。
 * @param html HTML文字列
 * @returns {Element} 
 */
function createElementFromHTML(html) {
    const tempEl = document.createElement('div');
    tempEl.innerHTML = html;
    return tempEl.firstElementChild;
}

// 呼び出し例
createElementFromHTML('<div style="width: 300px;"></div>');
```
d3.jsとは

## d3.jsとSVG
d3.jsは、javascriptからデータを基にSVGを描画するライブラリである。Data-Driven Documents（データ駆動型ドキュメント）のDをとって、d3と命名されている。ライセンスは修正BSD。

- [d3.js](https://d3js.org/)

SVG(Scalable Vector Graphics)とは、W3Cが標準化したタグ形式で画像を表現する規格で、HTML等で利用することができる。SVGの特徴として、ベクタ形式であるという点があり、ベクタ形式の画像は、拡大、縮小をしたときに劣化が起こりにくいという利点がある。

- [W3C SVG](https://www.w3.org/Graphics/SVG/)
- [W3C SVG 日本語訳](https://triple-underscore.github.io/SVG11/)

d3.jsがsvgタグと同じことができる例として、日本国旗を描くサンプルをsvgタグとd3.jsで作成した。どちらも結果は同じになる。

サンプル１

- [svgタグで日本国旗を描く](https://jsbin.com/cuvisad/edit?html,js,output)

サンプル２

- [d3.jsで日本国旗を描く](https://jsbin.com/najaba/edit?html,js,output)

d3.jsはグラフを描画する用途で利用されることが多い。以下に公式のサンプルが掲載されている。

- [d3.js ギャラリー](https://github.com/d3/d3/wiki/Gallery)

が、多くの手順を要し、棒グラフの四角形を描く、軸を描くなど、すべて自分でプログラムを作成する必要がある。データとオプションを引数とした関数を提供し、それを呼び出すだけでグラフを描画してくれるライブラリもあるが、d3.jsには、そういった機能はない。学習コストは高いが、使いこなせば、自分の好きなようにグラフを作成することができる。また、d3.jsを簡単に扱えるようにする、d3.jsのラッパーライブラリも多く存在する。

- [d3.js wrapper library](https://matome.naver.jp/odai/2138966107937611601)

## 有用なリンク

- [wikipedia](https://ja.wikipedia.org/wiki/D3.js)

- [D3.js入門（ドットインストール）](http://dotinstall.com/lessons/basic_d3js)

- [GUNMA GIS GEEK（d3.jsの記事が多いブログ）](http://shimz.me/blog/)

## 有用そうな書籍
- [インタラクティブ・データビジュアライゼーション ―D3.jsによるデータの可視化](https://www.amazon.co.jp/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3%83%BB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%A9%E3%82%A4%E3%82%BC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3-_D3-js%E3%81%AB%E3%82%88%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%8F%AF%E8%A6%96%E5%8C%96-Scott-Murray/dp/4873116465/ref=sr_1_2?ie=UTF8&qid=1483578017&sr=8-2)

- [データビジュアライゼーションのためのD3.js徹底入門 Webで魅せるグラフ&チャートの作り方](https://www.amazon.co.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%A9%E3%82%A4%E3%82%BC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AED3-js%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-Web%E3%81%A7%E9%AD%85%E3%81%9B%E3%82%8B%E3%82%B0%E3%83%A9%E3%83%95-%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E5%8F%A4%E7%B1%8F-%E4%B8%80%E6%B5%A9/dp/4797368861/ref=sr_1_1?ie=UTF8&qid=1483578017&sr=8-1)
gitとgithubの設定ファイルまとめ

# この記事について
gitの設定ファイルにはどんなものがあるか気になってので調べてみました。
ただのまとめで項目ごとの詳しい解説ではありません。

## git

### .gitignore
一番よく使うであろう`.gitignore`。
名前の通り、gitの管理下から外す対象を指定できます。
以下のサイトによくまとまっています。
* [[Git] .gitignoreの仕様詳解 - Qiita](http://qiita.com/anqooqie/items/110957797b3d5280c44f)

`.gitignore`の設定にはにはgiboが便利です。
* [Git - gitignore Documentation](https://git-scm.com/docs/gitignore)
* [simonwhitaker/gibo: A shell script for easily accessing gitignore boilerplates](https://github.com/simonwhitaker/gibo)

### .gitkeep

空ディレクトリを管理するためのファイル。
`.gitkeep`（または、`.keep`）という名前は絶対ではないようですが慣例でそうなっているようです。

### .gitmodules

git submoduleによって作成されるファイル。
git submoduleは外部のレポジトリを自レポジトリに導入し管理するときに使います。

* [Git submodule の基礎 - Qiita](http://qiita.com/sotarok/items/0d525e568a6088f6f6bb)
* [Git submoduleの抑えておきたい理解ポイントのまとめ - Qiita](http://qiita.com/kinpira/items/3309eb2e5a9a422199e9)
* [自分が必要とする最低限の git submodule の知識 - Qiita](http://qiita.com/ma2saka/items/4bd00ef6f8c240847807)

### .gitattributes

指定したファイルをどのように扱うかを設定します。

「属性を使うと、ファイルやディレクトリ単位で個別のマージ戦略を指定したり、テキストファイル以外の diff を取る方法を指示したり、あるいはチェックインやチェックアウトの前にその内容を Git にフィルタリングさせたりできます。」
[Git - gitattributes Documentation](https://git-scm.com/docs/gitattributes)

### .gitconfig

gitの設定ファイル。
エディタやエイリアスなどの設定もできます。

* [.gitconfigの設定とかよく使う便利なコマンドメモ - Qiita](http://qiita.com/yoshikyoto/items/6df2f4c362f9bfde3612)

### .gitmessage

コミットメッセージのテンプレートを設定することができます。

* [Better Commit Messages with a .gitmessage Template](https://robots.thoughtbot.com/better-commit-messages-with-a-gitmessage-template)
* [Git - Git Configuration](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration)
* [Git のコミットメッセージをテンプレート化する - Qiita](http://qiita.com/kasaharu/items/cdb587d4d27d7608b063)

<!--
### .gittemplate 
### .gitexclude
--->

## github

### `.github/`

以下のファイルを`.github`内か、ルート直下に置くと
issue作成時、pull request作成時などのテンプレートを用意することができます。

拡張子はなしでも、`.md`でも`.txt`でも良いです。

- CONTRIBUTING
- ISSUE_TEMPLATE
- PULL_REQUEST_TEMPLATE

----

-  CODE_OF_CONDUCT.md
-  LICENSE or LICENSE.txt 


[Issue and Pull Request templates](https://github.com/blog/2111-issue-and-pull-request-templates)

# 参考
* [Git・GitHubに隠された便利な機能 | GitHub Cheat Sheet（日本語訳） - Qiita](http://qiita.com/sotayamashita/items/1cf05f2a2be3d6fb3388)
Azureでインスタンスのサイズ変更の制約メモ

Azureでインスタンスのサイズ変更(メモリ、CPU割り当ての変更)を行おうとした際にエラーになった。(原因は分かってない)

**仮想マシンのサイズを変更できませんでした**
![Azureサイズ変更エラー.png](https://qiita-image-store.s3.amazonaws.com/0/143913/f60190da-ea59-f20d-beb4-9f910448b0c3.png)

<br>
いろいろ調べると、同一シリーズ内のサイズ変更はできるが、別シリーズへサイズ変更する場合は仮想マシンの再構築が必要になる場合があるらしい。
(ドライブは割り当てを解除してからサイズ変更して再度割り当てればそのまま使えるらしい。未検証)

![Azureサイズ変更エラー2.png](https://qiita-image-store.s3.amazonaws.com/0/143913/be303009-1d30-86f7-52b3-4a47e8d57c4a.png)


なので、あとからサイズ変更をする予定なら、あらかじめ各シリーズの料金を見比べて使いやすいシリーズにしておかないと、仮想マシン構築後に面倒なことになる。
WSHで文字列置換＆上書き

#WSHで特定の文字列を置換して上書きするやつ。

アイコンの上にCSVファイルをドラッグすると特定の文字列を置換して上書きするスクリプト。

「システムAからシステムBにインポートするときに、表記揺れを正さなきゃいけない。ファイル名は毎日変わる。テキストエディタでの一括置換は人的ミスが心配。作業者のPCスキルも低い。」とかいう限定用途向け。

意外に探してもなかったので置いておきます。


```vbs:文字列一括置換.vbs
Option Explicit

Dim objArgs 'Argumentsオブジェクト生成用変数
Dim objFileSys 'FileSystemオブジェクト生成用変数
Dim objFile 'ファイル展開
Dim strExt '拡張子確認用
Dim strTmp '一時データ格納用
Dim MSG '処理確認

Set objArgs = WScript.Arguments

If objArgs.Count = 1 Then
	Set objFileSys = CreateObject("Scripting.FileSystemObject")
	
	'拡張子がcsvの時処理開始
	strExt = objFileSys.GetExtensionName(objArgs(0))
	If strExt = "csv" Then
		
		MSG = msgbox("下記のように置換します" & vbNewLine &  "AAA　→　BBB" & vbNewLine &  "CCC　→　DDD" & , vbOKCancel)
	
		'OKの時は処理を進める
		If MSG = vbOK Then
		
			Set objFile = objFileSys.OpenTextFile(objArgs(0))
		
			'ファイル読込
			strTmp = objFile.ReadAll
			'replaceの第2引数の文字列を第3引数の文字列へ置換する。
			'好き放題増やしてもよい
			strTmp = replace(strTmp,"AAA","BBB")
			strTmp = replace(strTmp,"CCC","DDD")
			objFile.Close
		
			'書込
			Set objFile = objFileSys.CreateTextFile(objArgs(0))
			objFile.WriteLine (strTmp)
		
			objFile.Close
			
			'オブジェクトの破棄
			Set objArgs = Nothing
			Set objFileSys = Nothing
			Set objFile = Nothing
			
			msgbox "成功"
		
		End If	
	Else	
		'ファイルがcsvじゃなかった時
		msgbox "処理できるのはcsvのみです"
		End If
	Else
		'ファイルが複数の時、アイコンをダブルクリックされた時
		msgbox "対象のファイルを1つずつドラッグ＆ドロップしてください" 
End If

```

#BATでよくない？
少し前に作ったものなので仔細を覚えてないけど、DOSコマンドに文字列置換がないから、という理由でWSHを選んだんだと思う。
kiviによるマルチプラットフォームのアプリ生成手順

# 前回のまとめ

[kivyの導入はできた。](http://qiita.com/akashima/items/2a16ed2dbc407c9ab6cf) (完)

早くも不定期連載の2回目になります。

# 今回やりたいこと

拡張子appを作ったり、拡張子exeを作ったりして、ワンクリックで起動したい！
もしくは起動できなくても、生成できるところまでは辿りつきたい！

## またもや事前準備

appやexeを作るためにはbuildozerやpyinstallerというものが必要だそうです。
ほう…どうやって使うのか見せてもらおうか。
と思ったので、下記の記事をご覧ください。

[Creating packages for OS X](https://kivy.org/docs/guide/packaging-osx.html)
[Create a package for Windows](https://kivy.org/docs/guide/packaging-windows.html)

それぞれの環境について、書くのであれば、下記のような感じだそうです。

### Mac OS

Mac OSの環境なので、Mac OSのアプリ作成 
は簡単なよう 
 です。
下記を実行すれば、buildozerをインストールできます。

```
pip install git+http://github.com/kivy/buildozer cd /to/where/I/Want/to/package buildozer init
```

```
$ pip install git+http://github.com/kivy/buildozer cd /to/where/I/Want/to/package buildozer init
Invalid requirement: '/to/where/I/Want/to/package'
It looks like a path. Does it exist ?
```

？？？
！？
`cd /to/where/I/Want/to/package` っておい！

改めてこちらを実行ください

```
pip install git+http://github.com/kivy/buildozer
```

#### 動作確認

前回のサンプルを使います。

```
$ python xxx.py
$ buildozer osx release
```

その結果がこちら。

```
$ buildozer osx release
# Ensure build layout
No buildozer.spec found in the current directory. Abandon.
$ buildozer osx debug
# Ensure build layout
No buildozer.spec found in the current directory. Abandon.
```

debugするにしろ、releaseするにしろ、.specファイルが必要らしいです。
情報をもらおうと思って、サイトを辿ること1分ほど。

```
pip install -U pyinstaller
```

っていうのが見つかるので、実行しておきます。

そして、これを叩け、と言われた気がするので、実行してみます。

```
pyinstaller -y --clean --windowed --name touchtracer \
  --exclude-module _tkinter \
  --exclude-module Tkinter \
  --exclude-module enchant \
  --exclude-module twisted \
  ./xxx.py
```

ログが流れておられる…ドキドキ。

```
22442 INFO: moving BUNDLE data files to Resource directory
```

ってログが出力されたら、できたことになるらしい。
`build` と `dist` ってフォルダができておられる。

一応できましたけど、中身は起動するようなアプリじゃないので、とりあえず作れるよ、というところまでですね。
中身はこの記事以降で頑張ります。

やってみた感じ、kiviをコマンドラインで起動するために学ぶのと、kiviから生成してアプリが使えるようになる記述は別っぽいですね。
最終目標は、マルチプラットフォームでアプリを作る、ということですので、後者を学んでいかなくてはならないようです。

### Windows

続いて windowsですが、windowsは、実はpyinstallerがあれば良いらしいのですが、もうすでに導入済みです。

ということは何をすればよろしいんでしょう？

と、調べてみると、ものの数秒で答えが見つかりました。

#### 動作確認

```
python -m PyInstaller --name touchtracer ./xxx.py
```

もしくは

```
python -m PyInstaller --name touchtracer --icon ./icon.ico ./xxx.py
```

で良いとのこと。

build/touchtracer/の中に `touchtracer` が存在しました。

Macより楽勝じゃん。

## 最後に

次回は、windowsでもmacでも動く、コマンドライン不要のkivyアプリの生成を行いたいと思います。
オラ、ワクワクしてきたぞ！

[iOS](https://kivy.org/docs/guide/packaging-ios.html)とか[Android](https://kivy.org/docs/guide/packaging-android.html)はまた今度の機会にやってみましょうかね。
だいたい似たような感じでビルドできるようです。
【メモ用】プルリクで恥をかかないためのgit diff

##changeに無駄なファイルが入りすぎているのをプルリク投げてから知る恥ずかしさ
を二度と経験しないためにもメモ。

###git diffをしっかり使おう
`git diff [ローカルブランチ] [upstream]`
で動くが変更点すべてが表示されるので見にくい。

変更があったファイル名のみを見る時は
`git diff --name-only`

どれくらいの変更かをファイル名ごとに見る時は
`git diff --stat`

<img width="533" alt="スクリーンショット 2017-06-09 20.29.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/129082/8e089d68-badd-477a-8322-92cbdaf283e8.png">
こんな感じで表示されます。わかりやすい！



## 結論
`git diff --stat `
を自分は愛用:sunglasses:

##追記
改行、空白を無視すると面倒なことになるのでおすすめしません、、、

個人的には自分は業務でupstreamとoriginを分けて使用しているので
`git diff HEAD upstream/master --stat`
を流しています。
Unity NGUIでUISprite等に色の加算合成を行う

# 動作環境
Unity5.5.0f3
NGUI 3.11.1

#手順
手順は以下の通りになります。

1. NGUIのシェーダーをカスタマイズする
2. UISprite、UITextureのマテリアルを上記シェーダーを利用したマテリアルに差し替える
3. C#側からマテリアルのパラメータをコントロール

3番目の方法は[以前書いた記事](http://qiita.com/UnagiHuman/items/d62a2a1de84cc83ae227)に書いてあります。

#NGUIのシェーダーをカスタマイズする
NGUIの「Unlit/Transparent Colored」シェーダーに加算合成の機能を追加する形で作ったのが以下のシェーダーです。コメントした箇所が元のシェーダーに対して追加した部分です。

```

Shader "Unlit/Transparent Colored Add"
{
	Properties
	{
		_MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}
		//加算合成する色
		_Color ("Tint", Color) = (1,1,1,1)
		//加算合成する割合
		_AddPercentage ("Add %", Range (0.0,1.0)) = 1.0
	}
	
	SubShader
	{
		LOD 200

		Tags
		{
			"Queue" = "Transparent"
			"IgnoreProjector" = "True"
			"RenderType" = "Transparent"
			"DisableBatching" = "True"
		}
		
		Pass
		{
			Cull Off
			Lighting Off
			ZWrite Off
			Fog { Mode Off }
			Offset -1, -1
			Blend SrcAlpha OneMinusSrcAlpha

			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag			
			#include "UnityCG.cginc"

			sampler2D _MainTex;
			float4 _MainTex_ST;
			fixed4 _Color;
			float _AddPercentage;
	
			struct appdata_t
			{
				float4 vertex : POSITION;
				float2 texcoord : TEXCOORD0;
				fixed4 color : COLOR;
			};
	
			struct v2f
			{
				float4 vertex : SV_POSITION;
				half2 texcoord : TEXCOORD0;
				fixed4 color : COLOR;
			};
	
			v2f o;

			v2f vert (appdata_t v)
			{
				o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
				o.texcoord = v.texcoord;
				//加算合成
				o.color.rgb = v.color.rgb + _Color.rgb * _AddPercentage;
				o.color.a = v.color.a * _Color.a;
				return o;
			}
				
			fixed4 frag (v2f IN) : SV_Target
			{
				return tex2D(_MainTex, IN.texcoord) * IN.color;
			}
			ENDCG
		}
	}

	SubShader
	{
		LOD 100

		Tags
		{
			"Queue" = "Transparent"
			"IgnoreProjector" = "True"
			"RenderType" = "Transparent"
			"DisableBatching" = "True"
		}
		
		Pass
		{
			Cull Off
			Lighting Off
			ZWrite Off
			Fog { Mode Off }
			Offset -1, -1
			//ColorMask RGB
			Blend SrcAlpha OneMinusSrcAlpha
			ColorMaterial AmbientAndDiffuse
			
			SetTexture [_MainTex]
			{
				Combine Texture * Primary
			}
		}
	}
}
```

#C#側からマテリアルのパラメータをコントロール
下記がC#側からマテリアルの加算のパラメータをコントロールするスクリプトです。該当するUISprite等にアタッチします。

```UIControllAdd.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UIControllAdd : MonoBehaviour {
/// <summary>
	/// 加算する割合
	/// </summary>
	/// <value>The add parcentage.</value>
	public float addParcentage {
		get {
			return m_addParcentage;
		}

		set {
			m_addParcentage = value;

		}
	}

	/// <summary>
	/// 加算の割合
	/// </summary>
	[SerializeField, Range(0f,1f)] float	m_addParcentage;

	void Awake()
	{
		var widget = GetComponent<UIWidget>();
		widget.onRender = SetControllAddCB;
	}

	void SetControllAddCB(Material mat)
	{
		mat.SetFloat("_AddPercentage",m_addParcentage);
	}
}
```

以上。
javascript UNIXタイムから、Y-m-d形式に変換する関数

```javascript
function unixTime2ymd(intTime){
    // var d = new Date( intTime );
↓↓↓↓↓↓↓ あなたの記事の内容
    var d = new Date( intTime );
    var year  = d.getFullYear();
───────
    var d = new Date( intTime );
    var y = new Date( intTime * 1000 );
    var year  = y.getFullYear();
↑↑↑↑↑↑↑ 編集リクエストの内容
    var month = d.getMonth() + 1;
    var day  = d.getDate();
    var hour = ( '0' + d.getHours() ).slice(-2);
    var min  = ( '0' + d.getMinutes() ).slice(-2);
    var sec   = ( '0' + d.getSeconds() ).slice(-2);
    
    return( year + '-' + month + '-' + day + ' ' + hour + ':' + min + ':' + sec );

}
```
git pushがrejectされたとき

git pushしたときに下記のようなメッセージが表示されrejectされることがあります。
Updates were rejected because the tip of your current branch is behind
この事象について、いろいろな情報を参考にすることができますが、それらでも解決できなかったことがありました。
原因はgit-svnを理解できていなかったこと。
起きた事象の経緯は以下のとおり。

1. svnサーバーAからgit-svnでチェックアウト
2. 修正をいれて、gitサーバーBにpush
3. svnサーバーAにコミット
4. 修正をいれて、gitサーバーBにpush
   => reject!!

上記の状態となったとき何が問題になっているかというと、
ステップ3にて、コミット履歴がgit-svnによってステップ1を開始状態として
リベースされていることが問題となります。
ローカルの歴史がリベースされていることでgitサーバーBとは歴史が異なる状態となり
純粋なマージが行えない状態となります。
なので落ち着いて以下の対処を行えばよいようです。
5. gitサーバーBよりpull(マージ)。競合は適切に解決する。
6. 競合をコミットし、再度gitサーバーBにpush。

いろいろやって上記解決にたどりつきましたが、
gitのエラーメッセージだけでは上記の状況を理解するのは困難と思いました。

また、pushはできるようになりますが、コミット履歴はsvnとダブる状態となるなど
きれいな履歴にはならないので要注意です。