OmniAICreator/Qiita-1.07M huggingface dataset:
PHPのLaravelフレームワークで、テストのHTTPリクエストにヘッダーを設定する方法

### Controller側

```php
public function post(Request $request)
{
    var_dump($request->header()); // 全部
    var_dump($request->header('Hoge')); // 指定
    var_dump($request->bearerToken()); // bearerトークンは専用メソッドが用意されている。
}
```

### テスト側

```php
public function testBearerTokenのヘッダ付与テスト()
{
    // Laravelが内部で、「HTTP_HOGE」で無いと認識できないので、変換掛ける処理が必要。
    // 自分で「HTTP_HOGE」と書いて、配列で送るのでも良いです。（仕様変更が恐いですが。。。）
    $server = $this->transformHeadersToServerVars([
        'Authorization' => 'Bearer DV9Fw5p9U3bzkn1czA7OldX18ybGcaXVFmzhAaGF',
        'Hoge' => 'Fuga',
    ]);

    // Postリクエスト
    $response = $this->call('POST', 'hoge', $this->data, [], [], $server);

    $this->assertEquals(200, $response->status());
}
```

```php
    // Postリクエスト
    // こちらだと中で、「transformHeadersToServerVars」を呼んでいるので、そのまま書いて良い。
    $response = $this->post('hoge', $this->data, [
        'Authorization' => 'Bearer DV9Fw5p9U3bzkn1czA7OldX18ybGcaXVFmzhAaGF',
        'Hoge' => 'Fuga',
    ]);
```

### まとめ

簡単ですね。
Djangoで形態素解析とマルコフ連鎖をやってみる（改善余地大アリ）

#はじめに

はるか昔にTwitterのデータを取得し、マルコフ連鎖。というのをやったのですが、Djangoに組み込んでみようとやってみました。結果を最初に言うと、問題大アリです。現時点での作業途中経過までを残しておこうと思います。

