OmniAICreator/Qiita-1.07M huggingface dataset:
Swiftでコマンドライン引数を使う

C言語やJavaでもおなじみのコマンドライン引数をSwiftでも使うためのメモ

実行環境
OS X El Capitan 10.11.5
Swift 2.2

#使い方
Processという列挙型を使います。

```swift
// argumentsはStringの配列
Process.arguments.forEach {
    print($0)
}
```

特にインポートは必要ありません。

#出力例
上記のコードを`CommandLineArgs.swift`というファイルの中に書き込んで保存します。
terminalから、
`swift CommandLineArgs.swift aaa bbb ccc`
とコマンドを叩くと、以下のように出力されました。
`
commandLineArguments.swift
aaa
bbb
ccc
`
プログラム名そのものがargumentsの最初の要素となっているようです。この辺の仕様はC言語と同じみたいですね。

#参考資料
Appleのリファレンスを参考にしました。
https://developer.apple.com/reference/swift/process
R packageにおけるhppファイル（C++ヘッダー）に対する警告

RのパッケージにC++コードを含める場合、src/フォルダに入れる決まりです。src/フォルダにあるファイルはすべてソースとみなされて、パッケージのビルドする際にコンパイルされます。

C++では、ヘッダファイルを用意してそこに関数やクラスの定義をまとめることがよくあり、その際によく使われる拡張子が.hppなのですが、src/フォルダに.hppファイルが含まれているとパッケージのチェック時に警告がでます。

```
These are unlikely file names for src files.
```

