OmniAICreator/Qiita-1.07M huggingface dataset:
オリジナル片眼HMDを作る(pre.解析編)

※Qiita初投稿


<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">アメリカからやっときた！！ こいつで独自片眼HMD作る側 <a href="https://t.co/xWkuNfLWf0">pic.twitter.com/xWkuNfLWf0</a></p>&mdash; クレウス@PipBoy制作中 (@kleus_balut) <a href="https://twitter.com/kleus_balut/status/686785298248826880">2016, 1月 12</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>


片眼HMD(ウェアラブルディスプレイ)の作り方を見つけたので、片眼HMDを作ります。
おそらく日本語の情報では初だと思うので、やってみたいという方は参考にしてください。

・adafruit DIY Wearable Pi with Near-Eye Video Glasses
https://learn.adafruit.com/diy-wearable-pi-near-eye-kopin-video-glasses/overview

上記のページ内に手順があるので、分解など詳細な手順はすっ飛ばします。


# 目的

・バッテリー兼ヘッドフォンアンプを使わずにHMDゴーグルのみの簡素な回路を作成する
・adafruitのサイトからDLできる3Dモデルより小型なHMDユニットを作成する

# ピンアサインの解析

HMDゴーグル側、JST SH4ピンのピンアサイン
※向かって左から

