OmniAICreator/Qiita-1.07M huggingface dataset:
CentOS7 インストール手順

# 【CentOS7 インストール手順】

# ◇ 演習環境
* OS: CentOS7.0 (2014年7月7日 Release)
* Memory: 512MB 以上推奨


# ◇ CentOS7 インストール手順
1. 公式サイトからインストールISO(minimal)を取得
 - https://www.centos.org/
1. ISO ファイルを仮想ドライブにセットし起動
1. インストール実行

## ※インストール時の注意事項
- Strage 調整: 50GB 以上割り当ててインストールを試みると / へ50GB、/home へ残りすべて割り当てられるため設定が必要

# ◇ CentOS 初期設定

## 1. インターフェース設定
```bash
vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
----
+DOMAIN="domain.org"
```
* Domain: ドメイン名の補完設定を有効化

## 2. yum proxy 設定有効化
* proxy を使用する環境のみ設定を行う

```/etc/yum.conf
@@ -13 +13 @@
-
+proxy=http://192.168.100.11:3128/
```

## 3. 最新版への更新
```Bash
yum update -y
reboot
```
## 4. selinux 無効化
```Bash
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
```
## 5. システム再起動
* kernel 最新版への更新や selinux の設定を反映

```Bash
reboot
```

# ◇ パッケージの追加インストール
## 1. firewalld
### a. インストール
```
yum install firewalld
```

### b. サービス起動
```
systemctl start firewalld.service
```

### c. 自動起動設定追加
```
systemctl enable named-chroot.service
```

### d. アクセス許可サービス許可確認
```
firewall-cmd --list-all
```

### e. サービス定義一覧表示
```
firewall-cmd --get-services
```
* --add-service で指定可能なサービスの一覧

## 2. vim 
### a. インストール
```Bash
yum install vim 
```
## 3. zsh
### a. インストール
```Bash
yum install zsh 
```
### b. デフォルトシェル変更
```Bash
chsh
-----
root のシェルを変更します。
新しいシェル [/bin/bash]: /bin/zsh    <- zshを指定
シェルを変更しました。
```
### c. カスタム設定
```~/.zshrc
# 履歴ファイルの保存先
export HISTFILE=${HOME}/.zsh_history

# 複数の zsh を同時に使う時など history ファイルに上書きせず追加する
setopt append_history

# 履歴の共有
setopt share_history

# メモリに保存される履歴の件数
export HISTSIZE=1000

# 履歴ファイルに保存される履歴の件数
export SAVEHIST=100000

# 重複を記録しない
setopt hist_ignore_dups

# 開始と終了を記録
setopt EXTENDED_HISTORY
setopt correct

# プロンプトに色をつける
autoload -U colors; colors

bindkey -v
bindkey "^R" history-incremental-search-backward

case "${TERM}" in
  screen*|ansi*)
    preexec()
      {
                echo -ne "\ek${1%% 2%% *}\e\\"
      }
    precmd()
      {
                echo -ne "\ek$(hostname|awk 'BEGIN{FS="."}{print $1}')\e\\"
                #echo -ne "\ek$(basename $SHELL) :::: waiting your command ... > (:3[___]\e\\"
      }
  ;;
esac
```
## 4. screen
### a. インストール
```Bash
yum install screen 
```
### b. 設定
```~/.screenrc
hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
```

## 5. VMWare Tools
* VMWare 使用時のみ実行 

### a. インストール実行
* CentOS7 以降は vSphere Client 付属の VMWare Tools の利用では無く、open-vm-tools の利用を推奨とのこと。  
  参考：https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2073803

```bash
yum install open-vm-tools
reboot
```

### b. インストール確認
```bash
vmware-toolbox-cmd -v
※バージョンが表示されればインストール確認完了
```

## 6. OracleVM VirtualBox Guest Additions
* OracleVM VirtualBox 使用時のみ実行

### a. 関連パッケージのインストール
* CentOS7 から perl が不要となる

```Bash
yum install kernel-devel make gcc bzip2 
```

### b. GuestAdditions のマウント
* VirtualBox のウインドウから [デバイス] -> [GuestAdditions CD イメージの挿入] を選択し、下記コマンドを実行

```bash
mount -r /dev/cdrom /media
```

### c. インストール実行
```Bash
/media/VBoxLinuxAdditions.run
```
Leiningen から起動される JVM に環境変数を渡す方法

経緯
====

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Leiningenから起動されるJVMに環境変数を渡す方法で、leinコマンドに直接環境変数を設定して起動するんではなく、project.cljから設定を読み込むような方法ってないんだろうか…。</p>&mdash; えいとす(a.k.a. あちょす) (@athos0220) <a href="https://twitter.com/athos0220/status/711367594201067521">March 20, 2016</a></blockquote>
<blockquote class="twitter-tweet" data-conversation="none" data-lang="en"><p lang="ja" dir="ltr">(lein-)environが似たことをやってるけど、あれはあくまで環境変数*も*設定情報のソースにしてくれるだけで、環境変数を設定してJVMを起動してくれるわけではないからやりたいことと微妙にズレてる。</p>&mdash; えいとす(a.k.a. あちょす) (@athos0220) <a href="https://twitter.com/athos0220/status/711368029431463938">March 20, 2016</a></blockquote>
<blockquote class="twitter-tweet" data-conversation="none" data-lang="en"><p lang="ja" dir="ltr">やりたいのは単に、特定の環境変数を必要とするJavaライブラリをClojureから使うために開発時にLeiningenを起動する場合も含めて環境変数を設定しておくということなんだけど。シェルでexportしておく手もあるけど、環境が汚れるし設定のし忘れも起こりそう。</p>&mdash; えいとす(a.k.a. あちょす) (@athos0220) <a href="https://twitter.com/athos0220/status/711369050559918081">March 20, 2016</a></blockquote>

要件をまとめると次のようになります。

-   lein コマンドに直接環境変数を渡したくない
-   システムプロパティーではなくて **環境変数** を設定したい
-   export するのは避けたい

こんな感じですね。これに対して幾つかの解法があることが分かったのでまとめたいと思います。

大人しく shell のプラグインを使う
---------------------------------

次のようなプラグインを使えばわりと綺麗にやりたいことを実現できます。

<https://github.com/Tarrasch/zsh-autoenv> 
<https://github.com/jamesob/desk>

とはいえ、他の人と同じプロジェクトを進めているときは注意が必要だと思いますが。

Emacs のローカルディレクトリ変数を使う
--------------------------------------

`.dir-locals.el` を次のように設定すれば良いです。

``` commonlisp
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")

((clojure-mode
  (eval . (setenv "answer" "42"))))
```

最初だめだと思ったんですけど、やっぱりいけるぽいので書いておきます。

``` clojure
(System/getenv "answer")
;; => "42"
```

順序としてはファイルを開いて初めて環境変数が設定できるので、その後 `cider-jack-in` します。 ただ、この方法だと Emacs からしかその環境変数を参照できないのであまり良い方法ではないかもしれないです。

lein-shell を使う
------------------------------------

https://github.com/hyPiRion/lein-shell

``` clojure
(defproject demo "0.1.0-SNAPSHOT"
  ...
  :plugins [[lein-shell "0.5.0"]]
  :shell {:env {"answer" "42"}})
```

こうすれば `lein shell lein repl` という風に起動できて、 REPL 環境の中で環境変数を参照することができます。 しかし、これは `lein-shell` で立ち上がった環境のうえで `lein repl` を実行しているので最初はいいかもしれませんが何処かでおかしなことが起りそうな気がしています。

ちなみに最初、 `:prep-tasks` で `export` するとかしたらいいのではと思ったのですが、ダメみたいです。

まとめ
======

開発時であれば Emacs を使ったり、 shell のプラグインを使うのが自分の環境を汚さずに済みそうです。
本番環境への環境変数設定忘れについては別途スクリプトを書くなどして防ぐのが良さそう(それしかなさそう)。
nginxでnon-blocking sleep