[Rパッケージの仕様書](https://cran.r-project.org/doc/manuals/R-exts.pdf)によると、

```
We recommend using .h for headers, also for C++ or 
Fortran 9x include files. 
```

ということで、どうやら.hを拡張子に使うのが正しいようです。
人は自分が知らない物を激しく批判し、排除しようとする


世の中にはたくさんのプログラミング言語がある。それに付随してもっとたくさんのフレームワークやライブラリがある。また、技術やパラダイム、開発手法まで考えると、あまりに多くていくつあるのかなんて分かりもしない。

さて、そんな中、そういった何か、言語なり技術なりを批判する記事も多く見られる。このQiitaにもあるし、ハテナや個人ブログからTwitter、果ては2chのスレまで数多く存在する。やれ、PHPは糞だ、PHPは駄目言語、PHPはオワコン、ペチパーはプログラマーじゃねー、PHPが許されるのはコーダーまでだよね、とか言われたりする。確かに、PHPは謎の仕様があったり、関数の引数が統一されてなかったり、Unicode化に失敗したり、と散々なのは確かだが、良い所だってある[^1]。本物のプログラマーはPHPの良いところを知っているし、PHPが相応しいときは迷わずPHPを使う[^2]。だから、そんなにPHPをいじめないで…

[^1]: どういう所？と私には聞かないでください。
[^2]: あなたも使うんですか？と私には聞かないでください。

話がずれてしまった。決して私がPHPが嫌いなわけではない。すまん、嘘ついた。嫌いです[^3]。さてPHPはどうでも良いとして、そういった批判が他の言語や色んな技術に数多くあることを知っている人もいるだろう。例えば、

[^3]: JavaScriptよりは好きですよ。Pythonの次ぐらいにPHPは好きですから。

* Rubyはオワコン
* Goは流行らない
* Railsは駄目なプログラマーを量産した
* ORMは悪
* RDBMSの時代は終わった、NoSQLの時代になる
* CoffeeScriptは廃れる
* Javaは滅ぶ、これからはScala
* Scalaなんて誰もやってない
* Python2こそ至高、Python3に移行する価値は無い
* Bootstrapは素人が使う物
* Atomは遅い、重い、メモリ食うの三重苦

などがある。ほとんどはまっとうな批判をし、建設的な意見があり、メリットとデメリットをきちんと分析しているのだが、時には、親の仇のように激しく批判し、全否定するような記事も珍しくない。

そういった、全否定記事を読んでみるとなんとなく見えてくる物がある。それは、記事の著者がその言語(技術)についてよくわかってない場合が多いと言うことだ。知りもしない言語や技術に対して、人づてに聞いたのかどうかも怪しい根拠を元に批判しまくる。特徴としてはこんな感じだ。

* 批判の対象についての具体的なコードが一切無い。具体例を求めても頑なに出さない。
* 部分的な欠点だけで全てが駄目であるかのように結論づける。対象についての総合的な評価ができるだけの知識がそもそも無い。
* 勝手に悪い方向に想像し、そこからきた帰結が事実であるかのように結論を出す。全く関係が無い過去の事例でも、批判の対象が原因だったと推定(彼らの中では確定)する。
* 反論になる質問された場合は、聞いていないことを長く語り出して、結局質問に対する回答にはなっていない。どうやら、回答文が長ければ、彼らにとっては回答したことになるらしい。
* 反論者とは話が噛み合わない。記事の著者は批判の対象をそもそもよく知らないから、反論の内容がわかっていない。
* 批判の対象を使っている人を馬鹿にする。逆に、自分のことは何でもわかる天才だと思っている。
* 最後に、自分がお勧めする言語や技術を持ってきて、無批判にベストであると結論づける。

彼らは「無知の知」を知らない[^4]。それでも彼らは批判する。それはなぜか？それは上のリストの一番最後に答えがある。そう、彼らは **自分が使っている物を他の人にも使って欲しい** だけなのだ。なぜ、使って欲しいのか？それは **自分が使っている物が廃れるのを恐れている** からだ。そうしないと、自分は現代的で最先端で勝ち組であるというプライドを保てないのだ。だからこそ、彼らは結論ありきで批判をし、矛盾を多く抱え込んでも、最終的な結論としてお勧めを無批判に持ってくるのだ。彼らは自分たちを脅かす未知なる物に恐怖している。徹底的に排除しなければ、自分たちに明日が来ないと思い込んでいる。彼らは未知なる物を知ろうとも、取り入れようとも、正面から立ち向かおうともしない。遠くからの見た目だけで、自分たちより劣っていると無批判に結論づけて、満足したいだけなのだ。

[^4]: つまり、二千年以上遅れているということ。

本物のプログラマー[^5]は未知を恐れない。本物のプログラマーは道具に拘らない。本物のプログラマーは悪い点よりも良い点を探そうとし、自分の仕事で使える所があるかを考える。常に、より良きものでより良きものを作ろうとするのが、技術者の本来の姿であるべきなのだ。そんなことすらも出来ない無知な自称技術者が書いた全否定するだけの記事など、その無知なところで笑わせてくれることぐらいしか価値が無いのである。

[^5]: Pascalを使わずに、Haskellを使う人々のこと。

さぁ、みんなもこんな知らないのに批判している人の批判は笑い飛ばして、PHPを使おう。Viva PHP! PHP is the best of the bests programing languages! PHP saves the world and your job!

あ、PHPを批判している記事のほとんどは、PHPをよく知っていて、よく使っている人が書いていたりするものだったりするから、気をつけてね。
モートン順序をExcelVBAでやってみた

この記事はExcel2010を使用しております。

当たり判定について調べていた所、モートン順序と言うものを知りました。
表だし何となくExcelで出来るんじゃ無いかと思いやってみました。
ただそれだけの記事ですので、
当たり判定についてやモートン順序について深い考察がある訳ではありませんので
予めご了承ください。

#モートン順序とは
<table>
<th>L0</th>
<tr><td>0</td></tr>
</table>
<table>
<th colspan="2">L1</th>
<tr><td>0</td><td>1</td></tr>
<tr><td>2</td><td>3</td></tr>
</table>
<table>
<th colspan="4">L2</th>
<tr><td>0</td><td>1</td><td>4</td><td>5</td></tr>
<tr><td>2</td><td>3</td><td>6</td><td>7</td></tr>
<tr><td>8</td><td>9</td><td>12</td><td>13</td></tr>
<tr><td>10</td><td>11</td><td>14</td><td>15</td></tr>
</table>

と言うような感じで階層を深くしてもＺ字状に数字が並ぶ順序の事を言うそうです。
その形からZ-orderとも呼ばれているそうです。

並びが綺麗と言うだけでは無く2進数で表記した場合、
先頭のbitを参照するだけで一つ上のレベルの所属番号が直ぐに割り出せる点に
その真価があるようです。

例えばL2の9は[1001]で先頭は[10]です。
L1の2は[0010]である事から、
L2の9はL1の2であると言う事が簡単に分かります。

# モジュールを作る
モジュールの作成には
http://marupeke296.com/COL_2D_No8_QuadTree.html
こちらのサイトを参考にさせて頂きました。

Excel2010にはビットをシフトする演算子が実装されていないので
ビットを左にシフトするコードを作ります。

```
Private Function BitLShift(ByVal num1 As Variant, ByVal num2 As Variant) As Variant
    BitLShift = num1 * (2 ^ num2)
End Function
```

次に参考にさせて頂いたサイトにある擬似コードを元に
1つずつビットを左に１つシフトするコードを作ります。

``` 
Private Function BitSeparate32(ByVal num As Variant)
    num = (num Or (BitLShift(num, 8))) And &HFF00FF
    num = (num Or (BitLShift(num, 4))) And &HF0F0F0F
    num = (num Or (BitLShift(num, 2))) And &H33333333
    BitSeparate32 = (num Or (BitLShift(num, 1))) And &H55555555
End Function
```

最後にモートン順序の番号を返すコードを作ります。
これをセルに関数として使用します。

```
Public Function XYtoMotton(ByVal x As Variant, ByVal y As Variant)
    XYtoMotton = (BitSeparate32(x) Or BitLShift(BitSeparate32(y), 1))
End Function
```

#シートでモートン順序をやってみる
`XYtoMotton(x,y)` をセルに配置します。

引数は
`x` には `=COLUMN()-1` 
`y` には `=ROW()-1` 
とします。

これでA1セルから始まるモートン順序になりました。
![image](https://qiita-image-store.s3.amazonaws.com/0/89730/102cdf80-2e4c-1f2e-8d6e-0a8a2ec70b46.png)

これを `=DEC2BIN()` 関数で2進数に表すと
![image](https://qiita-image-store.s3.amazonaws.com/0/89730/0eb9c16f-5ec4-6353-5b81-fe8f5202cab3.png)
となります。

色分けした通り、
先頭のビットで4つの塊が区別され対応している事が分かります。
並び方が綺麗で面白いですね。
私はまだ眺めることしか出来ていませんが、
モートン順序は色々な応用ができそうな気がしてきますね。
ccache でビルド高速化。と設定のポイント

# ccache (compiler cache)とは？

[Wikipedia](https://ja.wikipedia.org/wiki/Ccache) より

> ccacheとは、CまたはC++コンパイラが出力するデータをキャッシュするソフトウェア開発ツールである。その目的は、2回目以降のソフトウェアビルドにおいてはコンパイルを避け、出力結果を再利用することにある。これは再コンパイル速度を劇的に改善する。このツールはコンパイラがソースコードをコンパイルする際の処理に割り込み、コンパイル時に固有であるべき各種データのハッシュ値を生成する。この付加的な処理により、概ね1度目のコンパイルはキャッシュを実行しない場合に比べ、コンパイルに時間がかかる。2度目以降のコンパイルでは再度ハッシュを生成し、その値がキャッシュデータのものと一致するかチェックする。一致すればccacheはコンパイラにコンパイルを指示する代わりにキャッシュされたデータを書き出す。一致しなければ、コンパイル処理はコンパイラに渡される。

つまり ccache とは、

- C, C++ のビルド高速化ツール
- 初回ビルドはそのまま。結果をキャッシュに持っておく。
- 2回目以降のビルドは再利用できるならコンパイルせず、キャッシュからコピーするのみ
- 再利用できないときは普通にコンパイル。結果はキャッシュへ。

という仕組み。

# 使い方

## インストール

Ubuntu14.04 の場合。

```bash
$ sudo apt-get install ccache
```

## 設定

### 使用宣言

```bash
$ vi ~/.bashrc

# --- 追記ここから ---
export USE_CCACHE=1
export CCACHE_DIR=/root/.ccache
# --- 追記ここまで ---
```

```bash
$ export set CC='ccache gcc'
```

### 設定確認

```bash
$ ccache -s
cache directory                     /home/<user>/.ccache
cache hit (direct)                     0
cache hit (preprocessed)               0
cache miss                             0
files in cache                         0
cache size                           468 Kbytes
max cache size                       1.0 Gbytes
```


### キャッシュサイズ設定

```bash
$ ccache -M 10G

$ ccache -M 100M
```
お好みで。

### キャッシュ削除

```bash
$ ccache -C
```


## 実行

有効になっているので、そのまま make してください。


# 高速化状況

## ccache 公式サイトの情報

https://ccache.samba.org/performance.html
にパフォーマンス結果が載っています。

|                   |      Elapsed time |    Percent         |
|:----------------- |------------------:|:------------------:|
| Without ccache    |          367.11 s |       100.00 %     |
| ccache first time |          385.67 s |       105.06 %     |
| ccache second time|            9.70 s |        2.64 %      |

自らの ccache.c のビルド時間と高速化率とのことです。

ccache 未使用のデフォルトを100%としたとき、
初回のビルドはビルド時間が105%になりますが、
2回目以降は3%になるとのことです。

＃ direct mode と preprocessor mode の結果の違いは端折ります。
＃ direct mode = ヘッダとソースファイルからハッシュを作りリビルドするか判断。デフォルト。
＃ preprocessor mode = プリプロセッサも通してからリビルドするか判断。 direct mode より時間がかかる。

## 私の手元の情報

私もビルド時間を計測してみました。
某 OSS ビルド時、初回は約2時間、 ccache 適用後は約5分になりました。

1回目

```bash
$ time make

real    115m17.953s
user    752m1.909s
sys    72m50.983s
```

2回目

```bash
$ time make

real    4m56.688s
user    14m37.291s
sys    4m38.293s
```


## Tips

+ cache directory は読み書き早めの SSD にする
+ キャッシュサイズは十分に。一回ビルドして限界値に達しているなら足らないので増やしましょう

# まとめ

- ccache とは C, C++ のビルド高速化ツール
- 初回は多少ビルド時間が長くなるが、2回目以降は劇的に早くなる


# 参考
ccache 公式サイト: https://ccache.samba.org/
ccache 公式マニュアル: https://ccache.samba.org/manual.html
IE8で$(window)でマウスイベント取得できなかった件

# まえがき
最近では取り扱う案件が減ってきたけど、久々にIE8も対応ブラウザに含まれる案件を担当して、ちょっとハマったのでメモ。
IE8以外ではすんなりイケた。
久々に俺の前にIE8が立ちふさがったのだ。

# やりたかったこと
ウィンドウ内のマウス座標取得したい。
取得した座標の値を使ってツールチップ的なのをポインタの横に表示させたい。


# IE8で取得できなかった：NG
下記のようなコードだと取得してくれなかった。

```js
$(window).on('mousemove', function(e) {
	$('#clientX').text(e.clientX);
	$('#clientY').text(e.clientY);
});
```

# IE8で取得できた：OK
下記のようなコードだとIE8でも取得してくれた。

```js
$('html').on('mousemove', function(e) {
	$('#clientX').text(e.clientX);
	$('#clientY').text(e.clientY);
});
```

# 他に取得できないやつ
`click` とか `mousedown` などの `mouseXXX系`。
`resize` とか `load` は大丈夫。

# 終わり
俺はファミコンも好きだしスーファミも好きだし、ゲームボーイなど、懐かしいゲーム機は好きだが、古いブラウザは嫌いだなと、改めて思いました。
DB2でソート時のnullの扱い

DB2のorder byでソートした時、nullは固定で最大と扱われてしまう。

数値を降順でソートした場合に、nullを最後に表示したい。
`TableA`

|No | columnA |
|:--|:---------|
|1  | 3      |
|2  | 1      |
|3  | null   |

上記テーブルの場合、
`SELECT columnA FROM TableA ORDER BY columnA;`
とするとソート順は

| columnA |
|:--------|
| 1        |
| 3        |
| null     |

となる。nullを先頭に持って来たい場合には、

`SELECT columnA FROM TableA ORDER BY CASE WHEN columnA IS NULL THEN 0 ELSE 1 END, columnA;`とすることで

| columnA |
|:--------|
| null     |
| 1        |
| 3        |

に並び変えることができる。

また、ASC/DESCによりnullを先頭にするかどうかを指定可能

`SELECT columnA FROM TableA ORDER BY CASE WHEN columnA IS NULL THEN 0 ELSE 1 END DESC, columnA DESC;`とすれば

| columnA |
|:--------|
| 3        |
| 1        |
| null     |

となる。
Thymeleafの三項演算子で日付フォーマットとかユーティリティオブジェクトを使ってみる。


通常、Thmeleafにおいて、出力する値を条件ごとに変える方法。。。
すなわち、`if ~~~ else ~~~`みたいなことをしたい時は……

```
<p th:text="${---条件式---}? 'A' : 'B'"/>
```
と書けばTrueの時Aが、Falseの時Bを出力することができる。

しかし、時AやBに日付フォーマットとかを入れたい時AやBを囲っているシングルクォーテーション（’）はどう扱えばいいのか？

```
th:text="${obj.Date != null}? ${#dates.format(data.Date,'yyyy/MM/dd')} : '日付無し'"
```

↑
こう書けばおk

シングルクォーテーションを使わずに、そのまま${~~}を置けばよいのである。


## ちなみにリテラル置換を使いたい時は？
```Thymeleafで三項演算子.html
<p th:text="${editData.updateDate != null}?
　　　 |更新日時　：　${#dates.format(editData.updateDate,'yyyy年MM月dd日')}| : '更新履歴無し'"></p>

```

これだけで普通に動いてくれた。有能。


# 参考文献
thymeleafを触ってみる(備忘録として) - Qiita
http://qiita.com/tko-ud/items/6b2158a7e215111d2f89
d3.js version4でシンプルなTree図を作成

#version
d3.jsのversionは**4.1.0**です。

#ビジュアライズ結果
![スクリーンショット 2016-07-06 23.02.27.png](https://qiita-image-store.s3.amazonaws.com/0/26043/a13077dd-6828-a51d-eaf2-e150c2e25a29.png "スクリーンショット 2016-07-06 23.02.27.png")

#Data
地下鉄の駅データをサンプルとして使います。

```json:data.json
{
  "name": "都営地下鉄",
  "parent": "null",
  "children": [
    {
      "name": "大江戸線",
      "parent": "都営地下鉄",
      "children": [
        {
          "name": "青山一丁目",
          "parent": "大江戸線"
        },
        {
          "name": "六本木",
          "parent": "大江戸線"
        }
      ]
    },
    {
      "name": "浅草線",
      "parent": "都営地下鉄"
    }
  ]
}
```

#Code

##js
本記事ではコードを一部抜粋して掲載しています。詳細は[全コード](https://github.com/naoyashiga/dataViz-playground/blob/311df7110266ccfed7f5b0657b24f72a1fe44e28/sketch/tutorial/hierarchies/tree/src/js/components/Visualization.js)をご覧ください。

###SVGを作成

```js:Visualization.js
d3.select('body').append('svg')
.attr('width', this.width)
.attr('height', this.height)
.append("g")
.attr("transform", "translate(" + this.margin.left + "," + (this.margin.top) + ")");
```

###Treeを作成

```js:Visualization.js
this.margin = {top: 50, right: 0, bottom: 0, left: 200};

this.width = window.innerWidth - this.margin.left - this.margin.right,
this.height = window.innerHeight - this.margin.top - this.margin.bottom;

this.tree = d3.tree()
.size([this.height, this.width - 400]);
```

###jsonを読み込む
```js:Visualization.js
d3.json("datasets/data.json", (error, data) => {

  this.root = d3.hierarchy(data);
  this.tree(this.root);
});
```
hierarchy関数を使います。
[d3/d3-hierarchy: 2D layout algorithms for visualizing hierarchical data.](https://github.com/d3/d3-hierarchy#tree)

###線で繋ぐ

```js:Visualization.js
this.svg.selectAll(".link")
.data(this.root.descendants().slice(1))
.enter().append("path")
.attr("class", "link")
.attr("d", function(d) {
  return "M" + d.y + "," + d.x
  + "C" + (d.y + d.parent.y) / 2 + "," + d.x
  + " " + (d.y + d.parent.y) / 2 + "," + d.parent.x
  + " " + d.parent.y + "," + d.parent.x;
});
```
###Nodeを作成
```js:Visualization.js
this.svg.selectAll(".node")
.data(this.root.descendants())
.enter().append("g")
.attr("class", function(d) { return "node" + (d.children ? " node--internal" : " node--leaf"); })
.attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; });
```
###円を表示
```js:Visualization.js
this.node.append("circle")
    .attr("r", 2.5);
```

###駅名を表示
textを追加します。

```js:Visualization.js
this.node.append("text")
.attr("dy", 3)
.attr("x", function(d) { return d.children ? -8 : 8; })
.style("text-anchor", function(d) { return d.children ? "end" : "start"; })
.text(function(d) { return d.data.name; });

```

##CSS
[dataViz-playground/main.css at 311df7110266ccfed7f5b0657b24f72a1fe44e28 · naoyashiga/dataViz-playground](https://github.com/naoyashiga/dataViz-playground/blob/311df7110266ccfed7f5b0657b24f72a1fe44e28/sketch/tutorial/hierarchies/tree/src/css/main.css)
finatra 六歩目

# 外部通信
http通信は以下のとおり。
httpsは`override val sslHostname = ""`を追加して色々試してるけどエラーになってよくわからん。

```scala
import com.twitter.finagle.builder.{ClientBuilder, ServerBuilder}
import com.twitter.finagle.http._
import com.twitter.finatra.http.Controller
import com.twitter.finatra.httpclient.modules.HttpClientModule
import com.twitter.finatra.json.FinatraObjectMapper

// ~中略~

  get("/api/request") { request: Request =>

    val httpClientModule = new HttpClientModule() {
      val dest = "fscoward.hateblo.jp:80"
      override val hostname = "fscoward.hateblo.jp:80"
    }
    val req = Request.apply(Version.Http11, Method.Get, "/")

    val httpClient = httpClientModule.provideHttpClient(FinatraObjectMapper.create(), httpClientModule.provideHttpService)
    for {
      r <- httpClient.execute(req)
    } yield {
      r
    }
  }
```

# もしくは
↓でもいける

```scala
    val http = com.twitter.finagle.Http
    http.fetchUrl("http://fscoward.hateblo.jp")
```
jQuery Uiのdialogを使ってwindowのalert, confirmを切り替える

dialog回りのロジックをjQueryのプラグイン化しておく。

```js:jquery.dialog.js
(function( $ ){
  $.alert = function(message) {
    var dfd = $.Deferred();
  	// ダイアログを作成
  	var dlg = $( "<div></div>" ).dialog({
  		modal: true,
  		buttons: {
  			"OK": function() {
  				$( this ).dialog( "close" );
          dfd.resolve();
  			}
  		}
  	});
    dlg.html(message);
    return dfd.promise();
  };

  $.confirm = function(message) {
    var dfd = $.Deferred();
  	// ダイアログを作成
  	var dlg = $( "<div></div>" ).dialog({
  		modal: true,
  		buttons: {
  			"OK": function() {
  				$( this ).dialog( "close" );
          dfd.resolve("yes");
  			},
  			"キャンセル": function(event, ui) {
  				$( this ).dialog( "close" );
          dfd.resolve("cancel");
  			}
  		}
  	});
    dlg.html(message);
    return dfd.promise();
  };
})( jQuery );

```

```html:index.html
<html>
<title>サンプル</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/start/jquery-ui.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script type="text/javascript" src="jquery.dialog.js"></script>
<script type="text/javascript">
(function(){
	window.old_alert = window.alter;
	window.alter =  function(message) {
		$.alter(message);
	}
	window.confirm =  function(message, okCallback) {
		$.confirm(message)
		.then(function(status) {
			var ret = (status === "yes");
			if(ret)
				okCallback();
		}) ;
	}
})();

$(function(){
	 $("#button").click(function(e){
		$.alert("AlertTest");
 });

	$("#button2").click(function(){
		confirm("やめますか?", function() {
		 alert("OKがおされました。");
		});
	});
});
</script>
<body>
	<button id="button">alert表示</button>
	<div id="alert"></div>
	<button id="button2">conform表示</button>
	<div id="conform"></div>
</body>
</html>

```

こんな感じで書いてみたけど、
もともとのwindow.confirmを使っていたところのロジックを少し直さないとだめだから、
できれば、$.confirm（）の戻り値でtrue,falseを返せるとベストなんだけど。。。
Need Hierarchical Tree Search Bar For my wordpress website Gofilms

Need Hierarchical Tree Search Bar For my wordpress website Gofilms.ws which is movie database portal. I want it to be has search search bar that should each result in tree Hierarchically Only when if movie has its different parts or installments that the only show in historically according to there release and user can also [watch online](http://gofilms.ws/) trailers through YouTube small thumbnail provided below search or it may option for you is can you do for this also, else i need results in Hierarchical Tree. please anybody here help me out this...!
【Python】Pythonの時間・時刻の取り扱い

Pythonで時間・時刻データを取り扱う方法をいつも忘れるので備忘録。
気付いたら徐々に追加していきたい。

```py3
import datetime

ref_date = datetime.datetime(2016, 4, 1, 10, 10)
cur_date = datetime.datetime(2016, 5, 15, 12, 30)
```

```py3:出力結果
ref_date
2016-04-01 10:10:00

cur_date
2016-05-15 12:30:00
```

基準時刻（ref_date）からの累積時間。

```py3
delta = cur_date - ref_date
delta.total_seconds()
```

```py3:出力結果
3810000.0 # 時・分などが欲しいときは適宜割る
```

pandasを使って文字列から変換。

```py3
import pandas as pd
pd.to_datetime('2016-04-01 10:15:30')
```

```py3:出力結果
Timestamp('2016-04-01 10:15:30')
```
Jupyterでgolang

# これなに
Go言語(golang)のJupyter kernelを手っ取り早く、docker で動かしたい人へ。

[IPython kernels for other languages](https://github.com/ipython/ipython/wiki/IPython-kernels-for-other-languages)の、[Golang kernel](http://www.datadan.io/announcing-a-golang-kernel-for-jupyter-notebooks/)の[docker](https://hub.docker.com/r/dwhitena/gophernotes/tags/)を使ってみると 2.4 GBありました。
せっかくなので、自分で[docker](https://hub.docker.com/r/tsutomu7/golang/)を作ってみました。Alpine Linuxベースにして、698 MB まで小さくできました。

```bash:bash
firefox http://localhost:8888/ &
docker run -it --rm -p 8888:8888 tsutomu7/golang
```

上記のようにすると、下記のように使うことができます。

![go_sample.png](https://qiita-image-store.s3.amazonaws.com/0/13955/8e725609-7a37-85b4-2ffb-8faa8d857af4.png)

## 参考
- [Alpine Linux で Docker イメージを劇的に小さくする](http://qiita.com/asakaguchi/items/484ba262965ef3823f61)
- [Alpine Linux で軽量な Docker イメージを作る](http://qiita.com/pottava/items/970d7b5cda565b995fe7)
- [Jupyterでnimを使おう](http://qiita.com/Tsutomu-KKE@github/items/f79257430e2d8fcb9196)
- [Jupyterのkernelを作ってみる](http://qiita.com/Tsutomu-KKE@github/items/3c996bde01ef2637aadc)

以上
Swiftでランダム英数字の文字列生成（※arc4random()は使ってはいけない）

SwiftでセッションIDなど、桁数を指定してランダム英数字を生成させたい時

##ポイント
`arc4random（）`ではなく、`arc4random_uniform(UInt32)`を使用するのがポイント
##arc4random（）を使うとクラッシュする
`arc4random（）`は乱数を生成させる関数ですが、Intにキャストする際に32bit端末ではクラッシュします。iPhone5や4Sなど、初代iPad Air以前は32bit

`arc4random`はunsigned 32 bit integerを返しますが、つまり0から4,294,967,295まで。
IntはiPhone5で32ビットの整数と5S上の64ビット整数です。`arc4random（）`はiPhone5上のIntの倍の正の範囲を持っているUInt32型を返すので、クラッシュする可能性が50%あります。

また詳細は記述しませんが、ランダム性に少しバイアスがあるarc4random()のずれを補正し、int型に変換しても安全なのがarc4random_uniform()です。

##実装
引数の数だけ、a-zの小文字大文字、0-9を組み合わせた文字列を生成します。
`arc4random_uniform`を使用

```swift
    func generate(length: Int) -> String {
        let base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        var randomString: String = ""
        
        for _ in 0..<length {
            let randomValue = arc4random_uniform(UInt32(base.characters.count))
            randomString += "\(base[base.startIndex.advancedBy(Int(randomValue))])"
        }
        return randomString
    }
```

```swift

// 32桁の乱数を生成
print(generate(32))
// 14832cfdd506508a8c788340f5ac618bb234d5f7bd3f3dbf902fd04ac9896fe8

```


##参照
Generate random alphanumeric string in Swift
http://stackoverflow.com/questions/26845307/generate-random-alphanumeric-string-in-swift

Objective-Cの乱数作成はarc4random_uniform
http://tanukichi566.blog.fc2.com/blog-entry-57.html

arc4randomの罠
http://qiita.com/jtemplej/items/abebac88f930f9345f95

[Swift][iOS]64bit対応におけるarc4random()について
http://qiita.com/kiguchi/items/c75d6d3da05b3e8d80d9
Vagrant(ubuntu) + Chef + Berkshelfでのプロビジョニング実行時につまづいた部分の修正


##はじめに
[前回](http://qiita.com/Ago2_0727/items/d7d6f49a576543184e38)の続きです.

##対象者
現段階でパーフェクトRuby on Rails 8章で躓いている方

##4. 必要なソフトウェアを既存レシピでセットアップする.

以下のソフトウェアを追加する.

```Berksfile:Berksfile
cookbook 'git'
cookbook 'mongodb'
cookbook 'build-essential'
cookbook 'memcached'
cookbook 'nodejs'
cookbook 'database'
cookbook 'xml'
cookbook 'ruby_build'
cookbook 'rbenv', :git => 'git://github.com/chef-rbenv/chef-rbenv.git'
cookbook 'nginx'
cookbook 'imagemagick'
```

この状態でプロビジョニングを行った.

###エラーの発生
プロビジョニング時に以下の様なエラーが発生した.

(エラーログを取り忘れたのでメインのエラーのみ抜粋します.ごめんなさい)

```errorlog

================================================================================
Recipe Compile Error in /var/chef/cookbooks/nginx/recipes/source.rb
================================================================================


NoMethodError
-------------
undefined method `[]' for nil:NilClass


Cookbook Trace:
---------------
  /var/chef/cookbooks/nginx/recipes/ohai_plugin.rb:27:in `from_file'
  /var/chef/cookbooks/nginx/recipes/source.rb:42:in `from_file'


Relevant File Content:
----------------------
/var/chef/cookbooks/nginx/recipes/ohai_plugin.rb:

 20:  #
 21:  
 22:  ohai 'reload_nginx' do
 23:    plugin 'nginx'
 24:    action :nothing
 25:  end
 26:  
 27>> template "#{node['ohai']['plugin_path']}/nginx.rb" do
 28:    source 'plugins/nginx.rb.erb'
 29:    owner  'root'
 30:    group  'root'
 31:    mode   '0755'
 32:    notifies :reload, 'ohai[reload_nginx]', :immediately
 33:  end
 34:  
 35:  include_recipe 'ohai::default'
 36:  
```

###対処

nginxとohaiが依存していたため問題が発生しているみたいなのでcookbooks/nginx/recipes/default.rbの以下の部分を削除した

```ruby:cookbooks/nginx/recipes/default.rb
include_recipe 'nginx::ohai_plugin'
```

この後プロビジョニングを行うとちゃんとインストールすることが出来た.

:+1:
Pythonのお勉強１日目

[ライブラリーを使わずにPYTHONでニューラルネットワークを構築してみよう](http://blog.moji.ai/2015/12/pythonでライブラリーを使わずに、ニューラルネット/)を自分の環境でやってみたの１日目。

[PRML](https://www.amazon.co.jp/パターン認識と機械学習-上-C-M-ビショップ/dp/4621061224?ie=UTF8&redirect=true&tag=prog4ml-22)でニューラルネットワーク辺りまでを読んだので練習としてやってみる。

# 環境設定
ライブラリを使わずにと書いているが、当たり前のpythonライブラリは必要なようなので整える。
今回必要無いものも含まれてるが、このシリーズの後に[Python機械学習プログラミング](https://www.amazon.co.jp/Python機械学習プログラミング-達人データサイエンティストによる理論と実践-impress-top-gear/dp/4844380605)でもやろうよ思うので入れておいた。

```
pip install --upgrade pip
pip install NumPy
pip install SciPy
pip install scikit-learn
pip install pandas
pip install matplotlib
pip install ipython
```
`matplotlib`のインストールには成功したのだが、実際使おうとimportすると(対話式とかで)エラーになった。
現象はここ[Python 3.3でmatplitlibとpylabを使おうとしたら RuntimeError](http://qiita.com/katryo/items/918667f28301fdec89ba)と同じだったので設定ファイル`matplotlibrc`を作成してバックエンド設定を変更した。  

自分の環境ではこんな感じになっている

```
python --version
Python 3.5.0
pip list
appnope (0.1.0)
cycler (0.10.0)
decorator (4.0.10)
gnureadline (6.3.3)
ipython (4.2.1)
ipython-genutils (0.1.0)
matplotlib (1.5.1)
networkx (1.11)
numpy (1.11.1)
pandas (0.18.1)
pexpect (4.1.0)
pickleshare (0.7.2)
pip (8.1.2)
ptyprocess (0.5.1)
pyparsing (2.1.5)
python-dateutil (2.5.3)
pytz (2016.4)
scikit-learn (0.17.1)
scipy (0.17.1)
setuptools (24.0.2)
simplegeneric (0.8.1)
six (1.10.0)
traitlets (4.2.2)
```

# データ生成

データ生成に書いてある通りにそのまま[Scikit-learn](http://scikit-learn.org/stable/)を使用した。
`make_moon`で生成されたデータは200個のデータ点で、

* 2次元の変数`X`
* それぞれの変数`X`に対するラベル`y`(0 or 1)

の情報を持つ。
2つの半円状の2次元データになっていて、線形識別が付加なサンプルデータになっている。

```
ipython --pylab
Python 3.5.0 (default, Oct 17 2015, 16:12:04) 
Type "copyright", "credits" or "license" for more information.

IPython 4.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
Using matplotlib backend: TkAgg

In [1]: import numpy as np

In [2]: import matplotlib.pyplot as plt

In [3]: from sklearn.datasets import make_moons

In [4]: np.random.seed(0)

In [5]: X, y = make_moons(200, noise=0.20)

In [6]: plt.scatter(X[:,0], X[:,1], s=40, c=y, cmap=plt.cm.Spectral)
Out[6]: <matplotlib.collections.PathCollection at 0x119813ef0> 
```
実施に出力されたデータ点は下記の通リ。
![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/132379/f4f759c8-f2e6-962a-31ce-3358c7f14c04.png)

今日はここまで。
[Swift] NSDateで月末月初めを計算する

# はじめに
調べたところObjective-Cの情報ばかりだったのでSwift版を共有しようと思います。

こちらが元記事です。
[NSDateで月末月初 ※ただしGMTに注意](http://qiita.com/diceK66/items/bac89a6841fab99a6c0c)

# コード

```swift
// dateの月の月末月初めを計算します。
let date = NSDate()

let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
// 年月日時分秒のNSComponentsを作る（この時点ではdateと一致したものになっている）
let comp = calendar.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: date)

// ここで1日の0時0分0秒に設定します
comp.day = 1
comp.hour = 0
comp.minute = 0
comp.second = 0

// NSComponentsをNSDateに変換します
let monthBeginningDate = calendar.dateFromComponents(comp)

// その月が何日あるかを計算します
let range = calendar.rangeOfUnit(.Day, inUnit: .Month, forDate: date)
let lastDay = range.length

// ここで月末に日を変えます
comp.day = lastDay

let monthEndDate = calendar.dateFromComponents(comp)
```
phpcsでカスタマイズしたコーディング規約をチェックする

正直なところ、今まであまり厳格に規約に沿ってコーディングしてきませんでした。


* ある程度守っていればいいだろ
* 統一させたいなら整形ツール的なやつで自動化すればいいじゃん

など思っていたんですが、OSSなど作っていきたいと考えた時、ちゃんと標準的なコードを書きたいと思い、コーディング規約をしっかり守りたいと考えるようになりました。

また何が標準かというのを理解するために整形ツールなどではなく、phpcsを使ってコーディング規約をチェックするようにしました。


## phpcsインストール

[PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer)

PHP_CodeSnifferをインストールすることでphpcs,phpcbfなどがまるっと使えるようになります。

```bash
composer global require "squizlabs/php_codesniffer=*"
```
ドキュメント通り、composerでさくっとinstall


## 使い方、規約のルール指定

[PHP_CodeSniffer Usage](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Usage)

`phpcs --standard=PSR2 /path/to/file`

などで指定したコーディング規約でチェックをすることができます。


## 規約ルールのカスタマイズ

現在のプロジェクトのコーディング規約はフレームワーク側の兼ね合いもありPSR2をベースにして、一部フレームワーク側の合わせたものになっています。

なので、そのままPSR2を適用すると意図しない規約のチェックが行われるので、PSR2をベースに一部をカスタマイズしたものを作成しました。

`vendor/squizlabs/php_codesniffer/CodeSniffer/Standards`以下に各種規約ルールがあります。

ここにカスタマイズした規約ルールを作成し、その規約を指定してphpcsを実行するイメージです。


```bash
//MyPSR2という規約ルールを作成する
mkdir vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/MyPSR2 
vi vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/MyPSR2/ruleset.xml

```

今回はPSR2をベースにインデントを4タブ、いくつかのルールを除外したものを作成しました。

exclude nameは`phpcs -s`などで実行して除外したいルールを追加していく感じです

```xml:ruleset.xml
<?xml version="1.0"?>
<ruleset name="MyPSR2">
 <description>The MyPSR2 coding standard builds on the PSR2 coding standard.</description>
 <arg name="tab-width" value="4"/> <!-- タブ -->

 <exclude-pattern>*/Tests/*</exclude-pattern>

 <!-- Include the whole PSR2 standard except FunctionComment, which we override -->
 <rule ref="PSR2">
  <rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/>
   <rule ref="Generic.WhiteSpace.ScopeIndent">
    <properties>
     <property name="indent" value="4"/>
      <property name="tabIndent" value="true"/>
     </properties>
   </rule>

  <exclude name="PSR1.Files.SideEffects.FoundWithSymbols"/> <!--  -->
  <exclude name="PSR2.Methods.FunctionCallSignature.Indent"/> <!--  -->
  <exclude name="PSR1.Methods.CamelCapsMethodName.NotCamelCaps"/> <!--  -->
  <exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace"/> <!--  -->
  <exclude name="Generic.WhiteSpace.DisallowTabIndent.TabsUsed"/> <!--  -->
  <exclude name="Generic.WhiteSpace.DisallowTabIndent.NonIndentTabsUsed"/> <!--  -->
  <exclude name="Generic.WhiteSpace.ScopeIndent.Incorrect"/> <!--  -->
  <exclude name="Squiz.Classes.ValidClassName.NotCamelCaps"/> <!--  -->
 </rule>

</ruleset>

```

ルール作成後に、

`phpcs --standard=MyPSR2 /path/to/file`
のように実行すればカスタマイズされたルールで規約のチェックをすることができます。

![SnapCrab_NoName_2016-7-5_18-20-1_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/5219/9dc1ee36-739c-2f96-bcc0-bfabc80b3036.png)


これでしっかりコーディング規約にそったコードを書いていけますね！
次はいちいちコマンドラインから実行するのもアレなので、エディタからコーディングチェックできるようにしていこうと思います。
GitHub で草が生えなくなった

いつからかわかりませんが、なんとなく2段階認証を導入したあとあたりからいくら push しても GitHub で草が生えなくなりました。多分何かを見落としていたのだと思いますが、

```console:
$ git config --global user.email <your-github-name>@users.noreply.github.com
```

とやると草が生えるようになりました。
[自分メモ] blender tips




[Blenderで表情モーフ修正](http://ch.nicovideo.jp/yudedaco/blomaga/ar632202)

[指のウェイト設定](https://www.youtube.com/watch?v=yNtP9hxO-mQ&feature=youtu.be&list=PLnmSjgrFxrPWUxPIhdoh3ZXNY6g5b9UUN)

#頂点を軸に揃える
例えばZ軸にそろえるときは以下のように入力する。
[s] - [z] - [0] - [Enter]
Ransack ネストされたモデルの検索方法

##環境
ruby 2.1.0
Rails 4.1.0
ransack 1.7.0

##RansackでShopモデルにネストされたItemsを検索したい
複数のItemsを持つShopモデルがあります。
gem```Ransack```で```shop/show.html.erb```にitems一覧を表示し、店舗ごとのitem検索機能を作りたいと考えています。
一覧表示までは出来ていますが、検索機能とソート機能が機能しない状況です。
どこにミスがあるのか教えて頂けませんでしょうか。。


```routes.rb
Rails.application.routes.draw do
  resources :shops do
    resources :items
  end
end

```

```models/shop.rb
class Shop < ActiveRecord::Base
  belongs_to :user
  has_many :items , dependent: :destroy
```

```shops_controller.rb
def show
    @shop = Shop.find(params[:id])
    @q    = @shop.items.ransack(params[:q])
    @q.sorts = 'price asc' if @q.sorts.empty?
    @shop.items = @q.result(distinct: true)

    respond_with(@shop.items)
  end
```


```shop/show.html.erb
<h1>店舗詳細</h1>

<p>
  <strong>Image:</strong>
  <% if @shop.image? %>
    <td><%= image_tag @shop.image_url(:thumb).to_s , :width => '300'%></td>
   <% end %>
</p>

<p>
  <strong>Name:</strong>
  <%= @shop.name %>
</p>

<p>
  <strong>City:</strong>
  <%= @shop.city %>

  <h1>商品一覧</h1>
    <%= search_form_for @q, url: items_path(params[:shop_id]) do |f| %>
    <%= f.label :name_or_content_cont, "商品名or説明文" %>
    <%= f.search_field :name_or_content_cont %>
    <%= f.submit '検索'%>
  <% end %>

  <table>
    <thead>
      <tr>
        <th>ShopName</th>
        <th>ItemImage</th>
        <th>ItemName</th>
        <th><%= sort_link(@q,:item_price,'値段') %></th>
        <th>Content</th>
        <th colspan="3"></th>
      </tr>
    </thead>
      <%= render @shop.items %>
  </table>
```
beforeunloadにカスタムメッセージを表示できなくなっていた

`beforeunload` でカスタムメッセージを出したいのに、何度やってもデフォルトっぽいメッセージが出てくる。
なぜだろう。

調べていたら、最終的に下記の画面にたどり着いた。
https://bugs.chromium.org/p/chromium/issues/detail?id=587940
↓
https://www.chromestatus.com/feature/5349061406228480
![スクリーンショット 2016-07-06 19.33.00.png](https://qiita-image-store.s3.amazonaws.com/0/15044/11542bf9-e665-b89d-8069-752444fc5a1d.png)

バグではなく仕様でした。

各種ブラウザで試した感じだとIE/Edgeを除いて、最新のブラウザでカスタムメッセージは使えなくなっていた。
どのブラウザもメッセージが微妙に異なるが、Chromeが一番不安感を醸し出している。

![スクリーンショット 2016-07-06 19.18.22.png](https://qiita-image-store.s3.amazonaws.com/0/15044/8eb8a5e1-fbb6-0c00-15ec-d2f43a2b40ac.png)
Chrome

SafariとFirefoxは割と平和である。

![スクリーンショット 2016-07-06 19.21.33.png](https://qiita-image-store.s3.amazonaws.com/0/15044/880b3c7c-60bc-fbcb-4383-7ed4ff461c0a.png)
Firefox

![safari-beforeunload.png](https://qiita-image-store.s3.amazonaws.com/0/15044/2007488a-8e7e-f6b0-8c2d-7079e287f3ad.png)
Safari
シンボリックリンク設定方法

# シンボリックリンクとは

OSのファイルシステムの機能の一つで、特定のファイルやディレクトリを指し示す別のファイルを作成し、それを通じて本体を参照できるようにする仕組み。
Mac OS X のエイリアスやWindowsのショートカットに似ている。

[&gt;&gt;シンボリックリンク](http://e-words.jp/w/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AA%E3%83%B3%E3%82%AF.html)

## シンボリックリンクを作成

以下ターミナルで次のコマンドを実行する。
それぞれのフォルダの間に、半角スペースを忘れずに入れる。

```ruby:Terminal
ln -s [シンボリックリンクを作成したいファイルのパス] [シンボリックリンクを置くフォルダのパス]
```

```ruby:lnコマンドオプション
-s  # シンボリック・リンクを作成する
```

## シンボリックリンクが設定されているか確認

```ruby:Terminal
ln -la ~/hoge/

lrwxr-xr-x 1 hoge  hoge [シンボリックリンクを置くフォルダのパス]@ -> [シンボリックリンクを作成したいファイルのパス]
```

[シンボリックリンクを置くフォルダのパス]@ -> [シンボリックリンクを作成したいファイルのパス] となればok。
シンボリックリンクにはファイル名に"@"が付加される。

## シンボリックリンクを変更する

```ruby:Terminal
ln -nfs [シンボリックリンクを作成したいファイルのパス] [シンボリックリンクを置くフォルダのパス]
```

```ruby:lnコマンドオプション
-n # ディレクトリとリンクを置き換える
-f # リンク先に同名のリンク・ファイルがあるときも警告なく上書きする
-s # シンボリック・リンクを作成する
```

## シンボリックリンクを削除

```ruby:Terminal
unlink [シンボリックリンクを置くフォルダのパス]
```

# サンプル
今回は、Dropboxを使ってSublime Text3の設定ファイルにシンボリックリンクを設定していきたいと思います。
PCが壊れたり、移行した際に、設定が楽になります。

- 実体のファイルをDropboxに移動する
- 元あった場所に移動先へのシンボリックリンクを作る


## Dropbox内にフォルダを作成

```ruby:Terminal
mkdir ~/Dropbox/Sublime\ Text\ 3
```

## sublime text3の設定ファイルをDropboxにコピー

```ruby:[shift+cmmand+G]で移動
~/Library/Application Support/Sublime Text 3/ # 任意のフォルダの場所へ移動
```

下記の設定ファイルを先ほどDropboxに作成したフォルダへコピー。

```
/Users/[ユーザー名]/Library/Application Support/Sublime Text 3/Packages

/Users/[ユーザー名]/Library/Application Support/Sublime Text 3/Installed Packages
```

元ファイルはフォルダ名を変更し、バックアップ用に保存。
※同じ名前があるとシンボリックリンクが設定されなかったので注意。

```
/Users/[ユーザー名]/Library/Application Support/Sublime Text 3/Packages(yyyymmdd_backup)

/Users/[ユーザー名]/Library/Application Support/Sublime Text 3/Installed Packages(yyyymmdd_backup)
```

## シンボリックリンクを設定する

以下ターミナルで次のコマンドを実行する。
それぞれのフォルダの間に、半角スペースを忘れずに入れる。

### Packagesフォルダにシンボリックリンクを設定する
```ruby:Terminal
ln -s /Users/[ユーザー名]/Dropbox/Sublime\ Text\ 3/Packages /Users/[ユーザー名]/Library/Application\ Support/Sublime\ Text\ 3/Packages
```

### Install Packagesフォルダにシンボリックリンクを設定する
```ruby:Terminal
ln -s /Users/[ユーザー名]/Dropbox/Sublime\ Text\ 3/Install\ Packages /Users/[ユーザー名]/Library/Application\ Support/Sublime\ Text\ 3/Install\ Packages
```

半角スペースの前にバックスラッシュ[ \ ]を入れる。
指定のフォルダをターミナルへドラッグ・アンド・ドロップするとパス入力されるので、間違いがなくなる。

## シンボリックリンクを作成されているか確認

シンボリックアイコンが付いていることが確認できれば、設定は完了。

```ruby:[shift+cmmand+G]で移動
~/Library/Application Support/Sublime Text 3/ # 任意のフォルダの場所へ移動
```
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/55848/3b80a7cd-452f-fb85-ddd1-73d9fc3862c0.jpeg)

コマンドで確認の場合は、こちら。

```ruby:Terminal
ln -la ~/hoge/

lrwxr-xr-x 1 hoge  hoge [シンボリックリンクを置くフォルダのパス]@ -> [シンボリックリンクを作成したいファイルのパス]
```
Krita 3.0 on CentOS 6.x

Krita 3.0 がリリースされましたね！

新機能も嬉しいですが、CentOS 6.x でも動くようになりました。やった。

https://krita.org/jp/download-jp/krita-desktop-jp/

にアクセスして、AppImage(OpenMPなし)版をダウンロードして、
ユーザーの実行権限（いわゆる755）をつければ動きますよ！
[Network]到達不可能なサービスへのアクセス

開発環境において、とある製品のサービスをホストしているサーバに、そのサーバが属するセグメントに到達できない別のセグメント上のクライアント（アプリ）からどうにかアクセスできるようにしたい、という難題を振られたときに捻り出した方法のメモ。

# 困っていた状況

```text:
クライアント --×-> サーバA
クライアント --○-> サーバB
サーバB --○-> サーバA
```

サービスをホストしているサーバAのIPアドレス（既知）は、別に立ててある認証サーバから認証後に通知される仕組みとなっていて、クライアント（アプリ）に通知されるIPアドレスをサーバBに偽装するのは困難だったため、サーバBからサーバAへポートフォワードする方式だけでは対応できず。。。

そこで、クライアントにVMを立てて、ポートフォワード → NAT → ポートフォワードと組み合わせたところ、無事サービスにアクセスできるようになった。

# うまくいった方法

```text:
クライアント(仮想NIC:サーバAと同じセグメントのIPアドレス)
----> クライアント内VM(仮想NIC1:サーバAのIPアドレス)
----> (サーバBへポートフォワード)
----> クライアント内VM(仮想NIC2:サーバBと同じセグメントのIPアドレス)
----> (NAT)
----> クライアント(物理NIC)
----> サーバB
----> (サーバAへポートフォワード)
----> サーバA
```

P.S. トイレの神様ありがとうございます。
CentOS 7にMaria DBとPHP 7.0を入れる

## 環境

- CentOS 7

## MariaDB

yumのリポジトリを追加

```vim:/etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
```

インストール

```
$ sudo yum install MariaDB-server MariaDB-client
```

サービスを有効化&起動

```
$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb
```

最小構成の設定ファイルをコピーして、文字コードを設定

```
$ sudo cp -p /usr/share/mysql/my-small.cnf /etc/my.cnf.d/server.cnf
```

```vim:/etc/my.cnf.d/server.cnf
[client]
default-character-set = utf8

[mysqld]
character-set-server = utf8
```

初期設定

```
$ sudo /usr/bin/mysql_secure_installation
```

## PHP 7.0

yumのリポジトリにepelとremiを追加

```bash:epel
$ sudo yum -y install epel-release
```
```bash:remi
$ wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ sudo rpm -ivh ./remi-release-7.rpm
```

インストール

```
$ sudo yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd
```

MariaDBと接続するドライバのインストール

```
$ sudo yum install --enablerepo=remi,remi-php70 php-mysqlnd
```

ドライバを認識してるか確認

```
$ php -r "phpinfo();" | grep -i PDO
/etc/php.d/20-pdo.ini,
/etc/php.d/30-pdo_mysql.ini,
/etc/php.d/30-pdo_sqlite.ini
API Extensions => mysqli,pdo_mysql
PDO
PDO support => enabled
PDO drivers => mysql, sqlite
pdo_mysql
PDO Driver for MySQL => enabled
pdo_mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
pdo_sqlite
PDO Driver for SQLite 3.x => enabled
```
Windows上でGitを使う準備をする

# Git for windowsのインストール
1. https://git-for-windows.github.io/ からダウンロードしてインストール
2. 聞かれたことにこたえる
    3. Select Components : デフォルトでOK
    4. Adjusting your PATH environment : 上の二つの選択肢のどちらかを選ぶ。（Git bashを使うことが前提だけど、上の二つのどちらかを選んでおけばGit bashが使えるから）
    5. Configuring the line ending conversions : "Checkout Windows-style, commit Unix-style line endings" を選ぶ。
6. インストール終了してGit bashが起動する。

# Git bashと戯れる
* 日本語フォントがちゃんと表示されるようにする
    * 上のバーを右クリックしてoptionsを選択し、Textタブでフォントの設定を変える。MSゴシックにすると日本語がキレイ目に表示されます。
* ホームディレクトリに移動する
    *  ```    
       % cd
       ```

    * デフォルトではルートディレクトリにいるはず。
       
* 基本的にgit bush & vimで日本語テキストもかけるし、日本語ファイルも作れるし、日本語コミットメッセージもかけます。問題なし。

# Gitの初期設定
* 名前とメールアドレスを設定する

   ```
   % git config --global user.name "First Last"
   % git config --global user.email "account@email.jp"
   ```
* Git status等で日本語が表示されるようにしておく

   ```
   % git config --global core.quotepath false
   ```

# Gitでちょっと遊ぶ
enputut2016にsandboxレポジトリを用意してます。自由に遊んでください。

```
 % git clone https://github.com/enpitut2016/sandbox.git
 % cd sandbox
```
* ファイルを適当に付け足したりとか
* ブランチを切ってみたりとか
* pull requestおくってみたりとか
* お好きなように。

# git bashからお好きなエディタでファイルを開くようにする
ここではsublime text 3を例にして説明します

* ホームディレクトリ下にbinディレクトリをつくり、そこにスクリプトを書いて保存しておく。とりあえず今の時点ではvimを使います。

```
% mkdir bin
% cd bin
% vim subl
 
```

* sablファイルに以下の２行を書いて保存する。

```
#!/bin/sh
"C:\Program Files\Sublime Text 3\sublime_text.exe" $1 &
```

* パスを通す。~/.bash_profileファイルを作って以下の１行を足して保存。

```
export PATH=$PATH:.:$HOME/bin
``` 

* 設定を有効にする

```
% source ~/.bash_profile
```

以上。これでgit bushからREADME.mdファイルをsublimeで開くようにするには以下のコマンドを打てば行けます。

```
% subl ~/sandbox/README.md
```
[Swift]UILabelでレタースペースのextension


UILabelを拡張する

Extension

```swift
extension UILabel {
    func addLetterSpacing(spacing:CGFloat, text:String) {
        let attributedString = NSMutableAttributedString(string: text)
        attributedString.addAttribute(NSKernAttributeName, value: spacing, range: NSMakeRange(0, text.characters.count))
        self.attributedText = attributedString
    }
}
```

use

```swift
mLabel.addLetterSpacing(5, text: "I love you!")
```
Qiita > 表 > 2行を1つのセルにする / 特定の文字の色付け / 表 in 表

http://qiita.com/YuseiUeno/items/7943b894b0b2a4503b68
にて表の記載について疑問が書かれていた。

~~こういうことだろうか。~~
(追記: コメントに記載の通り以下とは別と判明しました。)

## 2行を1行に

```
| A<br>B | C<br>D |
|:-:|:-:|
```

| A<br>B | C<br>D |
|:-:|:-:|

```
| <br>[msec] | +<br>3506 | -<br>3176 |
|:-:|:-:|:-:|
```

| <br>[msec] | +<br>3506 | -<br>3176 |
|:-:|:-:|:-:|

## 特定の文字を色つき

```
| <font color=red>A</font><br>B | C<br><font color=blue>D</font> |
|:-:|:-:|
```

| <font color=red>A</font><br>B | C<br><font color=blue>D</font> |
|:-:|:-:|

## 表 in 表

は無理そう。

```
| <tr><td>A</td><td>B</td></tr> | C<br>D |
|:-:|:-:|
|  |  |
```

| <tr><td>A</td><td>B</td></tr> | C<br>D |
|:-:|:-:|
|  |  |

## 表 in 表 v0.2

横線を入れることはできる。
使い道は思いつかない。

```
| AAAA<hr>BBBB | C<br>D | E<br>F |
|:-:|:-:|:-:|
```

| AAAA<hr>BBBB | C<br>D | E<br>F |
|:-:|:-:|:-:|

## 表 in 表 v1.0

@mt08 さんの[コメント (2016/07/07 03:55)](http://qiita.com/7of9/items/68aa808685119a025245#comment-d76472acaa234f5ddfa6)を参照ください。

これは使えそうです。
Vue.jsの入れ子のComponentで {{ Hoge.fuga }} を渡したいだけの人生だった。

# 前提

- 非同期通信で親子関係をもったリストをとりたい
- 今回は `DataBase` - `Table` みたいな親子関係でDataBaseのnameをキーにTable一覧をとるAPIを叩く想定
- 親(Hoge)のプロパティ(fuga)を子供に受け渡すことのみを命をかけている。


# 結論
これでうまくいきました。死んだ僕達の願いは後半に書いてます。

```js
var parent = Vue.extend({
    name: 'parent-component',
    template:
        '<li v-for="database in databases">' +
            '<child-component v-bind:database="database.name"></child-component>' +
        '</ul>'
    ,
    data: function () {
        return {
            databases: []
        }
    },
    created: function () {
        var that = this;
        axios.get('/database')
            .then(function (response) {
                that.databases = response.databases;
            });
    }
});

var child = Vue.extend({
    name: 'child-component',
    props: ['database'],
    template: 
      '<li v-for="table in tables">' +
          '<a href="#">{{ table.name }}</a>' +
      '</li>',
    data: function () {
        return { tables: [] }
    },
    created: function() {
        var that = this;
        axios.get('/database/' + that.database)
            .then(function (response) {
                that.tables = response.tables;
            });
    }
});

Vue.component('parent-component', parent);
Vue.component('child-component', child);
```

# ハマったところ

## 子コンポーネントへの値の渡し方

あれやこれや試して上記にたどりついた。
数々の死んだ俺たちを以下に残します。

### 1. 普通に渡してみた

```js
var parent = Vue.extend({
    name: 'parent-component',
    template:
        '<li v-for="database in databases">' +
            '<child-component database="{{ database.name }}"></child-component>' +
        '</ul>'
    ,
    ...
});
```

変更点は以下の行

```html
<child-component database="{{ database.name }}"></child-component>
```


こうすると、childのcreatedで `this.database` したときに `{{ database.name }}` ってそのまま出て儚くも私は散りました。



### 2. 子供から親を取得しようとした

```js
var child = Vue.extend({
    name: 'child-component',
    ...
    created: function() {
        var that = this;
        var databases = that.$parent.databases;
        // で？
    }
});
```

**で？**


### 3. なんかエラー出た系

child側の `props` 書かないと 

```
[Vue warn]: Attribute "v-bind:XXX" is ignored on component <xxx-xxx> because the component is a fragment instance: http://vuejs.org/guide/components.html#Fragment-Instance
```
 って怒られて最後の僕が死んだ結果、うまいこといきましたとさ。
Xamarin.Forms のバージョンを 1.2 から 2.3 に上げた時のエラー対処法


プロジェクトで使ってる Xamarin.Forms のバージョンを「1.2.3.6257」から「2.3.0.107」に上げたら、ビルドでエラーが発生するようになった。

ググッてみると、「Xamarin Studio を再起動」とか「ソリューションを開き直せ」とか書いてある。
ホンマかいな？と思いながら実施すると、確かになんか変化が。

エラーメッセージが変わっただけだけど。

> Error initializing task XamlG: Not registered task XamlG.

とか、

> Error initializing task FixedCreateCSharpManifestResourceName: Not registered task FixedCreateCSharpManifestResourceName.

調べたときに見た情報の中には .csproj ファイルがどーのこーの書いてあったので、開いてみると、何やら以前のバージョンが残ってた。

ので、その行を削除してソリューションを開き直し、ビルドしたらエラーはなくなった。

```xml:xxx.csproj
   <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
これ削除→  <Import Project="..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets')" />
   <Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
   <Import Project="..\packages\Xamarin.Forms.2.3.0.107\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.2.3.0.107\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+MonoTouch10+Xamarin.iOS10\Xamarin.Forms.targets')" />
```

エラーは、ね。

## 参考

* [Xamarin Studio がビルドエラーでビルドできなくなった話 | rksoftware](https://rksoftware.wordpress.com/2016/04/24/001-16/)
* [xamarin - error : Error initializing task XamlG: Not registered task XamlG - Stack Overflow](http://stackoverflow.com/questions/27873185/error-error-initializing-task-xamlg-not-registered-task-xamlg)
* [Error compiling Xamarin Forms new project - Stack Overflow](http://stackoverflow.com/questions/34501301/error-compiling-xamarin-forms-new-project)
ストアド 関数 テーブルを返す

テーブルを返す関数

```
CREATE  FUNCTION [dbo].[test_function]
(
     @param1    VARCHAR(MAX) ='' 
    ,@param2    VARCHAR(MAX) ='' 
)  
RETURNS @newTable TABLE
(
     no   INT
    ,name VARCHAR(20)
)
BEGIN 
    INSERT INTO @newTable VALUES( 1, '太郎' ) ;
    INSERT INTO @newTable VALUES( 2, '次郎' ) ;
    INSERT INTO @newTable VALUES( 3, '三郎' ) ;
   
    RETURN
END
```
Macでクリップボード内のXMLを整形してクリップボードに保存し直す

整形されてないXMLをフォーマットするとき、エディタのフォーマット機能使ってたけど、ちょっと見るだけなのに「ファイルを保存しないとフォーマットできない」とか「拡張子が違うからってフォーマットできない」とか怒られるのがめんどくさいのでクリップボードからクリップボードに移動させる方法を探してた。

クリップボードをやり取りするコマンド(pbcopy,pbpaste)はもともと知ってたんだけど、xmllintという神コマンドも知ってしまった。

# 準備
パスが通っている適当なところに`xmlformat.sh`を配置する。私は`~/bin/`に配置した。

```~/bin/xmlformat.sh
#!/bin/sh
pbpaste | xmllint --format - | pbcopy
```
コマンドの内容はこんな感じ

- #!/bin/sh - このファイルはシェルスクリプトだよって教える
- pbpaste - クリップボードから内容をペーストする
- |（パイプ） - 別のプログラムに入力に引き渡す
- xmllint - xmlのフォーマットに使用する
- --format - xmllintのオプション
- pbcopy - クリップボードにコピーする

`sh`コマンドを使わなくてもいいように実行権限を付与する

```
chmod +x ~/bin/xmlformat.sh
```

# 実行
整形されてないXMLをクリップボードにコピーしてから次のコマンドを実行する。

```
xmlformat.sh
```

これで、めでたく整形されたXMLがクリップボードに保存される。

# 参考(というかググってたらほぼそのものにたどり着いた)

[XMLを整形する - 文系プログラマによるTIPSブログ](http://www.bunkei-programmer.net/entry/20110927/p1)
Eclipse 用の Google Play Services Library のありか


# Eclipse 用の Google Play Services Library が見つからない
* Eclipse向けには、 [Google Play Services の Library project を Android アプリproject に追加](https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project) する必要がある
* だが、Google Play Services の revision 30 で、 libproject が[消えたらしい](http://stackoverflow.com/questions/37310684/missing-sdk-extras-google-google-play-services-libproject-folder-after-updat)
* なので、Android SDK Manager からはもう、ライブラリプロジェクトが入手できない

# 解決策
[前述のSOF](http://stackoverflow.com/questions/37310684/missing-sdk-extras-google-google-play-services-libproject-folder-after-updat)の回答に、答えがあります

* m2repository 内の aar ファイルから、jar ファイルを取り出す
 * こっちは試してない
* revision 28 を直接DL
 * https://dl-ssl.google.com/android/repository/google_play_services_8298000_r28.zip

# 結論
https://dl-ssl.google.com/android/repository/google_play_services_8298000_r28.zip からダウンロードして使う

# 蛇足
Eclipseプロジェクトは生きている
importを絶対パスで書く

**追記: 2016/7/6にこの記事を書きましたが、最近このあたりの知識更新できてないので内容が古くなっていると思います。** :bow: 

ES Modulesでjsを書いてると、相対パス地獄的なことになってきます。

```js
import baz from '../../../src/foo/bar/baz'
```

これをプロジェクトのルートからの絶対パスで書きたいわけですが方法はいくつかあります。

1. (babelを使っている場合) [babel-plugin-module-alias](https://github.com/tleunen/babel-plugin-module-alias)を使う
2. browserify, webpackの設定でやる
3. （他にもある？）

テストでjsをバンドルしない場合は1.にしておき、`mocha --compilers js:babel-core/register ...`とするとbabelが動き絶対パスが解決されるのでナイスです。

babel-plugin-module-aliasをインストールして、`.babelrc`に設定を追記すれば完了です。設定次第では深いところにあるモジュールを引っ張りだして別名で参照することもできます。

```js:.babelrc
{
  "plugins": [
    ["module-alias", [
      { "src": "./src", "expose": "src" }
//    { "src": "./src/foo/bar/blah/blah/baz", "expose": "bazu" }
    ]]
  ]
}
```

絶対パス！ :sparkles: 

```js
import baz from 'src/foo/bar/baz'
```

# ESLint, flowが文句を言うのですが

そのままだとESLintの`import/no-unresolved`ルールとflowがエラーを出すので、ESLintには見逃してもらい、flowにはパスを教えてあげます。

```js:.eslintrc
{
  "rules": {
    "import/no-unresolved": [2, { ignore: ['^src'] }]
  }
}
```

```ini:.flowconfig
[options]
module.name_mapper='^src/\(.*\)$' -> '<PROJECT_ROOT>/src/\1'
```

__追記__

ESLintでもモジュール解決できるようにする[eslint-import-resolver-babel-module-alias](https://github.com/tleunen/eslint-import-resolver-babel-module-alias)というのがありました :bow:
Objective-CのNSArrayリテラルはリテラルではない

NSArrayリテラルは

```objc
NSArray<NSNumber *> *array = @[@1, @2, @3, @4];
```
こういう奴です。

リテラルっていうと起動時に作られて終了するまで生きていると思ってしまいますが、NSArrayリテラルはそれが使われるときに都度作成されます。

```objc
- (BOOL)contins:(NSNumber *)number
{
    NSArray<NSNumber *> *array = @[@1, @2, @3, @4];
    return [array containsObject:number];
}
```

このコードのコンパイル後の疑似コードは以下のようになります。

```objc
- (BOOL)contins:(NSNumber *)number
{
    NSNumber *numbers[4];
    numbers[0] = [NSNumber numberWithInt:1];
    numbers[1] = [NSNumber numberWithInt:2];
    numbers[2] = [NSNumber numberWithInt:3];
    numbers[3] = [NSNumber numberWithInt:4];
    
    NSArray *array = [NSArray arrayWithObjects:numbers count:4];
    return [array containsObject:number];
}

```

`- contains:`が呼ばれるたびにNSArrayが生成されます。

すごく無駄なので複数回使う場合は生成が1回限りになるように工夫しましょう。

----

ここまで書いて

```objc
NSArray *const array = @[@1, @2, @3, @4];
```

とするとどうなるか調べる必要があることに気付いた。
たぶん変わらないと思うが。

追記：
　　const を付けても同じでした。