過去の記事はこちらから
[Twitter検索で情報を溜め込み、形態素解析してマルコフ連鎖で文章を生成してツイート。](http://qiita.com/Gen6/items/e1f4532877764394fcf0)

Python3では.has_key　が使えないので、
```
if markov.has_key(w):
```

という処理は
```
if w in markov:
```

と書き換えるイメージです。

#Python3でMeCabを使う準備

```
$ brew install mecab
$ brew install mecab-ipadic
$ pip install mecab-python3
```

こういう形でインストールしてみました。

#コード

例によってDMM18禁動画のRSSを取りに行きます。

[Djangoで作る簡易RSSリーダー](http://qiita.com/Gen6/items/165c5fd67b759de536a7)
上記とほぼ同じことをやっていますので参考にどうぞ。


タイトルとディスクリプションを取得し保存します。

```views.py
import feedparser
import MeCab
import random
import re
import sys, codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)

from django.http import HttpResponse
from django.shortcuts import (render, redirect,)

def index(request):
    url = 'http://www.dmm.co.jp/digital/videoa/-/list/rss/=/sort=date/'
    feeder = feedparser.parse(url)


    for entry in feeder['entries']:
        lists = entry['description'] + entry['title']
        f = open('text.txt', 'w')
        f.write(lists)
        f.flush()
        f.close()

    f = open('text.txt', 'r')
    mecab_read = f.read()
    f.close()

    tagger = MeCab.Tagger('-Owakati')
    wordlist = tagger.parse(mecab_read)
    wordlist = wordlist.rstrip(' \n').split(' ')

    f = open('l.txt', 'w')
    f.write(str(wordlist))
    f.close()

    markov = {}
    w = ''

    for x in wordlist:
        if w:
            if w in markov:
                new_list = markov[w]
            else:
                new_list =[]

            new_list.append(x)
            markov[w] = new_list
        w = x

    choice_words = wordlist[0]
    sentence = ''
    count = 0

    while count < 20:
        choice_words = random.choice(wordlist)
        sentence += choice_words
        count += 1
        sentence = sentence.split(' ', 1)[0]
        p = re.compile('[!-/:-@[-`{-~]')
        sus = p.sub('', sentence)

    context = {
        'wordlist': wordlist,
        'sus': sus,
        }

    return render(request,'index.html',context)
```

```index.html
{% extends "base.html" %}
{% block body %}
  <div class="container">
    <div class="row">

      <div class="col-md-12">
        <p class="1">{{ wordlist }}</p>
        <p class="2">{{ sus }}</p>
      </div>

    </div>
  </div>

{% endblock %}
```

#結果

<img width="1251" alt="スクリーンショット 2016-11-21 13.41.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/71585/4c526960-0a5a-6dd5-fad8-bb054077eb98.png">


このようなクソ結果に終わりました。
ディスクリプションには金額が入っちゃってるので除去しておかないと駄目ですね・・・。

女優名もカットしておかないと意味わからないことになることも分かりました。

精進します。

#本来やりたかったこと

AVタイトルをマルコフ連鎖で作りたかったわけです。
JavaScriptからCSSのプロパティが取得できない

## おっさんは昨日喰ったものさえ忘れる

初心者および、10年ぐらい前に一度ハマっただけのおっさんのために。

## こうする

```:html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>Display</title>
	<style>
#display-test {
	display:block;
	color:red;
}
	</style>
</head>
<body>
	<div id="display-test">Display test.</div>

<script>
var d = document.getElementById('display-test');
console.log(d.style.display);  // とれない
console.log((d.currentStyle || document.defaultView.getComputedStyle(d, '')).display);  // とれる
</script>

</body>
</html>
```

## くわしくは
http://d.hatena.ne.jp/amachang/20070611/1181554170
データ分析で必要な連続した値を生成する

一日あたりのCV数を分析したいとかいう時に、CV数が少ないチャネルだったりすると、1CVも発生していない時に日付が連続せず、またそれに気づかないで分析してしまうことがよくあるのでメモを残しておきます。
# MySQLの場合はユーザー変数を使う
MySQLでは使用頻度は高くありませんがユーザー変数を使用することができます。

```
# 初期化する場合はSET句を使う
SET @var = 0;

# SQL文中で使う時には := 演算子を使う
# 1から100まで出力するループは以下のようにかける
SELECT @var := @var + 1
FROM hoge
LIMIT 100
；
```

上記を応用すると、連続した日付は以下のようなSQLで出力することができます。

``` days.sql
SET @i = 0;
SELECT
  DATE_ADD('2015-12-31', INTERVAL @i := @i + 1 DAY) AS date
FROM
  hoge
LIMIT 366
;
```
hogeテーブルは実在するテーブルなら何でもよいのですが、出力する行数以上のレコードが存在するテーブルである必要があります。
あとはこれを外部結合したり、使用頻度が高そうであれば`CREATE TEMPORARY TABLE`句などを使って一時テーブルにしておくと良いでしょう。

# PostgreSQLの場合はgenerate_series関数を使う
PostgreSQLには`GENERATE_SERIES()`関数が用意されています。
使い方は以下のような感じ。

```
SELECT
    n,
    sin(n) sinn,
    n*sin(n) nsinn,
    -n nn
FROM generate_series(1, 100) n
;
```
これを応用すれば、MySQLよりも簡単に連続した日付を出力することができます。

``` days.sql
SELECT '2016-01-01'::date +  i AS days
FROM generate_series(0, 365) i
;
```
あとはこれを`WITH`句とかに入れて外部結合とかすればよさげ。

# redshift ではgenerate_series()が使えない
@maru3 氏よりご指摘いただきましたので加筆です。ありがとうございますmm
redshiftでは`generate_series()` 関数は使用不可です。
その代わりにwindow関数を使って連番を作ることができます。使うwindow関数は`ROW_NUMBER()`です。
詳しい使い方は、
http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Examples_of_WF_ROW_NUMBER_WF.html
を参照してください。

``` days.sql
SELECT 
  ('2015-12-31' + ROW_NUMBER() OVER (ORDER BY id))::date AS date
FROM hoge.fuga
LIMIT 366;
```

これもMySQLの時と同様、FROM句のテーブルはLIMITで指定した値以上のレコード数を持っていることが条件になります。
これで分析が捗る！
JP1/AJSをアンインストールしたのにJP1/AJS3 Database _JF0 サービスが残ってた (Windows)

# JP1/AJSをアンインストール

## JP1/AJS3 Database _JF0 サービスが残ってた (Windows)

JP1 v11 AJS3は既定インストールで NTサービス「JP1/AJS3 Database _JF0」(0の部分は可変)という Embedded HiRDB を使う。
これがコントロールパネルの「プログラムと機能」でアンインストールできなかった。なんか残念。
しかたがないので、無理やり外す。

```
> sc query state= inactive | findstr HiRDB
SERVICE_NAME: HiRDBEmbeddedEdition_JF0
> sc delete HiRDBEmbeddedEdition_JF0
[SC] DeleteService SUCCESS
```

あとは、`C:\Program Files\Hitachi\JP1AJS2\embdb\_JF0`と`HKEY_LOCAL_MACHINE\SOFTWARE\Hitachi\HiRDBEmbeddedEdition_JF0`を削除しておけばよさそう。

----

# インストール
http://itdoc.hitachi.co.jp/manuals/3021/30213B1501/H03B1501.PDF#page=33
ちゃんと読もう。AgentとManagerは一緒にインストールしないんだって。
なにも見ないでHCD_INST.EXEを実行したら、とりあえず「全選択」でインストールしてしまう。罠だよなぁ。
Baseを設定してなかったから、案の定　AJS3サービスを起動できない(すぐ終了してしまう)状態になっちゃったし。
実践Appiumについて

# 実践Appium
１１月２６日に発売となるこの本
発売前に読む機会を得たのでその感想を記しておきます。

##　はじめに
洋書の翻訳で原書は　ＰＡＣＫＴシリーズの　Appium　Essentials　になります
直訳すると　要旨Appiumとなるわけですが、邦題は実践Appiumになっていますね。


##　各章について
1章　Appiumの概念と背景
  Appiumアーキテクチャーと　Selenium JSONワイヤプロトコル　Desired Capabilitiesについて書かれています。
  Capabilitiesについて書かれているのは嬉しいところ

2章　Appiumを始めよう
　環境構築について書かれています

3章　Appium GUI
　主に画面説明になります

4章　さまざまなロケータで要素を見つける
　シナリオを作る際に必須となるロケーション指定についてです

5章　Appiumの操作
    ネイティブアプリ　Webアプリ　ハイブリッドアプリに分けてシミュレータ上でのテスト実施方法が書かれています

6章　実機でのAppiumの操作
    こちらは実機上でのテスト実施方法が書かれています

7章　高度なユーザーインターフェース
　　固有のインターフェースについて個別に説明されています



##　終わりに
この本は、導入のよくある最初のハードルを越えるのに役に立つ内容になっていると思います。
行間も広めに取ってあり読みやすくなっています。
小さな文字で行間が狭くぎっしり書かれていると知りたいところまでたどり着けなかったりしますからね。

なので、下記のような人にオススメかな、と。

- Appiumの導入を検討している
- 着手しているけど検索するといろいろなバージョンの情報が錯綜していて問題解決にたどり着けない

既に「実践」的に使用されている人には少し物足りないないようだと思います。
なので、個人的には「実践」よりもせめて「入門」ぐらいのタイトルだったらよかったのではないかと。
この本を踏まえて、「実践」でのノウハウ本が出ると嬉しいのですが。
自動化ツールの導入のハードルが高いと、テストよりも導入が目的になってしまって本末転倒になりがちですからね。

バージョンアップが早いので新しい機能などの説明が追いつかなくなるのは仕方がないことですが、今時点での機能整理と一旦追いついておくという意味ではこの手の本に意味があると思います。
WPFの標準Converterメモ

自分メモ。
WPFですぐに利用できる標準提供のコンバーター
よく使う順です、MenuScrolling以降は使ったことない。

| Converter | 概要 |
|:-:|:-:|
|BooleanToVisibilityConverter | booleanをVisibility変換  |
|DataGridLengthConverter |数値をDataGridLengthに変換|
|AlternationConverter   |Indexから配列リソースにひも付|
|BorderGapMaskConverter   | Borderに対するMask要素を変換 |
|MenuScrollingVisibilityConverter   | "続きを見る"のようなスクロールバーで利用？  |
|VirtualizationCacheLengthConverter   | UI仮想化に利用？ |
rollup.js と babel で script タグと npm 両対応のライブラリを作った話

[rollup.js](http://rollupjs.org/) を用いて `<script>` と npm 両対応のライブラリ [smart-dropdown-menu](https://github.com/yami-beta/smart-dropdown-menu) を作成しました。

# smart-dropdown-menu
ドロップダウンメニューを作成するためのライブラリです。
大きな特徴として、`mousemove` イベントを利用せず、カーソルの斜め移動時（サブメニューへの移動等）に、ホバー判定を継続する処理が入っています。

smart-dropdown-menu の仕組みについては、以下のブログ記事で解説しています。
[ドロップダウンメニュー用のライブラリ smart-dropdown-menu を作った - 備忘録β版](http://yami-beta.hateblo.jp/entry/2016/11/26/022732)

## rollup.js による `<script>` と npm 両対応
初めは [browserify](http://browserify.org/) を用いていたのですが、rollup.js は出力形式に `umd` を指定できることから、`<script>` による読み込みと npm による管理の両方に対応するため、移行しました。

```js:rollup.config.js
import babel from 'rollup-plugin-babel';

export default {
  entry: 'src/js/smart-dropdown-menu.js',
  dest: 'dist/js/smart-dropdown-menu.js',
  format: 'umd',
  moduleName: 'SmartDropdownMenu',
  plugins: [
    babel()
  ]
}
```

```json:.babelrc
{
    "presets": [
        [
            "es2015",
            { "modules": false }
        ]
    ],
    "plugins": ["external-helpers"]
}
```

rollup.js で babel を用いる場合、以前は `babel-preset-es2015-rollup` を用いるようになっていましたが、現在は rollup.js 用の presets を使う必要は無くなっています。

`babel-plugin-external-helpers` については、私のブログに記載したものがありますのでよろしければどうぞ。
[babel-plugin-external-helpers について - 備忘録β版](http://yami-beta.hateblo.jp/entry/2016/08/28/012405)

## ビルド周り

普段は [gulp](http://gulpjs.com/) を使っているのですが、rollup.js, babel, gulp の組み合わせは相性が悪かったので、npm-scripts ですべて行うことにしました。

参考：[ES6のgulpfile.babel.jsがrollupのpresetとconflictしたときの対処法 - Qiita](http://qiita.com/naoyashiga/items/ec41ea9ce2d96720238b)

[npm-run-all](https://github.com/mysticatea/npm-run-all) を用いると glob で実行するタスクを指定できるため便利です。

```json:package.json
{
  "scripts": {
    "build:sass": "node-sass src/scss -o dist/css",
    "build:sass:watch": "node-sass -w src/scss -o dist/css",
    "build:js": "rollup -c rollup.config.js & rollup -c rollup.config.minify.js",
    "build:js:watch": "rollup -w -m inline -c rollup.config.js & rollup -w -m inline -c rollup.config.minify.js",
    "browsersync": "browser-sync start -s --startPath example --files 'example/*.html, dist/js/**/*.js, dist/css/**/*.css'",
    "build": "npm-run-all -p build:*",
    "dev": "npm-run-all -p build:*:watch browsersync",
    "version": "npm run build && git add --all",
    "test": "echo \"Error: no test specified\" && exit 1"
  }
}
```

### browser-sync と npm-run-all

開発中にブラウザを自動リロードしてほしかったため [browser-sync](https://www.browsersync.io/) を用いていました。

以下のように npm-run-all で browser-sync のタスクも実行しようとしていたのですが、`browsersync` のみが実行され `build:*:watch` が実行されず悩まされました。

```json:package.json
{
  "scripts": {
    "browsersync": "browser-sync start -s --startPath example --files 'example/*.html, dist/js/**/*.js, dist/css/**/*.css'",
    "dev": "npm-run-all browsersync -p build:*:watch"
  }
}
```

簡単に調べたところ **browser-sync は npm-run-all で直列実行ができない**ようで、`browsersync` のタスクも並列実行に含めることで対応しました。
おそらく、browser-sync の exit status が0でないことが原因ではないかと思います。


# まとめ
rollup.js を使うのは初めてでしたが `<script>` と npm の両対応が簡単に出来たので、用途によっては browserify ではなく rollup.js を用いることを検討しても良いかと思います。
【JavaScript】「formをjsonにしてpost」する。

##formをjsonにしてpostしたい
~~英単語ばかりで気持ち悪い。~~

とりあえず、こんなhtmlがあるとする。

```html:sample.html
<form action="dummy" accept-charset="UTF-8" method="post">
	<input type="text"   name="hoge"></input>
	<input type="text"   name="fuga"></input>
	<input type="submit" name="submit"></input>
</form>
```
これを以下のようなjson形式でpostしたい。

```json:sample.json
{
  "hoge": "aaa",
  "fuga": "bbb"
}
```

###①serializeArray()を使う
まず、jQueryで用意されてる`serializeArray()`を使う。

```js:sample.js
$('form').submit(function(){
  var data = $('form').serializeArray();
}
```

すると、以下のようなjsonが返却される。

```json:output.json
[
  {
    "name":  "hoge",
    "value": "aaa"
  }, {
    "name":  "fuga",
    "value": "bbb"
  }
]
```


###②欲しい形にparseする
上記のJSONのままだと要件に満たないので、要件と満たすように変換する関数を作成する。

```javascript:sample.js
$('form').submit(function(){
  var data = $('form').serializeArray();
  data = parseJson(data);  // 作成した以下の関数を呼び出す
}

// ②変換関数：json to 欲しい形
var parseJson = function(data) {
  var returnJson = {};
  for (idx = 0; idx < data.length; idx++) {
    returnJson[data[idx].name] = data[idx].value
  }
  return returnJson;
}
```

###③最終形(ajaxを使って送信)

```javascript:sample.js
$('form').submit(function(){
  var data = $('form').serializeArray();  // ①form to json
  data = parseJson(data); // ②json to 欲しい形
  // ③送信
  $.ajax({
    type:          'post',
    dataType:      'json',
    contentType:   'application/json',
    scriptCharset: 'utf-8',
    data:          JSON.stringify(data)
  })
}

// ②変換関数：json to 欲しい形
var parseJson = function(data) {
  var returnJson = {};
  for (idx = 0; idx < data.length; idx++) {
    returnJson[data[idx].name] = data[idx].value
  }
  return returnJson;
}
```


以上。

serializeArray()使ったり、stringify()使ったりで、何が何やらって感じになってしまった。
上手く出来る人いたら教えてください。
Xillybus and ROS on Ubuntu14.04 on Zybo

##目標
このチュートリアルではDigilentの[Zybo](https://reference.digilentinc.com/reference/programmable-logic/zybo/start)上でUbuntu14.04 + Xillybus + ROS indigoが動作するLinuxシステムを作成します。

##使用環境

本チュートリアルではLinuxマシンとWindowsマシンの両方を使用しています。  
どちらのマシンにもVivado14.04(SDKも)をインストールしてください。

- Linuxマシン：Ubuntu16.04 64bit
	- Vivado 2014.4
- Windowsマシン：Windows10 (回路の論理合成をするため。LinuxマシンのみでもOK)
	- Vivado 2014.4
- Zybo
- microSD 16GB：8GB以上推奨

<a name="Contents"></a>
##Contents

- [Part 1](http://qiita.com/kazuyamashi/items/4a0a7e530cb1965a2484)
	- ハードウェアのビルド:Windows
	- u-bootのビルド:Ubuntu
	- BOOT.binの生成:Windows
- [Part 2](http://qiita.com/kazuyamashi/items/b3ba8a60fff0eb555127)
	- Linuxカーネルのビルド:Ubuntu
	- デバイスツリーファイル(dtb)の作成:Ubuntu
	- uEnv.txt作成:Ubuntu
- [Part 3](http://qiita.com/kazuyamashi/items/0d47e8930d5810ed5f19)
	- Ubuntuのファイルシステムの取得:Ubuntu
	- ブート用SDの作成:Ubuntu
	- SDカードに書き込み:Ubuntu
	- 起動テスト:Windows
- [Part 4](http://qiita.com/kazuyamashi/items/4489a84452821746f9a4)
	- Zybo上における設定:Zybo
		- xillybusのデバイスドライバのパーミッションの設定
		- Swap領域を作る
		- Proxyを設定する
		- 各種ツール導入
	- デモappを動かす:Zybo
	- ROS indigoのインストール:Zybo
	- Complete!


<a name="参考サイト"></a>
##参考サイト

このチュートリアル作成において、以下webサイト並びに作成者様には大変感謝しております。  
ありがとうございました。

- [FPGAの部屋](http://marsee101.blog19.fc2.com/)
	- [ZYBO用のEmbedded Linux チュートリアル１（IPのアップグレード）](http://marsee101.blog19.fc2.com/blog-entry-2911.html)
	- [ZYBO用のEmbedded Linux をブートするSDカードの作り方](http://marsee101.blog19.fc2.com/blog-entry-2929.html)
	- [ZYBOのDigilent Linux KernelにARMhfのRoot File Systemsを入れる](http://marsee101.blog19.fc2.com/blog-entry-3056.html)
	- [ZedBoard用のUbuntu Linuxをビルド８（swap spaceの追加）](http://marsee101.blog19.fc2.com/blog-entry-2820.html)
- [blog 渓鉄 : ZYBOでUbuntuのルートファイルシステムを使用する](http://keitetsu.blogspot.jp/2015/01/zyboubuntu.html)

<a name="各種ドキュメント"></a>
##各種ドキュメント
- [Xillybus Documentaion](http://xillybus.com/doc)
	- [Getting started with Xillinux for Zynq-7000 EPP ](http://xillybus.com/downloads/doc/xillybus_getting_started_zynq.pdf)
	- [Getting started with Xillybus on a Linux host](http://xillybus.com/downloads/doc/xillybus_getting_started_linux.pdf)
	- [The guide to Xillybus Lite](http://xillybus.com/downloads/doc/xillybus_lite.pdf)
- [ROS Wiki : Ubuntu ARM install of ROS Indigo](http://wiki.ros.org/indigo/Installation/UbuntuARM)
link > Code Review Stack Exchange

StackExchangeにCode Reviewをするサイト?がいつの間にやらできていた。

http://codereview.stackexchange.com/

投稿すると色々な人から改善案をいただくという趣旨のようだ。

自分が使うかどうか(Code Reviewを受けたいかどうか)はまだよく分からない。
投稿して数日待ってもいいような状況には使えそうだろうか。

他の人がReviewされていく様子を見ることで学習になるかもしれない。

[Python関連](https://codereview.stackexchange.com/questions/tagged/python?sort=newest&pageSize=15)
[C#関連](https://codereview.stackexchange.com/questions/tagged/c%23)
[LINQ関連](https://codereview.stackexchange.com/questions/tagged/linq)
[beginner関連](https://codereview.stackexchange.com/questions/tagged/beginner)
[WPF関連](https://codereview.stackexchange.com/questions/tagged/wpf)
【Unity拡張】ゲーム再生中に値の変更を禁止するAttributeを作ってみた

#はじめに
「ゲーム停止中はインスペクターから値を変更したいけど、再生中には変更を禁止させたいなぁ」
と思ったので、エディタ再生中に値の入力を禁止させるAttributeを作ってみました。

本記事のUnityのバージョンは Unity5.5.0b7 です

##前提 - Attribute(属性)について
Unityでは変数にSerializeField属性をつけるとInspector上から数値を入力できるようになります。

```NewBehaviourScript.cs
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [SerializeField]
    private int x;
}
```
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/29a569be-bf1b-a0ed-993c-2f6098e8cff4.png)

##今回作ったものについて
今回は```ConstantField```というAttributeを作ってみました。 

以下のように使います。

```NewBehaviourScript.cs
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [ConstantField]
    [SerializeField]
    private int x;
}
```

これを使うとエディタ停止中は通常通り入力ができて、
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/0d59f646-1319-92d0-c83c-ee71bf6dc7bb.png)

エディタ再生中には値の編集ができなくなります。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/4ec0def4-9770-aef9-9bd7-441fd73506be.png)

<br>
以上で```ConstantField```についての解説は終わりです。

#ソースコード
以下のスクリプトをプロジェクトに入れてください

```ConstantFieldAttribute.cs
using UnityEngine;

/// <summary>
/// エディター再生時に値の変更を禁止するAttribute
/// </summary>
public class ConstantFieldAttribute : PropertyAttribute
{
}
```

以下のスクリプトをプロジェクトのEditorフォルダ以下に入れてください

```ConstantFieldDrawer.cs
using UnityEngine;
using UnityEditor;

/// <summary>
/// ConstantField属性の描画を行うクラス
/// </summary>
[CustomPropertyDrawer(typeof(ConstantFieldAttribute))]
public class ConstantFieldDrawer : PropertyDrawer
{
	public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
	{
		label.text += " (Constant)";
		EditorGUI.BeginDisabledGroup(EditorApplication.isPlaying);
		EditorGUI.PropertyField(position, property, label);
		EditorGUI.EndDisabledGroup();
	}
}
```

この二つのスクリプトをプロジェクトに入れれば、```ConstantField```が使えるようになります。(完)

#参考URL
自分だけのPropertyDrawerを作ろう！
http://qiita.com/kyusyukeigo/items/8be4cdef97496a68a39d
ElastiCache(redis) を EC2 上の Rails に接続

# ElastiCache用セキュリティグループの設定
## セキュリティグループの作成
EC2ダッシュボード ＞ セキュリティグループ ＞ セキリュリティグループの作成

![スクリーンショット 2016-11-18 18.16.19.png](https://qiita-image-store.s3.amazonaws.com/0/71267/04375525-94ca-bbd2-39ff-5ce5656d3aad.png)

## セキュリティグループの設定

| 項目 | 設定する内容 |
|:----------|:------------|
|セキュリティグループ名|任意|
|説明|任意|
|VPC|EC2インスタンスが存在するVPCを選択|

## ルールの追加
[ルールの追加]をクリック

| 項目 | 設定する内容 |
|:----------|:------------|
|タイプ|カスタムTCPルール|
|プロトコル|TCP|
|ポート範囲|6379(Redisのデフォルト)|
|送信元|任意の場所|

インバウンドに追加する(RedisからEC2へのアクセスを許可する設定を追加する)


# ElastiCache(redis)の起動

* AWSサービス一覧からElastiCacheを選択
* ElastiCache ＞ Redis ＞ Create
* Cluster engine : Redis を選択

## Redis settings

![スクリーンショット 2016-11-18 18.37.19.png](https://qiita-image-store.s3.amazonaws.com/0/71267/a0a971a2-205e-752c-14bd-d75a5c848127.png)

| 項目 | 設定する内容 |
|:----------|:------------|
|Subnet group|EC2インスタンスが存在するVPCを選択|
|Preferred availability zone(s)|No preference|
|Security groups|先ほど作成したセキュリティグループを選択|
|Parameter group|デフォルト(変更しない)|
|Node type|cache.t2.micro(今回は学習用のため一番小さいものを選択する)|
|Number of replicas|None|

## Node type 
ElastiCache は起動しているだけで[料金](https://aws.amazon.com/jp/elasticache/pricing/)が発生します。
Redis マルチ AZ と自動フェイルオーバーは、t1 と t2 のキャッシュノードタイプではサポートされていないので注意。

## Parameter group
Redisのオプションやパラメータの設定情報。
参考：[構成管理を意識したRDSのDBパラメータグループの更新作法](http://dev.classmethod.jp/cloud/aws/configuration-management-rds-db-parameter-group/)

# Advanced Redis settings
| 項目 | 設定する内容 |
|:----------|:------------|
|Multi-AZ with Auto-Failover|Redis マルチ AZ と自動フェイルオーバーを使用するか|
|Subnet group|EC2が存在するVPCを選択|
|Preferred availability zone(s)|No preference|
| Security groups |作成したセキュリティグループを選択|

# Import data to cluster
起動時の初期データインポート(必要な場合のみ)

# Backup
バックアップの設定

# Maintenance

[よくある質問](https://aws.amazon.com/jp/elasticache/faqs/)

Q: メンテナンスウィンドウとは何ですか?ソフトウェアメンテナンス中にノードを利用できますか?

>Amazon ElastiCache のメンテナンスウィンドウは、要求または必要とされるイベントで、ソフトウェアのパッチ適用が発生した際に、それをコントロールする機会として考えることができます。「メンテナンス」イベントが特定の週に予定されている場合、お客様が特定した60分のメンテナンスウィンドウ中の一定の時点で、開始されて完了します。

>ソフトウェアのパッチ適用が予定されている場合、メンテナンスウィンドウの間、ノードに多少のダウンタイムが発生する可能性があります。詳細については、「エンジンのバージョン管理」を参照してください。パッチ適用は、ユーザーからリクエストすることができます。例えば、キャッシュソフトウェアのアップグレード、または必要に応じてそう判断した場合（システムまたはキャッシングソフトウェアにセキュリティ上の脆弱性を当社が識別した場合）。このようなパッチ適用は頻繁に発生するものではありません（通常数ヵ月に一度です）。また、お客様のメンテナンスウィンドウのごく一部以外を使用する必要があることは稀なはずです。クラスターの作成時に、希望する週間メンテナンスウィンドウを指定しない場合、デフォルト値である 60 分が割り当てられます。メンテナンスの実行時期を自分で変更する場合、AWS マネジメントコンソールで DB インスタンスを変更するか、または ModifyCacheCluster API を使用して変更できます。各クラスターに個別のメンテナンスウィンドウを選択できます。

ElastiCache のパッチ適用が発生した場合に、パッチを適用する時間をコントロールするために設定が必要。
運用するサービスのメンテナンス時間が決まっている場合は設定するのが良さそう。

# Railsの設定
redisの設定ファイルで、接続先を変更する。
接続先は作成したElastiCache(redis) のエンドポイント(XXXXXXX.cache.amazonaws.com)


参考：[AWS ElastiCacheでredis](http://qiita.com/supertaihei02/items/f3ef9148fd5235ee2816)
echoのv3にアップデートした時に修正した箇所

echoのv3にアップデートした時に修正した箇所

## Request, Response

net/httpとfasthttpの両対応のための抽象化がなくなったのでシンプルになった。

### http.ResponseWriter

echo.Contextからhttp.ResponseWriterを取り出す方法。

```go
// 旧
w := c.Response().(*standard.Response).ResponseWriter

// 新
w := c.Response()
```

### http.Request

echo.Contextからhttp.ResponseWriterを取り出す方法。

```go
// 旧
r := c.Request().(*standard.Response).Request

// 新
r := c.Request()
```

### Query

```go
// 旧
values := c.Request().URL().QueryParams()

// 新
values := c.Request().URL.Query()
```

### RequestURI

```go
// 旧
values := c.Request().URI()

// 新
values := c.Request().RequestURI
```

## パス * の取得

ルーティングで `"/foo/*"` とした場合のパスパラメータの取得。

```go
// 旧
c.P(0)

// 新
c.Param("*")
```

## ServeContent

無くなったので、http.ServeContentを使う。

```go
// 旧
err := c.ServeContent(fp, fi.Name(), fi.ModTime())

// 新
http.ServeContent(c.Response(), c.Request(), fi.Name(), fi.ModTime(), fp)
```

## Start

```go
// 旧
err := e.Run(standard.New(addr))

// 新
err := e.Start(addr)
```

## Stop

Shutdownでタイムアウトを設定できるようになった。

```go
// 旧
e.Stop()

// 新
e.Shutdown(time.Second * 3)
```
【swift3.0/2.3】よく使う!モーダル表示まとめ【背景透明view】

**元の画面は見せつつメニューとか何かしらのviewを見せたいことってあるよね**

こんな感じのやつ
※スタンプアプリをイメージ

![modal_sample.gif](https://qiita-image-store.s3.amazonaws.com/0/142453/f73c4782-c850-a3db-75d6-a26c93b5d345.gif)

背景を透過させてモーダル表示をすれば良いんだけど、ちょっと注意が必要なのでメモとして残しておく

## 書き方(iOS8以上、swift2.3)

#### 親からviewを呼び出すとき

```
let viewController = UIViewController()
viewController.modalPresentationStyle = .OverCurrentContext
viewController.view.backgroundColor = UIColor.clearColor()
presentViewController(viewController, animated: true, completion: nil)
```

#### viewを閉じるとき

```
dismissViewControllerAnimated(true, completion: {
        [presentingViewController] () -> Void in
            // 閉じた時に行いたい処理
            presentingViewController?.viewWillAppear(true)
})
```

*注意点*

* presentViewControllerの前にmodalPresentationStyleとbackgroundColorをセットする
* OverCurrentContextを使うと親のviewWillDisappearは呼ばれない
* viewを閉じても親のviewWillAppearは呼ばれない

→要するにviewを閉じても呼び出した時の状態のまま親viewに戻る

>上記は、閉じた時に親のviewWillAppearを呼ぶようライフサイクルを変更してみてます。
>上記のようにしても今のところ不具合は確認できませんでしたが
>閉じた時に何か処理をさせたい場合は、処理させたいメソッドを呼び出すようにするといいかも。

## おまけ①

* [Swiftでモーダルの切り替わり方サンプル](http://qiita.com/osamu1203/items/6c203f3f048f9d7540f3)

modalTransitionStyleを指定すると画面の切り替え方をカッコよくできます！！
分かりやすくまとまってるのでオススメ☆

## おまけ②

### swift3.0での書き方

#### 親からviewを呼び出すとき

```
let viewController = UIViewController()
viewController.modalPresentationStyle = .overCurrentContext
viewController.view.backgroundColor = UIColor.clear
present(viewController, animated: true, completion: nil)
```

#### viewを閉じるとき

```
dismiss(animated: true, completion: {
        [presentingViewController] () -> Void in
            // 閉じた時に行いたい処理            
            presentingViewController?.viewWillAppear(true)
})
```

ちょっと短くなってスッキリ♪

>「.OverCurrentContext」が3.0では「.overCurrentContext」になってた。
>こんなのなかなか気付かないよねw
Herokuのタイムゾーン変更


# 概要

Herokuのタイムゾーン変更手順です。

# 変更手順

## Herokuのタイムゾーンを確認

`heroku run bash`コマンドでコンソールを表示し、dateコマンドで現在時刻を確認します。

```bash
$ heroku run bash
Running bash on ⬢ my-heroku-app... up, run.1234 (Free)
~ $ date
Mon Nov 21 02:35:04 UTC 2016
```

## タイムゾーンの設定と確認

`heroku config`でタイムゾーンを`Asia/Tokyo`に設定します。

```bash
$ heroku config:add TZ=Asia/Tokyo
Setting TZ and restarting ⬢ my-heroku-app... done, v123
TZ: Asia/Tokyo
```

タイムゾーンが変更されているか確認します。

```bash
$ heroku run bash
Running bash on ⬢ my-heroku-app... up, run.1234 (Free)
~ $ date
Mon Nov 21 11:35:48 JST 2016
```

変更できました。

# 参考
- http://stackoverflow.com/questions/8275001/why-cant-i-start-a-heroku-console-on-the-cedar-stack
ポケモン（Android4.4以上）のおかげで実質解禁になったCSS5選


ポケモンGO
某アプリのおかげでAndroid4.4未満は実質的にサポート対象から外れました（そういうことにしてください）
これで**やっと普通に使える！！！**！と思ったCSSが**5つ**あったので、その思いの丈を述べたいと思います。


# 1. Viewport units(vw,vh,vmin,vmax)

http://caniuse.com/#feat=viewport-units
ビューポートの縦/横幅の長さの単位。
デバイスの画面サイズに基づいた長さの指定ができる。
ex)`1vh`はビューポートの高さの1%。

| 単位 |  |
|:-:|:--|
|**vh** (viewport high)|ビューポートの高さの1/100|
|**vw** (viewport widht)|ビューポートの横幅の1/100|
|**vmin** (viewport minimum)|ビューポートの高さか横幅の、小さい方の1/100|
|**vmax** (viewport max)|ビューポートの高さか横幅の、小さい方の1/100|

「特定のコンテンツをファーストビューいっぱいに表示したい」時に、今まではJSでwindow.heightだっけ？innerHeightだっけ？それともscreen.height？と調べながら画面サイズ取得してロード後ガクンガクン動くのを見ないふりしてたのが、`vh`一つで用が済むようになった。
`%`でも良さそうなものだけど、あくまで親要素の高さに基づいて計算されるのでビューポートのサイズとは必ずしも一致しなかった。というか期待したように一致してくれたことはない。

# 2. CSS background-position edge offsets

http://caniuse.com/#feat=css-background-offsets
background-positionのオフセット記法。
「右から5px、下から5px」のように、右下を基準にして配置ができる。

```CSS
background-position: right 5px bottom 5px; 
```

致命的ではないんだけど、可変レイアウトで組むとき地味にうまく配置できないから助かる。
`right bottom`で代替できそうでいてbackground-sizeで相対値入れてるとまた微妙な配置になってて、fluidgrid/imageが一般的になったのにこんな不自由ありえない…って思ってた。

# 3. CSS Filter Effects
http://caniuse.com/#feat=css-filters

ブラーかけたり色調・彩度・明度などなどフィルターをかけられるアレ。

```CSS
img {
   /* グレースケール50% + ブラー5px */
   filter:grayscale(0.5) blur(5px);
}
```

![スクリーンショット 2016-11-21 9.49.30.png](https://qiita-image-store.s3.amazonaws.com/0/54497/2dae38e2-b842-aeec-b6dd-d3d48d4262f9.png)    →    ![スクリーンショット 2016-11-21 9.49.11.png](https://qiita-image-store.s3.amazonaws.com/0/54497/9f59c680-43aa-53a6-e5de-2d5254b973f6.png)

今更感がすごかったので逆に感慨深かった。
パフォーマンスに影響するようで、エフェクト毎にまとめている記事があった。
体感的に１つ２つ程度では問題なさそうだった。
https://www.html5rocks.com/en/tutorials/filters/understanding-css/


# 4.Flexible Box Layout Module

http://caniuse.com/#feat=flexbox

> flexible box モデルは、float を使わず、そして flex container のマージンがそのコンテンツのマージンを相殺することも無く、block モデルを超えるための手段を提供します。
[CSS flexible box の利用 - MDN](https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Flexible_Box_Layout/Using_CSS_flexible_boxes)

コンテナボックスをフレキシブルに配置できるdisplayプロパティ。
例えば下のように３分割配置したい時、
![スクリーンショット 2016-11-21 9.18.23.png](https://qiita-image-store.s3.amazonaws.com/0/54497/ab2bd483-9241-9da9-aa6f-f77402733026.png)
[Flexbox Playground](https://demos.scotch.io/visual-guide-to-css3-flexbox-flexbox-playground/demos/)

シンプルなhtmlと簡単なCSSで**左右marginなし、余白等分した**３分割ブロックが組める。

```HTML
div.container > div*3
```

```CSS
.container {
  display: flex;
  flex-wrap: wrap;
  flex-direction: row;
  justify-content: space-between;
}
.container > div {
  width: 30%;
}
```

二転三転した仕様がやっと落ち着いた雰囲気だったのに、Androidだけ`flex-wrap`が使えない地獄が続いていた。
もうfloat解除やdisplay:inline-boxの隙間にウンザリしなくても良いし、JSで一番長いサイズ取得して他と揃えて…なんて虚しい作業からやっと解放される。


# 5.calc() as CSS unit value
http://caniuse.com/#feat=calc

単位が異なってても四則計算をしてくれる。
※Android4.4は**足し算**と**引き算**まで。

```sass
// 横100%のコンテンツだけど左右20pxずつ短くしたい時
width : calc(100% - 40px);
```

これだけなんだけど、とてもとても嬉しい。
メタ言語噛ませるくらいなら固定値入れてしまえと何度やったことか。
可変レイアウトなのになんとなく決め打ちしちゃって不恰好になってため息つくことはもうない、はず。
ちゃんと使いこなせるように勉強しよう・・・。


# 他にも

ShadowDOMやHTMLTemplateも使えるようになった？ようで、本格的にWebコンポーネント使う時代がくるのかなあと期待している。


# 終わりに
えーIE11…
大幅に変更された poderosa を使ってみた

* [Poderosa Terminal – プロフェッショナルのためのSSHクライアント](https://ja.poderosa-terminal.com/)
* [環境設定マニュアル – Poderosa Terminal](https://ja.poderosa-terminal.com/preferenceeditor/)

## 特徴

* portable版がある
* 描画がおしゃれ
* 日本語入力ができない（？）
* ウィンドウ分割対応

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/25728/8f9f5427-32fa-c719-5505-6cb5e9d37326.png)

## 注意点

VirtualBoxのNATでポート変換しているLinuxマシンにsshしようとするとき、
localhost を指定すると接続できなかった。（::1に接続しに行っていた）
127.0.0.1を指定すると接続できた。（windows10にて確認。）
なお「設定とツール」からIPv4のみに変更も可能。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/25728/71fcf248-3374-5813-c05e-75532548824f.png)
[Rust]クイックソート[覚書]


セミコロンレスでクイックソートを書いてみたいのだけれど、とりあえず普通にクイックソートを書いてみた覚書。

```rust:quicksort.rs
pub fn quicksort<T: Ord + Copy>(numbers: &mut [T]) {
    let last: usize = numbers.len() - 1;
    q_sort(numbers, 0, last);
}

fn q_sort<T: Ord + Copy>(numbers: &mut [T], left: usize, right: usize) {
    let pivot = numbers[left];
    let mut l = left;
    let mut r = right;
    while l < r {
        while (numbers[r] >= pivot) && (l < r) {
            r = r - 1;
        }
        if l != r {
            numbers[l] = numbers[r];
            l = l + 1;
        }
        while (numbers[l] <= pivot) && (l < r) {
            l = l + 1;
        }
        if l != r {
            numbers[r] = numbers[l];
            r = r - 1;
        }
    }
    numbers[l] = pivot;
    if left < l {
        q_sort(numbers, left, l - 1);
    } 
    if right > l {
        q_sort(numbers, l + 1, right);
    }
}

#[cfg(test)]
mod tests {
    use super::*; // 外の定義にアクセスするため use

    #[test]
    fn test_quicksort(){
        let mut numbers = [5, 3, 1, 6, 8, 4, 7, 2];
        quicksort(&mut numbers);
        assert_eq!([1, 2, 3, 4, 5, 6, 7, 8], numbers);
    }
}
```

参考: [http://www.codereading.com/algo_and_ds/algo/quick_sort.html](http://www.codereading.com/algo_and_ds/algo/quick_sort.html)
Quartz Schedulerでジョブを即時発行


## 環境

こちらの記事と同様です。
[Quartz Schedulerでワンタイムジョブ発行](http://qiita.com/kojisaiki/items/72a2211492a8805a9553)

## 動作

1. WEBサーバの形式でアプリケーションを実行します。
1. /api/job/onetime?value=fooにPOSTリクエストすると、ジョブを実行開始するだけですぐさまレスポンス200が返ってきます。
1. すぐにジョブが実行されて、サーバログに「Executiong HelloJob ! : [valueの値"foo"] | at [実行日時]」が出力されます。

## コード

### ジョブの定義

こちらの記事と同様です。
[Quartz Schedulerでワンタイムジョブ発行 - ジョブの定義](http://qiita.com/kojisaiki/items/72a2211492a8805a9553#%E3%82%B8%E3%83%A7%E3%83%96%E3%81%AE%E5%AE%9A%E7%BE%A9)

### スケジューラの定義・生成

こちらの記事と同様です。
[Quartz Schedulerでワンタイムジョブ発行 - スケジューラの定義・生成](http://qiita.com/kojisaiki/items/72a2211492a8805a9553#%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%A9%E3%81%AE%E5%AE%9A%E7%BE%A9%E7%94%9F%E6%88%90)

### HelloJobを実行するためのサンプルアプリ（RESTコントローラ）

クラスの定義はこちらの記事と同様です。
[Quartz Schedulerでワンタイムジョブ発行 - HelloJobを実行するためのサンプルアプリ（RESTコントローラ）](http://qiita.com/kojisaiki/items/72a2211492a8805a9553#hellojob%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%A2%E3%83%97%E3%83%AArest%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9)

メソッドだけ違います。

```java:JobResource.java


    /**
     * ジョブの即時実行
     *
     * @param value
     * @return
     * @throws URISyntaxException
     */
    @ApiOperation(value = "ジョブの即時実行", notes = "ワンタイムジョブを即時実行します。ジョブの登録処理だけですぐにレスポンスが返ってきます。")
    @RequestMapping(value = "/kick",
        method = RequestMethod.POST,
        produces = MediaType.APPLICATION_JSON_VALUE)
    @Timed
    public ResponseEntity<String> kickJob(
        @RequestParam(value = "value", defaultValue = "lol") String value
    ) throws URISyntaxException, SchedulerException {
        log.debug("REST request to kick job just now : " + value);

        JobDetail job = newJob(HelloJob.class)
            .withIdentity("job2", "group1")
            .storeDurably()  // <==========※これが必要！記述してないと例外「org.quartz.SchedulerException: Jobs added with no trigger must be durable.」が発生します。
            .build();
        job.getJobDataMap().put("value", value);
        scheduler.addJob(job, true);
        scheduler.triggerJob(job.getKey());

        return ResponseEntity.ok().body("job kicked! : " + value);
    }
```
Chromeブラウザに表示されるSSLアイコンについて。

# はじめに
先日、[https://blog.proudit.jp]()のサイトURLがいつもと違うのに気づきました。
通常SSLが導入されているサイトにChromeでアクセスするとURL欄に緑色の鍵マーク![lock.png](https://qiita-image-store.s3.amazonaws.com/0/82090/b40929f4-e811-187f-0559-2d64b6661342.png)が表示されると思いますが、![info.png](https://qiita-image-store.s3.amazonaws.com/0/82090/fdfe296e-64c9-2070-05a6-bead94ae23c7.png)のマークになっていました。
![ssl-url.png](https://qiita-image-store.s3.amazonaws.com/0/82090/8411a031-40aa-6fdc-f896-ffb9f1a89832.png)

ちょっと、気になって調べてみたところ、アイコンは３種類(![lock.png](https://qiita-image-store.s3.amazonaws.com/0/82090/b40929f4-e811-187f-0559-2d64b6661342.png) ![info.png](https://qiita-image-store.s3.amazonaws.com/0/82090/fdfe296e-64c9-2070-05a6-bead94ae23c7.png) ![unnamed.png](https://qiita-image-store.s3.amazonaws.com/0/82090/293418fe-e323-cc47-e21d-d54ad90ccd3b.png))あるみたいです。


# SSLアイコンについて
アイコンの詳しい内容については[Chromeヘルプ](https://support.google.com/chrome/answer/95617?hl=ja)に載っていますがざっとまとめると以下のような感じです。

## ロック ![lock.png](https://qiita-image-store.s3.amazonaws.com/0/82090/b40929f4-e811-187f-0559-2d64b6661342.png)
このサイトへの接続はプライベート接続で正常な状態となります。
サイトの証明書が有効で、Chromeとサイトの間で暗号化接続がちゃんと確立されていることを示します。また、サイトへ送信する情報はプライバシー保護がされます。

## 情報 ![info.png](https://qiita-image-store.s3.amazonaws.com/0/82090/fdfe296e-64c9-2070-05a6-bead94ae23c7.png)
このアイコンは２つの場合が考えられます。

##### **| このサイトへの接続はプライベート接続ではありません。**
この場合はサイトからHTTPS証明書が送信されていない状態です。
つまり接続が暗号化ができていないことになります。
この場合、パスワードやクレジットカードなどの機密情報は入力しないように気をつけましょう。

##### **| このサイトへの接続はプライベート接続です。ただし、ネットワーク上のユーザーがこのページのデザインを変更できる可能性はあります。**
サイトとの間はプライベート接続はされているので基本的には暗号化はされています。ただ、一部のコンテンツでHTTPSが使用されていない(HTTPが使用されている)ため、その部分では接続に暗号化がされていません。
つまり、そのサイト内でリンクを貼っていたりする場合、URLが**http://**で指定されていたりする可能性があります。

## 警告 ![unnamed.png](https://qiita-image-store.s3.amazonaws.com/0/82090/293418fe-e323-cc47-e21d-d54ad90ccd3b.png)
サイトへの接続が適切に暗号化されていない場合に発生します。
期限が切れていいたり、証明書のドメインがサイトのドメインと異なるなど、証明書が不正な場合に発生します。
また、この表示がされるサイトは危険なサイトであるか、個人情報や機密情報を騙し取る虚偽サイトである可能性があります。
とにかく気をつけましょう。


# 確認
今回の場合、情報アイコン![info.png](https://qiita-image-store.s3.amazonaws.com/0/82090/fdfe296e-64c9-2070-05a6-bead94ae23c7.png)が表示されています。
その情報アイコンをクリックすると、そのサイトの接続状態の説明が吹き出しで表示されます。
より詳しい内容を確認するには詳細をクリックします。
![ssl-icon-check1.png](https://qiita-image-store.s3.amazonaws.com/0/82090/9a0d65a1-1a8d-6824-c89c-c826e2aea437.png)

すると以下のような画面が表示されます。**「Mixed Content」**となっていて説明にも**「This site includes HTTP resources」**となっているので、どうやらこのページ内に**http://**でリンクが貼られている部分があるみたいです。
![ssl-icon-check2.png](https://qiita-image-store.s3.amazonaws.com/0/82090/b9f901fd-0f19-3dfe-d05b-e730d7239df8.png)

では、実際にそれはどこになるのでしょうか？それを確認するにはこの状態で更新をしてみましょう。
すると中央の部分にさっきとは違って色々URLがリストされます。ここの**Non-Secure Origins**にリストされているのが**http://**でリンクを貼っている部分、**Secure Origin**にリストされているのが**https://**でリンクを貼っている部分になります。
![ssl-icon-check3.png](https://qiita-image-store.s3.amazonaws.com/0/82090/411707b7-3fd9-4603-d0ec-9c5c9cd02aa8.png)

本来であればここで**http://**の部分を**https://**へ修正してあげるべきなのですが、必ずしもそのリンク先が**https://**に対応しているサイトであるとは限りません。今回は対応していなかったのでこのままにしました。


# おわりに
最近ではデフォルトでSSLを導入しているサイトが増えてきましたが、サイト内のリンクにも注意する必要があります。そこでChromeはそこらへんもデフォルトでアイコン表示してくれるのですぐ気がつくし、対応必要箇所が簡単に確認できるなと感じました。
ただ、今回みたいに回避不能な場合はちょっと辛いですね。。。
「Markdownを表示する」ボタンを追加するユーザースクリプト 新レイアウト版

# 追記(2016/12/08)

標準でできたよ！
[Qiita記事をマークダウンで見ることができるようになってました - Qiita]
文字揃えの関係でやや勝った気分。
なお、少なくとも約2年越しの要望実現となります。
[Qiita要望 | 記事の Markdown を読み取り専用で表示する raw ボタン の追加 #qiita - Qiita]
25日に実装されればまさしくプレゼントだった。

# <i class="fa fa-cubes"></i> 概要

新レイアウトで動作しなくなった、
[「Markdownを表示する」ボタンを追加するユーザースクリプト - Qiita]
の勝手フォーク版です。
とっても便利なので継続して使わせてもらいます。

[こういった記事]も定期的に挙がるので、標準でほしいですね。

# <i class="fa fa-cogs"></i> 動作検証環境

* Cyberfox 50
* greasemonkey

# <i class="fa fa-code"></i> コード

Gistスクリプトリンク<i class="fa fa-external-link"></i>[qiita_source.user.js]

```js:qiita_source.user.js

// ==UserScript==
// @name        Qiita Source
// @namespace   com.cielavenir
// @description Show link to Qiita Markdown source.
// @include     http://qiita.com/*/items/*
// @include     http://qiita.com/*/private/*
// @version     0.0.0.3
// ==/UserScript==
(function(){
    var ul=document.getElementsByClassName('dropdown-menu dropdown-menu-right');
    if(!ul)return;
    var li=document.createElement('li');
    var a=document.createElement('a');
    a.href=location.href.split('#')[0]+'.md';
    var span=document.createElement('span');
    span.className='fa fa-fw fa-file-text-o';
    span.setAttribute('aria-hidden', 'true');
    a.textContent=' Markdownを表示する';
    a.insertBefore(span, a.firstChild);
    li.appendChild(a);
    var li2 = li.cloneNode(true);
    ul[0].appendChild(li);
    ul[1].appendChild(li2);
})();

```


# <i class="fa fa-camera" aria-hidden="true"></i> スクリーンショット

![md1.png](https://qiita-image-store.s3.amazonaws.com/0/62354/37e58d58-d7bf-f935-c795-22f428fed907.png)

![md2.png](https://qiita-image-store.s3.amazonaws.com/0/62354/a1507e58-6e9a-5a5c-0a6d-7db1c1913a76.png)

今回の新レイアウトでいい点は、追加機能をドロップダウンリストに収められることですね。ごちゃごちゃしなくていい。
(クリック数とトレードオフなので、ずらっとならべてワンクリックもいいものです)

今回の新レイアウトになったことで起きた提起で知れたいい点は、
記事に対する欲求は初見のタイトル時と読んでる途中と読了に起こり、
その時点で素早くアクションを起こしたいらしいということ。
なので、ちょうど同じドロップダウンがあったので下部にも追加してみました。

# <i class="fa fa-twitter"></i> ひとりごと

新レイアウトになって色々動かなくなりましたけど更新ネタで食いつなげそうでうれしい。

自分はいいねよりストックがうれしいので、将来の非通知やContribution非加算は悲しいですね。

「自分と同じものを必要としている人が必要としているものは自分も必要かもしれない」とちょくちょくチェックしていたので。

あとはストックのハードルの高さによるContributionの価値かなー。



[「Markdownを表示する」ボタンを追加するユーザースクリプト - Qiita]:http://qiita.com/cielavenir/items/0fa75c187eb8747bc562
[こういった記事]:http://qiita.com/nishina555/items/cadc3592bca4660fe4b3
[qiita_source.user.js]:https://gist.github.com/khsk/9c3f75b24093b642ec222f921439c045/raw/fcb93bc733fafc4497236f96b4f0822d11be3511/qiita_source.user.js

[Qiita記事をマークダウンで見ることができるようになってました - Qiita]:http://qiita.com/shiozaki/items/8419c06fee8ef5471e3f
[Qiita要望 | 記事の Markdown を読み取り専用で表示する raw ボタン の追加 #qiita - Qiita]:http://qiita.com/tbpgr/items/b9baa2d82a560f42abfc
dockerコンテナからcapybaraのスクリーンショットをローカル環境にコピーする

諸事情あってfeature specはdockerコンテナ上で実行する必要があり、`docker cp`にいちいちコンテナIDを渡すのが面倒だったのでショートカットをつくた。テストプロセス内でファイル名取得しなきゃいけないのがまだ面倒だけど、pryからシェルを実行するときに引数を渡す方法がわからなかったのでとりあえずこれで凌ぐ。

```zsh
#!/bin/bash

function docker-cp() {
    usage_exit() {
        echo "Usage:\tdocker-cp /path/to/your/file" 1>&2
        return 0
    }

    if [ $# -eq 0 ]
      then
        usage_exit
        return 0
    fi

    FILE_PATH=$1
    CONTAINER_ID=`docker ps | grep your_app | head -1 | awk '{print $1;}'`

    docker cp $CONTAINER_ID:$FILE_PATH ~/Desktop/capybara/
}
```
SQLServer: SSMSで実行して速いのにプログラムから実行すると遅いストアド

ストアドプロシージャをSSMSで実行すると速いのに、プログラムから呼び出して実行すると何故か遅い、、、、という現象がおきました。

原因は異なるクエリプランが作成、使用されたことでしたが、なんで同一プロシージャに対して二つのプランが作られるのか、、、なかなかググっても出てきません。

``` sql:DMVを使って、特定のクエリの実行プランを取得するSQL
select top 100 * from sys.dm_exec_cached_plans
cross apply sys.dm_exec_sql_text(plan_handle) ss
--cross apply sys.dm_exec_query_plan(plan_handle) -- プランもみたいときはコメント外す
cross apply sys.dm_exec_plan_attributes(plan_handle) sb -- 細かいメタデータ見なくていいときはコメントアウト
where text like '%ストアド名とか%' -- ここで絞込み
and ss.dbid = DB_ID('DB名') -- DBID指定
```

同じSQLなのに異なる実行プランが生成されるということは、実行時になんらかの差異が生じているのだろうと思い、いろいろ調べたところ、原因はSETオプションの違いでした。

```
SETオプションの違い(この記事にたどり着くためのグーグル検索がなかなか大変でした）
http://gurizou94.blog.fc2.com/blog-entry-187.html
```

SSMSだとSet ARITH ABORT ON がデフォルトで、プログラムからの呼び出しはOFFがデフォルトのためでした。
「マネジメントスタジオで実行して速いのにASPから実行すると遅い」といった現象でお困りの方は試す価値があると思います。

ストアドプロシージャでなく、adhocクエリでも同様の現象を確認できたので、
速度を要求されるクエリの検証をSSMSで行う際は、

```
Set ARITHABORT OFF

--ここにクエリとかストアドのEXEC文。アプリケーションから呼ばれたときと同じプランが採用される

Set ARITHABORT ON
```

とすると、実際にWEBアプリから呼び出されるときと同じプラン、速度での確認ができるようです。

※正確には、ARITHABORTじゃなくてもANSI_NULLS ONとかQUAOTED_IDENTIFIERの値が違ってもNGですが、SSMSとプログラム側とのデフォルト値が異なるのがARITHABORT だけなので、基本的にARITHABORTだけ気をつければ大丈夫そうです。
googledriveにおいてあるファイルをcurlで落としてくる

```shell-session
% curl -L -o filename "https://drive.google.com/uc?export=download&id=XXXXXXXXXXXX"
```

- `-o` オプションでファイル名を指定しないとハッシュっぽいファイル名になるので指定したほうがわかりやすい
- URLはダブルクォートで囲う
ftpコマンドで接続が出来ない時

SCPコマンドを使う

```
$ scp [オプション] [ファイル名] [ユーザ名]@[ホスト名]:[リモートパス]

(例) ポート番号22で、index.html を転送する
$ scp -P 22 index.html admin@domain.com:/home/admin/htdocs/
admin@domain.com's password: 
index.html                                                         100%    4     0.0KB/s   00:00

(例) 秘密鍵を使用する場合
$ scp -P 22 -i ~/.ssh/id_rsa index.html admin@domain.com:/home/admin/htdocs/

(例) ディレクトリごと転送する場合
$ scp -P 22 -rq htdocs/ admin@domain.com:/home/admin/
```
Azure EventHub ( +Azure EventHub vs AWS Kinesis)

## Azure EventHubsとは

Microsoftが挙げているポートフォリオの一つに、Service Busというものがあります。
これは、アプリケーションとAzureサービスの間で信頼性の高いメッセージングサービスを
提供するというもの。
EventHubsは、何百万ものアプリケーション・デバイスから送信されるメッセージを受け付ける
ことのできる、パブリッシュ/サブスクライブサービス。

## 何がうれしいのか？

- 1秒間あたり数百万規模のメッセージを受け付けることができる。

- デバイスから送信されるログを集約するWebサーバを構築するのにくらべて、
安く、楽に、高可用性（スケール）、高信頼性(認証)、高耐障害性(バッファリング)な環境を構築することができる。

- 受け付けたメッセージをリアルタイムに処理を行うことに適している。
  - ETL, リアルタイムウィンドウ集計のためのストリームとして。


## EventHubsとKinesisの機能比較

|  | Azure EventHubs | Amazon Kinesis |
|:-:|:-:|:-:|
| Consumer | EventConsumer  |  Record |
| Streamの単位  | Partition(Partition key)  |  Shard ( partition Key) |
| offset  | Sequence number  | Sequence number  |
| ストリームPUT  | 1MB, 1000レコード  | 1MB, 1000レコード  |
| ストリームGET  | 2MB  | 2MB  |
| ストリーム受信  | PUSH  | PULL  |
| プロトコル  | AMQP, HTTPS  | TCP,HTTPS  |
| 開発ツール  | EventProcessorHostクラス  |  Kinesis Client Library |



## 共通の特徴

- クライアントから投入されたeventデータは、ストリーム内で複数のパーティションを設定でき、１パーティションに対して１つのConsumerが処理を行うことで並列処理が可能。

- パーティション同士でのeventデータの処理順序は保障されない。

- 必ず、同じプロセッサーに処理させたい。投入されたeventデータごとの処理順序を保障したい場合は、パーティションキーを利用してパーティションを指定し投入する。

- eventデータは最大7日間分が保持される。シーケンスナンバーを指定することで特定のメッセージを取得することができる。逆に保持されたeventデータを即時消すことはできない。

## EventHubsの利点

- Amazon Kinesisと比べてEventHubsの良いなと思った点。
  - AMQPプロトコルなので、デバイスから直接AMQPプロトコルでEventHubsにデータを投入することができる。Kinesisの場合は、SDKをデバイスに組み込んだり、Brokerを組み込むなどしないといけない。

  - SQLクエリによる集計(Stream Analytics)が利用できる。(まだ、AWSはサービスが一般に公開されていない)


## 所感

- Stream AnalyticsのSQLを少し触ってみて
  - 複数EventHubsからメッセージの統合、整形、分離が便利そうだと感じた。
  - ストリームに格納されているデータを削除できない。
    - データの遅延などを図るためにある程度の負荷をかけたあと、データを削除する手段がないので開発時面倒だった・・・。

- ストリーム内のパーティションのスプリットが大変。
  - 自動でスケールする仕組みがないので手で実装する必要がある。
IBInspectableをprivateには出来ない

```
@IBInspectable private var color: UIColor = .black
```

のようにした場合、Storyboardにcolorという変数は正しく出るが、きちんと変数に代入されない。
`@IBOutlet`はprivateにできるのに…。
少なくともStoryboardに出ないようにして欲しい。
Qiita issue report: view が増えない

![スクリーンショット 2016-11-21 9.27.40.png](https://qiita-image-store.s3.amazonaws.com/0/46544/df40aff7-24a0-1f59-159d-1c7a9d54cfb0.png)

view が０のまま増えないみたいです
記事がつまらなかったんだな orz と思ってたのですが、「いいね」も「ストック」もいただいているのに 0views って変ですよね
MACでArduino互換機(CH340)を接続するとMACがクラッシュする問題の解決方法

久しぶりにMAC Book ProにArduinoを接続したら、MACが落ちてハマりました。
解決方法がわかったので、展開しておきます。

# 原因：
16年9月頃にMac OS SierraのOS更新があり、CH340のドライバとの相性が悪いようです。

# 解決方法：
以下を参考に。ドライバの削除、再インストールで解決。
Run Makeblock hardware (and Arduino-compatible Boards with CH340/CH341) on Mac OS Sierra
http://www.mblock.cc/posts/run-makeblock-ch340-ch341-on-mac-os-sierra

## １、古いドライバの削除
ターミナルから以下のコマンドを実行します。
sudo rm -rf /System/Library/Extensions/usb.kext

## ２、MACのインストール設定
システム環境設定＞セキュリティとプライバシー＞一般
ダウンロードしたアプリケーションの実行許可「App Storeと確認済みの開発元からのアプリケーションを許可」に設定する。

## ３、最新のドライバを再インストール
http://download.makeblock.com/mblock/CH34x_Install_V1.3.pkg

## おまけ(調査の経緯)：
USBの電圧・電流チェッカーでは、5v、0.02Aなので、電源では無さそう。
ドライバ9月の最新にしたが、改善せず。（前のドライバーを削除せず）
Macのエラーログでは、com.wch.usbserialとあるので、シリアルドライバが怪しそう。
Proxmox4.3でクラスタ構築

## 準備

* [Proxmox VE 4.x Cluster - Proxmox VE](https://pve.proxmox.com/wiki/Proxmox_VE_4.x_Cluster)
* [Munguia's Tips: Remove Node Cluster (forever) on Proxmox 2.2](http://wmunguiam.blogspot.jp/2013/02/remove-node-cluster-forever-on-proxmox.html)

![1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/b3b635d4-2e11-9c74-788b-5eb5c9112c0d.png)

### IPアドレス変更

* /etc/hosts
* /etc/hostname
* /etc/network/interfaces


## 設定

* サーバー3台構成とする。(pve3,pve4,pve5)

![1-create-cluster.png](https://qiita-image-store.s3.amazonaws.com/0/25728/dcb66f41-15a8-8863-0b1b-845ed276001a.png)

```bash:クラスタ定義
(pve3)# pvecm create クラスタ名
```

* pve3 がマスタノードとなる。
* マスタノードの切り替えは以下でできる。

```
(pve4)# pvecm expected 1
```

![2-join4.png](https://qiita-image-store.s3.amazonaws.com/0/25728/ac93759d-793f-b201-e8d4-f804a6ec4685.png)

```bash:クラスタ定義したサーバ宛に参加
(pve4)# pvecm add pve3
```

![3-join.png](https://qiita-image-store.s3.amazonaws.com/0/25728/4c8e7b4c-b0e8-151c-0c88-8c07ad1f671b.png)

```bash:クラスタ定義したサーバ宛に参加
(pve5)# pvecm add pve3
```

### 状態確認

```bash:
(pve3)# pvecm status
(pve3)# pvecm nodes
```

![4-status.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c13e38e6-d6f1-091c-93e2-5569d9704add.png)
![5-nodes.png](https://qiita-image-store.s3.amazonaws.com/0/25728/3b230baf-2c7c-a100-90c2-0fee3d81e0da.png)

### ノード削除

* [node del but node exist after del | Proxmox Support Forum](https://forum.proxmox.com/threads/node-del-but-node-exist-after-del.13038/)

```bash:
(pve3)# pvecm delnode pve5
```

![6-nodes.png](https://qiita-image-store.s3.amazonaws.com/0/25728/340e8463-df88-a1ca-d9ad-5a0a859446f6.png)

* pve5がrebootすると`pvecm nodes`から消える。

### ノード削除(WebUIから削除)

* pve3 を削除した場合。pve3が`×`で残っている。

![gui.png](https://qiita-image-store.s3.amazonaws.com/0/25728/6eaf5a9d-afe3-4909-1d2e-b51a391b30dc.png)
.png)

![gui2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/0564902e-6373-9000-7415-8e98b4230785.png)

```
pve4# pvecm delnode pve3
```

![delnode.png](https://qiita-image-store.s3.amazonaws.com/0/25728/431486f5-f096-145b-d479-6890425744ab.png)

* pve3の`×`が消えたことを確認。

![delnode2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/1db0a109-2f94-c29c-693d-cc747c91cc6b.png)

### ノード再登録

```bash:
(pve5)# pvecm add pve3         # エラーになる。
(pve5)# pvecm add pve3 -force  # これで追加できる。
```


## コンテナを他ノードに移動

![migrate.png](https://qiita-image-store.s3.amazonaws.com/0/25728/a8938b50-de36-ceb3-cf24-1be21e1228ee.png)
![migrate2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/279d205b-0668-39c4-4319-d450f17e6d6f.png)
![migrate3.png](https://qiita-image-store.s3.amazonaws.com/0/25728/317745e8-2469-1632-1705-a04113cecea2.png)

なおonline migrationは対応していない。

![migrate4.png](https://qiita-image-store.s3.amazonaws.com/0/25728/7bb058df-3718-d888-1f5e-15981672bd65.png)
jsdoでshadertoy sandbox その7

#概要
shadertoy　チュートリアルを見つけた。
28個ある。たぶん、非公認。
jsdoに、移植した。
#チュートリアル
http://jsdo.it/ohisama1/ex3l
#写真
![tu.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/c686f6a4-ca9c-d63c-4624-521cf3ceafce.jpeg)
技術英語 > guidelines for reducing [the chance of error]: / Chances are that...

@ Code Complete (No. 17749 / 36077)

> guidelines for reducing <font color=red>the chance of error</font>:

<hr>
関連して思い出したのは

Chances are that...

http://ejje.weblio.jp/content/Chances+are+that
> …の公算が大きい
Vim-airline でambiwidth=double とするとデザインが崩れる件についての対策

# デザイン崩れのイメージ
"★"や"※" 等の全角文字をvim にて正しく表示させるために`ambiwidth=double` という設定を`.vimrc` ファイルに記載している人は多いと思います。
しかしこのオプションを指定することで、vim-airline がデザイン崩れを起こしてしまいます。

* デザインが崩れるときの例(ambiwidth=double)
* ![VimAirline_0001.png](https://qiita-image-store.s3.amazonaws.com/0/70152/8d8dc246-b6e4-ee53-2f96-7a7fcd7e2cbe.png)


* デザインが崩れないときの例(ambiwidth=double 指定なし)
* ![VimAirline_0002.png](https://qiita-image-store.s3.amazonaws.com/0/70152/e096f578-4371-2054-c296-8db7529bf8de.png)

# 暫定対処
暫定的な対処として、区切り文字として使われている、正確に文字幅を判定できないフォントを旧式のフォントを使うように設定することで見た目の崩れを少なくすることができます。
参考として、`ambiwidth=double` を指定したときの現行のフォントと旧フォントの見た目の違いは次のようになります。

![VimAirline_0003.png](https://qiita-image-store.s3.amazonaws.com/0/70152/2d5aa1db-642c-2100-5e15-887055653e73.png)


区切り文字を旧式のフォントへ変更するには`.vimrc` ファイルにて区切り文字を指定します。

```text:.vimrc(抜粋)
let g:airline_left_sep = '⮀'
let g:airline_left_alt_sep = '⮁'
let g:airline_right_sep = '⮂'
let g:airline_right_alt_sep = '⮃'
```

# 対処後の体裁
対応後、`ambiwidth=double` を指定した状態のvim-airline の体裁は次のようになります。

![VimAirline_0004.png](https://qiita-image-store.s3.amazonaws.com/0/70152/d9d4d080-230a-d641-6ba9-3743ace13036.png)


...まだ若干の体裁崩れはありますが。。。先程よりはマシになりました！
これではまだ根本的な解決とはなっていないので、何か良い対応方法知っている方いたら、ツッコミいただければと思います！
# 参考
- powerline/powerline - when set ambiwidth=double
    - https://github.com/powerline/powerline/issues/40

- アスキーコードから文字を調べる方法と文字からアスキーコードを調べる方法
    - http://unix.stackexchange.com/questions/92447/bash-script-to-get-ascii-values-for-alphabet