OmniAICreator/Qiita-1.07M huggingface dataset:
Unreal Engine Level design

#### [1 - Introduction](https://www.youtube.com/watch?v=I8WBF4AyAX4)

#### [2 - Geometry Layout](https://www.youtube.com/watch?v=woBMRKWX0qM)：建物の箱を作る。
+ Alt+オブジェクトの操作で、元オブジェクトを残したままそのコピーを操作する形になる。
+ オブジェクトの形状そのものを変更する場合、Modes->Geometory Editing
+ L+Clickでシーン中にPointLightを設置。これを右クリックしてPilotモードにすることで暗さを軽減できる。

#### [3 - Adding Windows and Doors](https://www.youtube.com/watch?v=6etfz1dwiYc)：ドアを作る。
+ 既存のGeometoryオブジェクトから一部分を削る。
 - Brush TypeをSubtractiveにしてGeometoryに重ねる。

#### [4 - Applying Materials to Geometry](https://www.youtube.com/watch?v=iAMVccdXm6o)：床や壁にテクスチャを適用する。
+ オブジェクトにMaterialをD&Dすることで適用できる。複数選択状態で行った場合は選択中のすべてに適用される。
 - 適当なオブジェクトDetails->BSP/Select->Select All Adjacent Surfacesで内部の壁を一度に選択可能。
 - Alignment->Align Surface Planar
 - Surface Propertiesで角度等の変更。

#### [5 - Adding Support Meshes](https://www.youtube.com/watch?v=ES5ikbj0Oew)：柱を設置していく。

#### [6 - Decorative Supports](https://www.youtube.com/watch?v=xxrydy8ZlV8)
+ 光源の位置調整。
+ 光源のAffetcts WorldをTrueにすることでPreviewシャドウが出る。
+ Ctrl+Gで選択中のオブジェクトをグループ化する。

#### [7 - Building the Glass Walls](https://www.youtube.com/watch?v=mYMcAawh7Cw)
+ 「ｔ」ボタンにより透明オブジェクトの選択を有効／無効にできる。無効中は透明オブジェクトは貫通してオブジェクトの選択を行う（Setting->Allow Translucent Selection）

#### [8 - Setup for the Sliding Door](https://www.youtube.com/watch?v=764a5dkzpZ8)：窓・天窓にガラスをはめこむ。ドアの準備。