時々HTTPサーバで特定のリクエストに対してだけわざと時間をかけてレスポンスを返したいことがある。例えばエッジケースだが、プロキシサーバの負荷テストをする際、バックエンドのサーバが詰まっている状況を再現するためにわざと`sleep`を入れたいことがある。しかし、単純なsleepだとリクエストどころかサーバ自体をブロックしてしまうので一工夫が必要である。で、[echo-nginx-module](https://github.com/openresty/echo-nginx-module)や[ngx_lua](https://github.com/openresty/lua-nginx-module)にはnon-bloking behaviorなsleepが用意されているので特定のリクエストはブロックしつつ、ほかのリクエストは並行して処理するといったことが簡単にできる。

## echo-nginx-moduleのecho_sleepを使ったnon-blocking sleep

[echo-nginx-module](https://github.com/openresty/echo-nginx-module)は単に`echo`するためのモジュールである・・・そう、思っていた時期が私にもありました。README.mdを見ればわかるとおり、このモジュールは何故echoモジュールなんて名前が付いてるのかわからないくらい多機能である。

例えばさっき言ったnon-blocking behaviorなsleep処理はechoモジュールだとこう書ける。

```nginx
location /echo_take_1sec {
    echo_sleep 1;
    echo "OK";
}
```

このロケーションにリクエストすると1秒後に`OK`が返ってくる。そして次に述べることが重要なのだが、**`echo_sleep`はリクエストをブロックするが、nginxのプロセスはブロックしない**。つまりnginxは特定のリクエストを指定秒数だけブロックしつつ、ほかのリクエストを並行して処理することができる。

## ngx_luaのngx.sleep()を使ったnon-blocking sleep

[ngx_lua](https://github.com/openresty/lua-nginx-module)では`echo_sleep`相当のAPIとして`ngx.sleep()`が提供されている。さっきと同じことをngx_luaでやるコードは以下の通り。

```nginx
location /echo_take_1sec {
    content_by_lua_block {
        ngx.sleep(1)
        ngx.say("OK")
    }
}
```
シードデータの作成方法　[ 自分用メモ ]

<h1>シードデータの作成は、db/seeds.rbファイル内にRubyコマンドを記載する。</h1>※ DEVISEのusersテーブルの場合<br>
**手順1**
**db/seeds.rb**<br>
100.times do |n|
  User.create(
    name: "Hoge Fuga#{n}",
    email: "hogehoge#{n}@example.com",
    password: "hogefuga",
    uid: "11111#{n}",
    provider: "Facebook",
confirmed_at: "2016-03-22 08:52:03.98286#{n}" 
    )
end<br>
※uid: "11111#{n}"については、ユニーク(一意)なので、#{n}(←1~100が入る)を入れること<br><br>

**手順2**
rake db:seed


・ここで、#{n}を使うことでダブルクォーテーションで囲われた文字列内に、任意のRubyの式を埋め込むことができる。<br>
・usersテーブル(DEVISE)は、emailが重複してはならないように制御がかかっている。そのため、ここでは、"hogehoge#{n}@example.com",で1~100まで数字が自動的につくように式を入れた。<br>
・なお、Devise用に作成したusersテーブルにシードデータを投入する際には、「password」を指定して作成する。元々、Deviseで使うusersテーブルには「encrypted_password」カラムが作成されている。しかし、これは暗号化された状態の文字列を格納するためのもの。その暗号化をする元になるのが、画面上の入力フォームに入力された値「password」となっている。この「password」を使い自動的に暗号化して「encrypted_password」に格納している。
電子工作 > Link > 無安定マルチバイブレータとSPICE by アナログエンジニア

ブックマークを整理していたら見つけた。

故アナログエンジニアさん(岡山務さん）のブログから。

[無安定マルチバイブレータとSPICE by アナログエンジニア](http://analog-engineer.cocolog-nifty.com/blog/2012/01/spice-e17a.html)

ESP8266のDTR, RTSによるFTDI Auto programと関係あるかどうか。


> したがって、計算誤差が対称性を崩さない限り、2つのトランジスタは両オンに向かって収斂していきます。

...

> アナログエンジニアの常套手段は、抵抗かコンデンサの値をわずかに違え、かつ電源にはパルス電源を用いて、高速で立ち上げます。

> これで、現実に近い発振が行われます。
VBScriptでズンドコキヨシ（ワンライナー）

こちらもブログに書いていたものを転載することにしました。
ワンライナーと言っても、cscriptはファイルしか受け取ってくれませんけど。
それにワンライナーにしても標準出力に「WScript.echo」は長すぎる気がします。

```vbnet
z=array("ズン","ドコ"):k="":do:randomize:r=Int(2*Rnd):WScript.echo z(r):k=k&z(r):loop until right(k,10)="ズンズンズンズンドコ":WScript.echo "キ・ヨ・シ！"
```

![ズンドコ](https://dl.dropboxusercontent.com/u/140985/blog/livedoor/20160318/zundoko_vbs.PNG)

変数宣言の強制なんかしないようにしてるので短くできてますが、やらない方がいい気がします。
日本語プログラミング言語なでしこのCNAKOでズンドコキヨシ

自分のブログに書いてたものを転載することにしました。
「なでしこ」で既に記事があがっているというのが恐ろしいです。

今回はなでしこをコンソールアプリとして使うので、コマンドプロンプトから使えるようにします。わたしの環境は64bitなので以下のパスになっていますが、32bitだとProgram Filesにあるはず。

```bat
set CNAKO="C:\Program Files (x86)\nadesiko_lang\cnako.exe"
```

あとは次のようなものを「zundoko.nako」として保存します。

```
「ズン,ドコ」を「,」で区切ってずどへ代入
おれから１０文字右部分が「ズンズンズンズンドコ」ではないの間
　んこは２の乱数
　ずど\んこを表示
　おれにずど\んこを追加
「キ・ヨ・シ！」を表示
```

あとは実行します。

```bat
%CNAKO% zundoko.nako
```

するとこうなります。

![ズンドコ](https://dl.dropboxusercontent.com/u/140985/blog/livedoor/20160318/zundoko.PNG)
Check! Bluemix OpenWhisk ファーストタッチ（2）～ よく使う wsk コマンド

こんにちは、オークファンの @dz_ こと大平かづみです。

Prologue - はじめに
====
Bluemix の [OpenWhisk](https://new-console.ng.bluemix.net/openwhisk/ "OpenWhisk - IBM Bluemix") で遊んでいて、よく使う `wsk` コマンドをメモしておきます。

なお、wsk コマンドの詳細は、[ドキュメント](https://new-console.ng.bluemix.net/docs/openwhisk/index.html "Getting started with OpenWhisk")をご参照くださいませ。

OpenWhisk のよく使うコマンド
====
情報を表示する
----
### 名前空間
| 目的 | wsk コマンド例 |
|-----|----------------|
| 名前空間の一覧を表示する | `wsk namespace list` |
| 名前空間の持つエンティティ一覧を表示する | `wsk namespace get my-namespace` |


### パッケージ
| 目的 | wsk コマンド例 |
|-----|----------------|
| パッケージの一覧を表示する | `wsk package list` |
| パッケージの一覧を表示する (名前空間を指定) | `wsk package list /my-namespace` |
| パッケージの詳細を表示する | `wsk package get my-package` |
| パッケージのサマリを表示する | `wsk package get --summary my-package` |

### アクション
| 目的 | wsk コマンド例 |
|-----|----------------|
| アクション一覧を表示する | `wsk action list` |
| アクションの詳細を表示する | `wsk action get my-package/my-action` |
| アクションのサマリを表示する | `wsk action get --summary my-package/my-action` |

### トリガー
| 目的 | wsk コマンド例 |
|-----|----------------|
| トリガー一覧を表示する | `wsk trigger list` |
| トリガーの詳細を表示する | `wsk trigger get my-trigger` |

### アクティベーション
| 目的 | wsk コマンド例 |
|-----|----------------|
| アクティベーション一覧を表示する | `wsk activation list` |
| アクティベーション一覧を取得する (表示件数を制限) | `wsk activation list --limit 1` |
| 指定したアクションのアクティベーション一覧を取得する | `wsk activation list my-action` |

作成する
----
### パッケージ、アクション
| 目的 | wsk コマンド例 |
|-----|----------------|
| パッケージを作成する | `wsk package create new-package` |
| パッケージにアクションを作成する | `wsk action create my-package/new-action` |
| アクション（単体）を作成する | `wsk action create new-action` |

### トリガー
| 目的 | wsk コマンド例 |
|-----|----------------|
| トリガーを作成する | `wsk trigger create new-trigger` |
| トリガーにフィードを与えて作成する | `wsk trigger create new-trigger --feed <feed>` |

トリガーが発火することによって、アクションが実行されます。トリガーとアクションを紐づけるにはルールを設定します。(後述)

実行する
----
### アクション
| 目的 | wsk コマンド例 |
|-----|----------------|
| アクションを実行する | `wsk action invoke my-action --blocking` |
| アクションを実行する (出力のみ表示) | `wsk action invoke my-action --blocking --result` |
| アクションを実行する (パラメーターあり) | `wsk action invoke my-action --blocking --param param1 "xxx" --param param2 "xxx" ` |
| アクションを実行する (非同期で実行) | `wsk action invoke my-action` |
| 実行時の `activationId` から実行結果を得る | `wsk actiavation get <activationId>` |

アクションを実行すると、必ず `activationId` が振られます。その `activationId` により情報を閲覧することができます。

### トリガー
| 目的 | wsk コマンド例 |
|-----|----------------|
| トリガーを発火する | `wsk trigger fire my-trigger` |
| トリガーを発火する (パラメーターあり) | `wsk trigger fire my-trigger --param param1 "xxx"` |

組み立てる
----
| 目的 | wsk コマンド例 |
|-----|----------------|
| デフォルトパラメーターを設定する  | `wsk action update my-action --param param1 "xxx"` |
| シーケンスを組み立てる | `wsk action create new-sequence --sequence my-action,my-another-action` |
| ルールを割り当てる | `wsk rule create --enable my-rule my-trigger my-action` |
| ルールをアクティブにする | `wsk rule enable my-rule` |
| ルールを非アクティブにする | `wsk rule disable my-rule` |


Epilogue - おわりに
====
ざっとドキュメントを流し終わったので、いろいろとサンプルを作って遊んでみます！
【Struts2】リクエストパラメータの指定方法（日時情報を受け取る）

# 概要
Struts2の"Type Conversion"（自動型変換機能）はDate型にも標準で対応しているが、
リクエストパラメータの指定方法によっては時刻情報が抜け落ちて変換されてしまう。

#パラメータの指定
パラメータを含めたURLを直打ちしてDate型変数「targetDate」に代入する。

時刻情報が抜け落ちる例。
`targetDate=2016/01/01_12:30:00`

当初、取り敢えず、と日付と時刻の間にアンダースコアを入れてみたところ
エラーで落ちることなくすんなり通ったため、
上手いこと許容してくれたと思っていたが、結果は2016年1月1日0時00分だった。

正しくは半角スペース。
`targetDate=2016/01/01%2012:30:00`





# コンバータの処理を見てみる
中を見てみると、DefaultTypeConverterを継承したDateConverterにて変換が行われており、
フォーマットはDateFormatを使用している。


```java:com.opensymphony.xwork2.conversion.impl.DateConverter.java

private DateFormat[] getDateFormats(Locale locale) {
    DateFormat dt1 = DateFormat.getDateTimeInstance(3, 1, locale);
    DateFormat dt2 = DateFormat.getDateTimeInstance(3, 2, locale);
    DateFormat dt3 = DateFormat.getDateTimeInstance(3, 3, locale);

    DateFormat d1 = DateFormat.getDateInstance(3, locale);
    DateFormat d2 = DateFormat.getDateInstance(2, locale);
    DateFormat d3 = DateFormat.getDateInstance(1, locale);

    DateFormat rfc3399 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

    return new DateFormat[] { dt1, dt2, dt3, rfc3399, d1, d2, d3 };
}

```


DateFormat.SHORTからLONGまで（とRFC3399形式）が許容されている。

- `targetDate=16/01/01%2012:30`
- `targetDate=2016-01-01T12:30:00`
- `targetDate=2016/01/01%2012:30:00%20JST`

標準のコンバータは結構ざっくりした作りになっているため、
自作コンバータにて他フォーマット対応や例外処理などを細かく実装し、使用する方が望ましい。
[小ネタ]Windowsでコマンドラインからvimを起動する

WindowsServerの環境でバッチファイルを作って試すときにvimを使いたかったので導入したときのメモ
Cygwinからのvimではなく、Windows用のvimパッケージをインストールし、利用する方法

以下のリンクを参考に設定

[Windowsへのインストール方法](http://vim-jp.org/docs/install_windows.html)

# 環境
+ OS->Microsoft Windows Server 2012 R2 


# Windows用のVimのインストール

以下のサイトよりバイナリパッケージをダウンロードします。

[Kaoriya](http://www.kaoriya.net/)

ダウンロード後、任意の場所に展開します。
今回は`C:¥vim`に展開したとします。
上記ディレクトリ配下にexeファイルがあることを確認します。

# フルパスの指定で起動できるか確認

以下コマンドラインでタイプして確認します。

```bash
>C:¥vim¥vim74-kaoriya-win64¥gvim test.cmd
```

上記でVimが起動すればOKです

なお、exeはgvimとvimがあり、以下に詳細が記載してありましたが、基本的にgvimを使う方が良さそうです

[Hack #152: VimとGVimの相違点について知る](http://vim-jp.org/vim-users-jp/2010/06/05/Hack-152.html)

# パスを設定してフルパスでなくても起動できるようにする

毎回フルパスをタイプするのは大変なのでPathを設定して`gvim`というタイプのみで起動できるようにします。

[Windows 環境変数 Path の設定方法](http://next.matrix.jp/config-path-win7.html)

以下をたどり、設定

コントロールパネル->システムとセキュリティ->システム->システムの詳細設定->環境変数->システム環境変数のPathを選択し、編集

```
;C:¥vim¥vim74-kaoriya-win64
```

設定後、以下によってgvimが起動できるか確認できます。

```
> gvim test.cmd
```

# vimの設定(.~/vimrc)をする

Linuxの場合、vimの設定は`~/.vimrc`に記載しますが、Windowsの場合、ホームディレクトリ配下に`_vimrc`というファイルを作成すればOKです。(_vimrc.txtなどは認識しないので注意)

試しに行番号を表示する設定をして確認します。

```C:¥Users¥Administrator¥_vimrc
set  nu
```

この状態でvimを起動し、行番号が表示されていればOKです。
あとは自分の好みに設定を追記します。
char が表す数字を int へ変換したい

`char`が表す数字1文字を`int`に変換したいことがあった。
具体的には、`(char)'1' -> (int)1`とか`(char)'9' -> (int)9`ということ。

#実装1
想定するケースは高々10個なので、`switch-case`文で実装してみた。
(数字以外が入力された場合は`-1`を返す)

```c
int ctoi(const char c){
  switch(c){
    case '0': return 0;
    case '1': return 1;
    case '2': return 2;
    case '3': return 3;
    case '4': return 4;
    case '5': return 5;
    case '6': return 6;
    case '7': return 7;
    case '8': return 8;
    case '9': return 9;
    default : return -1;
  }
}
```

#実装2
`char`において数字を表す値には規格においてある程度決まりがあるという話を聞いた。
実際見てみると、Cでは 5.2.1 Character sets に、C++では 2.3 Character sets に次のような文があった。
(章番号はC:[n1570](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)、C++:[n4567](http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4567.pdf)のドラフトのものである)

>In both the source and execution basic character sets, the value of each character after `0` in the above list of decimal digits shall be one greater than the value of the previous.
(基本ソース文字集合および基本実行文字集合の双方において、上の表の`0`以降のそれぞれの数字に対応する文字の値は、その直前にある文字の値より1だけ大きくなければならない)

つまり、`0`を基準として`char`の値を比較すれば数字の値が得られるわけである。
また、数字を表す文字コードは固まって存在するので、数字以外が入力された場合を判定できる。

この方針で同じ機能を実装すると次のようになる。
(やはり数字以外が入力された場合は`-1`を返す)

```cpp
int ctoi(const char c){
  if('0' <= c && c <= '9') return (c-'0');
  return -1;
}
```

#おまけ
数字の場合と同じ感じで、大文字英字がアルファベット順で何番目か(たとえば`'A'`なら`1`、`'Z'`なら`26`)を返すような関数を作ることもできる。
ただし、こちらは文字コードに関する規格上の保証はなく、大文字英字が`'A'`から順番に隙間なく配置されていない文字集合(EBCDICなど)では動かない。

```cpp
int alphabet_pos(const char c){
  if('A' <= c && c <= 'Z') return (c-'A'+1);
  return -1;
}
```
Pythonの UTC ⇔ JST、文字列(UTC) ⇒ JST の変換とかのメモ


### awareなdatetimeオブジェクト(UTC)をJSTへ変換

```py3
>>> from pytz import timezone
>>> from datetime import datetime
>>> utc_now = datetime.now(timezone('UTC'))
>>> print(utc_now)
2016-03-20 01:07:29.056724+00:00
>>> jst_now = utc_now.astimezone(timezone('Asia/Tokyo'))
>>> print(jst_now)
2016-03-20 10:07:29.056724+09:00
```

### naiveなdatetimeオブジェクトをUTC,JSTへ変換

```py3
>>> from pytz import timezone
>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now)
2016-03-20 10:14:41.929706
>>> utc_now = timezone('UTC').localize(now)
>>> print(utc_now)
2016-03-20 10:14:41.929706+00:00
>>> jst_now = timezone('Asia/Tokyo').localize(now)
>>> print(jst_now)
2016-03-20 10:14:41.929706+09:00
```

### 文字列の日付(UTC)をJSTへ変換

```py3
>>> from pytz import timezone
>>> from dateutil import parser
>>> utc_string = "Sat Mar 19 06:17:57 +0000 2016"
>>> jst_time = parser.parse(utc_string).astimezone(timezone('Asia/Tokyo'))
>>> print(jst_time)
2016-03-19 15:17:57+09:00
```

### ISO表記へ変換

```py3
>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now)
2016-03-21 00:14:06.135787
>>> iso_now = now.isoformat()
>>> print(iso_now)
2016-03-21T00:14:06.135787
```

参考：
[Python の datetime オブジェクトと Unix 時間の相互変換方法のまとめ](https://blog.ymyzk.com/2015/04/python-datetime-unix-time/)
[Pythonでタイムゾーンを扱うメモ](http://taichino.com/programming/1876)
[公式ドキュメント#datetime.isoformat](http://docs.python.jp/3/library/datetime.html#datetime.datetime.isoformat)
sdccでmsx その２

#概要
sdccでmsxのpsgを叩いて、音を鳴らして見た。
#開発環境
SDCC : ver2.8.1
ruMSX : ver0.41
#MakeFile
```
All : psg.hex psg.rom
psg.hex : psg.o
	sdcc -V -mz80 --no-std-crt0 --code-loc 0x4020 --data-loc 0x8000 -o psg.hex  psg.o
psg.rom : psg.hex
	hex2rom psg.hex psg.rom
psg.o : psg.c
	sdcc -V -mz80 psg.c

```
#サンプルコード
```
#define	WRTPSG		#0x0093
#define	CHPUT		#0x00A2
#define	CHGET		#0x009F
void setpsg(unsigned char e, unsigned char a);
void wait(int t);
void putchar(char c);
int  getchar();
void main(void)
{
	unsigned int psg[] = {
		0xaa, 0xaa, 0xaa, 0xa0, 0xaa, 0xaa, 0xd6, 0xd6, 0xbe, 0xbe,
		0xd6, 0xbe, 0xaa, 0x10d, 0xe3, 0xaa, 0xaa, 0xaa, 0xa0, 0xaa,
		0xaa, 0xd6, 0xbe, 0xbe, 0xd6, 0xe3, 0xfe, 0x7f, 0x7f, 0x7f,
		0x7f, 0x7f, 0x7f, 0xaa, 0xaa, 0xaa, 0xaa, 0xa0, 0x8f, 0xa0,
		0xaa, 0xaa, 0xa0, 0xaa, 0xaa, 0xd6, 0xd6, 0xbe, 0xbe, 0xd6,
		0xe3, 0xfe, 0x153, 0x153, 0x140, 0x153, 0x153, 0x1ac, 0x1ac,
		0x17d, 0x17d, 0x1ac, 0x17d, 0x153, 0x153, 0x153, 0x140, 0x153,
		0x153, 0x1ac, 0x1ac, 0x17d, 0x17d, 0x1ac, 0x01c5, 0x01fc, 0x7f, 0x7f,
		0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xaa, 0xaa, 0xaa, 0xa0, 0x8f, 0xa0,
		0xaa, 0xaa, 0xa0, 0xaa, 0xaa, 0xd6, 0xd6, 0xbe, 0xbe, 0xd6, 0xe3,
		0xfe
	};
	unsigned int i, j, e, a;
	i = j = e = a = 0;
	a = 0x07;
	e = 0xfe;
	setpsg(e, a);
	for (i = 0; i < 101; i++)
	{
		e = psg[i] & 0xff;
		a = 0x00;
		setpsg(e, a);
		e = (psg[i] >> 8) & 0xff;
		a = 0x01;
		setpsg(e, a);
		e = 0x05;
	  	a = 0x08;
  		setpsg(e, a);
		wait(98000);
		e = 0x00;
		a = 0x08;
		setpsg(e, a);
		wait(2000);
	}
	putchar(getchar());
}
void setpsg(unsigned char e, unsigned char a)
{
	_asm
	ld 		e, 4(ix)
	ld 		a, 5(ix)
	call 	WRTPSG
	_endasm;
}
void putchar(char c)
{
	_asm
	ld 		a, 4(ix)
	call 	CHPUT
	_endasm;
}
int getchar()
{
	_asm
	call 	CHGET
	ld 		l, a
	ld 		h, #0
	_endasm;
}
void wait(int t)
{
	while(t--);
}

```
iOSアプリ名の設定方法について(Bundle Display NameとかLocalizationsとか)

# はじめに
iPhoneアプリ申請の際に、アプリ名まわりで色々な解説ページが見つかるには見つかるのですが、断片的な情報が多く、初心者の自分が理解するのに割と時間がかかったので、まとめてみました。2016年3月現在で、なるべく最新の情報をもとにしてまとめましたが、これ情報古いよ、とか間違いを発見した方はコメントで教えていただけると助かりますm(_ _)m

## How to
とりあえずアプリ名を変更したいというかたは[[iOS] アプリ名を変更する](http://qiita.com/hiroo0529/items/24b027b9708d14200b56)へ。
海外でアプリを出す可能性がゼロでない場合は、後からローカライズすると大変なので、[[iOS] アプリ名を国ごと変更したい場合](http://qiita.com/hiroo0529/items/da9909f6787f2dce75e3)をもとに設定することをおすすめします。

# Bundle Display Nameとは?
### どこに表示される?
アプリ名として、ホーム画面でアプリアイコン直下に表示される

### どこで設定する?
info.plistで設定する。
Xcode7.2.1で確認すると、このkeyはデフォルトではinfo.plistには存在せず、その代わりに$(Product Name)がアプリ名として表示される。info.plistにこのkeyを追加して設定すればよい。詳しくは下記リンク先参照。
* [[iOS] アプリ名を変更する](http://qiita.com/hiroo0529/items/24b027b9708d14200b56)
* [Technical Q&A QA1823 Updating the Display Name of Your App](https://developer.apple.com/library/ios/qa/qa1823/_index.html)

### ローカライズどうやるの?
InfoPlist.stringsのCFBundleDisplayNameで指定することでローカライズが可能。
* [[iOS] アプリ名を国ごと変更したい場合](http://qiita.com/hiroo0529/items/da9909f6787f2dce75e3)

### 注意点
半角11文字を超えるとアプリ名末尾が...と省略されます。
iTunes Connectで申請するアプリ名と異なって良いが、あまり異なりすぎるとリジェクトの理由となりうる。

# Bundle Nameとは?
アプリ申請の際はそこまで意識しなくて良さそう。そこまで詳しくは調べてないですが、あまり目につかないところでの表記の設定っぽい。また何かわかれば後日更新します。

### (参考)Aplle公式の説明

>CFBundleName (String - iOS, OS X) identifies the short name of the bundle. This name should be less than 16 characters long and be suitable for displaying in the menu bar and the app’s Info window. You can include this key in the InfoPlist.strings file of an appropriate .lproj subdirectory to provide localized values for it. If you localize this key, you should also include the key CFBundleDisplayName.
([Information Property List Key Referenceより引用](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html))

### その他参考ページ
* [What's the difference between “bundle display name” and “bundle name” in cocoa application's info plist](http://stackoverflow.com/questions/3465792/whats-the-difference-between-bundle-display-name-and-bundle-name-in-cocoa-a)
* [Bundle Programming Guide](https://developer.apple.com/library/ios/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW5)


# Product Nameとは?
###　どこに表示される?
create projectしたままの状態だと、アプリ名として、ホーム画面でアプリアイコン直下に表示される。(他にもいろいろな箇所で表示されますが)
info.plistでBundle Display Nameを設定しない場合は、Product Nameが参照されるので、Project名がホーム画面のアプリアイコン直下のアプリ名として表示されるという背景。

### どこで設定する?
create new projectするときに設定。Build Settings->Packaging->Product Nameで変更可能
した値がデフォルト。

### 注意点
Product Nameを変更すると別アプリとして扱われる
ズンドコキヨシ with Haskell

なんで流行ってるのかよくわからんし文系情弱力を発揮して完全に乗り遅れてる気がするものの

```hs:zun.hs
import System.Random

zun n (x:xs)
  | not x     = putStr "ズン" >> zun (n+1) xs
  | n < 4     = putStr "ドコ" >> zun 0 xs
  | otherwise = putStr "ドコ" >> putStrLn "キ・ヨ・シ！"

main = zun 0 . randoms =<< getStdGen
```

でいいのでは？　いいんだよね？
Reflectionで子クラスのメソッドを取得して実行してみた

# 概要
C#のreflectionの勉強のメモです。
指定したクラスのメソッドを取得して実行するまで書きます。

## クラスのPublicメソッドを全て取得する

下記のSampleClassのPublicメソッドを取得します。

```lang:
public class SampleClass {
	public void TEST1(int value){
		Debug.Log("TEST1 " + value.ToString());
	}

	public void TEST2(int value){
		Debug.Log("TEST2" + value.ToString());
	}

	private void PrivateMethod(int value){
		Debug.Log("PrivateMethod" + value.ToString());
	}
}
```

上記のSampleClassのTypeのGetMethodsでPublicメソッドを取得してから、MethodInfoのInvokeで実行します。


```lang:
public class ReflectionSample {
	public void TEST(){

		///SampleClass内のPublicメソッドを全て取得(継承されたメンバは含まない)
		///BindingFlags.Public パブリックメンバ　BindingFlags.Instance インスタンスメソッド  BindingFlags.DeclaredOnly 継承されたメンバは含まない
		var methods = typeof(SampleClass).GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
		foreach (var m in methods)
		{
			var ins = Activator.CreateInstance(typeof(SampleClass));
			var objects = new object[]{1};
			m.Invoke(ins,objects);
		}
	}
}

```

privateなメソッドを取得したい時は、BindingFlags.PublicをBindingFlags.NonPublicに差し替えます。

##継承先のクラスのPublicメンバを取得する。

下記のSampleBaseClassを継承したクラスのPublicメソッドを全て取得します。

```lang:
public class SampleBaseClass {
}

public class SampleChildClass1 :SampleBaseClass {
	public void TESTChild1(int value){
		Debug.Log("SampleChildClass1 TESTChild1");
	}

	public void TESTChild2(int value){
		Debug.Log("SampleChildClass1 TESTChild2");
	}
}

public class SampleChildClass2 :SampleBaseClass {
	public void TESTChild1(int value){
		Debug.Log("SampleChildClass2 TESTChild1");
	}

	public void TESTChild2(int value){
		Debug.Log("SampleChildClass2 TESTChild2");
	}
}

```

やり方としては、Assembly.GetAssemblyで継承先のクラスを全て取得してから、GetMethodsでメソッドを取得します。

```lang:
public class ReflectionSample2 {
	public void TEST(){
		//SampleBaseClassを継承したクラスを全て取得
		var clacces = Assembly.GetAssembly(typeof(SampleBaseClass)).GetTypes().Where(t => t.IsSubclassOf(typeof(SampleBaseClass)));

		foreach(var c in clacces){
			///Publicメソッドを取得(継承されたメンバは含まない)
			foreach (var m in c.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly))
			{
				var ins = Activator.CreateInstance(c, null);
				m.Invoke(ins,new object[]{1});
			}
		}

	}
}
```

以上。
Apache NiFi GetKafkaのRead Offsetはクリアできないっぽい。

GYAOの窓際エンジニア　玉利です。

オフショアマネージメントの仕事が忙しくて、個人作業が滞ってました。みなさんすみません。

久しぶりにNiFiを起動して仕事を始めると、前回うごいていたGetKafkaが、なにやら動きません。

```
[2016-03-19 18:21:55,250] ERROR [Replica Manager on Broker 0]: Error when processing fetch request for partition [nifi,0] offset 605 from consumer with correlation id 522. Possible cause: Request for offset 605 but we only have log segments in the range 0 to 0. (kafka.server.ReplicaManager)
```

どうやら、consumerのポインタがずれたようです。実在しない605番を取得しようとしてるけど、すでにlogには残っていないっぽいですね。

試験環境では、Kafka ConsumerとしてGetKafkaおよびコマンド kafka-console-consumer.shを叩いて使っています。こういう状況がおきるのは、実運用では以下のようなケースが予想されます。

* コンシューマを長期間サービスアウトしてて、もどしたらオフセットポインタのデータがすでにkafkaログから消えてた

とりあえず、いろいろ悪あがきをしていました。私の得た結果は以下になります。

# 結論

* GetKafkaのオフセットポインタを手動でクリアするのは難しい
* GetKafkaは再作成、コピーはオフセットデータも継承するので×
* おそらく、コンテナごと作り直しするのが正しい

2時間くらいハマりましたが、コンテナ時代ではシステムの修理ではなくてモジュール使い捨ての作り直しが速い、という設計思想なんですね。どこかのxmlに格納されてるデータをいじってがんばれば直せるかもしれませんが。。。
インスタンス単位で一度だけ実行したい初期化コードの考察

[UIView などでインスタンス単位で一度だけ実行したい初期化コードの考察 - Qiita](http://qiita.com/codelynx/items/f0243d631f2448e89026)

上記の記事を拝見して、少し変更してみました。

```swift
    lazy var setup: (()->())? = {
        let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: "panGesture:")
        self.addGestureRecognizer(panGestureRecognizer)
        self.setup = nil
    }
```

lazyであってもvarには再代入が可能なので、自己を破棄するコードをsetupの最終行に仕込んでいます。

呼び出しは以下のみで、元記事のようにif分にする必要はありません。

```swift
setup?()
```

元記事のようにlayoutSubviewsで実行する場合は以下のようになります。

```swift
class MyView: UIView {
    override func layoutSubviews() {
        super.layoutSubviews()
        setup?()
    }
```
2016年LinuxでビルドしたChromium動かすには

久しぶりにビルドしたら、sandboxがどうたらこうたらと、

エラーがでて、以下のようにしたら、動いた。

```
ninja -C out/Release chrome chrome_sandbox
```

```
CHROME_DEVEL_SANDBOX=./out/Release/chrome_sandbox out/Release/chrome
```
fluent-plugin-slackboard〜FluentdからSlackboard経由でSlackに通知する〜

Fluentdから[Slackboard](https://github.com/cubicdaiya/slackboard)を通してSlackに通知するプラグインを書いてみた。

https://github.com/cubicdaiya/fluent-plugin-slackboard

[Slackboard](https://github.com/cubicdaiya/slackboard)はSlackのIncoming Webhooksプロキシです。HTTPベースのAPIや同封されているCLIプログラム(slackboard-cli、slackboard-log)を利用してSlackboardとやりとりすることでSlackにメッセージをポストできます。

 * [Slackboard〜Slackプロキシサーバ in Go〜](http://qiita.com/cubicdaiya/items/1f9a8846f55b9d0bcb48)
 * [Let's Encryptで自動更新したらSlackに通知したかった](http://qiita.com/kamemory/items/cfa6d9511ce831e90116)
 * [Slackboardを試してみた](https://speakerdeck.com/bells17/slackboardwoshi-sitemita)

# インストール

RubyGemsからインストールできます。

```
gem install fluent-plugin-slackboard
```

# 使い方

設定ファイルの書き方はこんな感じです。

```xml
<match slackboard>
  type slackboard
  # required
  host       host
  port       port
  channel    random
  fetch_key  message
  # optional
  username   slackboard
  icon_emoji :clipboard:
  parse      full
  sync       false
</match>
```

あとは`fluent-cat`等でメッセージを流してやればSlackにポストできます。`slackboard_fetch_key`で指定したキーの値に通知したいメッセージを埋め込むのがポイントです。

```
echo '{"message":"bokko"}' | fluent-cat slackboard
```

![image](https://qiita-image-store.s3.amazonaws.com/0/1608/078c3aea-8151-94f8-ce7a-75757575f448.png)

各パラメータの意味は以下の通り。

|パラメータ名            |解説         |備考|
|----------------------|------------|------------|
| host      |slackboardのホスト名||
| port      |slackboardのポート番号||
| channel   |通知するSlackのチャンネル||
| fetch_key |通知するメッセージを含むキー名||
| username  |通知する際のユーザ名|デフォルト値：`slackboard`|
| icon_emoji|通知する際の絵文字アイコン|デフォルト値：`:clipboard:`|
| parse     |通知するメッセージのパース方法を指定|デフォルト値：`full`|
| sync      |通知を同期・非同期的に行う|`true`だと同期、`false`だと非同期、デフォルト値：`false`|
AD2 > Link > reference manual > 6.5.2 Digital Supplies > 1V | 3.3V | 1.8V

@ [reference manual](https://reference.digilentinc.com/analog_discovery_2:refmanual#digital_supplies) 6.5.2 Digital Supplies


>The 1V digital supply (Fig. 31) is implemented with the ADP2120-1. 

>The 3.3V digital supply (Fig. 32) uses ADP2503-3.3 600mA, 2.5MHz Buck-Boost DC-to-DC Converter:

> The 1.8V digital power supply (Fig. 33) is implemented with ADP2138-1.8 Fixed Output Voltage, 800mA, 3MHz, Step-Down DC-to-DC converter.

Step-Down DC-to-DC converterなどの用語は未学習。

上記のリンク先は回路図などがあり、5Vから1V / 1.8V / 3.3Vを作り出す回路として参考になるだろうか。

使用ICそのものはReel販売(1000個単位など)になってそうなので数個単位での購入はできそうになり。別ICを使うことにはなりそうだ。
AD2 > Link > reference manual > 6.5.2 Digital Supplies > 1V出力 > 1V, ±1.5%の精度 | 1.25Aの出力電流 | 0.6VからVINまでの出力電圧

@ [reference manual](https://reference.digilentinc.com/analog_discovery_2:refmanual#digital_supplies) 6.5.2 Digital Supplies

> The 1V digital supply (Fig. 31) is implemented with the ADP2120-1. It has a fixed 1V output voltage option and a ±1.5% output accuracy 

1V, ±1.5%の精度

> - 1.25A continuous output current
> ...
> - Input voltage range from 2.3 V to 5.5 V; output voltage from 0.6 V to VIN

1.25Aの出力電流
0.6VからVINまでの出力電圧
技術英語 > On my mark. ... Now. / On your mark.

@ Star Trek Voyager > PROTOTYPE

タイミングがシビアな手順の指示をしてトレスが

> On my mark.
> ...
> Now.

ドラマERでよく出ていたのが、けが人を担架に乗せるときの合図としての On my mark.

<hr>
「相手の合図に合わせます」
という場合は

> On your mark.

http://eow.alc.co.jp/search?q=on+--+mark
> on your mark
LinuxでTerrariaのサーバを稼働させる

と言っても、ほぼ簡潔に完結している記事を参考にした。

[ConoHaのVPSでTerrariaのサーバを構築する](http://mahoyology.xyz/2015/09/09/conoha%E3%81%AEvps%E3%81%A7terraria%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B/)
とても参考になった。
screenの有用性も語られているので、それも参考にしていただきたい。

また、TerrariaのサーバアプリがCentOS7しか対応していないとのことなので、仮想に新たな端末を設定し、インストールを行った。
DVDイメージから何故か上手くインストールできなかったので、Minimalをインストール後にGUI環境を整えた。

設定したスペックは以下。
OS：CentOS7
CPU：1 vCPU
メモリ：2GB

記事での感想ではメモリは1GBでも十分とのことらしい。まぁこちらは自前の鯖にメモリ10GB積んでいるのだが、それでも最近は活用してないのでまぁいいか、という感じ。
2GBあれば十分だろうという経験則。まあ、そんな大所帯になるわけでもなし。


それから、MinimalではGUI環境が無いので、以下の記事を参考にさせていただいた。
[CentOS7 に後から GUI (X Window System) を追加する](http://blog.amedama.jp/entry/2015/09/01/232339)

こちらも問題なく導入できた。
ありがとうございました。

総インストールにかかったのは軽く15分程度？Minimalなのでやはり長かった……。

軽くログインして遊んでみたが、やっぱりちょっともっさりする時があった。
ただ、パフォーマンス的には問題ないように見えるので、そこから先はまた別問題かな。

とりあえずサーバは動いたのでこれにて終了。
UnityでSceneビューのようなカメラ操作をする

## はじめに

[こちら](http://esbrog.hatenablog.com/entry/2016/03/20/033322)の記事で紹介しています。

Unityでゲーム実行中(Gameビューで見てる時)、カメラをSceneビューと同じように操作できたらなぁと思ったので作りました。
Gameビューでデバッグ用にカメラ移動して色々確認したりするのに便利です。

![use_cam_script](http://cdn-ak.f.st-hatena.com/images/fotolife/r/radwimps-september/20160320/20160320032527.gif)
<img src='https://qiita-image-store.s3.amazonaws.com/0/108809/dbf363e0-d563-ae95-bfe2-960f7e9356ae.png' width=100px/>

## 使い方


使い方はカメラに[こちら](https://gist.github.com/EsProgram/0fd35669c28fd13594c8)のスクリプトをコンポーネントとしてアタッチするだけです。

これで以下の操作が可能になります。

* マウスホイール操作
    - マウスホイールをくるくる回すことで拡大縮小(実際には前方/後方への移動)ができます
* マウスホイールドラッグ操作
    - マウスホイールを押しながらドラッグすることで、カメラを平行移動させることができます
* 右クリックドラッグ操作
    - 右クリックしながらドラッグすることで、カメラの向いている方向を変えることができます
ズンドコキヨシ with Forth

Python版をいじっていてPythonのバイトコードを解読したり、VMのソースを読んだりしていたらFORTHを思い出したのでやっつけで書いてみました。

```
: ZUNDOKO
   0 　　　　　　　　　　　　\ ZUNカウンタ
   BEGIN
      2 RANDOM             \ 0 or 1
      IF ." ZUN" 1+ FALSE  \ 'ZUN'を出力し、カウンタを進める。
      ELSE
        ." DOKO"
         DUP 4 >= IF TRUE \ ZUNカウンタの値を複製し、終了条件に達したか判定する。終了ならTOSにTRUEを積む。
         ELSE
             DROP 0 FALSE \ ZUNカウンタを0クリアする。
         THEN
      THEN
      CR                 \ 改行
   UNTIL　　　　　　　　　\ TOSの終了フラグがTRUEならループを抜ける。
   DROP                  \ ZUNカウンタの値を捨てる。 
   ." KIYOSHI!" CR
;
```

何がハマったかって、行コメントの記法を忘れていて'\'でなく'#'を入れてスタックが滅茶苦茶になった。
FORTHのワードをほとんど忘れていてあまり練れていないのですが、本物のFORTHプログラマーはこの程度のプログラムなら3行くらいでワンライナーっぽく書くと思います。
また、このプログラムは古い仕様に存在するワードだけで組んだので、GForthとかなら私の知らない文字列やクラスを拡張するワードがあるはずなのでもっと楽に書けるはずです。
[CI/CD] brief talk about Netflix challenges

from [How We Build Code at Netflix](http://techblog.netflix.com/2016/03/how-we-build-code-at-netflix.html)
![pasted image 0.png](https://qiita-image-store.s3.amazonaws.com/0/84946/bfe1c018-3c8e-80b4-6519-2aef4850b1c7.png)

to be better, faster, and easier

##Binary Dependencies
Netflix開發了名為[Nebula](http://nebula-plugins.github.io/)的Gradle plugins集合
並且使用**Gradle**做為build system的工具

其中[Nebula dependency-lock plugin](https://github.com/nebula-plugins/gradle-dependency-lock-plugin)可針對特定版本來lock dynamic dependency
而[Nebula resolution rules plugin](https://github.com/nebula-plugins/gradle-resolution-rules-plugin)可訂定rule來規範解析dependency

##Bake Time
當jenkins收到git commit異動trigger job後
會執行[Spinnaker pipeline](http://spinnaker.io/online_docs/overview/overview.html#deployment-management)

[Nebula ospackage plugin](https://github.com/nebula-plugins/nebula-ospackage-plugin)會將application打包**Debian or RPM package**
[Spinnaker](http://spinnaker.io/)取得package後會**call Bakery API to trigger a bake**
執行install package然後產生image至[Amazon Machine Image](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html)(AMI)
配合**snapshot**進行客製化AMI處理
![6a00d8341c534853ef01a5118edb3c970c.png](https://qiita-image-store.s3.amazonaws.com/0/84946/9ab6c972-70d1-ebab-dbaf-2c79f4e5b0e3.png)

###3 layers of volumes
- the foundation image(OS image)
- the base AMI(the vast majority of customization happens)
- application's AMI

###Immutable Server
至於為什麼要產生他們簡稱的**operating system package**ㄋ
因為Netflix deployment是採用[Immutable Server](http://martinfowler.com/bliki/ImmutableServer.html) pattern
[Immutable Infrastructure or Immutable Delivery](http://theagileadmin.com/2015/11/24/immutable-delivery/)

與其費時設定可讓application作業且生命週期短暫的infrastructure環境
不如製做可重覆使用的AMI
利用AMI launch instance來跑測試驗證完成CD
可減少infrastructure跑完測試後要回覆原狀的不確定性
簡單的說就是要實現**Stateless**

##Container
如果能提供local container-based的cloud環境
container deployed locally不需做多餘修改
相信有機會解決dependency和bake時間過長等以上兩大課題

另外有關[Immutable Container](http://nedwu13.blogspot.tw/2016/03/easier-better-faster-safer-deployment.html)可參考這篇心得筆記
SimpleHTTPServer で外部アクセスを受け付ける

外部アクセス可能なWebサーバを簡単に起動する
----

* 動作確認のためにローカルホスト外からWebアクセスを受けつけたい時がある。
* python が入っている場合は以下のコマンドでWebサーバを起動することができる（ファイアウォールでのポート開放は別途必要）

```py
python -c "import BaseHTTPServer as bhs, SimpleHTTPServer as shs; bhs.HTTPServer(('192.168.1.1', 8888), shs.SimpleHTTPRequestHandler).serve_forever()"
```
gitのremoteにあるタグをまとめて削除する


こんなshellです。
この例の場合は1.0.0は残して、1.0.0.1とかを削除しています。

```
git ls-remote --tags origin | cut -f 2 | grep -v {} | grep '1.0.0..*' | sed "s/refs\/tags\///g" |  xargs git push --delete origin
```


ローカルのタグは以下の記事で削除できましたが、remoteのtagが100件を超えていてローカルに落とさずにまとめて削除する方法として書いときました。

http://qiita.com/nantekkotai/items/c06dc35abfaca1ff8fbd
cygwin screen よく使うコマンドメモ

cygwin はタブ UI を設定するのがめんどくさいのでよく screen コマンドを使うので
よく使う基本的なコマンドのメモ。


* ctrl + a , S
：画面を横分割する
* ctrl+a, |
：画面を縦分割する。
* ctrl+A, tab
：フォーカス移動
* ctrl+a, c
：シェル起動
* ctrl+a, :quit
：screen 終了

参考ページ
http://server-setting.info/blog/cygwin-gnu-screen-install.html
電子工作で使うデジタル・オシロスコープを最安で手に入れる

## 概要
安価にオシロスコープを手に入れる

## はじめに
電子工作してると、ときどき、動きが全くわからなくなる。
オシロスコープ、欲しい、欲しい、欲しい。
お小遣い制のサラリーマンには、高額なオシロスコープを買う余裕はないのだ。

## Audacity
電圧の変化なら、音声も電子工作も同じ。
そこでまず、 Mac 用 Auacity (無料) をためす。
https://sourceforge.net/projects/audacity/

 - イヤフォンジャックを使う
 - 音声用だからサンプリング周波数は 44.1KHz
![スクリーンショット 2016-03-20 0.08.04.png](https://qiita-image-store.s3.amazonaws.com/0/69410/e72a7966-baba-1aad-f037-f28213576f79.png)

サイン波はそこそこ取れるが、オシロスコープとして使うには、やはり無理があると断念。

## e-scope 3-in-1(Ver 2.2)

なかなか評判の良い、株式会社 e-skett の iOS 用 e-scope 3-in-1 (240円) を試す。
https://geo.itunes.apple.com/jp/app/e-scope-3-in-1/id660574048?mt=8&at=1001lcsS

 - イヤフォンジャックを使う
 - サンプリング周波数は 44.1KHz
 - 信号発生器 (サイン波/ホワイトノイズ/リニアスイープ)
 - リアルタイム FFT

### 部品

ケーブルは自分で作成しなければならない。
http://e-skett.co.jp/nyumon/20130611

|名称|個数|単価|
|---|---:|---:|
|３．５ｍｍ４極ミニジャック（４極パネル用）　ＭＪ－０６４Ｈ　パネル取付用|1|<a href="http://akizukidenshi.com/catalog/g/gC-08335/">70円</a>|
|3.5mmステレオミニプラグケーブル 1m 4極ピン(4Pin) オス-オス|1|<a href="http://store.shopping.yahoo.co.jp/akibaoo/4528483060268.html">237円</a>|
|ＩＣクリップ（黒）　ＭＴ－２４８－Ｂ|4|<a href="http://akizukidenshi.com/catalog/g/gP-06345/">50円</a>|
| 耐熱電子ワイヤー　２ｍ×７色　外径１．５５ｍｍ（ＵＬ３２６５　ＡＷＧ２０）|1|<a href="http://akizukidenshi.com/catalog/g/gP-06754/">650円</a>|
|カーボン抵抗（炭素皮膜抵抗）　１／２Ｗ　６．８ｋΩ　（１００本入）|1|<a href="http://akizukidenshi.com/catalog/g/gR-07834/">100円</a>|
|絶縁ラジアルリード型積層セラミックコンデンサ　０．４７μＦ５０Ｖ５ｍｍ|1|<a href="http://akizukidenshi.com/catalog/g/gP-08148/">20円</a>|

![IMG_2534 2.JPG](https://qiita-image-store.s3.amazonaws.com/0/69410/882cdea9-b070-d765-6336-dfe87f268495.jpeg)

完成
(黒はGND、黄が計測で、赤/青は信号出力用)
![IMG_2535 2.JPG](https://qiita-image-store.s3.amazonaws.com/0/69410/041fd750-15cc-0333-c078-29e1809402a6.jpeg)

抵抗はミニジャックに忍ばせました
![IMG_2543.JPG](https://qiita-image-store.s3.amazonaws.com/0/69410/4656f1c9-a413-529c-032e-283cf240bcc5.jpeg)


### 動作検証
このアプリは、サイン波を作ることもできる。
このアプリで作ったサイン波を、このアプリで計測してみる。
おぉ、それっぽいです。
![IMG_2539 2.JPG](https://qiita-image-store.s3.amazonaws.com/0/69410/8f9b0d22-33c3-800d-37b4-f4c64f72a8f1.jpeg)

## まとめ
 - e-scope は 240円 で、これは使える！！<br>サンプリングレート 44.1KHz はショボいが仕方ない。
 - 使う抵抗によって値が変わってくるので、絶対的な値の計測は難しい。<br>しかし、波形の確認に使うには、今のところ十分だ。
 - やはり、オシロスコープは必要ですね。<br>よく今まで、無しでやってきたと思う。
最長のTLDが.museumだった時代はとっくに終わっていた

（2019/2/28 TLD一覧を改めて調べ直しました）

## 昔は.museumが最長のTLDだった

昔からWebの世界で仕事をしている人は、ドメインにマッチする正規表現というのを書いたことがあると思います。イタズラ防止のため、ありえないドメインをバリデーションで除去するような目的ですね。

そうした正規表現の中に、次のようなものがあったと記憶しています。

```
\.[a-z]{2,6}$
```

最後のドットの後ろはアルファベットが2文字から6文字、という正規表現です。「.jp」などの例を考えれば、トップレベルドメイン（TLD）が最低2文字というのは今も同じです。一方、最長の6というのは.museumが当時最長のTLDだったので、それを反映したものです。

## TLDの自由化

ところで、2011年からTLDの自由化がはじまりました。一定金額を支払った上で審査に通ればどんなTLDでも登録できるようになり、現在では6文字より長いTLDが大量に生まれています。2019年2月時点で最長のTLDは18文字で、次の2ドメインが該当します。

- .travelersinsurance
- .northwesternmutual

また、マルチバイトのTLDはDNS問い合わせの際punycodeエンコードされます。punycodeエンコード後の長さで考えると「.vermögensberatung」（.xn--vermgensberatung-pwb）の24文字が最長ということになります。

## まとめ

いまどき自前でドメインにマッチする正規表現を書く人はいないかもしれませんが、もし書くことがあれば気をつけましょう！特にオッサンは昔の知識で正規表現を書かないよう注意しましょうね。


## 参考資料

- https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains
- http://www.iana.org/domains/root/db
【mac】ターミナルのプロンプトの変更


##デフォルトの指定
/etc/bashrc内のPS1に設定がある。

```ruby:/etc/bashrcの設定
export PS1='\h:\W \u\$ '
```

##項目設定：
\h ホスト名（最初の.まで）
\H ホスト名
\W ディレクトリ
\w ディレクトリ（フルパス）
\u ユーザ名
\t 時間
\\$ 一般ユーザの時は"$"、rootだと"#"になる

##色の設定：
<table>
<tr>
<td>黒</td><td>\[\e[0;30m\]色をつけたい部分\[\e[0;0m\]</td>
</tr>
<tr>
<td>赤</td><td>\[\e[0;31m\]色をつけたい部分\[\e[0;0m\]</td>
</tr>
<tr>
<td>緑</td><td>\[\e[0;32m\]色をつけたい部分\[\e[0;0m\]</td>
</tr>
<tr>
<td>黄</td><td>\[\e[0;33m\]色をつけたい部分\[\e[0;0m\]</td>
</tr>
<tr>
<td>青</td><td>\[\e[0;34m\]色をつけたい部分\[\e[0;0m\]</td>
</tr>
<tr>
<td>紫</td><td>\[\e[0;35m\]色をつけたい部分\[\e[0;0m\]</td>
</tr>
<tr>
<td>水</td><td>\[\e[0;36m\]色をつけたい部分\[\e[0;0m\]</td>
</tr>
<tr>
<td>白</td><td>\[\e[0;37m\]色をつけたい部分\[\e[0;0m\]</td>
</tr>
</table>

##設定箇所：
ホームディレクトリ内の.bash_profileに設定する。

```ruby:例：.bash_profile
#赤色になる
export PS1='\[\e[0;31m\][\h@\w]\$\[\e[0;0m\] '
```
ズンドコキヨシ with Perl6 gather/take編

http://qiita.com/shunsugai@github/items/971a15461de29563bf90

```perl6
gather {
  my @a = (1..5).map({''});
  until @a.join("") eq "ズンズンズンズンドコ" {
    @a.shift;
    @a.append: take ("ズン", "ドコ").pick;
  }
  take "キ・ヨ・シ！";
}.say
```

Perl6 便利
ES6の勉強に使えるLebab

Lebabは`ES5`->`ES6`の変換をしてくれます。
要はBabelの反対の処理です。

- [Lebab](https://lebab.io/)
- [ライブデモ](https://lebab.io/try-it)

# 変換の例
## `let`と`const`

- Before

```js
var name = 'Bob';
var time = 'yesterday';
time = 'today';
```

- After

```js
const name = 'Bob';
let time = 'yesterday';
time = 'today';
```

値の変更があるか否かで、`const`と`let`が使い分けられています。

## テンプレート文字列

- Before

```js
console.log('Hello ' + name + ', how are you ' + time + '?');
```

- After

```js
console.log(`Hello ${name}, how are you ${time}?`);
```

## 関数の引数の初期値

- Before

```js
function sayMyName(name) {
  name = name || "Bob";
  console.log(name);
}
```

- After

```js
function sayMyName(name="Bob") {
  console.log(name);
}
```

## クラス

- Before

```js
var SkinnedMesh = function SkinnedMesh() {
};

SkinnedMesh.prototype.update = function (camera) {
  camera = camera || createCamera();
  this.camera = camera;
};

Object.defineProperty(SkinnedMesh.prototype, 'name', {
  set: function (geometry) {
    this.geometry = geometry;
  },
  get: function () {
    return this.geometry;
  }
});
```

- After

```js
class SkinnedMesh {
  update(camera=createCamera()) {
    this.camera = camera;
  }

  set name(geometry) {
    this.geometry = geometry;
  }

  get name() {
    return this.geometry;
  }
}
```

## `import`と`export`

- Before

```js
var lebab = require('lebab');
module.exports = SkinnedMesh;
```

- After

```js
import lebab from 'lebab';
export default SkinnedMesh;
```

## アロー関数

- Before

```js
var render = function () {
  requestAnimationFrame(render);
};
```

- After

```js
const render = () => {
  requestAnimationFrame(render);
};
```

# 最後に
普段の開発ではあまり利用しないかと思いますが、簡単な確認や勉強には使えるのではないでしょうか。
Raspberry Pi 3 Model B開封の儀

# Raspberry Pi 3 Model B
遂に本日届いた

![DSC_0120.JPG](https://qiita-image-store.s3.amazonaws.com/0/54591/ae4f4b5f-6277-94b4-fbdb-43e66635294c.jpeg)
![DSC_0124.JPG](https://qiita-image-store.s3.amazonaws.com/0/54591/44c13548-ab39-03dc-fba0-0aee93ac5585.jpeg)
![DSC_0122.JPG](https://qiita-image-store.s3.amazonaws.com/0/54591/15600593-b816-7d0a-f8c6-3c1b9ed2e69f.jpeg)

## 参考に Pi2 Model B
![DSC_0125.JPG](https://qiita-image-store.s3.amazonaws.com/0/54591/28685c48-f6c8-eade-4ab2-3302984a0103.jpeg)
大きくわ変わってない印象

## Raspbianインストール
[Download Raspbian for Raspberry Pi](https://www.raspberrypi.org/downloads/raspbian/)
> RASPBIAN JESSIE
Full desktop image based on Debian Jessie
Version:March 2016
Release date:2016-03-18
Kernel version:4.1

[Win32 Disk Imager download | SourceForge.net](https://sourceforge.net/projects/win32diskimager/)
で書き込む。

###　動確

```
pi@rpi3:~ $ uname -a
Linux rpi3 4.1.19-v7+ #858 SMP Tue Mar 15 15:56:00 GMT 2016 armv7l GNU/Linux
pi@rpi3:~ $ cat /proc/version
Linux version 4.1.19-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.9.3 (crosstool-NG crosstool-ng-1.22.0-88-g8460611) ) #858 SMP Tue Mar 15 15:56:00 GMT 2016
pi@rpi3:~ $ lscpu
Architecture:          armv7l
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
Model name:            ARMv7 Processor rev 4 (v7l)
CPU max MHz:           1200.0000
CPU min MHz:           600.0000
```
#### Wifi
```
wlan0     Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          inetアドレス:192.168.xxx.xxx ブロードキャスト:192.168.xxx.xxx  マスク:255.255.255.0
          inet6アドレス: xxxx::xxxx:xxxx:xxxx:xxxx/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:1126 エラー:0 損失:517 オーバラン:0 フレーム:0
          TXパケット:507 エラー:0 損失:0 オーバラン:0 キャリア:0
      衝突(Collisions):0 TXキュー長:1000
          RXバイト:198310 (193.6 KiB)  TXバイト:89925 (87.8 KiB)
```

#### Bluetooth
```
pi@rpi3:~ $ systemctl status bluetooth
● bluetooth.service - Bluetooth service
   Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled)
   Active: active (running) since 日 2016-03-20 00:34:56 JST; 13min ago
     Docs: man:bluetoothd(8)
 Main PID: 695 (bluetoothd)
   Status: "Running"
   CGroup: /system.slice/bluetooth.service
           mq695 /usr/lib/bluetooth/bluetoothd
```
gradle-intellij-pluginの./gradlew runIdeaでAndroid Studioを起動する

# この記事が役に立つかもしれない人
- Android Studio プラグインをgradleプロジェクトとして作っている人
- [gradle-intellij-plugin](https://github.com/JetBrains/gradle-intellij-plugin) を利用している人

# 方法
`intellij.alternativeIdePath`に自分のローカルのAndroid Studioのパスを記述する。

## 例
こんな感じ。

```
intellij {
  version '14.1.4'
  plugins 'coverage'
  pluginName 'MyPlugin'
  alternativeIdePath '/Applications/Android Studio.app'
}
```
そろそろみんなreveal.js使おうよ

# reveal.jsを使ってパワポもどきを作ろう！

## reveal.jsとは
HTMLとMarkdownを使って、
キレイでカッコいいプレゼンテーション資料が作成出来る、
*フレームワークです*。
本家([Revealjs](http://lab.hakim.se/reveal-js))見てくると良いです。

## 環境構築
### 入手〜動くまで
1. [Node.js](https://nodejs.org/en/)をインストールする。
2. [Grunt](http://gruntjs.com/getting-started#installing-the-cli)をインストールする。
3. reveal.js リポジトリをクローンする。

	```bash:console
	$ git clone https://github.com/hakimel/reveal.js.git
	```
	
4. reveal.jsディレクトリに移動

	```bash:console
	$ cd reveal.js
	```

5. 依存リポジトリをインストールする

	```bash:console
	$ npm install
	```

6. プレゼンテーションファイルを監視する

	```bash:console
	$ grunt serve
	```

7. [http://localhost:8000](http://localhost:8000)でプレゼンテーションを見てみよう
	※ ポート番号を変えたい場合、 `grunt seve --port 8001` とする


## Tips

### テーマ
- Sky
- Beige
- Simple
- Serif
- Night
- Default

### ページめくり
- Cube
- Page
- Concave
- Zoom
- Linear
- Fade
- None
- Default


### Section
`---`を入れると、右ページ(data-separator)
`--`を入れると、下ページ(data-vertical)
`>>>`も同様にしたページ


### コード
*```* で囲むとコード装飾される

### リスト
```
1. list1
2. list2
```

### *斜体*
```
*斜体*
```

### **強調**
```
**強調**
```

### リンク
```
[リンク名](URL)
```

### 画像
```
![画像名](URL)
```

### Yeoman
yoコマンドを利用すると、revealの初期構成を作成することが出来る。
下記のようにき入力し、対話形式で構成を決める。

```
yo reveal
```

## 参考
- [サンプル集](https://github.com/hakimel/reveal.js/wiki/Example-Presentations)


## 似たようなサービスの紹介
- [Slideck](https://slideck.io/)
	- ボケてでお馴染みのyusukebeがつくったサービス
	- markdownファイルをreveal風のサイトに早変わりさせることが出来る
WordpressでSCSSを利用する


# WP-SCSS というプラグイン


https://ja.wordpress.org/plugins/wp-scss/

インストールすると、以下のSettingへのリンクが表示されます。

![Kobito.VSLd4J.png](https://qiita-image-store.s3.amazonaws.com/0/50872/0149f850-d136-3f30-26bc-f42d62c23d35.png "Kobito.VSLd4J.png")


SCSS location　にscssのファイル置き場を。
CSS Location　にコンパイル後のcssファイルの置き場所を設定しましょう。
ディレクトリの場所は、Themeの中身をルートとして記載します。

![Kobito.FPmsFM.png](https://qiita-image-store.s3.amazonaws.com/0/50872/c8d14aa0-89ca-6d13-034b-a16ac4443cc7.png "Kobito.FPmsFM.png")


これで、SCSSディレクトリ内のscssファイルが自動的にcssディレクトリ内に保存されます。

ただし、コンパイルされるまでめちゃくちゃ遅い。
3分位かかってるんじゃないかな…。

ちょっと耐えられないレベルです。

他にいい方法ないのかなぁ。。。
vagrant upするときのマウントエラー


## 原因

* virtualbox上で電源オフした場合（非正常に終了された場合）、発生するぽい。

```sh
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device
```

* mountで始まるコマンドを貼ってくださいと言われているが、やっても無駄。

## 対応

* ぐっぐってみたら、ゲストでvboxadd setupを行えばいいと書かれていたが「Building the main Guest Additions module」がNGで表示されると直らない。
* この項目さえOK（他の項目がNGでも）だったら、exitでゲストからホストに戻って「vagrant reload」でゲストを再起動すれば直る。

```sh
$ sudo /etc/init.d/vboxadd setup
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
The headers for the current running kernel were not found. If the following
module compilation fails then this could be the reason.
The missing package can be probably installed with
yum install kernel-devel-2.6.32-573.18.1.el6.x86_64

Building the main Guest Additions module                   [失敗]
(Look at /var/log/vboxadd-install.log to find out what went wrong)
Doing non-kernel setup of the Guest Additions              [  OK  ]
```

* kernelソースをインストールしてvboxadd setupをもう一度試す。
* Building the OpenGL support moduleがNGだが無視する。

```sh
$ sudo yum install -y kernel-devel gcc
$ sudo /etc/init.d/vboxadd setup
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
Building the main Guest Additions module                   [  OK  ]
Building the shared folder support module                  [  OK  ]
Building the OpenGL support module                         [失敗]
(Look at /var/log/vboxadd-install.log to find out what went wrong. The module is not built but the others are.)
Doing non-kernel setup of the Guest Additions              [  OK  ]
Starting the VirtualBox Guest Additions                    [  OK  ]
```

* ゲストからホストに戻って再起動したら直った。

## 参考

* http://vboxmania.net/content/guest-additions%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
VimiumでCtrl+f/Ctrl+bでページ送りする

Chromeをキーボード操作するのにVim風の操作ができるVimiumというプラグインがあります。

[Vimium](https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb)

デフォルトのマッピングでもある程度の操作ができるのですが、Ctrl+f/Ctrl+bでページ送りができないのが個人的にすごいイラッとしました。

d/uで半ページ送りはあるんだけど、そうじゃないんだ。全ページ送りが欲しいんだ。

たぶんChromeのデフォルトのマッピングとぶつかってるとかで設定されていないんだろう。。。

このマッピングの設定は変更できるようで、プラグインの設定を開いて「Custom key mappings」のところに以下のような設定を書いておけばCtrl+f/Ctrl+bでページ送りできるようになりました。

```
map <c-f> scrollFullPageDown
map <c-b> scrollFullPageUp
```

これだけでずいぶん快適になった。