| ピンアサイン | 
|-----------|
|![image.png](https://qiita-image-store.s3.amazonaws.com/0/59328/6b660322-78cf-137b-cb0c-28121b895317.png)|

| ケーブル色 | 用途 | 備考 |
|:-----------|:------------:|:------------:|
| 黒         | バッテリーGND ||
| 赤1        | バッテリー+ | 4.4Vを観測|
| 赤2        | コンポジット信号GND   |RCA黄色端子外側|
| 赤3        | コンポジット信号HOT|RCA黄色端子中央|

赤1はリポ/リチウムイオンバッテリーから直のようです。
USB充電時も5Vにはならなかったので、5V以下推奨？

~~赤2と赤3はおそらくNTSCのY/C分離？だと思いますが、ちょっと調べた感じでは分かりませんでした。
今回は白黒でも問題ないのでそのまま進めました。~~

2016/02/15追記: 
コンポジット信号のGNDとHOT側の配線だと分かりましたので、上記表に反映しました。
JST SH(SHR)4ピンコネクタは、共立エレショップまたはaitendoで入手することができます。

# 参考


| オシロでの観測結果 | 
|-----------|
| ![RIGOL Print Screen2016-02-03 7_37_15.501.png](https://qiita-image-store.s3.amazonaws.com/0/59328/1bad8eff-cda4-122d-703a-23eb35bcc2bc.png)|

| オシロ上の番号と色 | 接続先 |
|-----------|-----------|
|4(青)|元のコンポジット信号|
|1(黄)|ケーブル赤2|
|3(ピンク)|ケーブル赤3|

1と3はバッテリー兼ヘッドフォンアンプからの信号。

# 次回

HMDゴーグルを直でドライブできれば、あのダサいバッテリー兼ヘッドフォンアンプともおさらばです。
次回以降、実際に3Dプリンタでガワを作ってみようと思います。


# おきまりごと
・本ページの情報を参照して発生したいかなる不利益/損害について責任を負いません。
・記事内容の無断転載は認めません。本ページへのリンクを含んでください。
・必要に応じて随時追加/修正を行います。
Netbox を dockerで動かす - CentOS7

# Overview

いい加減、Excelによるラックレイアウト、配線表の管理がいやになったので
DCIMを探していたところ、racktables or netbox 辺りが良さそうだった。
Excelへのエクスポート機能やPatchPanelを意識したケーブルコネクション管理は
racktablesの方が一日の長がありそうだが、PHPがいやなのでnetboxを使うことにする。

netboxは django上で動くWebApplicationになっている。
別にDockerを使う必要性は無いのだがこの際、Dockerも合わせて使ってみる。

こんなものもあるみたいだし。
https://github.com/netbox-community/netbox-docker

## Docker Install on CentOS7

CentOSにはdefaultのrepoにDockerが入っているが、
このまま使うとDocker自体が古いので下記に従って新しいDockerを入れる。

docker-ceを入れるだけならば
とりあえずgithubにansible playbookをアップロードしておいた。
https://github.com/ainamori/ansible-docker

手動で入れるならば以下の通り。

<pre>
 $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
 $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
 $ sudo yum install -y docker-ce
 $ sudo systemctl start docker
 $ sudo docker run hello-world
</pre>

## docker-composeのインストール

<pre>
 $ sudo curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
 $ sudo chmod +x /usr/local/bin/docker-compose
</pre>

# netbox install

<pre>
 $ git clone https://github.com/netbox-community/netbox-docker.git
 $ cd netbox-docker
 $ docker-compose build
</pre>

### ポートの指定

デフォルトだと任意のポートを使われてしまうので、起動のたびに接続ポートが変わることになってしまう。
それでは非常に困るので、こちらも変更する。

<pre>
 $ vi docker-compose.yml 
 -        - netbox
 -       ports:
 -       - 8080
 +       - netbox
 +       ports:
 +       - 80:8080		
</pre>

別に8080をそのまま使ってもよいが、今回はhttpの標準ポートをそのまま使えるように設定した。

### 起動

<pre>
 $ sudo docker-compose up -d
</pre>

ちなみに停止は stop
docker-compose.ymlが無い場所で実行すると設定がねぇよ。と言われるので
配置やPATHはよくよく考えて設置すること。

# Tips

なお、netboxの起動が遅いのでイメージが起動したからと言って nginx が badgatewayを返してもうろたえないこと
https://qiita.com/aild_arch_bfmv/items/d47caf37b79e855af95f
コード/テキストを共同で編集する


今回はブラウザ上で共同のコード/テキスト編集を可能にするオープンソースの[Firepad](https://github.com/firebase/firepad)を利用します。
https://github.com/firebase/firepad


# 導入
- [Firepad](https://github.com/firebase/firepad)はバックエンドでFirebaseを利用しますので、Firebaseのアカウントを取得します（お試しなのでとりあえずFreeで）。

![スクリーンショット 2016-02-02 10.38.00.png](https://qiita-image-store.s3.amazonaws.com/0/83404/a7955809-16fe-11fe-72af-ad1fb82af157.png "スクリーンショット 2016-02-02 10.38.00.png")


- FirebaseでAPPを作成しURLを発行しておく。

<img width="1007" alt="e98a51e1-5408-6e23-09d1-b5fcae79798b.png" src="https://qiita-image-store.s3.amazonaws.com/0/83404/fbe8ad0e-41b1-84f1-895a-092273eaede6.png">

- 以下のコードをhtmlのhead内に追記します。
 
```
<!-- Firebase -->
<script src="https://cdn.firebase.com/js/client/2.2.4/firebase.js"></script>

<!-- CodeMirror -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.2.0/codemirror.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.2.0/codemirror.css"/>

<!-- Firepad -->
<link rel="stylesheet" href="https://cdn.firebase.com/libs/firepad/1.3.0/firepad.css" />
<script src="https://cdn.firebase.com/libs/firepad/1.3.0/firepad.min.js"></script>

<style>
  html { height: 100%; }
  body { margin: 0; height: 100%; position: relative; }
  #firepad {
    width: 100%;
    height: 100%;
  }
</style>

```

- 初期化設定をbody内に追記

```
<div id="firepad"></div>
<script>
  var firepadRef = new Firebase('<FIREBASE URL>');
  var codeMirror = CodeMirror(document.getElementById('firepad'), { lineWrapping: true });
  var firepad = Firepad.fromCodeMirror(firepadRef, codeMirror,
      { richTextShortcuts: true, richTextToolbar: true, defaultText: 'Hello, World!' });
</script>
```
※FIREBASE URLは取得したアカウントのアプリケーションのURLにかえてください。
※[CodeMirror](https://github.com/codemirror/CodeMirror/)はオープンソースのブラウザで動作するエディターですが、こちらは同じく[ACE](https://github.com/ajaxorg/ace)でも代用できます。その場合は以下のようにします。

```
<div id="firepad"></div>
<script>
  var firepadRef = new Firebase('<FIREBASE URL>');
  var editor = ace.edit("firepad");
  editor.setTheme("ace/theme/textmate");
  var session = editor.getSession();
  session.setUseWrapMode(true);
  session.setUseWorker(false);
  session.setMode("ace/mode/html");
  var firepad = Firepad.fromACE(firepadRef, editor, {
    defaultText: "Hello, world"
  });
</script>
```
- このhtmlをブラウザで開く。今回はウィドウを２つ立ち上げて並べてみました。

![out.gif](https://qiita-image-store.s3.amazonaws.com/0/83404/56822fa0-ef04-9819-349f-dac88407b3e9.gif "out.gif")




# まとめ
Firepadを使って共同のコード編集する方法を見てきました。Codemirror,ACEを利用しているので大概のプログラミング言語のシンタックスには対応できるかと思います。
Python3での文字列フォーマットまとめ　旧型で生きるか、新型で生きるか

ブログい￥記事はこちら：[python3での文字列フォーマットの方法まとめ](http://u-kan.hatenadiary.jp/entry/python-format-string)

なかなか覚えられなくて、辛かったのでメモしてまとめることにした。記憶への定着が少しでもまともになることを祈って。。

#古いやり方（まだ使われてるけど）
```

'This is our %s' % 'string'
  # This is our string

print('we are learning %s %s' % ('Python', '3'))
  # we are learning Python 3

print('we are learning %(lang)s %(ver)s' % {'lang': 'Python', 'ver': '3'})
  #we are learning Python 3

```

#新型 （推奨されてるやり方）

文字列の後ろに formatメソッドをくっつける。
挿入する場所は基本的に **{ }**にて指定する。

```
'This is our string {}'.format('in Python')

'{} {} {}'.format('a','b','c') 
  # 'a b c'

'{2} {1} {0}'.format('a','b','c') 
  #c b a
  #インデックスみたいな指定ができる

'we are learning {lang} {ver}'.format(lang = 'Python', version = '3') 
　　#we are learning Python 3

language = ('Python', '3')
'we are learning {0[0]} {0[1]}'.format(language)
　　#we are learning Python 3
```

#上級編

formatメソッドを使うんだけど、思ったよりたくさんのことができるらしい。

- 数字をバイナリーに変換
- 左寄せ・右寄せ・中央寄せとかで文字列作成
- 

```
animal = ('Dog', 'Cat')
name = ('Maggie', 'Missy')

'I have a {0[0]} named {1[0]}'.format(animal,name)
	#I have a dog named Maggie

'I have a {0[1]} named {1[1]}'.format(animal,name)
	#I have a cat named Missy

'{:<50}'.format('aligned left')
  #'aligned left          
  #50インデックス用意して左詰めで文字入力
                            '{:a<50}.format('aligned left ')
  #'aligned left aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
  #上のが見づらいのでaで埋めてみた

'{:>50}'.format('aligned right')

'{:^50}'.format('aligned center')

'{:$^50}'.format('More Money')
  #'$$$$$$$$$$$$$$$$$$$$More Money$$$$$$$$$$$$$$$$$$$$'

'Binary: {0:b}'.format(324)
	#Binary: 101000100

'{:,}'.format(123456787654321)
	#'123,456,787,654,321'

  #割り算した結果も表示できるらしい
correct = 78
total = 84
'Your score is: {:.1%}'.format(correct/total)
	#'Your score is: 92.9%'
'Your score is: {:.3%}'.format(correct/total)
	#'Your score is 92.857%'

```

壮大なメモ書き。とりあえず頭に入れて使える様になりたい。
進捗どうですかを遅ればせながらC#で

[「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム（C#/LINQ）](http://qiita.com/shoooo/items/ec84418c37f08ecf7576)
[「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム（C#で挑戦）](http://qiita.com/moto_pipedo/items/e7f924585c762b0da4a7)

信じられないくらい今更のようですが、存在を知ってしまったので挑戦。

```csharp
using System;
using System.Text;
using System.Text.RegularExpressions;

namespace HowIsTheProgress
{
    class Program
    {
        static void Main(string[] args)
        {
            var words = new[] { "進捗", "どう", "です", "か" };
            var regex = new Regex(string.Concat(words));
            var random = new Random();

            var output = new StringBuilder();
            while (!regex.IsMatch(output.ToString()))
            {
                var word = words[random.Next(0, words.Length)];
                output.Append(word);
                Console.Write(word);
            } 

            Console.Write(" " + "???");
            Console.WriteLine(
string.Format(@"
 ＿人人人人人人人＿
 ＞進捗どうですか＜
 ￣Y^Y^Y^Y^Y^Y^Y￣
{0}文字で煽られました", output.ToString().Length));
            Console.ReadLine();
        }
    }
}
```

#### 結果
```bash
かかですか進捗ですです進捗か進捗どうどう進捗進捗進捗ですどうどうですどう進捗ですかかかどうかか進捗どうか進捗で
すかかかどうです進捗かですか進捗ですどうどうですです進捗どうどうですですですかどう進捗か進捗かかです進捗ですど
うどうです進捗進捗どうどうです進捗ですです進捗どう進捗どうどうです進捗かですか進捗です進捗進捗どうかですですど
う進捗進捗かですどうかかですどうかかかどうか進捗です進捗かどうです進捗ですかどうです進捗ですです進捗かですか進
捗ですですどうどうかですどうどう進捗か進捗です進捗ですかかですどうか進捗か進捗どうどうどうかどうどうどうどうで
す進捗進捗かか進捗ですどうどう進捗かどう進捗かですですですどうかですですどうですです進捗どう進捗進捗進捗かどう
進捗進捗ですどうかですどうかですどう進捗進捗かどうです進捗ですですですどう進捗どうですか ???
 ＿人人人人人人人＿
 ＞進捗どうですか＜
 ￣Y^Y^Y^Y^Y^Y^Y￣
374文字で煽られました
```

まぁなんというか、素直に書くととてもつまらないソースになりますね。(C#感もないし)
EditText で絵文字の入力をさせなくする

## はじめに

ユーザが自由にテキストを入力できる EditText では、絵文字の入力を防ぎたい場合があります。OS として emoji がサポートされたのって、 KitKat からでしたっけ？

まぁ、とにかく emoji を入力してほしくない時のサンプルです。 

## サンプルコード


```java
InputFilter inputFilter = new InputFilter {

  public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int send) {
        // 2バイト以上の文字かどうかを判断
        if (source.length() == 0) {
            return source;
        }
        // 入力された1文字が2バイト以上の物について、絵文字かどうか判断をする。
        // UTF-8 の絵文字の文字コードについては、 Wikipedia を参照した
        // https://en.wikipedia.org/wiki/Emoji#Unicode_blocks
        final int codePoint = Character.codePointAt(source, 0);
        if (
                (codePoint >= 0x1F300 && codePoint <= 0x1F5FF ) ||
                (codePoint >= 0x1F900 && codePoint <= 0x1F9FF ) ||
                (codePoint >= 0x1F600 && codePoint <= 0x1F64F ) ||
                (codePoint >= 0x1F680 && codePoint <= 0x1F6FF ) ||
                (codePoint >= 0x2600 && codePoint <= 0x26FF ) ||
                (codePoint >= 0x2700 && codePoint <= 0x27BF )
                ){
            return "";
        }
        return source;
  }
}
```

## コードの話

[Wikipediaの記事](https://en.wikipedia.org/wiki/Emoji#Unicode_blocks)を参考に、 emoji として利用されている文字の文字コードと入力された文字のそれを地味に比較してる。Unicode8.0で追加された物についても対応をしているので、 Marshmallow の人も大丈夫。
thinのマルチスレッドとプロセス数の調整

RailsのWebアプリサーバとしては[thin](https://github.com/macournoyer/thin)を使っています。thinにしたのはWebsocketRailsが動くととという要件があったからです。

thinにはいくつかのパラメータの調整ができます。大きなところでは、-threadedでマルチスレッド化したり、-serverで起動プロセス数を調整できます。threadedオプションはまだ、Experimentalなのでどんなものなのか、を見てみたいと。

## 計測

計測は[http_load](http://www.acme.com/software/http_load/)を使いました。次のように実行しています。Nは同時アクセス数。

```shell-session
./http_load  -parallel $N -fetches $N url.txt
```

ちなみに、UbuntuでCPUは4Core。メモリは8Gぐらいのマシンで計測。

## -threadedオプション

まずは、-threadedオプションのある、なしでの計測です。Nは1から100まで。
![thin-performance.png](https://qiita-image-store.s3.amazonaws.com/0/88510/e9a85cf2-8f42-4bd9-d056-c01750c89d88.png)

グラフではわかりにくいですが、20ちょっとまではthreadedオプションをつけた方が数%ほどパフォーマンスがいい傾向にあります。しかし、23スレッドを超えたあたりから急激にパフォーナンスが悪化してます。
コンソールには、次のようなエラーが出ています。

```
ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5.000 seconds (waited 5.003 seconds)):
```

データベースへの同時接続数を増やせば安定すると思いますが、数%のパフォーマンスと引き換えに、APをスケールさせるときに不安を持つのはうれしくないので、threadedオプションは使わないのがよいかと。

## -serverオプション

スレッドではなくプロセスの数で調整ってのは*nixではよくある手法ですね。
serverオプションを1, 2, 4で計測したのが次の結果です。
![thin-perfomance.png](https://qiita-image-store.s3.amazonaws.com/0/88510/e974935d-46a8-191e-dca9-13bd91c1004a.png)

プロセス数が1から2になると、ほぼ、2倍の性能向上ですね。同時アクセス数に対してもリニアに性能悪化してます。プロセス数を4にすると1から2にしたときほどの効果はないものの1.5倍程度の性能改善です。

## まとめ

threadedオプションは使わない方がよい。その代わりserverオプションでプロセス数を変えよう。

まだ、やっていないことは、WebSocketを使った時の振る舞い。長時間の同時コネクションでの振る舞いを見てみたいです。
Object#send 有害論

ご存知の方には何を今更感があるかとは思いますが、パッとググった限り誰も書かれていなかったので、
`Object#send`やそれとよく似た`Object#public_send`の使い方は注意して使わなければ結構危ないセキュリティホールを作ってしまうよ、
というお話をしたいと思います。

# TL;DR

`Object#send`は`eval`や`system`の次ぐらいに危険です。ユーザーの入力など、外部から入力された値を`Object#send`や`public_send`メソッドにそのまま渡すのはやめましょう。
これらのメソッドに渡す文字列は、（特殊なメタプログラミング用のライブラリを作る場合などを除いて）必ずどこかにハードコードした、信頼できるメソッドの名前のみにしてください。

# 危険なケース

例えばあからさまな例ですが、次のようなRailsのコントローラーのアクションがあったとしましょう。
みなさんはこれに近いようなコード、書いてませんよね？

```rb
def some_action
  FooModel.find_by_id(params[:id]).send(params[:method])
  ...
end
```

:warning: このようなactionの`params[:method]`に例えば`exit`という文字列を送った場合、なんと**Railsアプリを終了させる**ことができてしまいます [^exit]。

[^exit]: 実際に終了した結果サーバーがどう振る舞うかは、Railsアプリを走らせるミドルウェア(Unicornとか、Passengerとか)の仕様に依存します。

これは、[`Kernel`モジュールの`exit`メソッド](http://docs.ruby-lang.org/ja/2.3.0/method/Kernel/m/exit.html)を、意図せず呼び出してしまったことによります。
上記のようなModelに限らず、ほぼ任意のRubyのオブジェクトに対してこのメソッドは使用できるので、下記のようなコードをREPLに書いて試してみるとよいでしょう。

```rb
1.send 'exit'
```

REPLが終了しちゃいましたよね？

どうしてこんなことができてしまうのでしょう？
その原因は、Rubyのほとんどすべてのオブジェクトは`Kernel`モジュールを`include`しているところにあります。
Rubyの`Kernel`というモジュールには、問題の`exit`を始め、`puts`など、プログラムのどこからでも呼べるメソッド（いわゆるグローバルな関数）が定義されています。
`Object`クラスはこの`Kernel`モジュールを`include`しているため、Rubyのプログラムのほとんどあらゆる場所で`puts`や`exit`が使えるのです。
結果、`send`に任意の文字列を渡せるようなコードを書いてしまうと、`Object`が使える任意のメソッド、すなわち`Kernel`モジュールのメソッドが呼べてしまい、思いの外大きな脆弱性を作ることになってしまうのです。

# もっと危険なケース

`Kernel`にはいろいろな機能があるため、やり方が悪いともっと危険なメソッドを攻撃者に呼ばせることができてしまいます。
先程の`send`メソッドを呼ぶRailsのアクションに、パラメーターを追加したとしましょう。

```rb
def some_action
  FooModel.find_by_id(params[:id]).send(params[:method], params[:arg])
  ...
end
```

`Kernel`モジュールでは`system`メソッドも`eval`メソッドも使えるため、
今度はOSコマンドインジェクションや、Rubyコードインジェクション（っていう呼び方でいいのでしょうか...）ができてしまいます。

早い話が任意コード実行です。
攻撃者が`params[:method]`に`eval`を、`params[:arg]`に`User.delete_all`とでも渡せば、あなたのDBからすべてのユーザーを削除できてしまいます :bomb:

## `public_send`じゃダメなの？

Rubyのメタプログラミングに詳しい方は、「`Kernel`にある`private`なメソッドが危ないんだったら、`private`が呼べない、`public_send`にすればいいんじゃない？」と思われるかもしれません。
というか、私自身がこの記事を書く直前までそう思ってました。
ところが`Object`クラスにも同じくらい危険なやつがいるんですよねぇ。
`instance_eval`です。
あまり使用されてない使い方だと思いますが、これにも第2引数として文字列を渡せば、`Kernel#eval`と同様任意のRubyコードが呼べてしまいます。
こいつは`Object`クラスの`public`メソッドなので、`public_send`からも普通に使えちゃうのです。

# これ以外にも色々ありえます。

今回あげたものは一例にすぎず、`send`するレシーバーのクラスの実装などによって、思わぬリスクを招くことがあるでしょう。
また、あなたが使っているライブラリや、同僚が調子にのるなどして加えた標準ライブラリへの修正によっても、いつの間にか落とし穴が掘られてしまうことがあります。
組み込みのものを含めあらゆるクラスを後から使う側で書き換えられてしまう、Rubyならではの問題です。

# 対策

前節で触れた通り、`send`や`public_send`に任意の文字列を与えられるようにした場合のリスクは、どこからやってくるか分かりません。
ブラックリストによる回避では不十分な可能性が高いので、極力使用できる文字列のホワイトリストを用意して回避するよう努めましょう。
ハードコードした`Symbol`しか渡さないようにするが一番簡単かつ確実でしょうね。
`send`のユースケースは大体それでカバーできるでしょうし。
CoreOSでnginxを動かしつつサブドメイン込みでLet's Encryptする

## はじめに
本記事は、

+ [DockerでLet’s Encryptしよっか](http://qiita.com/sawanoboly/items/9fdde1707de5e975dd15)
+ [Let's Encrypt 証明書の有効期限を更新する](http://qiita.com/zoeponta/items/31760e4735ecdd309308)
+ [Nginxをリバースプロキシとして使ってるところにLet'sEncryptしようとしたらはまった話](http://qiita.com/kamemory/items/958fdbc220359c341a23)

の合わせ技になります。

普段はDockerで動かしているいくつものサブドメインに対してリバースプロキシしてるサーバーなのですが、今回はリバースプロキシの設定は出てきません。

また、ドメインは既に持っていて、nginxのサーバーが動いているものとします。
/letsencrypt-dummy-webroot は先に作ってnginxから見えるように設定しておきます。

## 何がやりたいか

* nginxを止めずに証明書を更新する(nginxの再起動は後回し)
  - webrootオプションを用いる
* サブドメインごとに面倒な設定をしない

## 手順

今回はいらないオプションが付いてますが、とくに問題がないのでこのままで。

```nginx:redirects.conf
server {
    listen      80;
    server_name .example.com;
    location ^~ /.well-known/ {
        root   /letsencrypt-dummy-webroot;
        index  index.html; # これいらないか
    }
    
    location / {    
        return      301 https://$host$request_uri;
    }
}
```

```shell-session
core@core ~ $ docker run -it --rm \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
-v "/letsencrypt-dummy-webroot:/var/www" \ quay.io/letsencrypt/letsencrypt:latest certonly \
--webroot --renew-by-default --email root@example.com \
--agree-tos --rsa-key-size 4096 --redirect \
-w /var/www --domains=example.com,sub1.example.com,sub1.example.com
```
LaunchScreen.storyboardで画像が表示されない

ハマってしまったのでメモ。

### 現象

LaunchScreen.storyboardで画像を設定しているが表示されない。
ただし、シュミレーターでは表示される。


### 原因

なぜだか不明だが、画像をドラッグ＆ドロップでプロジェクトに追加してる場合はこの現象が発生する。

<img width="298" alt="スクリーンショット 2016-02-03 7.13.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/30834/b60cc5c2-e58f-81f5-bcdf-ea2e2644e480.png">


### 対応

LaunchScreen.storyboardは特殊だからか、「.xcassets」の画像ファイルしか読み込めないようです。
ただ、xcodeのUI上では画像は表示されるし、シュミレーターで起動した場合でも表示されます。


xcodeのUI上でも、シュミレーターでも問題なく表示されてしまうようですので、皆さんご注意下さい。
Raspberry Pi Zero > 告知 > コンテスト @ Adafruit / 締め切り 12:00am PST Feb. 25th 2016

AdafruitのyoutubeにてPi Zeroのコンテスト告知があった。

https://www.youtube.com/watch?v=1f66L-5N8uc

8:00頃を参照

以下は8:00頃の表示情報の僕の解釈です（間違っているかもしれない)

- Hackaday.ioと関連する
- 2016 Hackaday Prizeへも選考される
- 2/2から2/20までLady Ada(動画の人、AdafruitのCEO?)が10個のアイデアを"Desk of Lady Ada"(youtube動画)で紹介する
- Lady Ada's projectをbuildしなくても、starter ideasでもいい(to get your wheels turning: 前に進めるという意味だろう)
- Pi Zeroを持ってなくてもPi Model BやPi2でもいい
- 10 Pi Zero boardsがコンテスト終了までに用意される > 勝利者にプレゼントなのだろう
- Pi Zeroを勝ち取る締め切りは <font color=red>12:00 am PST Feb. 25th 2016</font> > 10のmost well thought (よく考えられた) かつ well documented (よく文書化された)projectが選ばれる
- Feb. 29thに10のWinnersの告知がある。
- grand prize (優勝者)にはHackaday storeで使える100ドルのgift cardsが送られる。この締め切りは <font color=red>12:00 am PST MArch 14th, 2016</font>

Hackaday.ioなどの仕組みが分からないので参加方法は今のところ不明。

2月25日までに応募すればいいかも、はっきりとは分かっていない。

なお、アイデアは今のところない。

以下のような磁石でひっつくPirate Radio ThrowieなどはPi Zeroの小ささという特性をよく利用しているように思う。こういう方向もあり。
https://www.youtube.com/watch?v=WDa_odxAGUU&list=WL&index=34



### 関連ページ
http://hackaday.com/2016/02/01/announcing-the-adafruit-pi-zero-contest/

hackaday.ioにとりあえず登録した。7of9は登録済みなので、以下の名前にした。
https://hackaday.io/7of9OnAdafruit
自分がフォローした覚えのない14のFollowingがついているのはおかしな感じがする。

アイデアのコアは思いついた。完遂できる程度のプロジェクトにしておかないと、途中で投げ出してしまいそうだ。
Michael Abrash Interview 3

http://qiita.com/7of9/items/0f3d86bc58ecff2122a3
の続き

ずいぶん久しぶりにやってみようと思った。

Michael Abrash Interview:
https://www.youtube.com/watch?v=a7My8zbDNRI&list=PL_MJualihC5AxdlHgVUROYKbNAaPJ5PE4&index=2)

(1:21-)
I wrote the game and I sold it to the publishers, and my first check showed up for the first quarter. And I said "Heck, why I would be a graduate student, <font color=red>XXX1</font> this much of money".

(1:28-)
Too bad that was a biggest check ever <font color=red>XXX2</font>". At that point, I quit being a student, and I wrote games full time for couple of years. 

(1:37-)
And then it became clear that the IBM PC game market that time wasn't very big. And I wanna to do some other thing programming <font color=red>XXX3</font>.


赤文字が聞き取りができていない。

interview はスクリプトを僕がタイプする速度が話している速度に追随できないので、繰り返し閲覧することになる。そのため上記の文章を入力するにも5分はかかってしまう。

全部を書き留めるわけではないが、通訳の人はすごいと思う。
vvvvで図形描画するのに必要な知識

# vvvvで図形描画するのに必要な知識

## 図形を描画する
Render(EX9)ノードを使用する
表示方法は4種類ある
- Window (Alt + 1)
- Node (Alt + 2)
- Hidden (Alt + 3)
- FullScreen (Alt + Enter)

![drawing_000.png](https://qiita-image-store.s3.amazonaws.com/0/111261/ab5c9ccd-7944-6058-2e2c-706bf2218848.png)

## 色々とある図形Node

[Officalページのノード一覧](https://vvvv.org/documentation/node-reference)
CategoryがDX9のnodeを抜き出してみた。


| name       | category      | type         | help                 |
|:-----------|--------------:|:------------:|:--------------------:|
| Axis (DX9) |DX9            |module        |draw three axis and...| 
|AxisAndGrid (DX9)|DX9|module|Draws the XZ-plane and...| 
|Cursor (DX9 Boygrouped)|DX9|module|draws a cross-shaped...| 
|Cursor (DX9 Legacy)|DX9|module|draws a cross-shaped...| 
|Cursor (DX9)|DX9|module|draws a cross-shaped...| 
|Cylinder (DX9)|DX9|module|cylinder built out of...| 
|FullscreenQuad (DX9)|DX9|module|| 
|Grid (DX9)|DX9|native|Renders a rectangle with...| 
|GridSegment (DX9)|DX9|native|Renders a grid segment...| 
|IconView (DX9)|DX9|module|Use to visualize...| 
|Pillow (DX9)|DX9|native|Renders a rectangle with...| 
|Quad (DX9)|DX9|native|Renders a rectangle in...| 
|Rope (DX9)|DX9|native|Renders a rope in the dx...| 
|Segment (DX9)|DX9|native|Renders a circular...| 
|Sphere (DX9)|DX9|native|Renders a Sphere in the...| 
|Sprite (DX9 Rotary)|DX9|module|A Sprite is a flat...| 
|Sprite (DX9)|DX9|module|A Sprite is a flat...| 
|Triangle (DX9 Indexed)|DX9|native|Renders a triangle in...| 


使用方法が分かる限りNodeを表示してみた。
![drawing.png](https://qiita-image-store.s3.amazonaws.com/0/111261/2b213ecd-3801-bd8a-e2e0-c276b094a7a5.png)

## 図形の表示状態
図形の表示も３種類選択することができる

- Solid (Pointから面を構成している)
- WireFrame (Pointから線を構成している)
- Point (Pointのみの表示)

![drawing_002.png](https://qiita-image-store.s3.amazonaws.com/0/111261/71f56076-f784-bcf7-2e36-0e6569610b2a.png)

## 図形のMaterialを変更する

- 色 (Color)
- 画像 (Texture)

![drawing_003.png](https://qiita-image-store.s3.amazonaws.com/0/111261/3b44ae4d-4264-76c1-9af3-fcfaba745943.png)


## 図形のTransformを変更する
図形の形状や位置を変更することができる

- 位置 (Translate)
- 大きさ (Scale)
- 回転 (Rotate)

![drawing_004.png](https://qiita-image-store.s3.amazonaws.com/0/111261/fd882179-0394-77ce-00c2-6f20f8989b99.png)
vmware fusion8 で osx el capitan の仮想マシンを JIS キーボドにするメモ


# VMWare Fusion8 で el capitan の仮想マシンを JIS キーボドにするメモ

いつも忘れるのでメモ。

`仮想マシンライブラリ -> 対象を選択 -> 右クリックから -> Finder に表示 -> 選択状態のファイルを右クリック -> パッケージの内容を表示 -> ****.vmx をエディターで開き`

以下の2行を追加する。

```
keyboard.vusb.idVendor=0x05AC
keyboard.vusb.idProduct=0x020D
```

追加する前に仮想マシンはサスペンドにしておく。
[Objective-C]　NSStringをcharにして固定長で切ってNSStringに戻すとnullのNSStringになるのはUTFだからなのかの件

# **はじまり**
知っている方も多いと思いますが・・・
データの領域に制限があって、NSString 型の文字列　を　char 型にして格納
あとでそのデータをNSString型に戻して表示するようにしたら、nullになった。
# **例)**
たとえばこれ
環境
Xcode 7.2

```lang:code
    char str[16];
    NSString *nStr1=@"12345678あいうえおか";

    memset( str, 0, 16);
    memcpy( str, [nStr1 UTF8String],15);
    // char変換
    NSString *nStr2=[NSString stringWithUTF8String:str];
    NSLog(@"[%@]=>[%@]",nStr1,nStr2);
```

```lang:実行結果
[12345678あいうえおか]=>[(null)]
```

まぁブッタ切るから、最後のほうの文字が化けるのは仕方ないと思っていましたが、
せめて　12345678は、ASCII文字なんだから変換してくれるだろう・・・・と

結果は、期待を裏切って　null 　全く遠慮がないですね。　気持ちいいくらい　スパーと　nullです。
プログラム間違えてんじゃないの・・・・・と思ってました。

# **分析**

Googleさんに聞いても基本は正しいようですが、それ以上は・・・どう聞けば良いのやら( キーワードが・・・・）適当に検索したが、発見できず・・・
自力でなんとかする事となる。

実験で
>・＊nStr1を全部ASCIIにしたらOK
>・length(15) を変更するとOKの場合がある

から、ぶったぎったらnullになるようです（一番いやな結果となりました）
# **対策**
見たくないUTF8について調べると、ASCII以外は、複数バイトで構成されていて、２〜６バイトで表現されるようです。（なんて面倒なコードなんでしょ　１文字６バイトって何？ 200文字で1Kbyte超えるじゃん )
資料参考に関数作りました。
(参考;~~https://www.ietf.org/rfc/rfc2279.txt)←英語なんですよー~~
~~https://tools.ietf.org/html/rfc3629#page-4←やっぱり英語なんですね~~
~~2279→3269で変更があったようですね~~
https://www.akanko.net/marimo/data/rfc/rfc3629-jp.txt
日本語でかかれてる。

UInt8は、最近 char型で、ひどい目にあったから使いました。( charでも問題ないでしょう　）

```lang:code
void char2Utf8Limit(UInt8 *ptr ,short len)
{
    UInt8   *nxt=ptr;
    UInt8   *cur=ptr;

    while( nxt < (ptr+len) )
    {
        cur=nxt;
        if( (*nxt & 0xFE)==0xFC )       nxt=nxt+6;
        else if( (*nxt & 0xFC)==0xF8 )  nxt=nxt+5;
        else if( (*nxt & 0xF8)==0xF0 )  nxt=nxt+4;
        else if( (*nxt & 0xF0)==0xE0 )  nxt=nxt+3;
        else if( (*nxt & 0xE0)==0xC0 )  nxt=nxt+2;
        else                            nxt=nxt+1;
    }
    while( cur<(ptr+len) )
    {
        *cur++=0;
    }
}
```

```lang:code
   // char変換
```
を

```lang:code
   // char変換
    char2Utf8Limit( (UInt8*)str, 15 );
```
にする

```lang:実行結果
[12345678あいうえおか]=>[12345678あい]
```
当初の予定よりも文字数が短いのですが、原因は切り口でした。
ところで、エンディアンとかは、考えてなくて作ったんですが、良いのだろうか？
Cloud9にOpenCVをインストールしてPythonで実行する方法

#Cloud9にOpenCVをインストール

下記を参考にしました。

[Raspberry Pi B+にOpenCV-Python環境を構築する](http://qiita.com/jh3rox/items/be803f9171db8fe737de)

> 
```bash
$ sudo apt-get install libopencv-dev
$ sudo apt-get install python-opencv
```
> 

#いざ実行すると、errorが発生

```bash
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
libdc1394 error: Failed to initialize libdc1394
```

#とりあえずエラー内容でググった

すると・・・。

[python 2.7 - OpenCV: libdc1394 error: Failed to initialize libdc1394 - Stack Overflow](http://stackoverflow.com/questions/29274638/opencv-libdc1394-error-failed-to-initialize-libdc1394)

> sudo ln /dev/null /dev/raw1394

というように`/dev/null`にリンクを貼るといいみたいです。

```bash
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'2.4.8'
```

IEEE1394すなわちFirewireとかのハードウェア用のドライバーが生きちゃっているって意味なのかも？
SafariにおけるgetOwnPropertyNamesの"use strict"下での挙動

Safariの`getOwnPropertyNames`の引数にFunctionのインスタンスを渡した時の挙動がChromeと違っていたのでメモ。

# 結論

バグ

# `"use strict";`での挙動

以下のコードでテストしてみる。

```js
"use strict";

function Klass1() {}

Klass1.staticProp = 'staticProp';

var Klass2 = new Function();

Klass2.staticProp = 'staticProp';

var Klass3 = function () {};

Klass3.staticProp = 'staticProp';

console.log(Object.getOwnPropertyNames(Klass1));
console.log(Object.getOwnPropertyNames(Klass2));
console.log(Object.getOwnPropertyNames(Klass3));

console.log(Klass1.name);
// => "Klass1"
console.log(Klass2.name);
// => "anonymous"
console.log(Klass3.name);
// => ""
console.log(Klass1.__proto__ === Function.prototype);
// => true
console.log(Klass2.__proto__ === Function.prototype);
// => true
console.log(Klass3.__proto__ === Function.prototype);
// => true
```

**Safari**

```js
console.log(Object.getOwnPropertyNames(Klass1));
// => ["length", "name", "arguments", "caller", "prototype", "staticProp"]
console.log(Object.getOwnPropertyNames(Klass2));
// => ["length", "name", "arguments", "caller", "prototype", "staticProp"]
console.log(Object.getOwnPropertyNames(Klass3));
// => ["length", "name", "arguments", "caller", "prototype", "staticProp"]
```

**Chrome**

```js
console.log(Object.getOwnPropertyNames(Klass1));
// => ["length", "name", "prototype", "staticProp"]
console.log(Object.getOwnPropertyNames(Klass2));
// => ["length", "name", "arguments", "caller", "prototype", "staticProp"]
console.log(Object.getOwnPropertyNames(Klass3));
// => ["length", "name", "prototype", "staticProp"]
```

もちろんどちらの環境でも下のコードは同様にエラーになる。

```
console.log(Klass.arguments);
// => TypeError
console.log(Klass.caller);
// => TypeError
```

# `"use strict";`無しでの挙動

どちらも`arguments`と`caller`プロパティを含む。

```
console.log(Object.getOwnPropertyNames(Klass));
// => ["length", "name", "arguments", "caller", "prototype", "staticProp"]
console.log(Klass.arguments);
// => null
console.log(Klass.caller);
// => null
```

# まとめる

SafariではStrictモードでも`arguments`と`caller`プロパティが表示される。

ChromeではFunctionのコンストラクタで作成したFunctionのインスタンスでは`arguments`と`caller`プロパティが表示され、それ以外では表示されない。

ECMA見ると`arguments`と`caller`が表示されてしまうのは想定された挙動では無いらしい。

> ECMAScript 2015 Language Specification – ECMA-262 6th Edition
> 16.1 Forbidden Extensions
> http://www.ecma-international.org/ecma-262/6.0/index.html#sec-forbidden-extensions
mac の Dock/Spaces/Menubar が反応しなくなったら

# mac が反応しない・・・。

VPN接続したり、アプリを常駐させてたりすると何かと調子が悪くなる mac さん。
クリックしても反応してくれなくなったり、ひたすら虹色がぐーるぐるしている事ってよくありますよね。

そんな時にはこれ！

## Dock がグルグル回ってる/反応しない

mac でターミナルを開いて、以下のコマンドを実行

```
$ killall Dock
```

## Finder が調子悪い

同じく

```
$ killall Finder
```

## Menubar（常に上部に表示されてるバー）
```
$ killall SystemUIServer
```

## 何かのプログラムが悪さしてる

```
$ ps aux | grep -i {program_name} | awk '{print $2}' | xargs kill -9
```
もしくは、 

1. 「アクティビティモニタ」を起動（windows でいうタスクマネージャー）
2.  死んでるプロセス（赤字なのですぐわかる）を選択
3.  左上の「×」ボタンを押して強制終了


これのどれかでだいたいは直ります。
Glide のキャッシュ削除を行うスレッドに注意

# Android の画像表示ライブラリ Glide のキャッシュ削除を行うスレッドに注意
※Glide 3.6.1 で確認済み。
## 結論
デフォルトのキャッシュ機構を使っている場合、

* `Glide#clearDiskCache` はバックグラウンドスレッドで
* `Glide#clearMemory` はメインスレッドで

実行しないと例外がでる。

## 適切なスレッドで削除を行うサンプル

```
final Glide glide = Glide.get(MainActivity.this);
glide.clearMemory(); // メインスレッドで実行しないといけない
new AsyncTask<Void, Void, Void>() {
    @Override
    protected Void doInBackground(Void... params) {
        glide.clearDiskCache(); // バックグラウンドスレッドで実行しないといけない
        return null;
    }
}.execute();
```

## 詳しく
[Glide](https://github.com/bumptech/glide) は、Android で画像表示・キャッシュコントロールを簡単にしてくれるライブラリです。
お世話になってます。
ディスクキャッシュとメモリキャッシュの二階層のキャッシュを備えています。
それぞれのキャッシュをクリアする API も備えています。

## 不適切なスレッドで削除したときのエラー
### Glide#clearDiskCache

```
java.lang.IllegalArgumentException: YOu must call this method on a background thread
  at com.bumptech.glide.util.Util.assertBackgroundThread(Util.java:144)
  at com.bumptech.glide.Glide.clearDiskCache(Glide.java:391)
```

エラー文見れば明らかですね。

```com.bumptech.glide.Glide.java
390    public void clearDiskCache() {
391        Util.assertBackgroundThread();
392        getEngine().clearDiskCache();
393    }
```

実装見ると、呼び出した瞬間チェックが行われているのでわかりやすいです。

### Glide#clearMemory

```
Caused by: java.lang.IllegalArgumentException: You must call this method on the main thread
  at com.bumptech.glide.util.Util.assertMainThread(Util.java:135)
  at com.bumptech.glide.load.engine.Engine.onResourceRemoved(Engine.java:282)
  at com.bumptech.glide.load.engine.cache.LruResourceCache.onItemEvicted(LruResourceCache.java:32)
  at com.bumptech.glide.load.engine.cache.LruResourceCache.onItemEvicted(LruResourceCache.java:12)
  at com.bumptech.glide.util.LruCache.trimToSize(LruCache.java:162)
  at com.bumptech.glide.util.LruCache.clearMemory(LruCache.java:146)
  at com.bumptech.glide.Glide.clearMemory(Glide.java:370)
```

こちらも明らか。
　
でも、こちらは **実際にクリア処理が走らない限りエラーにならない** ので要注意。
気をつけましょう。

```com.bumptech.glide.util.LurCache.java
154    protected void trimToSize(int size) {
155        Map.Entry<T, Y> last;
156        while (currentSize > size) {
157            last = cache.entrySet().iterator().next();
158            final Y toRemove = last.getValue();
159            currentSize -= getSize(toRemove);
160            final T key = last.getKey();
161            cache.remove(key);
162            onItemEvicted(key, toRemove); // この中でスレッドチェックが行われている
163        }
164    }
```
習うより慣れろ、Docker 超入門・2016年版

# 習うより慣れろ、Docker 超入門・2016年版

>チームからDockerコンテナイメージで開発をすすめられて困ってる人へ。
>dockerの原理よりも、操作方法で覚えたい。
>むずかしい事は考えたくない人向け。

---------------
INDEX

- A どんな物か？じゃなくて何ができるか？
- B 出会い、始まり
- C 動かし方の基本を覚える
- D 動かし方の基本を,もう少し覚えよう

---------------

## A どんな物か？じゃなくて何ができるか？

- ずばりパソコンでファミコンができるエミュレータみないな物。windows(mac)で　linuxという環境が動くよ。
- さらにファミコンのカセットみたいなコンテナというのを入れ替えればphp用とかruby用とか色んな開発環境が入るよ。


---------------

## B 出会い、始まり

おそらく上司から以下の指示が出るはずだ。

### dockerインストールしといてね。

何も考えずに以下のステップを踏めばいい


#### step 1 サイトにアクセス　
[download](https://www.docker.com/products/docker-toolbox)
自分のパソコンに合わせて、ウィンドウズか、マックかどちらかをダウンロード

#### step 2
インストール。　（gitまで全部選んでね）

#### step 3
起動は　デスクトップに作られた
「　Docker Quickstart Terminal　」
を起動

> もしも起動する時にエラーが出たり、したら何等かパソコン設定とかに問題がある可能性がある（仮想化有効にしてない）そうなったら上司に相談だ


---------------

## C 動かし方の基本を覚える。

### step 1 

コンテナの起動

```
docker pull ubuntu
docker run -it ubuntu
```
これだけで ubuntu というlinuxが立ち上がる。
linuxの使い方は今は覚える必要はない。とりあえずこの状態から一度抜けよう

```
exit
```

このコマンドではじめの画面に戻ってこれる。


---------------
### step 2
ウェブ開発がしたいからコンテナからとりあえず、ウェブページを立ち上げてみたい！

何も考えずにコマンドを入れ続けよう

```
1
docker-machine ip default

	192.168.99.100
		この数字を使います

2
docker run -p 8888:80 prakhar1989/static-site

	Nginx is running...
		これが表示されたら

3
webブラウザのＵＲＬ窓に　3の数字と8888を下のように入力

192.168.99.100:8888

```
	
Hello Dockerのページが表示されたら成功です。

コマンドラインはずーっとnginxの状態なので
Ctrl+c
でその状態を抜けることができます。



---------------

### step 3
ファイルを共有する。

このままだとdockerの中のフォルダと自分のパソコンのハードディスクフォルダは共有されてない状態です。

```
docker run -p 8080:80 -v /Users:/home/share -it ubuntu
```


[macで共有](http://programmer-bu.com/mac-shared-folder-to-docker-container/)
windowsで共有も基本は上と同じ


>フォルダ構成がいまいち、わからない場合は上司に相談しよう。

---------------
## D 動かし方の基本を,もう少し覚えよう

### さきほどの step 1を、もう少し詳しくやってみよう
[step 1 Ubuntuのイメージをインストールして基本の操作を行う](http://qiita.com/tifa2chan/items/940da8f4da9cb483b971)

これだけでdocker psなど色々コマンドがあるという事が確認できるはずだ。


### 色んなコンテナを入れて遊ぼう
[step 2 docker hubを利用しよう](https://hub.docker.com/)

ドッカーにはdocker hubというコンテナを自由にダウンロードしたりするサービスがある。

docker pull ****

して色々コンテナを入れてみよう。


### 後は、いろんな疑問を元に検索検索

ここまでくれば、dockerについて何となくわかった気になってくると思う。
そして、操作上の疑問や、原理的な疑問を調べて、テストしていこう。
オススメの検索内容は

> dockerのコンテナはどうやって作るのか？

ということだ。
意外と簡単だが、奥が深い。　しかし、その作り方がわかればチームで
配布されるdockerコンテナについての理解が深まるはずだ。
ふぁぼ整理 3

* Title:            
* Author:           
* Contact:          
* Copyright:        
* Release Date:&nbsp;&nbsp;&nbsp;&nbsp;February 3, 2016
* Description:      
* Tested On:        
* Build/Run: 

## 松下 侑衣花 ‏@Yuika1231  2015年11月16日
「すっぴんでいたいけど、メイクしなきゃいけない」って日、女の子なら絶対ある。そんな日は、ベアミネラル『CR ティンテッド ジェル クリーム』🙌まるですっぴんなのに、肌に自然なツヤを出してくれる✨パウダーを重ねれば、2分で美肌が完成😉 
![alt](https://pbs.twimg.com/media/CT53No8VAAEa7tq.jpg:large)

## 【決定版】PHPフレームワークのデメリットまとめ
http://blog.livedoor.jp/jyoukyousikou/archives/46880019.html

## HTMLの<table>内をソートできるjQueryプラグイン
http://qiita.com/rev84/items/23b09fcb27ce218597ad

## One and the Only One Reason to Customize IntelliJ IDEA Memory Settings
http://www.javacodegeeks.com/2015/11/one-one-reason-customize-intellij-idea-memory-settings.html

## デザイナー組織を効率よくマネジメントする「仕組みづくり」
http://creator.dwango.co.jp/979.html

## Webサイトの構築、制作、運用で便利に使えるWebツール
http://web.antenna.work/benri-tools/

## VAddyはCIツールと連携し、継続的なセキュリティテストを実現するクラウド型Web脆弱性検査ツールです。
http://vaddy.net/ja/?utm_source=twitter_campaign&utm_medium=tweet&utm_campaign=tCam001

## 忙しい人のためのIntelliJ IDEAショートカット集（´-`）
http://qiita.com/yoppe/items/f7cbeb825c071691d3f2

## IntelliJ IDEAをインストールしたら設定してること(Java/Groovy編)
http://kyon-mm.bitbucket.org/blog/html/2013/12/01/intellij_setting.html

## とあるサイトの高速化についてフロントエンドでやったことまとめ。
http://torounit.com/blog/2014/11/27/1870/

## 管理画面を開発する際に気をつけたこと
http://techlife.cookpad.com/entry/2015/11/28/100000

## 「AWSからGCPに切り替えたらコストが1/10になった」CETエンジニア 吉田啓二氏インタビュー
http://engineer.recruit-lifestyle.co.jp/techblog/2015-11-27-yoshida-interview-2/

## \#gunosygo でIntelliJ IDEAでGoを書く環境設定を教えてもらった
http://otiai10.hatenablog.com/entry/2015/06/02/224636

## Vagrant と Azure で使い捨て開発環境をさくっと作る
http://qiita.com/zakkied/items/667418c6b9b1ea349687

## MVC for Java EE 8
https://ozark.java.net/

## 続・IntelliJ IDEAをバージョンアップしたら.mdファイルが開かなくなった
http://teafortw0.hatenablog.com/entry/2015/11/29/221718

## Google Chromeの開発者用「ネットワークツール」を別ウィンドウに表示してくれるツール「Betwixt」が公開。
http://applech2.com/archives/47057919.html

## 【PHP】たった1行コマンドを入力するだけでComposerを劇的に速くする方法【アジア圏限定】
http://yuzurus.hatenablog.jp/entry/composer-hayai
ふぁぼ整理 2

* Title:            
* Author:           
* Contact:          
* Copyright:        
* Release Date:&nbsp;&nbsp;&nbsp;&nbsp;February 3, 2016
* Description:      
* Tested On:        
* Build/Run: 

## HTMLで🍣をUnicode表記で表示する方法
http://qiita.com/le_panda_noir/items/f3e23d11b10ddf570ac2

## フリーランスの生産性を高めてくれる10のアプリ
http://www.lifehacker.jp/2015/11/151106productivity_apps.html

## Linuxでファイルを高速検索する
http://qiita.com/noguchi1130/items/75232e09b7a5168a1cdd

## Gitのこれやめて！リスト
http://qiita.com/doilux/items/b5a9abd95ac91e848a5f

## アプリアイコンを手軽かつハイクオリティに仕上げることができるジェネレーター「App Icon Generator」
http://design-develop.net/tool/app-icon-generator.html

## nodebrewはhomebrewではなくDocsにあるcurlを使ってインストールする
http://qiita.com/armorik83/items/ed97c618a55d9c13c34b

## 超絶初心者むけtcpdumpの使い方
http://qiita.com/tossh/items/4cd33693965ef231bd2a

## tcpdump コマンドの使いかたをまとめてみた
http://blog.livedoor.jp/sonots/archives/18239717.html

## ２段階SSHポートフォワーディングの方法
http://vogel.at.webry.info/201409/article_6.html

## 大企業のUXデザインをダメにする３つの問題
http://uxmilk.jp/translation/problems-solutions-ux-design-enterprise

## Macの”Automator”の便利さは異常
http://green-romp.com/blog/?p=5444

## qpstudy 2015.11.14 一歩先を行くインフラエンジニアに知ってほしいSSL/TLS
http://www.slideshare.net/kenjiurushima/qpstudy-20151114-ssltls

## Minagawa@Pythonista ‏@Bunkeina  2015年11月14日
チームでプロジェクトに取り組むときは「怒ったら終わり」。案が出て譲り合えないときは「第三者を使ってABテスト」これで大抵はクールに解決できる。感情のみで語る方は、、、心を鬼にしてキックアウトですね

## codicは、プログラマー・システムエンジニアのためのネーミングツールです。
https://codic.jp/

## 実務で役立つシェル系Tips
http://qiita.com/Keech/items/430f5632b3f91a79a3ae

## どうしようもないエンジニアから卒業するために考えるべきたった1つのこと
http://qiita.com/kkoide1332/items/d307ae95aab4813a86c1

## ES6のconstを使い倒すレシピ1 - 前提共有編 〜 JSおくのほそ道 #034
http://qiita.com/hosomichi/items/093aadcd8891c86e9dda

## iconv - ファイルの文字コードを変換 - Linuxコマンド
http://webkaru.net/linux/iconv-command/

## 2015年最新PHPフレームワーク（9つ）のベンチマーク
http://blog.a-way-out.net/blog/2015/03/26/php-framework-benchmark/

## 【2015年版】PHPフレームワーク人気比較してみました！
https://techstars.jp/blog/framework2/

## フリーランスPHPerである私がフレームワークを使わなかった理由、使うようになった経緯
http://rdlabo.jp/php-219.php

## PHPに無いセキュリティ機能 – PHPカンファレンス関西2015
http://blog.ohgaki.net/missing-security-related-parts-of-php

## SVG For Web Designers (and Developers)
http://www.slideshare.net/SaraSoueidan/svg-for-web-designers-and-developers
ふぁぼ整理

* Title:            
* Author:           
* Contact:          
* Copyright:        
* Release Date:&nbsp;&nbsp;&nbsp;&nbsp;February 3, 2016
* Description:      
* Tested On:        
* Build/Run:        

## 肥え続けるTomcatと胃を痛めるトラブルハッカー
http://www.atmarkit.co.jp/ait/articles/0711/27/news122.html

## より良いプログラムを書くための究極の奇策 – 「Data first, not code first」
http://postd.cc/one-weird-trick-to-write-better-code/

## いま生きる「資本論」	
佐藤優／著
ISBN:978-4-10-475207-2

## セマンティックWeb構築に向けたJavaベースのフレームワーク「Jena 3.0」リリース
https://osdn.jp/magazine/15/08/04/043400

## 第5回　Dockerで複数バージョンのMySQLを開発環境に用意する
http://gihyo.jp/dev/serial/01/mysql-road-construction-news/0005

## Touch IDを使いMacのロックを解除することの出来るアプリ「MacID」がv1.3にアップデート。iPhone 6sの3D TouchやwatchOS 2に対応。
http://applech2.com/archives/46723127.html

## システム障害対策の勘所〜復旧時間とコストのトレードオフ〜
http://www.bit-isle.jp/column/03.html

## 可用性とは何か？可用性を高めるには？
http://homepage3.nifty.com/fate/disaster_recovery/what_ha.html

## 「SELinuxのせいで動かない」撲滅ガイド
http://qiita.com/yunano/items/857ab36faa0d695573dd

## Eclipseのアレ、IntelliJ IDEAでどうやんの？
http://irof.hateblo.jp/entry/20121223/p1

## PHPで特定のワードが含まれたツイートをお気に入り
http://qiita.com/_Ghostrick_/items/52380629edcc271c2deb

## [JS]これは便利！YouTubeの動画をはじめ、VineやTEDやCodePenやツイートやPDFやGoogleマップまで簡単にページに埋め込めるスクリプト -Embed.js
http://coliss.com/articles/build-websites/operation/javascript/jquery-plugin-embedjs.html

## 雙峰祭企画検索
http://event.sohosai.tsukuba.ac.jp/search/
「進捗どうですか」をJavaで


[こちらの記事](http://elephnote.com/blog/archives/936)で紹介されている「進捗どうですか」をJavaでさくっと書いてみました。

Gist
https://gist.github.com/akiotanaka0926/43f4cbff6c70ea55dcbc

```java:WorkProgress.java
package work.progress;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 進捗どうですかで煽る=□>
 * 
 * @author AQUA
 */
public class WorkProgress {

	/** 進捗どうですか　マッチング用 */
	private static final String WORK_PROGRESS = "進捗どうですか";

	/**
	 * メイン実行
	 * 
	 * @param args
	 *            引数(なし)
	 */
	public static void main(String[] args) {
		Map<Integer, String> progressWordMap = createProgressWordMap();
		StringBuilder sb = new StringBuilder();

		Pattern pattern = Pattern.compile(WORK_PROGRESS);
		Random random = new Random();
		int inFlameCount = 0;

		while (!isWorkProgress(sb.toString(), pattern)) {
			String addWord = progressWordMap.get(random.nextInt(4));
			System.out.print(addWord);
			System.out.print(" ");
			sb.append(addWord);
			inFlameCount++;
			if (inFlameCount == 50) {
				System.out.println();
				inFlameCount = 0;
			}
		}
		System.out.println(" ???");
		System.out.println(sb.length() + "文字で煽られました");
	}

	/**
	 * 進捗どうですか　をランダムで表示するためのマップを生成します
	 * 
	 * @return 進捗どうですかマップ
	 */
	private static Map<Integer, String> createProgressWordMap() {
		Map<Integer, String> progressWordMap = new HashMap<>();

		progressWordMap.put(0, "進捗");
		progressWordMap.put(1, "どう");
		progressWordMap.put(2, "です");
		progressWordMap.put(3, "か");

		return progressWordMap;
	}

	/**
	 * 進捗どうですか　が出現したかを判定します
	 * 
	 * @param mattchingWord
	 *            判定する文字列
	 * @param pattern
	 *            パターン（進捗どうですか）
	 * @return true:出現<br>
	 *         false:未出現
	 */
	private static boolean isWorkProgress(String mattchingWord, Pattern pattern) {
		Matcher matcher = pattern.matcher(mattchingWord);
		return matcher.find();
	}
}
```

実行結果
![結果.PNG](https://qiita-image-store.s3.amazonaws.com/0/51580/7e8879d2-2d33-c0a1-ebd7-0f6cabc3d693.png)

オーダーとかちゃんと測ってないけどもうちょい効率化したい感じ。
20分くらいで作れたので、ひとまず満足
気が向いたらリファクタリングします。
R言語の情報 ( 他のプログラム言語を使ったことがある人向け)

他のプログラム言語を触ったことがある私が、Rのプログラムを書くのに必要だなと思う情報の一覧を記載しています。(R言語を使ったことはないがプログラムを見れば書き方がなんとなくわかるし、入門ページを読むのは面倒だなという人向けの情報です。）

#RでHello World + α
```r:Hello_World.R
#----------Hello worldと出力する------------------------------
print("Hello World")

#----------CSVファイルの入出力------------------------------
#csvファイルを読み込む
data<-read.csv("input_data.csv")

data$C <- data$A + data$B

#csvファイルに出力する
write.csv(data, "output_data.csv", quote=FALSE, row.names=FALSE)
```

#データの型（？）
※整数、浮動少数等の型の違いはなさそう。
※型の宣言をしないで使える。
NULL : 空
NA : 欠損
NaN : 数ではない
Inf : 無限（どういうときに使うんだろう？）
1+1i : 複素数(iの前に1が必要らしい。）
"文字列"　:　文字列型　エスケープは"\\"
TRUE,FALSE :  boolean
日付 ：
データフレーム ：　データフレームという型があり、ものすごく使いやすい。

変数の型を調べるときはis.型() {例　変数xを文字列型か調べるis.character(x)}
型変更はas.型() {例　変数xを文字列型にするas.character(x)}

#比較演算子
=
!= :not equal
\<=
\>=
\<
\>
is.null()
is.na()　：　欠損か？
is.nan() : 数字か？
is.finite() : 有限か？
is.infinite()　: 無限か？
complete.cases() : 欠測値があるか？

#論理演算子
!　: not
& : and
&& : and　( 上とどう違う？ ）
| : or
|| : or　( 上とどう違う？）
xor() : 排他的論理和

#演算子
$　: リストの要素
\[] : ベクトルや行列の要素
\^  : べき乗
\<- : 代入　（　ほかの言語みたいに = を使っても代入できるみたい )
\<<- : 永続代入　( ローカルに変数がない時は、グローバル変数に代入する演算子 )

#参考
統計解析フリーソフト R の備忘録頁 ver.3.1
http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html

Rメモ：read.csv/write.csvで読み込んだり書き出したりするときの注意点
http://statsbeginner.hatenablog.com/entry/2014/08/31/230758
インストールするRPMパッケージの検証

パッケージをダウンロードしてrpmコマンドでインストールする場合、自動でGPG署名のチェックが行われるが、パッケージリリース元のGPG公開鍵がサーバに取り込まれていない場合以下のような警告が出る。

```bash:Command
rpm -ivh httpd-2.4.6-40.el7.centos.src.rpm
warning: httpd-2.4.6-40.el7.centos.src.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
....
```

RPMコマンドのオプション
-i: RPMパッケージのインストール
-h: 処理の進行状況を"#"で表示する
-v: 操作対象のパッケージ名を表示する


正しく署名の確認を行うにはGPG公開鍵のインポートを行わなくてはならない。
また、信頼できる配布元のパッケージを使用するため、署名の確認が取れたパッケージを使用するべきである。

以下はCentOS ProjectのGPG公開鍵をインストールする手順。
OSインストール時点でGPG公開鍵は配置されているのでインポートしてあげればOK。

```bash:Command
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
```

これで正しいrpmであれば警告がでなくなる。


インポート済みのGPG公開鍵の情報を確認するには以下のコマンドを実行する。

```bash:Command
rpm -qai gpg-pubkey*
```
RPMコマンドのオプション
-q: RPMパッケージ情報を表示
-a: インストールされている全てのパッケージを選択
-i（-q指定時の検索オプション）: 検索したパッケージの名前、バージョン、リリース日、インストール日などの詳細情報を表示
yumコマンドの使い方


# よく使用するyumコマンドの一覧

## パッケージのインストール

```
yum install <パッケージ名>
```

グループに含まれるパッケージをインストール

```
yum groupinstall <グループ名>
```

rpmファイルを指定してyumコマンドでインストール
※依存するパッケージは有効なリポジトリから取得される

```
yum localinstal <rpmファイル>
```

## パッケージのリスト表示

全パッケージのリスト表示

```
yum list
または
yum list all
```

インストール済みのパッケージのリスト表示

```
yum list installed
```

全グループのリスト表示

```
yum grouplist
```


特定のパッケージに関するものだけ表示したい場合
以下は、perlから始まるインストール済みのパッケージリストを表示

```
yum list installed perl*
```

## パッケージのアップデート

```
yum update <パッケージ名>
```

グループ内のパッケージをアップデート

```
yum groupupdate <グループ名>
```

## パッケージ情報の表示

```
yum info <パッケージ名>
```

## 指定したファイルを含むパッケージの検索

```
yum provides <ファイルパス>
```

## パッケージが依存するパッケージ及びファイルの一覧を表示

```
yum deplist <パッケージ名>
```

## パッケージの削除

```
yum remove <パッケージ名>
または
yum erase <パッケージ名>
```

グループ内のパッケージを削除
	
```
yum groupremove <グループ名>
```
Node.jsでjsonの読み込みはrequireでできる

Node.jsでjsonを簡単に読み込むにはrequireで読み込める。

```test.json
{
  "a": "hoge",
  "b": "fuga",
  "c": "piyo"
}
```

```test.js
var test = require( "./test.json" );

console.log( test );
```

```
$ node test.js
{ a: 'hoge', b: 'fuga', c: 'piyo' }
```

今まで簡単なスクリプトでもfs.readFile~~とかを書いていたけれど、
知らなかったのでメモ。

※ただしキャッシュするようなので普段使うときはfs.readFile~~のほうが良さそう。
mp3の音が全体に小さい時にあげる方法 (Mac)


つまり、ピークが0dBとなるようにノーマライズする方法。

## 準備

lameが入っていなければ入れます。

```
brew install lame
```

soxが入っていなければいれます。

```
brew install sox
```

## 正規化します

```
sox in.mp3 out.mp3 gain -n
```

in.mp3のbit rateによらずout.mp3はbit rateが128kになってしまうようなので(?)、bit rateを指定したい時は、

```
sox in.mp3 -C 256 out.mp3 gain -n 
```

でOK

```
soxi out.mp3
```

で確認してみましょう。

## 参考
- [音声処理ツール SoX — Sound eXchange の各種マニュアルページの日本語訳](http://www.hcn.zaq.ne.jp/___/unix/sox-ja.html)

おわり。
大文字小文字区別ファイルシステムから区別しないファイルシステムへ

Mac OS Xではデフォルトというか出荷状態でのファイルシステムは大文字と小文字を区別しません。UNIX的に使いたいときには大文字と小文字が区別できた方がいいなぁ、Androidのソースとかも大文字小文字区別するファイルシステムじゃないとビルドしてくれないし、と思っていました。
ところが、NativeScriptとかGenymotionとかAcrobat ReaderとかUnreal Engineとか大文字小文字区別するファイルシステムでは動いてくれないソフトウェアも増えてきまして、NativeScriptとかはgithubでソース公開されているので「ここ直したら大文字小文字区別しても動くからこのpull request受け入れて」とやってきたのですが、意地はるのもどうかという気になってきました。
という訳で、Time Machineでどうせバックアップとってるんだし、それを大文字小文字区別しないファイルシステムにリストアにすれば楽勝じゃない? と思ったら楽勝じゃなかったのでメモしときます。

---

- まず、cmd-Rでリストアモードでブートしてストレージを大文字小文字区別しないファイルシステムで初期化してからリストア…
  - してみたらご丁寧に大文字小文字区別のファイルシステムで初期化しやがってくれました。そうだよ、こいつ、こういう馬鹿丁寧な奴だっけ。

---

- 一度大文字小文字区別なしファイルシステムで初期化してOSインストールしてから「移行アシスタント」でリストアを試みる。
	- バックアップを見付けられない。ファイルシステム違うから復元対象と認めてくれないのかしらん。

---

という訳で、リストアモードのターミナルからrsyncによるコピーで復元してみました。以下の手順。Time Machineのバックアップ先のIPアドレス(我が家ではTime Capsule)とボリューム名はあらかじめ覚えておく必要があります。

1. cmd-Rでリカバリモードを起動。ここではリストア先は「`/Volumes/MacHDD`」としますが、環境に合わせて適当に読み替えて下さい。
2. ターミナルを起動
3. 「`mkdir /Volumes/TimeMachine`」を実行してマウント先を用意
4. 「`mount -t afp afp://ユーザ名:パスワード@IPアドレス/ボリューム名 /Volumes/TimeMachine`」にてTime Machineのストレージをマウント
5. 「`hdiutil attach /Volumes/TimeMachine/バックアップ名.sparsebundle`」にてTime Machineバックアップをマウント [参考](http://easyramble.com/restore-time-machine-sparsebundle.html)
6. 「`cd /Volume/Time\ Machineほげほげ/バックアップ名/Latest/`」して、`ls`とかで中身が最新のバックアップであることを確認
7. tmpディレクトリを「`mkdir /Volumes/MacHDD/tmptmp`」で用意。(`/tmp`がreadonlyになってるし`/private/var/tmp/`は容量が足りないし、`/Volumes/MacHDD/tmp/`はリストア途中で上書きされて消されちゃうので注意)
8. 「`caffinate ./MacHDD/bin/rsync -avE -T /Volumes/MacHDD/tmptmp/ MacHDD/ /Volumes/MacHDD/`」にてリストア。しばし待つ。(caffinateはリストア中にスリープしないためのコマンド)
9. 「`chmod -R -a# 0 /Volumes/MacHDD`」でACL削除 [参考](http://blog.livedoor.jp/dankogai/archives/51086840.html)

おかげさまで、これにて大文字小文字区別しないファイルシステムになりました。Unreal Engineもうごいたよ。わーい。後で気が向いたら`/tmptmp`消しておこう。
NW.js 0.13変更点のメモ

NW.js 0.12→0.13変更点のメモ。
かなりいろいろ変わっているようですが、[Migrate from 0.12 to 0.13](http://docs.nwjs.io/en/v0.13.0-beta4/For%20Users/Migration/From%200.12%20to%200.13/)から、特に気づいたものだけ。

#エントリポイントがhtmlファイルからjsファイルになった
従来のようにhtmlファイルにもできるが、その場合はNW.jsのデフォルトのエントリファイルが使用されるらしい。

#NW.jsライブラリへのアクセス方法の変更
グローバルオブジェクト`nw`からアクセスする。
これまでのような`var gui = require('nw.gui')`は不要になった。
ついでにnw.guiライブラリはnwオブジェクトに統合されたらしい。

ついでにrequireもnwオブジェクトに含まれるようになった。
(`var hoge = nw.require('hoge.js');`という感じで)

```js:0.12
var gui = require('nw.gui');
gui.Window.open('./index.html');
```

```js:0.13
nw.Window.open('./index.html');
```
#フレーバーの分化
ノーマルフレーバー、SDKフレーバー、NaClフレーバー(GoogleNativeClientを使うためのもの？)に分かれた。
DevToolはSDKフレーバーでしか表示できない。

#ツールバーの廃止
Window.open時のオプション`toolbar`は常にfalse扱いになる。
DevtoolはWindow.showDevtools関数で開くか、ウィンドウ上でF12で開く。

#Window.open時のWindowオブジェクトの取得方法の変更
open関数の返値として返さなくなった。open関数のコールバック関数で返す。

```js:0.12
var gui = require('nw.gui');
var win = gui.Window.open('./example.html');
win.once('close', function() {
     //ウィンドウが閉じた
});
```

```js:0.13
nw.Window.open('./example.html', {}, function(win) {
     win.once('close', function() {
          //ウィンドウが閉じた
     });
});
```
#一部Windowオプション名の変更
`always-on-top` `visible-on-all-workspaces` → `always_on_top` `visible_on_all_workspaces`
セパレータ'-'→'_'
Apache JMeterでOSコマンドを実行するには：MacOSXおよびLinux編

## 実現したいこと

Apache JMeterのシナリオでOSコマンドを実行したい。

## 実現方法および解決方法

Apache JMeterのOS Processer Samplerを利用します。

## 実行コマンド

今回は、GUIでの操作の場合を想定します。
スレッドグループで右クリックし、[追加] → [サンプラ] → [OS Process Sampler] を選択します。

<img width="808" alt="スクリーンショット 2016-02-02 22.15.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/49795/d51eae01-6c88-777a-22c4-b8b3dcfd8faa.png">

Command の項目に実行したいコマンドを入力する

<img width="1235" alt="スクリーンショット 2016-02-02 22.18.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/49795/4c4e03c0-7d91-1d3b-730e-78fa298bd5ce.png">


## 情報源

http://sy5.sakura.ne.jp/jmeter/ref/osprocesssampler.html
http://jmeter.apache.org/usermanual/component_reference.html#OS_Process_Sampler

## 補足

* giコマンドを利用してリポジトリをcloneおよびpullすることもできますし、mysqlコマンドを利用してCSVを作成することもできます。
wordpressのDBデータを移行するときに、Unknown character set: ‘utf8mb4’エラーがでる場合の対処法


##原因
データベースへの保存形式がutf8からutf8mb4に変更されていて、MySQL5.5から5.3環境に移行する場合にエラーが出るから

##解決方法
sqlのダンプデータをテキストエディタで開いて、「utf8mb4」→「utf8」へ全て置換するだけ