#### [9 - Blueprint Doorway - Part 1](https://www.youtube.com/watch?v=URG3YNsUCQ8)
#### [10 - Blueprint Doorway - Part 2](https://www.youtube.com/watch?v=d2Ua6ncLcVY)
#### Level Blueprintを使用して自動ドアを実装する。
+ Alt+P:Play
+ Blueprints->Open Level BlueprintでLevel Blueprintを開く。
+ シーンでオブジェクトを選びながらEvent Graph中で右クリックすることにより、選択中のオブジェクトを対象としたイベントを生成可能。
+ Timelineは右クリックでキーを追加、縦・横値を中央上の２値で指定。キーを選択しながら右クリックでCubic等をグラフに設定可能。
+ 実際に動かしている最中にもBlueprintで処理フローがアニメーションで確認できる。
![timelien.PNG](https://qiita-image-store.s3.amazonaws.com/0/135051/1610532f-4c54-eb7b-ba35-3161df5424b7.png)

![eg1.PNG](https://qiita-image-store.s3.amazonaws.com/0/135051/32c92173-a7d5-ba63-c5a4-4b0840932679.png)

#### [11 - Adding Props and Lighting](https://www.youtube.com/watch?v=g7CTPS-5JsE)
+ Ctrl+Gで光の放射ギズモを消すことが可能。もしくはShow->Advance->Light RadiusをOFFにする。(Alt+R)
+ オブジェクトのDetails->Physics->Simulate Physicsでゲーム中のアクションに対しオブジェクトが物理挙動するようになる。
El Capitanで brew installとかbrew updateがこける！の解決方法

久々にhomebrew使ったらなんか調子悪くなってた
El CapitanにするとPermissionがどうのこうの、、あったなそういえば。。
  

```
$ sudo chown $(whoami):admin /usr/local
```
とか試してみて、brew updateはうまくいったけど、brew installがうまくいかない。
しょうがないのでbrewを一回アンインストールしてから再インストールしてみる


### まずはアンインストール
```
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
```

### そして次にインストール
```
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

直った。
Chef Serverのドメイン名を変更する

ハマったので備忘録。

# 環境
* CentOS-7-64bit ([CloudAtCost](cloudatcost.com)上のものを利用）

```bash:Terminal(ChefServer)
[root@chef-server etc]# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
```

* Chef Client version 12.12.19

# 状況
Chef Serverを入れたが、諸事情により途中でドメイン名を変えた。

* Before

```bash:Terminal(ChefServer)
$ hostname
chef-server.old
```

* After

```bash:Terminal(ChefServer)
$ hostname
chef-server.new
```


当然、Workstation上の`knife`コマンドはエラーを吐いて動かない（オレオレSSL証明書で認証できないため、cookbookがアップロードできない等の事象が発生）したため、Chef Serverの再設定をする必要があった。

## 手順

### 1. `chef-server.rb`の編集
[公式のDOCS](https://docs.chef.io/config_rb_server.html)にもあるように、まず`/etc/opscode/`以下の`chef-server.rb`を編集して、古いドメイン名を新しいドメインに置換する。

```bash:Terminal(ChefServer)
$ sed -i 's/chef-server.old/chef-server.new/g' /etc/opscode/chef-server.rb
```

### 2. 各種コマンドで`reconfigure`する。

Chef Server自体をまず再設定。

```bash:Terminal(ChefServer)
$ chef-server-ctl reconfigure
```

その後、Chefマネジメントコンソールの設定。コレをやらないと`knife.rb`の生成時などで、ドメイン名が古いままになってしまう。

```bash:Terminal(ChefServer)
$ chef-manage-ctl reconfigure
```

私の場合、[Reporting](https://docs.chef.io/install_reporting.html) も入っていたのでこちらも実行する。`/etc/opscode-reporting/pedant_config.rb`がアップデートされる。

```bash:Terminal(ChefServer)
$ opscode-reporting-ctl reconfigure
```

### 3. Chef Serverを再起動

そのままChef ServerのWebのUIにアクセスしても500エラーになってしまうので、きちんと再起動する。

```bash:Terminal(ChefServer)
$ chef-server-ctl restart
```

### 4. Chef Server の WebUIにアクセスして動作確認

下記にアクセスして動くことを確認。
`https://chef-server.new/login`

### 5. その他
あとはWorkstation側の作業。
knife.rbを更新したり、SSL更新したりする。

```bash:Terminal(Workstation)
# SSL証明書の取得
$ knife ssl fetch

# SSL証明書のチェック
$ knife ssl check

# あとは操作ができるはず
$ knife upload cookbook hogehoge
```
都知事選もあったことだし、政治APIで遊んでみるwith React.js

どうも、ヒロです！
都知事選、終わってしまいましたね。
僕は都民ではないので関係ないのですが、折角盛り上がっている(？)のでそれに便乗して政治APIを使って何か作って見ました。

ちなみに今回作った物のコードは[こちらにあります！](https://github.com/takahiro-saeki/react-politicians-library)

##今回作った物
こんな感じの物を作りました。
<img width="426" alt="4.png" src="https://qiita-image-store.s3.amazonaws.com/0/79274/73adcef6-10cd-ebbe-de5c-8091566d7c11.png">
<img width="447" alt="2.png" src="https://qiita-image-store.s3.amazonaws.com/0/79274/f3a1f212-b509-adae-f14c-d35bf4e1f06e.png">
<img width="454" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/79274/000b9bd3-d44c-40b7-c196-7f9a552535d1.png">

簡単に説明すると、[Seiji.kpi-net.comのAPI](http://seiji.kpi-net.com/seiji.html)を使用して政治家の情報をまとめて見れる物です。
衆議院議員、参議院議員等の種別を選択し、政党名を選択し、検索するボタンを押すと該当している政治家の一覧と件数が閲覧できるという物です。

##苦労した点
APIにリクエストをした際、jsonらしき配列が返って来ているのにjsonではないっぽい何かでオブジェクトに変換するの辛い、、、と悩んでいたらピッタリの記事に遭遇し助けられました。本当凄い、、、！

[JSONらしき文字列をオブジェクトに変換するJavaScript](http://hamalog.tumblr.com/post/4047826621/json%E3%82%89%E3%81%97%E3%81%8D%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8Bjavascript)

ちなみに該当部分のコードを抜粋

```js:assets/js/container/Result.jsx
...
const data = res.text.replace(/\r?\n/g,"").trim();
const politicians = (new Function("return " + data))();
...
```

あとはいつも通りな感じで実装しました。コード見て頂いた方が早いかもしれませんヾ(´ε `;)ゝ

##小技
小技というよりも[react-router](https://github.com/reactjs/react-router)のドキュメント見てもらうと書いてあるのですが、urlのパラメーターは`this.props.params`で取得することが出来ます。

```js:assets/js/common.js
import React, {Component} from 'react';
import {render} from 'react-dom';
import Main from './container/Main';
import Result from './container/Result';
import {Router, Route, browserHistory} from 'react-router';
import injectTapEventPlugin from 'react-tap-event-plugin';
injectTapEventPlugin();

render(
  <Router history={browserHistory}>
    <Route path='/' component={Main} />
    <Route path='/:type' component={Result} /> //ここのことです。
  </Router>,
  document.getElementById('app')
)
```

```js:assets/js/container/Result.jsx
typeCheck() {
    switch(this.props.params.type) {
      case '1':
      return '衆議院議員'
      case '2':
      return '参議院議員'
      case '3':
      return '知事'
      case '4':
      return '市長'
      case '5':
      return '区長'
      case '6':
      return '町長'
      case '7':
      return '村長'
      default:
      return '不正な値です'
    }
  }
```

今回はこのような感じで処理を分岐していました。

##感想
[前回](http://qiita.com/hirodeath/items/da481490e1edf162336a)、wp-rest-apiを使った簡単なサンプルを作った際に、もう少しAPI使って遊びたいなーと思ったので今回も勢いで作ってみました。

オープンAPIで何か作るという経験があまりなかったので今回も刺激的でした。また何か作ってみたいと思います。
Vim入門

# Vimとは
テキストエディタの1つ。
UNIX系OSで設定ファイルの編集からシステム開発まで利用されるテキストエディタである。
設定ファイルの編集やプログラムを書くのに特化した高性能なテキストエディタ。


---

# vimの特徴

テキストエディタ上の移動・編集・ファイル操作などその殆どを独自のコマンドにて操作することが可能。
慣れるとマウスを一切使わずに、コマンドだけで高速にテキスト編集が出来る。
vimには、モードという概念がある。



---

### vimのモード
---

vimでは、
ある作業Aを行うためにモードAに切り替え、
ある作業Bを行うためにモードBに切り替え、
というように、いくつかのモードを切替えながら編集作業を行う。

---
## 図で書くと
![534-201-t.png](https://qiita-image-store.s3.amazonaws.com/0/84937/b4925dd8-b3f8-0125-b46b-745028314c4e.png)

---

### ノーマルモード
---

$ vim a.txt
で、起動直後のVimは、「ノーマルモード」というモード。
例:テキストのコピー、ペースト。

```
y ヤンク(コピー)
p ペースト
```

基本、他のモードへの移行は、このノーマルモードから移動する。

---

### 挿入モード
---

文字を入力したいときは「ノーマルモード」から「挿入モード」に移行する必要がある。
挿入モードへの行き方は、色々あるが、
例えば「ノーマルモード」で「i」をタイプすると「挿入モード」になる。
![hoge7.png](https://qiita-image-store.s3.amazonaws.com/0/84937/3445f0b8-0ba0-1e31-9302-42da02afdfd9.png)

文字入力で、テキスト編集が可能。

---
### コマンドモード
---

「ノーマルモード」で「:」を入力すると、「コマンドモード」になる。
コマンドの実行によるファイルの保存やテキストの置換を行う。

```
:s/置換したい文字/置換後の文字/g
```

---
### ビジュアルモード
---

「ビジュアルモード」に入ることで、
Windows用エディタの `Shift` を押しながら文字を選択するように 文字単位で選択したりすることもできる。
Vimには3つのビジュアルモードがある。

---
## 3つのビジュアルモード
| コマンド |  |
|:-----------:|:------------:|
| v | 文字単位で選択 |
| Shift-v | 行単位で選択 |
| Ctrl-v | 矩形で選択 | 

---

 `Ctrl-v` 矩形で選択して、編集を行う利用例を紹介します。
矩形選択後、テキスト編集を行います。

---

### 利用例を紹介
---

 テキストファイルhoge.txtを作成。

![hoge2.png](https://qiita-image-store.s3.amazonaws.com/0/84937/3ab8f933-616c-b461-503f-dee5f0cd5620.png)

---

`hoge1~3` を `my_hoge` に修正したくなった！
ビジュアルモードを使用すれば、矩形選択後に一気に修正をすることができる。

---

まずは、ノーマルモードから、ビジュアルモードの矩形選択モードへ移行する。
ノーマルモードの状態で、 `Ctrl-v` を入力。
カーソルを移動して、 変換したい部分を全て覆う。

---

![hoge 選択.png](https://qiita-image-store.s3.amazonaws.com/0/84937/4618506b-d1d5-d89f-5f6e-0af29c4dacff.png)

---

`shift-i` を入力し、挿入モードに入り、先頭に `my_` を入力。
![hoge4.png](https://qiita-image-store.s3.amazonaws.com/0/84937/506646d8-28a2-a653-ec97-6938ef7301f1.png)

---
入力後、挿入モードを抜けます(escキー)
挿入モードから、ノーマルモードに戻ると変換されます。

![変換.png](https://qiita-image-store.s3.amazonaws.com/0/84937/2b16814a-b976-10a3-7357-2c6a9d89d957.png)


`hoge` が `my_hoge` に一括で変換できました。

---
### 利用例完
---
### まとめ

---
使い方に慣れれば、テキストの編集が楽になります。(僕はまだまだです)
ほんの1例を紹介しましたが、vimを使えば、色々すごいことができます（調べてください）。
次回以降、便利なコマンドとかを紹介できればと思います。(調べておきます)
ブラウザで簡単に画像合成

### WEB 画像合成ツール ver.3 対応ブラウザ: Chrome　[こちら](http://pie.karou.jp/w.html)

円形グラデーションで画像をぼかして合成します

![index.jpg](https://qiita-image-store.s3.amazonaws.com/0/54926/c231c64d-c229-bdcb-8e94-f8c51bcc3b6a.jpeg)

使用ライブラリ
jQuery
jCanvas　レイヤー機能などで利用
paste.js　クリップボードから画像を貼り付けるために利用
Colorcurve.js　トーンカーブで利用
AIXではdateコマンドでは自由に日付が操作できない	



#概要
　AIXではInfocenterに記載の通り-dオプションがない
　よって、翌日や前日、ある指定した日からのニッス計算が実施できない
　https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_53/com.ibm.aix.cmds/doc/aixcmds2/date.htm
　
　
#解決策
　perlを利用する

```
　perl -e 'my $delay = 3600;my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time + $delay);printf "%02d%02d%02d%02d\n",$mon,$mday,$hour,$min'
```
　
#詳細
　AIXはデフォルトでperlがインストールされるため、perlは全環境で利用できる。
　perlのlocaltime関数を利用することで現在時刻を取得できるため、そこに秒数を指定することで、時刻を調整できる。
Python の実行を Ctrl-C で終了させる（SIGINTに反応する）


Python で重い計算を一度実行すると Ctrl-C でなかなか止まらなくて困ることがある:

```bash
$ python3 cext09.py
^C^C^C^C^C^C # 止まらない
```

Ctrl-Z は効くので、それで中断して kill するという手はある:

```bash
^Z
zsh: suspended  python3 cext09.py
$ jobs
[1]  - running    emacs cext09.c
[2]  + suspended  python3 cext09.py
$ kill %2
[2]  + terminated  python3 cext09.py
```

これは面倒だし、間違ったものを kill するかもしれない。

## signal

これを Python スクリプトに書いておけばOK。

```python
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
```
Go製EC2 Run Commandクライアント: runss

EC2 Run Commandを使い始めたのでシンプルなクライアントをさかしてみたんですが、単一バイナリのクライアントが見つからなかったのでGoで実装しました。

https://github.com/winebarrel/runss

EC2(Linux)でコマンドをたたいて結果を取得するだけの単純なコマンドです。

# インストール

```
brew install https://raw.githubusercontent.com/winebarrel/runss/master/homebrew/runss.rb
```

# 使い方

```
$ runss -command "echo HELLO 1>&2; echo world!" -instance-ids i-123456789
- InstanceId: i-123456789
  Status: Success
  Output: |
    world!

    ----------ERROR-------
    HELLO

```

カンマ区切りのリストで複数のインスタンスを指定可能です。

```
$ runss -command "..." -instance-ids i-123456789,i-999999999
...
```
プロジェクトでやったらいけないと思うこと

# このページについて
炎上してたり、うまく回っていなかったりなプロジェクトを色々見てきて、
こんなことやってるから上手くいかないんじゃないの？と思ったことを書いていくページです。

## 何事にも期限がない
日々のタスク、課題、QAなど、すべてにおいて期限がないプロジェクト。
どうやって説明しているのか不明ですが、こういうプロジェクトも存在します。
この場合、期限がないため能力的にコーディングが遅かろうが、不具合多発で修正に時間がかかろうが、
残業する理由がないため、残業してまで頑張ってくれるようなエンジニアは希少種なもんで、
確実に工程が後ろに倒れていき失敗します。

どんなものにも期日は必ず設定（少し厳しめの方がパフォーマンスは上がる）しましょう。

## 仕様が二転三転する
アジャイルであれば、変更を受け入れながら開発する（変更する場合は、他の機能を切り捨てるなどの交渉が発生する）ので、対象外。
ここではウォータフォールが対象です。
仕様が二転三転すると何が起こるかというと、仕様を決定する側の信用がなくなる&開発者のモチベーションが下がります。
後者は生産性に直結し、前者については、開発者が言うことを聞かなくなる可能性をはらんでいます。
特に問題なのが前者の信用をなくすというもので、
プロジェクト失敗の槍玉にあげられるなどの二次的被害が発生し、精神的な問題でプロジェクトから退場する可能性が上がるように感じています。
プロジェクトから退場することで、仕様を曲がりなりにも抑えていたお方を失うことになり、
引き継ぎもままならぬ状態で代役を立てないといけなくなるため、さらなる泥沼化になる可能性があります。（変わった人が超有能で立て直すパターンもありますが、それは稀）

仕様が二転三転すると色々な箇所に火種が生まれるので、基本的には仕様が確定する前は作業させないのが吉です。
（そうもいかないことがあることも承知していますが）

## YESマン
顧客に言われたことは絶対なのか、単にソフトの作りが判っていないのか不明ですが、
顧客に言われたことをすべて飲んでしまうような調整をすると破綻します。

顧客と仕様の調整をする人は、ソフトウェアがどのような作りか把握しておく（開発者へのヒアリングでも良いでしょう）ことは必須です。
現状のソフトの作りと１８０°違うような仕様変更を受け入れれば開発者の怒りを買い、信用&やる気低下による生産性低下を招きます。
客も鬼ではない場合がほとんどなので、ソフトの作り的に工数がかかる場合は、交渉しましょう。
交渉した結果、時間がかかりすぎる場合は、しょうがないからこのまま行くかということもありますし、
MUSTだから工数上乗せしてでもやってくださいということになります。

## 意思決定者がいない
誰も仕様を決めない、決めれない、責任を取る気がないのか、自信がないのか不明な状態です。
上記ができないようなオーナーは害悪なので、正直退場していただきたいですね。

## 使ったことのないフレームワークを使う
個人的には使ったって良いと思うけど、それは業務外で十二分に勉強したらです。
たいていのものは初見だとハマりポイントがあり、リリースまでに地雷をほぼすべて踏むと思います。
（僕もこれをやって、ほぼ全部地雷を踏みました。。規模大きくなかったから何とかなったけど大規模なら死亡してたよ確実に。。。）

実戦投入したことのないフレームワークは一通り使ってから実戦投入しましょう。
（最初に試せる工数を確保できるなら、それでもOK。ただ、本当の地雷は本気で使い込むような状況（仕事）でないとなかなか判らないです)

## 環境作れる人がいない
特にUnix系。
環境を作れる人が一人でもいると開発者のレベルがう〜ん。。な感じでも割となんとかなってしまうというのがあります。
これは、WindowsならWindowsのソフトばかりやってきた技術者、LinuxならLinuxばかりやってきた技術者、OSごとにある程度ハマりポイントが同じなため地雷を踏むことを防げるからです。
※アプリを作る人はインフラ周りはとりあえず、環境を作れる人のアドバイスをもらいながら（ハマりポイントが分かっているから）組めば、あまり事故なくものが作れてしまう。
逆にアプリを乗っけるOSに環境構築できる人間がいないと、結合テストや総合テストで思わぬ事故に遭う確率が上がります。

## ある一定以上のプログラマに普段やらないようなコードを書かせるような方式設計をしている
これは地雷を踏む可能性が格段に上がると思っています。
（自分で言うのもナンですが、Javaだったらそれなりのレベルです！と思ってます）
ある程度のレベルのプログラマは地雷を無意識のうちに避けながらプログラムを書いています。
（一流の人は、ほとんど地雷を知ってて避けている感じがしますが。）
そのレベルの人たちに、この方法はヤバいんじゃないかな〜？と思わせるようなものを書かせることは、
単体、結合レベルでは問題なくても、システムテストで負荷をかけた時に大概よくない結果を招きます。

数値で示せとか、問題が出てから考えるという人がおられますが、
こう言う部分は結果云々よりも彼らの経験に耳を傾けた方が良いと思います。
（たいてい問題が発生するので）

## その他
何か他にもあったら（思い出したら）書きます。
Azureの無料試用期間終了後に無料オプションを使う Part-2

以下に記載があるApp Serviceを無料で使ってみようと思います。
https://azure.microsoft.com/ja-jp/free/pricing-offers/

10個までかつディスク容量1Gまで無料で使えそうです。
https://azure.microsoft.com/ja-jp/pricing/details/app-service/

関連ページ
[Azureの無料試用期間終了後に無料オプションを使う Part-1](http://qiita.com/tworks55/items/f5158181e584a52b5242)
***
#リソースグループを日本で作成
まずリソースグループを日本で作成するので、リソースグループを選択後、追加ボタンをクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/48b092c6-ea7e-4396-1588-15ee2e14e428.png)


リソースグループ名は自分で分かりやすいものにし、リソースのグループの場所を東日本もしくは西日本にします。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/67fab2ca-ec58-2d2a-abe7-22e347faa729.png)


#App Serviceを無料インスタンスで作成
App Serviceを選択後、追加をクリック。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/0a1442ec-6b09-5dea-a584-bc992da6d2a4.png)


アプリ名はAzure上でユニークになる名前を付ける必要があります。
リソースグループは先ほど作成した物を使用し、App Serviceプラン/場所については新規作成します。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/623f1ad0-063b-38b1-8d72-a7eeff68d06a.png)


App Serviceプランも分かりやすい名前を付け、場所はJapan EastもしくはJapan Westを選択します。
デフォルトは価格レベルがS1になっており、課金されてしまうため変更します。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/063191eb-d8f2-ab41-b126-a13efe431219.png)


価格レベルを選択する際、おすすめ表示の場合は有料インスタンスしか表示されませんので、すべて表示をクリックします。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/0ee82946-4415-e636-90c1-033b36e54832.png)


無料インスタンスF1は一番下までスクロールしないと表示されません。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/2cbbe9f2-c15f-cf4e-a4ce-305bce597fdb.png)


無料インスタンスでアプリを作成します。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/3adba2a5-dcda-6b23-edb5-729a3ddc262d.png)



作成されたアプリのプランを確認すると(Free)と表示されています。
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/de80c0de-1fb0-df2d-f226-e539d011caff.png)


#サブスクリプションの状況確認
しばらくしてからサブスクリプションを確認しましたが課金状況に変化はありませんでした。
（私の場合は[Part-1](http://qiita.com/tworks55/items/f5158181e584a52b5242)でも記載しましたがサブスクリプションをアップグレードした時点で課金されてしまったので、現在の料金に17円が表示されています。)
![image](https://qiita-image-store.s3.amazonaws.com/0/131481/52bb8e02-b4dc-4089-e90c-931a4079c8cc.png)
JavaScriptのビット演算と符号についてのメモ

JavaScriptでビット演算をする時に、
整数の仕様などが意外と頭に入っていなかったので、勉強したことをメモしておく。

# 整数の最大値

安全に計算できるのは、`2^53 - 1`までで、それ以上の数字は誤差が出る。

これはJavaScriptの整数が、普通の言語のInt型とかではなくて、浮動小数点で計算されているから。
最大値は [Number.MAX_SAFE_INTEGER](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER) で取得できる。

# ビット演算

ビット演算に限っては32Bitで計算される。
なので、ビット演算を行っていなかった時には保存できていた、32Bit以上の値は、
ビット演算を行った時点で切り捨てられる。

# ビット演算と符号

ビット演算の結果は、符号あり32Bitの整数として扱われるが、
符号なしの32Bit整数(intじゃなくてunsigned int)として扱いたい時があると思う。
その場合は、` number >>> 0 ` とすると、32Bit符号なし整数としての値が取得できる。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators
Java9のREPLをVagrantで試してみた


ローカルのファイル整理をしてたら前書いたメモが出てきたのでゆるい感じで投稿するよ

## Vagrantfile
```Ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.provider :virtualbox do |vbox|
    vbox.name = 'jshell'
  end
  
  config.vm.box = 'CentOS6.5'
  config.vm.box_url = 'https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box'
  
  config.vm.provision :shell, :path => 'setup.sh'
end
```

## setup.sh
```Shell
yum install -y wget

cd /tmp

wget http://download.java.net/java/jdk9/archive/108/binaries/jdk-9-ea+108_linux-x64_bin.tar.gz

tar xfz jdk-9-ea+108_linux-x64_bin.tar.gz

wget https://adopt-openjdk.ci.cloudbees.com/view/OpenJDK/job/langtools-1.9-linux-x86_64-kulla-dev/lastBuild/artifact/kulla--20160801005840.jar

echo "alias jshell='/tmp/jdk-9/bin/java -jar /tmp/kulla--20160801005840.jar'" > ~vagrant/.bashrc
```

もし`kulla--20160801005840.jar`が無かった場合は、[URLのartifact/の部分までのアドレス](https://adopt-openjdk.ci.cloudbees.com/view/OpenJDK/job/langtools-1.9-linux-x86_64-kulla-dev/lastBuild/artifact/)でJenkinsにアクセスしてビルド番号？を確認してね

## 実行
### VagrantにSSHするまで
Vagrantの出力は略

```Shell
$ ls
Vagrantfile setup.sh

$ vagrant up --provision

$ vagrant ssh
```

### jshell起動
起動時の出力は略

```Shell
% jshell
```

#### お約束
```
-> System.out.println("Hello")
Hello
```

#### Tabで補完が出来る
```
-> System.out.print
print(     printf(    println(   
```

#### 変数定義も出来るし、それらのTab補完も出来る
```
-> String serverName = "hostxxx"
|  Added variable serverName of type String with initial value "hostxxx"

-> String serverStatus = "ok"
|  Added variable serverStatus of type String with initial value "ok"

-> server
serverName     serverStatus   
```

#### 評価した値は一時変数みたいなのに入る
```
-> "java"
|  Expression value is: "java"
|    assigned to temporary variable $5 of type String

-> $5 + "9"
|  Expression value is: "java9"
|    assigned to temporary variable $6 of type String

-> $6
|  Variable $6 of type String has value "java9"
```

#### Importもできるし、してあればTabで補完できる
```
-> import java.util.stream.Stream

-> import java.util.stream.Coll
Collector    Collectors   

-> import java.util.stream.Collectors

-> Stream.of(1, 2, 3, 4, 5).filter(n -> n != 3).map(n -> n * 2).col(
collect(   

-> Stream.of(1, 2, 3, 4, 5).filter(n -> n != 3).map(n -> n * 2).collect(Coll
Collection    Collections   Collectors    

-> Stream.of(1, 2, 3, 4, 5).filter(n -> n != 3).map(n -> n * 2).collect(Collectors.toList())
|  Expression value is: [2, 4, 8, 10]
|    assigned to temporary variable $10 of type List<Integer>
```

## 感想
+ Tab補完効くのはかなり好印象
 + Pythonは効かなかった様な
 + Haskellは効くよね
 + Scalaはどうだったっけ
+ 出力がなんかいちいちうっおとしいw
 + ただ値評価しただけで長々と文が出るから、毎回「ん？例外？」って思っちゃうｗ
[さくらのクラウド]Docker最新版をインストールするスタートアップスクリプト

最近になって俄然Dockerに興味がでてきた私です。
Docker最新版をインストールするスタートアップスクリプトを書きました。

```
#!/bin/sh
# @sacloud-once
# @sacloud-desc (このスクリプトは、Ubuntu14.04.04でのみ動作確認しています)
apt-get -y install curl
curl -sSL https://get.docker.com/ | sh
service docker start
```

み、短い。

最初はapt-getで入れる手順だったので長かったんですが
curlで入れる手順にしたらめちゃめちゃ短くなりました。。

基本的にはUbuntu14.04系用ですが、16.04系でも動くことは動くようです--;
でもそれってserviceコマンドをsystemctlにリダイレクトしてくれてるだけだと思うんで
ちゃんとやるならバージョンによって分岐するように書きたいところ。

あとはdocker-composeも一緒に入るように書きたい。
そこはいい感じにしてもらおう。。
キーボードで記号がめっちゃ入力しやすくなる強化版Dvorak配列作った



##変更履歴

### （16/08/13）Mac用のキー配列設定ファイルを追加しました。
### (18/11/13) 画像がリンク切れしていたので再アップしました。
### (18/12/01)Karabiner-Elementsの設定ファイルへのリンクを追加しました。


##記号は打ちづらい

プログラムを組んでいると、とにかく大量の記号を打ちます。

* 配列やリストを作る[]
* 行末の;(セミコロン)
* 全ての言語でどこにでも現れる()
* JQueryの$地獄。。。

等等……

ソースコードはこんなにも記号に溢れているのに、記号はとにかく打ちづらい。
人間の手の構造は、SHIFTを押しながら数字キーを押したり、右小指を目一杯伸ばして[]を押したりするのには、あまりに不器用すぎます。

そこで、ほとんどホームポジションから手を離さずに記号を打てる配列を考えました。
改良を重ねつつ１年ほど使っておりますが、最近は全くストレスなく記号を打つことができます。
他の方にとっても役に立つこともあろうかと思って晒すことにしました。
その配列がこちらです。

![キーボード配列.png](https://qiita-image-store.s3.amazonaws.com/0/98709/49d9a1ba-b8bd-6727-27bf-7dd42281c9ef.png "キーボード配列.png")


この配列のポイントは２つです。
**ベースはDvorak配列**
**記号を打つにはSymbol修飾キー**

###ポイント1. ベースはDvorak配列

Dvorak配列とは、伝統的なキーボード配列（QWERTY配列）があまりに打ちづらいことを嘆いたDvorakさんが発明した配列です。

* 左手に母音、右手に子音を集めることで、左右交互にタイピングできる
* 出現頻度の高いキーほど打ちやすい場所にある

という特徴から、アルファベットが非常に打ちやすい配列になっています。
タイピングコンテストの世界チャンプがDvorak配列を使用していたことはあまりに有名ですね。
 なお、上記の配列は本来のDvorak配列とは異なる点があります。この差異に関しては、補足にまとめましたので、そちらを御覧ください。 

###ポイント2. 記号を打つにはSymbol修飾キー

非常に使いやすいDvorak配列ですが、残念ながら打ちやすくなるのはアルファベットだけで、ごく一部の記号を除いては、記号の打ちづらさが改善していません。

そもそもなぜ記号が打ちづらいかと言うと、「大文字も記号もShiftキーを使って出力する」という前提があるからです。
アルファベットだけで26文字もあるのですから、これでは記号が端っこに追いやられるのは必然の理です。

そこで登場するのがSymbolキーです。
Shiftキーの代わりにSymbolキーを押しながら各キーを押すと、下図の右上の記号を出力することができます（記号にフォーカスするためアルファベットは省略しています）。


![キーボード配列_記号のみ.png](https://qiita-image-store.s3.amazonaws.com/0/98709/72f0412d-e595-958f-24b3-3366d786fdea.png "キーボード配列_記号のみ.png")


Symbolキーを使うことにより、以下の利点が得られます。

* ホームポジションから殆ど手を動かさずに全記号を入力可能。
* SymbolキーはShiftよりも押しやすく、右手小指の負担が減る。
* Symbolキーより右にあるキーを押す必要がない。右手小指の負担がますます減る。
* 単体で記号を出力するキー（ハイフン等）とShiftキーの組み合わせが空くため、ここに好きなショートカットを割り振ることができる。

さて、ではどうやってSymbolキーを実装するのかという点ですが、MacではKarabiner-Elements、WindowsではAutohotkey、Linuxではxmodmapというソフトで実装可能です。
Karabiner-Elementsでの設定ファイルは[こちら](https://github.com/mizunowanko/Symvorak/blob/SymbolOnly/alphabet_special.json)にございます。
このファイルはJISキーボードでのみ動作確認しておりますので、USキーボードだとkey_codeを微修正する必要があるかもしれません。ご注意ください。

## 最後に

正直個人的には、もうSymbolキーがなければ生きていけないレベルになっています。
シフトキーを押しながら数字キーを押すとか、そんな拷問には耐えられません。
プログラマはどこまで行っても記号から逃れることはできませんので、タイピングをもっと効率化したいと思っている方は、ぜひお試しください。

##補足1. Dvorakとの差異
私の使用している配列は、オリジナルのDvorakとは一部配列が異なります。
「なぜ本家と違うんだ」と訝る方もいらっしゃると思いますので、一応理由を説明します。

###理由1. 出現頻度の高い子音が左手にあると打ちづらい
右手だけで全ての子音をカバーできないため、本家Dvorakでは子音のうち「P, Y, Q, J, K, X」は左手で打つことになっています。
しかし左右交互に打つリズムが崩れると、想像以上に打ちづらいものです。
（半母音のYを除くと）PとKの２つはこの中では比較的出現頻度が高いため、私はこの2つのキーを押すたびにイライラしていました。
そこでPとKを右手に移動し、代わりに頻度の低いZを持ってきました。

###理由2. Yをもっと打ちやすくあるべき
Yは半母音なので出現頻度が相当高いのですが、奥まった場所にあって、打ちやすくありません。
Pの場所が空いたので、出現頻度の高いYをここに置き、もとYがあった場所にZを置きました。

###理由3. Symbolキーとの兼ね合い
Symbolキーを導入することで、記号の配列を一新しましたので、それに伴って記号関係は殆ど変えてあります。

##補足2. 記号の配列について
正直に言って、最適な記号の配列は人によって異なります。
文末にセミコロンをつけるかどうかで、セミコロンの位置を変える等しても良いでしょう。
せっかく各OSともに簡単にキーマップを変えられるソフトがありますので、ぜひ自分だけの記号配列を作ってみてください。
awkで平均・カウントの集計

awkを使えば平均やカウントを簡単に集計できる。
例えば、

```sample1.txt
１0 10
15  5
 3 12
```

というデータがあったときに、行の合計値を出すには、

```sample1.awk
$cat sample1.txt | awk '{print $1+$2}'
20
20
15
```

とすればOK。行の合計値が20以上の行だけを抽出するには、

```sample2.awk
cat sample1.txt | awk '{if($1+$2>=20) print $0}'
10 10
15  5
```

とすればOK。次のようにすれば、行の中での比率を算出することも可能。

```sample3.awk
cat sample1.txt | awk '{print $1/($1+$2) " " $2/($1+$2)}'
0.5 0.5
0.8 0.2
0.2 0.8
```

1列目の比率が0.8以上の行だけを抽出するには、

```sample4.awk
cat sample1.txt | awk '{if($1/($1+$2) >= 0.8) print $0}'
20  5
```

とすればOK。さらに、sortと組み合わせれば、

```sample5.awk
cat sample1.txt | awk '{print $0" "$1/($1+$2)}' | sort -k3 -nr
20  5 0.8
10 10 0.5
 3 12 0.2
```

のように１行目の比率でソートすることも可能。
OpenCVのstructured-lightを流用して3Dスキャン

# 背景
OpenCV3.1.0(?)からstructured-lightというコードが追加されたようです。
これは、2台のカメラと1台のプロジェクターからなる3Dスキャン用のプログラムだと思いました。
これを改造して1台のカメラと1台のプロジェクターで3次元復元できるようなプログラムを作ってみました。
（ただし、撮影処理自体はプログラムに含まれていません。あらかじめ撮影された画像に対して処理するプログラムです。）


# 前提知識（この記事で説明を省略する内容）
- カメラキャリブレーション
- プロジェクターのキャリブレーション
- グレーコードのエンコード／デコード
- 三角測量
- 使用ライブラリ／ソフトのインストール方法


# 実行環境

- windows 8.1（64ビット）
- Microsoft Visual Studio Express 2013 for Windows Desktop
- OpenCV 3.1.0
- プロジェクター
- カメラ


# 作業＆処理の流れ
1. カメラとプロジェクターのキャリブレーション
2. グレーコードパターンを対象物体に投影して撮影する
3. 撮影画像をデコード
4. デコード結果とキャリブレーション結果から三角測量






## 1. カメラとプロジェクターのキャリブレーション
キャリブレーションは以下のページの方法で行いました。
http://qiita.com/nn_tok/items/852e1a7d4d9a1e7d5075


## 2. グレーコードパターンを対象物体に投影して撮影する

グレーコードパターンはバイナリ―パターン光をちょっと賢くしたくらいの認識です。
バイナリ―パターン光について雑に説明すると白黒の縞模様です。パターンは複数種類あります。
全パターンを投影して、光が当たったか当たってないかで0、1のビット列を生成して、
そのビット列に基づいてプロジェクターのどの画素座標と対応しているかを計算します。
全パターンを投影して撮影するので、デコード画像を生成するには、複数枚の画像を撮影する必要があります。

グレーコードパターンを生成するプログラムは以下です。
（グレーコードパターンのエンコードもデコードもOpenCVで実装されている関数を呼び出しているだけです）
https://github.com/kibekibe/structured_light/blob/master/gray_code/main_encode.cpp

実行すると様々な縞模様が出力されます。

![gray_pat.jpg](https://qiita-image-store.s3.amazonaws.com/0/122887/0f64c97f-81c8-0258-1250-0f35c8ae7d5f.jpeg)



これらのパターンを被写体に投光します。
以下は撮影画像の一例。

![gray_cap.jpg](https://qiita-image-store.s3.amazonaws.com/0/122887/190ea58d-5089-f065-a473-d37e48c67264.jpeg)




## 3. 撮影画像をデコード


デコードするプログラムは以下です。
https://github.com/kibekibe/structured_light/blob/master/gray_code/main_decode.cpp

実行時の引数例は以下です。
`test_img_list.txt 512 384 -white_thresh=1 -black_thresh=5`

第1引数に撮影画像列を1行ごとに記述したテキストファイルを指定します。
第2、第3引数にプロジェクターの画像幅と画像高さをそれぞれ指定します。
オプションの-white_threshは光が当たっているときと当たっていないときの輝度値の差の閾値です。説明を省きましたが、グレーコードパターンには、白黒のビットパターンを反転した画像が含まれています。このビット反転画像と輝度値の差が十分あるかをチェックしています。
オプションの-black_threshはそもそもちゃんと光が届いているかをチェックするための閾値です。真っ白パターンを投影しているときと真っ黒パターンを投影しているときでちゃんと輝度値に差があるかを閾値判定によってチェックします。

実行するとデコード結果の画像が出力されます。
画像フォーマットはexr画像とpng画像の2種類です。pngはデコード結果の確認用に出力しています。
以下の図は、左から被写体、x座標のデコード結果の可視化画像、y座標のデコード結果の可視化画像です。デコード画像は明るい画素ほど、プロジェクター座像座標値が大きいことを表しています。

![decode.jpg](https://qiita-image-store.s3.amazonaws.com/0/122887/15567e22-bbbe-1777-3ff3-f49849220bbf.jpeg)



## 4. デコード結果とキャリブレーション結果から三角測量

デコード画像が得られたら、後はOpenCVで実装されている三角測量の関数を呼び出すだけです。原理が良く分かっていなくてもできちゃう、便利(^o^)

プログラムは以下です。
https://github.com/kibekibe/structured_light/blob/master/procam_triangulation/main_procam_triangulation.cpp

実行時の引数例は以下です。
`-xMap=x.exr -yMap=y.exr -mask=x.png -cam=camera_data.yml -proj=proj_data.yml -rt=extrinsics.yml -texture=cap_target/DSC04088.JPG`

-xMapオプション、-yMapオプションにそれぞれx座標、y座標のデコード結果画像を指定します。-maskに指定する画像は、3次元復元する画素を指定するマスク画像です。
-cam、-projにはキャリブレーションによって得られたカメラ内部パラメーター、プロジェクター内部パラメーターを指定します。フォーマットはOpenCVのymlかxmlのフォーマットです。
-rtはカメラ、プロジェクター間の外部パラメーターです。
-textureは復元される3次元点群の色を付けるための画像を指定します。


サンプルデータ
https://github.com/kibekibe/structured_light/tree/master/sample_data

サンプルデータを実行すると以下のようなポイントクラウドが手に入ります（ビューアーはMeshLab http://meshlab.sourceforge.net/ を使用）

![meshlab.jpg](https://qiita-image-store.s3.amazonaws.com/0/122887/59b62914-dc5f-2331-edd1-21fa7bafe2e1.jpeg)
GithubのForkを自分のリポジトリから削除する

自分のリポジトリ一覧から削除したいリポジトリを開く

#### __1. タブから「Settings」を選択__

![github](//cl.ly/3X3Y0g1m0S2f/q1.jpg)

#### __2. リポジトリ名をコピーする__

![github](//cl.ly/332c140R1Q3K/q2.jpg)

#### __3. ページ下部の「Delete this repository」を選択__

![github](//cl.ly/3z003V3G1U2M/q3.jpg)

#### __4. 2でコピーしたリポジトリ名を貼り付けて下のボタンを押す__

![github](//cl.ly/3F0B1d1V3Z1e/q4.jpg)

#### __5. 削除完了__
[Sinatra] Database作成方法 with Mysql2 ~ 0からのSinatra編②

Database接続方法 with Mysql2 

今回のディレクトリ構造

```
Gemfile       # インストールするgem記述
Rakefile      # rakeが実行する処理内容(タスク)を定義するファイル(今回はrequireのみ)
app.rb　　　　　　　　　　　　　　 # メイン
vendor/bundle # bundleインストールPath
config/
　├ database.yml # DB設定ファイル
```

1. gemインストール

```Gemfile

source "https://rubygems.org"

gem 'rake'
gem 'sinatra'
gem 'activerecord'
gem 'sinatra-activerecord'
gem 'mysql2'
```

2.bundle インストール

```
bundle install --path vendor/bundle
```

3.Rakefile作成
以下を記述することにより,railsのようなrakeタスクが使えるようになります。
また自分で記述することも可能です。

```Rakefile
require 'sinatra/activerecord'
require 'sinatra/activerecord/rake'
```
Rakeタスク実行確認

```
rake -T
```

![スクリーンショット 2016-08-01 22.30.24.png](https://qiita-image-store.s3.amazonaws.com/0/74135/5af42f19-77f4-88af-f2d7-3e0d2f3716e8.png)


4.DB設定ファイル記述

```config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 300
  username: root
  password:
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: アプリ名_development

test:
  <<: *default
  database: アプリ名_test
```

5.DB作成

```
rake db:create
```

![スクリーンショット 2016-08-01 22.33.07.png](https://qiita-image-store.s3.amazonaws.com/0/74135/17e72129-c498-702b-75f2-4c857b236bfd.png)


以上がDatabase作成方法の紹介になります。
Web版TwitterでNGワードを表示しないGreasemonkey userscript

# シン・ゴジラについてのネタバレを見たくなかったのでカッとなって作った
皆さんシン・ゴジラご覧になりましたか？ぼくはまだ観ていません。TLで面白いともっぱらの評判です。

そして__ネタバレすると面白さ半減__という話も聞きました。ネタバレ、されたくありませんね。

しかし良い映画は感想を言いたくなるのが人情。「ネタバレしないで！」とお願いする前に、Twitterで流れてくる情報は自分でコントロールしましょう。ということでuserscriptを書きました。

## Greasemonkeyとは
Firefoxのアドオンです。

[Greasemonkey :: Add-ons for Firefox](https://addons.mozilla.org/ja/firefox/addon/greasemonkey/)


1. 任意のサイトで
2. 任意のJavaScriptを実行できるようにする

というAdd-onです。ぼくは今回作ったTwitterのサイトでNGワードを表示しないスクリプトの他に、下記スクリプトを導入しています。

- Twitterの画像を原寸大で表示させるボタンを追加させるスクリプト
- livedoor Dwango Reader(旧livedoor Reader）で最後の記事から次の記事へ`j`キーで移動できるようにするスクリプト

Greasemonkey、便利なのでおすすめです。

## Web版TwitterでNGワードを表示しないユーザースクリプト
ここからが本題です。下記の通り処理をしています。

1. `@include`でスクリプトの動作対象となるサイトを指定する（正規表現で指定可能)
2. `@require`でjQueryを読み込み
3. `ngWords`でNGワードを指定（配列で複数指定可能）
4. HTML内の`tweet-text`クラスを総当りしてNGワードがヒットしたら削除する

__すごく重い__です。はやくシン・ゴジラ見てこのスクリプトをオフにしたいと思います。

```js:TwitterFilter.user.js
// ==UserScript==
// @name        TweetFilter
// @namespace   http://www.designsatellites.jp/
// @description 指定したNGワードを含むツイートを非表示にします
// @version     1
// @grant       none
// @include https://twitter.com/*
// @require https://code.jquery.com/jquery-3.1.0.min.js
// ==/UserScript==

(function () {
    var ngWords = [
        'godzilla',
        'ゴジラ',
        'シンゴジ'
    ];

    function removeTweet() {
        var tweet = $('.stream-item:has(\'.tweet-text\')');
        if (tweet.length > 0) {
            tweet.each(function (index, element) {
                var text = $(element).find('.tweet-text').text();
                $.each(ngWords, function (index, word) {
                    if (text.includes(word)) {
                        element.remove();
                        return true;
                    }
                });
            });
        }
    }

    removeTweet();

    $(document).bind('DOMNodeInserted', function (e) {
        var element = e.target;
        if (element.nodeName == 'LI') {
            removeTweet();
        }
    });
})();
```
[web]これで、もう文字化けしないぜ！(自分用)

この前、作ったページをサーバーにアップロードしたら、盛大に全てのページが文字化けしてたので、改善点を忘れないようにメモ[≡] 〆(・⺫・‶)因みに私の使用してるエディタはAtomです。注意⚠ 私の環境下のみの可能性もあります

これで、2回目の失敗_(-ω-`_)⌒)_


[よく使われる文字コード]
![image.jpeg](https://qiita-image-store.s3.amazonaws.com/0/49542/e1496099-b51e-f9e8-2a33-50ebf5728f66.jpeg)

引用http://www.be-webdesigner.com/tips/coding/mojibake.htm
[まず文字化けとは？]
本来の文字コードを違う文字コードで読んでしまった時に文字化けが発生するようです。参照以下
http://sp.e-words.jp/w/%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91.html

よくある、文字化けしないための方法とかでHTMLのheadにメタタグで
<meta charset="UTF-8">って書く＆エディターの文字コードをUTF-8にして、コードを書くと絶対文字化けしない！
とかよくあるけれど、実際その方法を使ったら、文字化けしたので、改めて文字化けしない方法について書いておく[≡] 〆(・⺫・‶)


まず、chromeとIEのデフォルトのエンコードはShift_Jis

だから、UTF-8で日本語を書いてしまったコードなんて読めるわけないんです笑
ちなみに英語はそのまま読み込めます


では、どうするのか？
ブラウザのデフォルトに合わせてShift_Jisてコーディングします
お使いのエディターの文字コードをShift_Jisに変更して、メタタグも以下のように記述してください
<meta charset="Shift_Jis">にしてコーディングすれば問題ないです。

一回、UTF-8でコーディングしちゃって日本語の所書き直すのめんどくせぇって方には、メタタグを<meta charset="Shift_Jis">と書き直して、エディタの文字コードをShift_Jisにすれば、大丈夫です。


この記事のタグにCSSも入れてるので、CSSの文字コード記述方法も書いておきます。

CSSファイルの最上部に以下のように記述すれば大丈夫です

@charset "Shift_JIS";

もちろん、エディタの文字コードもShift_Jisにします。

これで、一応、文字化けのお化けとは戦わなくて済みます。。\( ¨̮ )/

以上、自分用の記事でした〜
【超初心者向け】MacにRuby,Ruby on Railsを導入し、開発環境を整える

プログラミングを教える機会が増えそうなので、せっかくなので環境構築をプログラミング初心者でもわかりやすいように記事にしてみた。（＊私自身もかなりの初心者です。笑）

## 今回の目次
1,環境構築とは？
2,Homebrewのインストール
3,rbenvのインストール
4,Rubyのインストール
5,Ruby on Railsのインストール

以上の4つの項目で進めていきます。
初心者の人でも安心して作れるように、単語ひとつひとつをしっかり解説していきます。多分。笑

## 環境構築とは？
環境構築・・・環境構築とは、特定の装置やソフトウェア、システムなどが動作するように、コンピュータや情報システムの状態を整えること。特に、コンピュータにソフトウェアを導入したり設定を調整することで、対象のソフトウェアが動作する環境を作り上げる作業を意味する場合が多い。（IT用語辞典　引用）

今回の場合で説明しますと、「Ruby」というプログラミング言語をMacで使用したいがために、環境構築をするということになります。
Macを何も触ってない状態では、Rubyは使えないよということですね。
それでは、Rubyを使えるようにするための環境構築をしていきましょう。

## Homebrewのインストール
Homebrew（ホームブルー）とは、Mac OS X オペレーティングシステム上でソフトウェアのインストール、もしくはアンインストールを管理してくれるシステムのひとつです。

分かりやすい例でいくと、App Storeのような感じですかね。様々なアプリケーションをApp Storeが管理している。それと似たようなことを行っているということですね。

それでは、Homebrewをインストールしていきましょう。

1,xcodeのインストール
まずは、App Storeへいき、Xcodeと調べてください
それをダウンロードします。（もちろん無料）

2,インストールが完了したら、control + space を押してください。その中に「ターミナル」と打ち込んでEnterを押します。

3,白い背景の画面が出てきたと思います。これをターミナルといい、コンピュータに文字で出入力をおこなう端末装置のことです。
そこに
`$ xcode-select --install`
を$を抜いた部分を打ち込み、Enterを押します。

4,次にHomebrewをインストールします。
`/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"`
上記のコードをターミナルに打ち込みEnterを押してください。

するとPasswordはなんですかと聞かれます。

`Password:
==>`
のような表示になると思うので、自分のMacのパスワードを入力してください。
この際、Mac使用時のように、Passwordが•••••のように表示されず、キーを押しても画面に何も変化のないように見えますが、ちゃんと打ち込まれていますので、あせらずゆっくりPasswordを打ち、Enterを押してください。

動作が完了した後に、ターミナルに
`brew doctor`
と打ち込んでください。

何も問題がなければインストール完了です。
`brew -v`
と打ち込み、Homebrewのバージョンを確認してください。

## rbenvのインストール
rbenvとは、Rubyのバージョンを管理してくれるツールで、これを導入しておくと、Rubyのバージョンの切り替えが簡単に行えます。

それではインストールしましょう。

`brew install ruby-­build`とターミナルに打ち込む。
操作が終わったら
`brew install rbenv`とターミナルに打ち込む。

さらにその後、
`vi ~/.bash_profile`と打ち込む

するとターミナル専用のエディタのようなものが開きます。
普段みなさんが使ってるようなエディタの使い方とは少し違うので、
今回は、言われたまま打ち込んでください。笑

1,キーボードの「a」だけを押す。(これで編集モードになる)

2,`eval “$(rbenv init -)”`
を入力。

3,escキーを押し、`:wq`と入力しEnter.
これでエディタから抜けれたと思います。

4,`source ~/.zshrc`をターミナルに入力

これでrbenvのインストールは完了です。

## Rubyのインストール
さていよいよRubyをインストールしていきます。

１、`rbenv install 2.1.3`
をターミナルに打ち込む。

２、`rbenv global 2.1.3`
をターミナルに打ち込む。
これは標準で使うRubyのバージョンを指定しています。

３。`ruby -v`とうちこんで
2.1.3と出れば成功です。


## Ruby on Railsのインストール
さて、最後にRuby on Railsをインストールしていきたいと思います。
ここでRubyとRuby on Railsとは、一体何なのかについて初心者のために簡単にふれておこうと思います。

Rubyとはプログラミング言語の一種で、Ruby on Railsとはアプリケーションフレームワークのことを言います。
アプリケーションフレームワークとは？
webアプリケーションにもこう設計すべきであるという方法論てきなものが存在します。
そのなかでアプリケーションフレームワークは、それを再利用可能なクラスとして提供しています。


少し噛み砕いていうと、みんなが何度も似たような感じでwebサイト作るなら、みんなの似通ってる部分のコードはもうひとまとめにしておこうぜ！全員が一から作るなんで時間の無駄だよ！という感じで考案されたものだと思っていてください。笑


少しそれましたが、インストールしていきましょう。

ターミナルで、
`gem install rails`を打ち込む
これでRuby on Railsはインストールできました。

ここでgemとは、Rubyで書かれたプログラムをパッケージ化したものです。
次にRuby on Railsに必要なgemを入れていきます。

`gem install bundler`

`rbenv rehash`

以上二つのターミナルで打ち込み

`rails -v`
とうって、バージョンが表示されれば成功です。

お疲れ様でした。
いかんせん自分も初心者なものでちゃんと説明できているか怪しいですが、
おかしいところがあれば、指摘してください。
gulpのファイルの指定するときに書く正規表現っぽいもの


正確には正規表現ではなくて、glob形式というものらしい。
nodeにおけるglob:https://github.com/isaacs/node-glob/blob/master/README.md

英語が読めなさすぎてoh my glob…ということしかわからなかったので、
とりあえず個人的にgulpではこれだけおさえとけば大丈夫かなってところをメモしておく。

こういうフォルダ構成があったとすると、

```
folder
　└a.scss
　└b.scss
　└min-folder
　　　└a.scss
　　　└b.scss
　　　└c.scss
　└min-folder2
　　　　　└a.scss
　　　　　└b.scss
　　　　　└min-folder3
　　　　　　　└b.scss
```

* "folder/a.css" →　folder直下のa.cssのみが該当する
* "folder/*.css"　→　folder直下のa.cssとb.cssが該当する
* "folder/*\*\*/*\*.css"　→　folder以下にある全てのcssがファイルが該当する

"folder/*\*\*/*.css","!folder/min-folder2/**/*.css"　→　min-folder2より以下にある.cssファイルは全て除く、その他のfolder以下にある全てのcssが該当する

## 参考
参考にさせていただきました！
http://liginc.co.jp/web/tutorial/117900
http://am1tanaka.hatenablog.com/entry/2015/08/11/164400

まだ読めてないけど参考にさせていただきたい！
http://motemen.hatenablog.com/entry/2014/07/15/minimatch-cheat-sheet
メソッドに渡されるブロックをスタブする。



下記のような書き方をすることで、特定メソッドに渡されるブロックへの引数をスタブ可能。

```rb:test
context "test" do
  it "" do
    @test_numbers = [1,2,3,4,5]
    @test_numbers.stub(:each).and_yield(100)

    @test_numbers.each do|num|
      expect(num).to eq(100)
      pp num
    end

  end
end
```

参考
http://tech-sketch.jp/2014/03/rspec-tips-%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E4%BB%98%E3%81%8D%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92-stub-%E5%8C%96%E3%81%99%E3%82%8B.html
東京都知事選挙（2016年）開票結果を、R (ggplot)で可視化します


##イントロ

Rのグラフ描画ライブラリggplotを利用して、東京都知事選挙の開票情報を可視化します。
「全21名の候補者と得票数との関係」についての棒グラフを作成しました。
excelでも充分に同じ事は出来るので、Rを使うメリットというと、好きなように目盛りを調整できたことでしょうか。

##実行環境
OS: Mac 10.11.6
R: 3.3.0
ggplot: ggplot2, 2.1.0
RStudio: Version 0.99.896

##グラフ

Rstudioを利用しています。plotsを zoom した結果を表示します。
![スクリーンショット 2016-08-01 16.25.13.png](https://qiita-image-store.s3.amazonaws.com/0/22082/48801def-1a11-27ce-00a7-f156ae7c845d.png)



##データ

下記URLのデータを利用しました。詳細はリンク先をご覧ください。
http://sokuho.h28tochijisen.metro.tokyo.jp/h28chi_kai.html
開票率100.00%	平成28年 8月 1日 1時 05分 確定の情報です。
　　
届け出順、候補者名、得票数、政党名は、それぞれ
No.　candidate, obtained,partys、としました。
候補者の方々のお名前が、ひらがなが多いのですが、選挙管理委員会側の公式発表に準じています。
htmlからコピーペーストをしてcsvファイルに貼り付けました。
文字化けをしましたので、cot editorというテキストエディタでutf-8へ変換しました。
画像は, `View(filename)`にて表示させた結果です。

![スクリーンショット 2016-08-01 16.26.51.png](https://qiita-image-store.s3.amazonaws.com/0/22082/70baadb6-ce9f-a03a-4535-355d31debdc6.png)
![スクリーンショット 2016-08-01 16.27.18.png](https://qiita-image-store.s3.amazonaws.com/0/22082/eb597b6b-0acb-1799-8626-2118a6665c05.png)



##Rのスクリプトコード

下記のスクリプトコードは、ほとんど、Rグラフィックスクックブック（オライリー）を参考にしています。
(https://www.oreilly.co.jp/books/9784873116532/)
特に、3章の棒グラフ(レシピ3.10）をはじめとするページをよく読みました。

（グラフの軸ラベルは日本語フォントを表示させることを行いました。Macでしか確認していないので、windowsやlinuxとかでどうやるのかは、参考URL先などをご覧ください）
csvファイルは、GUIから読み取ってます。
RstudioのTools>Import Dataset > From local file...
ファイル名を`Tokyo2016.csv`としました。


```R:Tokyo_bar_scale.R
library(ggplot2)
#csv　ファイルを読み込みは、下記のようなコマンドでも可能。
#Tokyo2016 <- read.delim("~/Tokyo2016.csv")
#Rstudioのdata importでも可。

theme_set(theme_bw(base_family = "HiraKakuPro-W3")) 
#MacOSで、日本語フォントを表示でさせる設定

voteorder <- Tokyo2016$candidate[order(Tokyo2016$obtained)]
Tokyo2016$candidate <- factor(Tokyo2016$candidate, levels = voteorder)
#候補者名の要素に得票順に並ぶように並び替える要素を与える。

a <- c(0, 2.5e5 ,5e5, 1.5e6, 3e6)
b <-c("0","25万", "50万", "150万", "300万")
#軸の目盛り(a)と表記の為(b)にベクトルを作成

p <- ggplot(Tokyo2016, aes(y=obtained, x=candidate, fill=factor(partys))) + geom_bar(stat = "identity") 
p + coord_flip() -> p1
#縦軸と横軸との交換
p2 <- p1 + 
  ggtitle("2016 東京都知事選挙 開票情報")+ 
  ylab("得票数") + xlab("候補者名") + #日本語のラベル
  scale_y_continuous(breaks = a, labels = b) +　#上述のa, b ベクトルを利用
  theme(legend.position="none")　#凡例を表示させない
show(p2)

```

##参考にしたURL, 情報源

Stack over flow のページ`scale_y_continuous`は、`factor`では利用できず`numeric`である必要があるとのこと。
 http://stackoverflow.com/questions/29278153/plotting-with-ggplot2-error-discrete-value-supplied-to-continuous-scale
 
日本語化： https://oku.edu.mie-u.ac.jp/~okumura/stat/first.html
三重大奥村教授の説明。

ggplot2で縦軸と横軸をひっくり返したい
http://qiita.com/kazutan/items/5c4ee243c48a64b44b2d

Rグラフィックスクックブック
http://www.cookbook-r.com

##感想
　考えていたよりも、R・ggplotでちょっと慣れないことを凄く難しいです。
　まだまだ、私は初心者ですね。
　次回のAKB48総選挙などのような大きなデータもサクッと解析できたら、便利でしょうねー。
　記事を書いた後で気がつきましたが、次のような記事が既にありました。

[R] 都知事選挙を題材に学ぶ ggplot2 の作例
　http://ill-identified.hatenablog.com/entry/2014/02/22/231809
[dein.vim] Unite.vimを使う時の, vimproc plugin is not installed の対処法 ~ 0から始めるvim ~

# Unite.vimを使う時の, vimproc plugin is not installed の対処法

Unite.vim はvimprocと依存関係があるらしく,
vimprocが必要になります。

Unite.vimを使う際に vimprocが必要ということで,
dein.vimでインストールした際につまづいたのでその時の解決方法をお話します。

### 失敗したインストール方法

```diff:.vimrc
call dein#add('Shougo/vimproc.vim', {'do': 'make'})
```

これだけだと以下のようなエラーが起きて, 検索できませんでした。
```vimproc plugin is not installed```


### 解決策

以下のように書き換えたらうまく検索できるようになりました。

```diff:.vimrc
-call dein#add('Shougo/vimproc.vim', {'do': 'make'})
+call dein#add('Shougo/vimproc.vim', {
      \ 'build': {
      \     'windows' : 'tools\\update-dll-mingw',
      \     'cygwin'  : 'make -f make_cygwin.mak',
      \     'mac'     : 'make -f make_mac.mak',
      \     'linux'   : 'make',
      \     'unix'    : 'gmake',
      \    },
      \ })

```
JP1/Cm2/SSOのリソース収集DBからCSV形式でデータを取り出す

こんな感じでバッチファイルを書いて、SSOサーバで実行する。

```
rem echo 0ff
rem
rem ssoextractlog [-S 接続先サーバ名]
rem               -text [A | B | C | D | E | F | G | H] [1 | 2 | 3]
rem               {-logfile ファイル名
rem               | -masterlog リソースID,収集対象サーバ名
rem               | -dbname リソースID,収集データベース名}
rem               [-instance インスタンス名,...]
rem               [-subrsc サブリソースID,...]
rem               [-start {DATE 日時 | BDATE 日 | BMONTH 月[,日]}]
rem               [-stop {DATE 日時 | BDATE 日 | BMONTH 月[,日]}]
rem               [-savefile ファイル名] [-notitle]
rem
rem リソースIDは以下コマンドで調べる。先頭ブロックの数値がリソースID
rem ssoextractlog -S [JP1/Cm2/SNMP System Observerサーバ名] -list -savefile [保存ファイル名]
rem
rem インスタンス名は、JP1/Cm2/SNMP System Observerの収集データ参照画面で確認
rem

rem - サーバ名：収集対象のサーバ名
set ID_HOSTNAME=hogehoge

rem - リソースID：ssoextractlog -S で調べる
set ID_RESOURCE=[リソースID]

rem - リソース名：保存ファイル名で使用する
set NAME_RESOURCE=[リソース名]

rem - インスタンス名：収集データ参照画面で確認する
set ID_INSTANCE=[インスタンス名]

rem - 抽出開始(YYYY.MM.DD.hh.mm.ss)
set EXP_START=2016.01.01.00.00.00

rem - 抽出終了(YYYY.MM.DD.hh.mm.ss)
set   EXP_END=2016.01.02.00.00.00

rem - 出力ファイル名
set EXP_FILE=[出力パス]\%ID_HOSTNAME%_%NAME_RESOURCE%_%EXP_START%-%EXP_END%.csv

ssoextractlog -text B 1 -masterlog %ID_RESOURCE%,%ID_HOSTNAME% -instance %ID_INSTANCE% -start DATE %EXP_START% -stop DATE %EXP_END% -savefile %EXP_FILE%

```
C#:最小公倍数を求める


## 最小公倍数を求める方法

2つの正整数 a b があった時には、以下の関係が成り立ちます。

<pre>
  a * b = gcd(a,b) * lcm(a,b) 
</pre>


gcdは最大公約数、lcmwは最小公倍数を表します。
つまり、最大公約数を求められれば、最小公倍数を求めるのは簡単ですね。

例えば12と30という整数の時は、

<pre>
 12 * 30 = (2 * 2 * 3) * (2 * 3 * 5) 
         = (2 * 3) * (2 * 2 * 3 * 5) 
         = 6 * 60 
         = 360
</pre>

となり、6が最大公約数で、60が最小公倍数であることがわかります。



## C#のコード

「[最大公約数を求める](http://qiita.com/gushwell/items/e9614b4ac2bea3fc6486)」で示したGcdメソッドを、そのまま利用しています。


```csharp:lcm.cs
using System;


namespace Gushwell.Etude {
    class Program {
        static void Main(string[] args) {
            var lcm = Lcm(28, 34);
            Console.WriteLine(lcm);
        }

        // 最小公倍数
        public static int Lcm(int a, int b) {
            return a * b / Gcd(a, b);
        }

        // ユークリッドの互除法 
        public static int Gcd(int a, int b) {
            if (a < b)
                // 引数を入替えて自分を呼び出す
                return Gcd(b, a);
            while (b != 0) {
                var remainder = a % b;
                a = b;
                b = remainder;
            }
            return a;
        }
    }
}

```

[GitHub](https://github.com/gushwell/CSharpAlgorithmCollection)でコードを公開しています。


-----------
ところで、このGcdとLcmなどメソッドをMath.Gcd(a,b)とか、Math.Lcm(a,b)のように書きたいけど、Mathクラスはすでに存在してるし、MathExクラスだとあまりにも安直だし...、でも他に思い浮かばないです。



-------------------
この記事は、Gushwell's C# Programming Pageで公開したものを加筆・修正したものです。
【javascript】getElementsByTagNameとquerySelectorAllで検索できる文字数の違い


js初心者ですが気付いた事をメモ。

#背景#

テキストエリアの中に画像を挿入してプレビューしながら編集出来るインターフェースをつくっている最中に、`<div>`タグの中にある`<img>`タグを取得したいということがあった。

`<div>`タグの中にはFileReaderクラスで取得したbase64エンコードされた画像データが入っているため、20万文字×(画像数)ぐらいの文字数があった。

```html
<div>
	<img src='data:image/jpeg;base64,/9j/7AARRHVja3kAAQAEAAAAZAAA/+EDG2h0dHA6Ly9ucy5hZG9iZ
	S5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOW
	【略】
	T+fSufBaQA1fy+qoMa1RCEclqNzAgeZlNZIs/EAclCn3EL9p/wBfUpknSiQuv//Z'>
	<img src='data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQ
	FxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/
	【略】
	7wBCugu4BxlCIok4HWrwzvrrFpLSKLiTHXprodYFp5M//2Q=='>
</div>
```


#結果#

結論としては、querySelectorAllの方が多い文字数に対応している。

```js
//pattern1
var images = div.getElementsByTagName('img');
//pattern2
var images = div.querySelectorAll('img');
```

pattern1の時はせいぜい２０万文字まで（画像一つまで）しか取得出来なかった。（エラーにはならないが取得は出来ない。）
pattern2の時は10枚程度画像が入っていても問題なく取得出来た。つまり200万文字程度は検索できる。

理由はなぜなのかはわからなかったが、検索のアルゴリズムが違う？
どの程度の文字数まで動作するのかは ~~面倒なので~~調べていないが、ブラウザやPCのスペックによっても違うのかもしれない。
今さらまとめるGradle(編集中)

# Gradleって何？
- Java界隈でよく使われるビルドツール
    - Ant -> Maven -> Gradle (諸行無常)
- 設定ファイルをGroovyで記述する

# 概念&用語

### タスク

```
gradle tasks # で確認可能
```

### プロパティ

```
gradle properties # で確認可能
```

### Gradle Wrapper

- gradleのコマンドをgradleをインストールしていない人でも実行できるようにするツール


### TODO もっと書く

プラグイン
タスク

# インストール

- brewで入れたらええねん
    - gvmだかsdkmanだかしらんけどややこしくなるだけやねん
- windowsは知らない。ごめん

# コマンド

```bash
# 現在のプロジェクトで実行可能なタスクの一覧を表示。
# わけわからなくなったら、とりあえずこれ叩こう
gradle tasks
```

# build.gradle説明

```groovy
# プラグインの追加
# プラグインいろいろ -> https://docs.gradle.org/current/userguide/pt05.html

# Javaプラグイン コンパイルやjarの作成などのタスクを使えるようになる
# http://gradle.monochromeroad.com/docs/userguide/java_plugin.html
apply plugin: 'java'

apply plugin: 'eclipse'



sourceCompatibility = 1.5
version = '1.0'
jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart',
                   'Implementation-Version': version
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

test {
    systemProperties 'property': 'value'
}

uploadArchives {
    repositories {
       flatDir {
           dirs 'repos'
       }
    }
}

# task
# > gradle -q hello
# hello from GreetingTask
# 詳細 -> https://docs.gradle.org/current/userguide/custom_tasks.html
task hello(type: GreetingTask)
class GreetingTask extends DefaultTask {
    @TaskAction
    def greet() {
        println 'hello from GreetingTask'
    }
}

```

# サンプル

- Javaプロジェクト
- Androidプロジェクト
-
UIPopoverPresentationControllerの画面回転対応メモ

いろいろ調べて解決したのに、忘れてしまって調べなおしたので自分向けメモ。

ユニバーサルアプリを作成していて必ず打ち当たるであろう、iPadのポップオーバーを画面回転に対応させる（吹き立ちのくちばし部分を回転にあわせて変更する）方法のメモ。

swift2の場合はmemory。swift3からpointeeに変わったので注意。

```swift

    ///
    /// UIPopoverPresentationControllerDelegate
    ///
    /// 画面の回転対応
    ///
    func popoverPresentationController(_ popoverPresentationController: UIPopoverPresentationController, willRepositionPopoverTo rect: UnsafeMutablePointer<CGRect>, in view: AutoreleasingUnsafeMutablePointer<UIView>) {
        let baseView = 起点としたいView
        view.pointee = baseView
        rect.pointee = baseView.bounds
        popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirection.unknown
    }
```

以上
テーブルがUNLOGGEDで作られたものか調べたい - 2016年夏

今から4年前に、（UNLOGGED TABLEがサポートされた後だろうか）こんな記事をはてなblogに書いたことがある。
[テーブルがUNLOGGEDで作られたものか調べたい](http://d.hatena.ne.jp/nuko_yokohama/20120113/1326447480)

で、そんな記事を書いたことをすっかり忘れていたんだけど、今日、久々にNoboru Saitoさんから『「てゆーか、次のバージョンでPersistent情報を"\d+"とかで表示してくれると嬉しいかも・・・」　状況変わってないですよねー？』
という質問を受けて、改めてPostgreSQL 9.6beta版で調べてみた。

結論から言えば、全然状況は変わってないようです。

```
test=# \d+
                     List of relations
 Schema |  Name  | Type  | Owner |    Size    | Description 
--------+--------+-------+-------+------------+-------------
 public | test   | table | nuko  | 8192 bytes | 
 public | test_u | table | nuko  | 16 kB      | 
(2 rows)
```
やっぱり、UNLOGGED TABLEかどうかの情報は出力してくれない。
結局、以前と同じようなVIEWを作るしかないのか。

```
test=# CREATE VIEW tablelsit_with_persistent AS (SELECT n.nspname as "Schema",
          c.relname as "Name",
          CASE c.relkind 
            WHEN 'r' THEN 'table' 
            WHEN 'v' THEN 'view' 
            WHEN 'i' THEN 'index' 
            WHEN 'S' THEN 'sequence' 
            WHEN 's' THEN 'special' 
            WHEN 'f' THEN 'foreign table' END as "Type",
          pg_catalog.pg_get_userbyid(c.relowner) as "Owner",
          c.relpersistence as "Persistent"
        FROM pg_catalog.pg_class c
             LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
        WHERE c.relkind IN ('r','v','S','f','')
              AND n.nspname <> 'pg_catalog'
              AND n.nspname <> 'information_schema'
              AND n.nspname !~ '^pg_toast'
          AND pg_catalog.pg_table_is_visible(c.oid)
        ORDER BY 1,2);
CREATE VIEW
test=#
```

で、このVIEWを検索するしかないっぽい。(´・ω・`)

```
test=# SELECT * FROM tablelsit_with_persistent ;
 Schema |           Name            | Type  | Owner | Persistent 
--------+---------------------------+-------+-------+------------
 public | tablelsit_with_persistent | view  | nuko  | p
 public | test                      | table | nuko  | p
 public | test_u                    | table | nuko  | u
(3 rows)
```

次バージョンでPersistentを表示するようなパッチの提案をする手もあるかな・・・でも、UNLOGGED使っているユーザってそんなにいないのかな。