OmniAICreator/Qiita-1.07M huggingface dataset:
Raspberry Pi のセットアップ - 2016年9月版

# Raspberry Pi ハードウェア

* [Raspberry Pi 2 Model B](https://www.raspberrypi.org/products/raspberry-pi-2-model-b/) （3 ではありません）
* SDカード 16GB(Class10)

# Raspbian の設定

## 起動用 SD カードの作成

Windows の PC で以下の手順を行う。

[Raspberry Pi](https://www.raspberrypi.org/) のサイトから、NOOBS を[ダウンロード](https://www.raspberrypi.org/downloads/noobs/)する。

今回は、以下のファイルをダウンロードした。

NOOBS
Offline and network install
Version: 1.9.2
Release date: 2016-05-27

ダウンロードした圧縮ファイルを解凍する。

解凍したファイルの中の"INSTRUCTIONS-README.txt"に書かれている以下の手順を行う。

1. フォーマットツールの SDFormatter を[ダウンロード](https://www.sdcard.org/downloads/formatter_4/eula_windows/)する
1. SDFormatter をインストールする
1. SDFormatter を起動し、"オプション設定"をクリックし、論理サイズ調整を"ON"にする
1. "フォーマット"ボタンをクリックする
1. フォーマットしたSDカードに、解凍した NOOBS ファイルをコピーする
1. SDカードを Raspberry Pi に差し込み、電源を入れる

## Raspbian のインストール

ここからは、Raspberry Pi での作業

NOOBS の画面が表示されるので、"Raspbian" にチェックを入れ、"Install" をクリックする。
画面下の"Language"、"Keyboard" はデフォルト（Language: English, Keyboard: gb）にしておく。

プログレスバーが 100% になるまで待つ。

約25分後、
"OS(es) Installed Successfully" と表示されるので、"OK" をクリックする。

Raspberry Pi が起動して、自動的にログインし、ウィンドウシステムが起動され、Raspberry Pi のロゴが表示された画面となる。

画面左上の LXTerminal のアイコンをクリックして、LXTerminal を起動し、バージョンなどを確認してみると以下のようになっている。

```shell-session
$ cat /etc/debian_version
8.0
$ cat /etc/issue
Raspbian GNU/Linux 8 \n \l
$ echo $LANG
en_GB.UTF-8
```

## Locale, Timezone の設定

"Menu" - "Preferences" - "Raspberry Pi Configuration" を選択して、設定画面を表示させる。

"Localisation" タブを選択し、"Set Locale" をクリックする。
以下のように選択し、"OK" をクリックする。
Language: ja(Japanese)
Country: JP(Japan)
Character Set: UTF-8

"Set Timezone" をクリックする。
以下のように選択し、"OK" をクリックする。
Area: Asia
Location: Tokyo

"Raspberry Pi Configuration" の画面の "OK" をクリックすると、リブートの確認画面が表示されるので、"Yes" をクリックする。

再起動後、ごみ箱の文字が化けている。

## 文字化けの解消

LXTerminal を起動し、以下のコマンドを実行する。

```shell-session
$ sudo aptitude -y install jfbterm
```
実行中の画面の表示は文字化けしているが、コマンドプロンプトが表示されるまで待つ。

コマンドプロンプトが表示されたら、以下のコマンドを実行する。

```shell-session
$ jfbterm
```

ウィンドウシステムが終了し、左上にコマンドプロンプトが表示されるので、以下のコマンドでリブートする。

```shell-session
$ reboot
```

再起動後、文字化けが解消されている。

## キーボードの設定

デフォルトでは英語のキーボードになっているので変更する。
"Menu" - "設定" - "Raspberry Pi の設定" を選択して、設定画面を表示させる。
"ローカライゼーション" タブをクリックする。
"キーボードの設定" をクリックする。
以下のように選択し、"OK" をクリックする。
Country: 日本
Variant: 日本語

"Raspberry Pi の設定" の画面の "OK" をクリックする。

## フォントの設定

### フォントのインストール

MigMix フォントを使いたいので、以下のコマンドで MigMix フォントをインストールする。

```shell-session
$ sudo apt-get install fonts-migmix
```

### System Font の設定

"Menu" - "設定" - "Appearance Settings" で設定画面を表示させ、
[MigMix 2M Bold 12] に設定する。

### LXTerminal のフォントの設定

"編集" - "設定" で設定画面を表示させ、
[Migu 1M 12] に設定する。

## 日本語入力の設定

今回は、Google 日本語入力のオープンソース版である [Mozc](https://ja.wikipedia.org/wiki/Google_%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%85%A5%E5%8A%9B#Mozc) をインストールする。
以下のコマンドを実行する。

```shell-session
$ sudo apt-get update
$ sudo apt-get install uim uim-mozc
```

正常に実行できたら、
"Menu" - "Shutdown" - "Reboot" を選択し、リブートする。

再起動後、画面右上に　"Mozc" のアイコンが表示されている。

キーボードの "半角/全角" キーで、日本語入力の切り替えができるようになる。

参考
[Raspberry Pi 2 で日本語表示/入力できるようにする](http://dekirukana-dekirukana.hatenablog.com/entry/2015/12/12/005537)

以上で、基本設定は終了。
Excel / 統計? > Link > 最大と最小を取った平均 @ microsoft

N個のデータセットから最大と最小を取った平均を求めるという計算。

https://support.microsoft.com/en-us/kb/108280
> For statistical purposes, you may want to calculate the average of a sample excluding its highest and lowest values. In Microsoft Excel, you can create the following formula to calculate an average after excluding the highest and lowest values:


```
=(SUM(region)-MAX(region)-MIN(region))/(COUNT(region)-2)
```

その効果はいかに。

ノイズにより飛びぬけておかしい点が最大、最小、各１個ずつある場合は有効なのだろう。ノイズがもっとある場合は効果は薄れるだろう。
ローエンドデバイスのためのゲームの最適化

*この記事は以下の記事の日本語訳を許可を得て掲載しています。[Optimizing Games for Low-End Devices](http://developers.kongregate.com/blog/optimizing-games-for-low-end-devices)

モバイルゲーム開発におけるもっとも困難な事のひとつは、ハイエンドデバイス上で実行したときの体験を損なうことなく、ローエンドデバイス上でゲームをうまく実行させることです。

これにはいくつものよい理由付けがあります。よりよいマネタイゼーション、より多くのユーザーにエンゲージできる、などなど。ハイエンドデバイスが注目を集めることで、ローエンドデバイスの優先度合いは一見下がっていっているかのように見えます。しかし、彼らはいまだ重要です！最近のMixpanelのトレンド調査によると、iPhoneユーザーの１０％ちかくはiPhone5か、それ以下の機種を利用しています。

# 古いデバイス上で新しいデバイスと同じグラフィックを出すことができるか？
率直に言って無理です。プレイヤーにはあらゆるデバイスで、同等の経験をしてもらいましょう。つまり、ハイエンドデバイスを使うユーザーたちと同じ、コアとなる経験ができるようにしてください。完全に同じではないかもしれませんが、コアとなる経験は近くあるべきです。

# ローエンドデバイスのための最適化テクニック
- プロジェクトの最初期の段階で、ローエンドデバイスについて考慮しておきましょう。実際にローエンドデバイス上でのテストを繰り返し、又はゲームフィーチャーが追加された場合に、行いましょう。
- デバイスを、ロー、ミドル、ハイクオリティ、といった具合にカテゴライズしましょう。例えば、iPhone6sはハイエンド、Samsung Galaxy 3はローエンドなどと言ったように。このリストは新しいデバイスが発売に合わせて継続的に変化します。それぞれのデバイスのスペック、チップセット、メモリ容量、GPUなどを把握しておく事が重要です。
- Unityが持つクオリティセッティングを活用しましょう。Edit->Projects->Qualityから設定できます。必要なだけクオリティレベルを追加して、必要に応じてカスタマイズできます。Low, Medium, and Highの3種類がおすすめです。Unityは、各レベルで設定可能な多くの項目を持っています。これは3Dゲームの開発にとても効果的ですが、2Dのゲームにはそれほどではありません。
- デバイスの能力に応じたアセットを使いましょう。ハイエンドデバイスではHD解像度、ローエンドデバイスでは標準解像度と言った具合に。これによってメモリフットプリントとパフォーマンスの両方に恩恵があります。（FPSの向上。メモリ不足によるクラッシュの緩和）。iOSのapp-thinningテクニックやUnityのasset bundleを利用することができます。
- クオリティセッティングに応じたコードパスを実行しましょう。例えば、表示・非表示する時にアニメーションするダイアログの場合、ローエンドデバイスではそれを無効化する、などです。
- マスクやアルファテクスチャを無効にしましょう。これらはゲームのFPSに大きな影響を及ぼします。
- デバイスに応じた振る舞いを決めるゲーム独自の関数を用意しましょう。例えば「どのアニメーションを再生するか？」「どのPFXを使うか？」「サウンドを無効化するか？」
- ローエンドデバイスでは並列HTTP接続は少なくしましょう。これによりCPUスレッドの使用率を下げることができます。また一般的にHTTP接続を控えることは、バッテリーの節約にもなります。
- ローエンドデバイス用のカスタムシェーダを用意して、余計なパスや機能を制限しましょう。例えばローエンドデバイスでは洗濯時のアウトライン描画は行わずに、ゲーム自体の進行を妨げないようにします。
- ゲームエンジンのプロファイラーを使ってパフォーマンスのボトルネックを見つけましょう。ローエンドデバイスでプロファイルを行うことを忘れないでください。

自由にコメントをください。私達の持つデータやコードスニペットも喜んで共有しましょう。
angular_rails_csrfがrails5に対応してないのでローカルインストールする

angular_rails_csrfをインストールしようと思ったら激しく怒られました。

```
Bundler could not find compatible versions for gem "rails":
  In snapshot (Gemfile.lock):
    rails (= 5.0.0.1)

  In Gemfile:
    rails (>= 5.0.0.1, ~> 5.0.0)

    angular_rails_csrf was resolved to 1.0.4, which depends on
      rails (< 5, >= 3)
```

githubを見ると


```
  s.add_runtime_dependency 'rails', '>= 3', '< 5'

```

と書いてあったので、

```
  s.add_runtime_dependency 'rails', '>= 3'
```

にしたら動くのではないかと思って、リポジトリをローカル保存して


```
gem 'angular_rails_csrf', :path => 'vendor/localgems/angular_rails_csrf'

```

こんな感じのGemfileを書いたらうまくインストールできました。
pandocでMarkdown形式をHTML/CSSに一発変換

# pandocでMarkdown形式をHTMLに一発変換

## pandocって？

> Pandocは Haskell で書かれたライブラリおよびコマンドラインツールであり、 あるマークアップ形式で書かれた文書を別の形式へ変換するものです。
[Pandoc ユーザーズガイド 日本語版](http://sky-y.github.io/site-pandoc-jp/users-guide/)

## 対応書式

対応している入力形式は以下の通りです：

- markdown
- Textile （のサブセット、以下同様）
- reStructuredText
- HTML
- LaTeX
- MediaWiki markup
- Haddock markup
- OPML
- Emacs Org-mode
- DocBook

出力形式は以下の通りです：

- プレーンテキスト
- markdown
- reStructuredText
- XHTML
- HTML 5
- LaTeX （beamerスライドショーを含む）
- ConTeXt
- RTF
- OPML
- DocBook
- OpenDocument
- ODT
- Word docx
- GNU Texinfo
- MediaWiki markup
- EPUB (v2またはv3)
- FictionBook2
- Textile
- groff manページ
- Emacs Org-Mode
- AsciiDoc
- InDesign ICML
- HTMLスライドショー：Slidy、Slideous、DZSlides、reveal.js、S5
- PDF出力（LaTeXがインストールされているシステムで使用できます）

## pandocのインストール

### Mac
`brew install pandoc`

### Linux
#### Yum
`sudo yum install pandoc`

#### apt-get
`sudo apt-get install pandoc`

## pandocの使い方

### CSSを指定してMarkdownからHTMLを生成する
`pandoc -c style.css input.md -o output.html`
Ubuntu14.04にDockerをインストールする手順

```
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo deb https://apt.dockerproject.org/repo ubuntu-trusty main | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get purge lxc-docker
sudo apt-get update
sudo apt-get -y install linux-image-extra-$(uname -r) linux-image-extra-virtual
sudo apt-get update
sudo apt-get -y install docker-engine
sudo apt-get -f install
```
windows10 > デュアルモニタ > 画面の入れ替え > Shift + Win + 右矢印

```txt:動作確認
Windows 10 Pro 64bit
23インチモニタ 二台
```

二台のモニタを使用している。自分が一番集中したい作業のウィンドウを対面となるモニタに置き、もう一台のモニタには補助資料に関するウィンドウを置いている。

VMwareを2つ立ち上げて、ゲストOSを4つ起動などしたりする。

この状況で欲しかった機能として「ウィンドウの左右入れ替え」だった。

- モニタAで見ていたウィンドウをすばやくモニタBに移動したい
- 用途
  - linux関連の開発をメインにしていたけど、Windowsの資料編集を割り込みですることになった
  - 組込みの開発をしていたけど、割込みでWinソフト開発をすることになった
  - など
  
### モニタ間のウィンドウ移動

以下の操作でモニタ間の移動ができるようだ (参考 http://www.nanigoto.com/jump/ )。

- Shift + Winキー + 右矢印
   - 対象のウィンドウを右モニタに移す
- Shift + Winキー + 左矢印
   - 対象のウィンドウを左モニタに移す

### VMwareフルスクリーン時

ただし、VMwareでフルスクリーン表示中はこのキーは有効にならない。
移動は以下の手順となる。

- Ctrl + Alt + Enter
  - フルスクリーン解除
- VMwareのウィンドウバーをクリック
  - フォーカスを変えるため (要改善)
  - ゲストOSの設定によっては、`Ctrl + Alt`でできる場合がある
- Shift + Win + 左矢印
  - 左モニタへ移動
- Ctrl + Alt + Enter
  - フルスクリーン復帰

一発でモニタを入れ替える方法募集中。

Win10なら仮想デスクトップがあるようだ。異なるデスクトップのものを同時に閲覧できればこの機能も使えるが。
(.erb: form) ベストプラクティス

# ラジオボタン
```erb:_form.html.erb

<% # 実際にはyamlなどで定義
hash = {
  "1": '男性',
  "2": '女性'
}
%>

<input type="radio" name="sex"> なし # 必要の場合のみ
<% hash.each do |key, value| %>
 <label>
   <input type="radio" name="sex" <%= "checked='checked'" if @user.sex == key.to_s.to_i %> > <%= value %>
 </label>
<% end %>

```

# チェックボックス
```erb:_form.html.erb

<% # 実際にはyamlなどで定義
 hash = {
   "1": '水泳',
   "2": 'ランニング'
   "3": 'ウォーキング'
 }
%>

<% hash.each do |id, value| %>
  <label>
    <input name="sports" type="checkbox" value='<%= id %>' <%= "checked='checked'" if @user.sports.include?(id.to_s.to_i) %> <%= value %>
  </label>
<% end %>

```
Azure Backupで仮想マシンをバックアップする

### 初めに
サーバを運用するうえでバックアップは必要不可欠です。Azure上のストレージは、最低でも3重に冗長化されており非常に高い可用性を持っていると言えますが、定期的にバックアップを取得して過去に戻りたいといった状況は多々あります。
Azure Backupは、Azure上のストレージにバックアップを取るためのサービスです。
Azure上の仮想マシン以外にもオンプレミスのWindows Serverなどもバックアップ可能です。
簡単な画面操作ですぐにバックアップの実行、復元が可能です。
そこで今回は、Azure上の仮想マシンのバックアップを行ってみます。
### Azure Backupを作成する
事前に仮想マシンを構築しておいてください。(ARM、クラシックどちらでも可)

今回は、AzureポータルでBackupサービスを作成します。
backupで検索すると、Backup and Site Recovery (OMS) というものが出てくるのでそれを選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/a7db98b6-e2da-896d-2301-dad0bb8502f3.png)
名前とリソースグループとリージョンを選択して作成します。
リージョンは、バックアップを取りたい仮想マシンと同じリージョンを選択してください。(リソースグループは別でOK)
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/0331c909-d5d4-25d1-9765-050da900c515.png)

作成したらサービスの管理画面を見てみましょう。
下記の図のような感じになります。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/3fd28dd5-677b-9a6c-fbd9-9767d4090a1b.png)
### バックアップを設定する
Azure Backupが作成で来たら早速仮想マシンのバックアップを設定しましょう。
設定ブレードのバックアップの項目からバックアップの設定ができます。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/5aba0124-5a04-cedf-d73d-0b1c09c1d454.png)

ワークロードは、AzureとオンプレミスがあるでのAzureを選択します。
何をバックアップしますか？の部分は、ワークロードでAzureを選んだ場合仮想マシンしか選べないのでそのまま仮想マシンを選択します。

次に、バックアップポリシーの選択画面が表示されるのでDefaultPolicyか新規作成を選択します。
今回は、新規作成を選択します。
バックアップポリシーとは、どのタイミングでバックアップを取るだったり、どれくらいの期間バックアップを保持するかなどを設定するものです。
今回は、毎日、毎週、毎月、毎年のペースでのバックアップを設定しています。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/6c78af99-a509-08d7-be58-934654c7f4b8.png)

最後にバックアップする仮想マシンを選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/78b54882-85b3-13bb-b6ce-4a0a286a92d3.png)

### バックアップを取る
バックアップ設定が完了したら設定からバックアップアイテムを選択します。
選択すると、先ほどバックアップ設定をした仮想マシンに警告が出ているはずなので、仮想マシンを選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/586738cc-c7de-7de2-6076-c0b79626cea5.png)

警告は、まだ一度もバックアップが実行されていないために表示されるものです。
このままデイリーのバックアップ時間まで待ってもいいですが、とりあえず手動で今すぐバックアップを実行しましょう。
仮想マシンを選択すると下図のような画面が表示されます。前回のバックアップの状態が警告になっています。
画面上部の今すぐバックアップを選択するとバックアップの保持期間を選択する画面が出るので期間を設定してバックアップを選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/6550abc6-a4fe-f05b-c263-836e51cfc0e8.png)

これでバックアップが実行されます。

### バックアップから復元する
仮想マシンをバックアップ出来たら、次にそのバックアップから仮想マシンを復元してみましょう。
設定メニューのバックアップアイテムを選択するとバックアップ設定された仮想マシンが一覧表示されるので復元したい仮想マシンを選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/28780ed1-b1c0-b869-6c06-d6cae1dafaba.png)

バックアップアイテムの項目上部にある復元を選択すると、復元設定の画面が表示されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/8cc096e9-84dd-5e16-5964-ff7291d43f84.png)

復元を選択すると使用可能な復元ポイントが一覧表示されるので復元ポイントを選択します。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/6fee059f-67f4-3418-1f7e-1da452e27e5e.png)

復元ポイントを選択すると復元ポイントをデプロイする仮想マシンの設定を聞かれるので適当に仮想マシンの設定を行います。
![image](https://qiita-image-store.s3.amazonaws.com/0/28367/0b7a0a8d-c797-a44b-c7e0-45682e16490c.png)

これにより同一構成の仮想マシンが新しく作成されます。新しい仮想マシンは、ログイン情報なども含めて基本的に復元元と同じものとして扱えます。

### まとめ
仮想マシンでサービスを運用するうえで、日々のバックアップはほぼ必須な内容です。Azureで仮想マシンを運用する際は、ぜひこのサービスを使ってみてください。
NEXT Tokyo 2016 - GCP カンファレンスに参加しました

# 勉強会の基本情報

* 【日　時】2016年09月06日 10:00~19:00
* 【会　場】ザ・プリンスパークタワー 東京
* 【参加費】無料
* 【主　催】google
* 【申し込み】https://cloudplatformonline.com/NEXT2016-Tokyo.html

# 概要
* GCPは、Google Cloud Platformの略称です。googleは、クラウド上に提供しているサービス群の総称です。有名なサービスが以下
    * App Engine
    * BigQuery
    * Cloud Vision
    * ...
* 今回のカンファレンスには、以下の内容と関連するセッションがある
    * データ & 分析
    * グローバル インフラ & NoOpsサービス
    * クラウド アプリケーション
    * セキュリティ&コンプライアンス
    * 事例紹介

# 内容

いろいろなセッションを参加したが、特に以下の二つのセッションを気になったので、ここで記述する


### Google Cloud Platform で大幅強化されたFirebase

このセッションには、応用面からFirebaseといろいろなGCPサービスが紹介された

###### Firebaseとは
* 2011年アメリカに開始されたMBaaSサービスである
* 2014年googleは買収した
* リアルタイムデータベース

###### Firebase使い方が簡単

```js
var config = {
  apikey: <API-KEY>,
  databaseURL: <URL>,
  projectId: <ID>
}

var app = firebase.initializeApp(config);
var db = firebase.database();

var chat = db.ref('chat');

chat.push({
  name: 'alin',
  text: 'oh, my god'
});

chat.on('child_added', function(snapshot){
  console.log(snapshot.val());
});
```

###### Firebaseの構成
* リアルタイムデータベース
* 静的ホスティング
* プッシュ通知
* ユーザ認証
* リモート設定
* テストラボ

###### GCPにコンピューティングの連続性

```

 Compute Engine    Container Engine   App Engine   Cloud Function
<---------------|-------------------|------------|---------------->

     IaaS            コンテナ クラスター      PaaS         サーバーレス

<===設定可能（DevOps)=============================アジリティ(NoOps)=====>
```
* これは、AWSのコンピューティングの仕組みと同じになった

###### いろいろなAPIとサービス
* Cloud Speech API
* Cloud Translate API
* Cloud Natual Language API
* Cloud Vision API
* Cloud Machine Leaning




### Google Container Engine と Kubernetes で無理をしないコンテナ管理
###### Kubernetesとは
* ギリシャ語で「操舵手」、さらに「統治者」および「人工頭脳」という語の語源
* Kubernetesは、dockerコンテナを実行、管理できる
* Googleの経験と社内システムからのインスピレーションと情報から発想をえている
* 複数のクラウドおよびベアメタル環境をサポートする
* 複数のコンテナランタイムをサポートする
* 100%オープンソース

###### コンセプト
* ポッド
    * 密結合したコンテナの小さい集合
    * 例：静的サイトジェネレータ＆Webサーバーバイナリ
* デプロイメント
    * 現在の状況を望ましい状態に向かわせるループ
    * 例：ウェブアプリケーション
* サービス
    * 一体となって働く一連の実行ポッド
    * 例：ロードバランシングされたバックエンド
* ラベル
    * コンポーネントを組織するための任意のメタデータ








# 感想
* 参加者が多い
    * 2000人以上
* GCPは、日本に提供するサービスを強化した
    * 今年は、日本リージョンが開設された
* AWS　Summitのセッション内容と違い
    * クラウドサービス基盤の紹介が少ない(Compute Engine, Container Engine...)
    * 公開されているAPIと利用事例がたくさんある(Cloud Vision, Cloud ML, Cloud Speech API...)
truncate multi-byte string to fit in specified bytes in golang

```go
func TruncateString(s string, limit int) string {
       size := 0

       for index, r := range s {
               n := (utf8.RuneLen(r)) + index
               if n <= limit {
                       size = n
               } else {
                       break
               }
       }

       return s[:size]
}
```

related: [Goでマルチバイトが混在した文字列を文字幅でtruncateする \- Qiita](http://qiita.com/mattn/items/df8faba2abadab2eee51)
Railsでよく使うけど、なぜか全然覚えられないやつら

# このページを作った理由
Railsなんですけど、毎日書いていても、久々に書いていても全然覚えられないやつらがたくさんいますよね。
なので今後は調べる度に必ずここを更新して、ガンガン追加していこうと思います！！

## Migration

```ruby:db/migrate/00000000000000_change_db_scheme.rb

# limit, default, not_null などはモデル側で設定するのが好ましいとし、以下のみの説明とします

class ChangeDbScheme < ActiveRecord::Migration

  # 新規テーブルの作成
  create_table :table_names do |t|
    t.string  :column_name
    t.integer :***
    ...

    t.timestamps
  end

  # テーブル名変更
  rename_table  :table_names, :new_table_names

  # カラム追加
  add_column    :table_names, :new_coulmn, :string

  # カラム名変更
  rename_column :table_names, :column_name, :new_column_name

  # カラム型変更
  change_column :table_names, :column_name, :string

  # カラム削除
  remove_column :table_names, :column_name


  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *   
  # 既存データの書き換え
  Users.all.each do |u|
    u.name = "#{u.name}様"
    u.save
  end

end

```

## Relation
前提とするモデル `User(users)`, `Post(posts)`

```ruby:app/models/user.rb
class User < ActiveRecord::Base

  # 親 -> has_many, foreign_key -> 子ID
  has_many :posts, foreign_key: 'user_id', class_name: Post

end
```
```ruby:app/models/post.rb
class Post < ActiveRecord::Base

  # 子 -> belongs_to, foreign_key -> 子ID
  belongs_to :user, foreign_key: 'user_id', class_name: User

end
```

## インタンス変数にセット、アクセス
```ruby

@u = User.finf(1)

# セット
@u.instance_variable_set(:@hoge, 'hoge')

# アクセス
@u.instance_variable_get(:@hoge)

```

## HashのkeyにStringでもSymboleでもアクセスする
```ruby:irb

# Hash.with_indifferent_access
irb(main):001:0> hash = {
irb(main):002:1*   symbol:    'symbol',
irb(main):003:1*  'string' => 'string'
irb(main):004:1> }.with_indifferent_access
# => {"symbol"=>"symbol", "string"=>"string"}

irb(main):005:0> hash[:symbol]
# => "symbol"
irb(main):006:0> hash['symbol']
# => "symbol"

irb(main):007:0> hash['string']
# => "string"
irb(main):008:0> hash[:string]
# => "string"

# 無敵になる

```

## コンソールから色々作成

g は generate の略

```rb
# controller, viewの作成
rails g controller Users index show edit ...

# modelの作成
rails g  model User  name:string ...

# mailerの作成
rails g mailer user_mailer contact ...
```


## 日付・時間(DateTime, Time, Date)の取り扱い
```rb

# conmming soon...

```
CSS3セレクターでストライプテーブル


※CSS3セレクターを使うとは言ってない

AngularJSの基本的な記法については言及しません。
ソースコードはこちら[github](https://github.com/perpouh/get-start-angular-design)

## テーブルに表示するデータの配列を作成

``` JavaScript:main.js

$scope.dataList=[
 	{
 		name:'Yamada Tarou',
 		birthday:'1979-06-05',
 		phone:'090-1234-5678',
 		mail:'example@perpouh.net'
 	},
	//任意の件数繰り返し
];

```

## ngRepeatを使ってテーブルを作成

``` HTML:index.html

<table>
	<tr>
		<th>No.</th>
		<th>Name</th>
		<th>Birthday</th>
		<th>Phone</th>
		<th>Mail</th>
	</tr>
	<tr ng-repeat="data in dataList">
		<td>{{$index+1}}</td>
		<td>{{data.name}}</td>
		<td>{{data.birthday}}</td>
		<td>{{data.phone}}</td>
		<td>{{data.mail}}</td>
	</tr>
</table>

```

`{{$index}}`には0始まりでループ回数が入ってきます。行番号としては1からにしたいので`{{$index+1}}`としました。

## ストライプにするためにクラスを追加

``` HTML:index.html

<table>
	<tr>
		<th>No.</th>
		<th>Name</th>
		<th>Birthday</th>
		<th>Phone</th>
		<th>Mail</th>
	</tr>
	<tr ng-repeat="data in dataList" ng-class="{odd:$odd,even:$even}" >
		<td>{{$index+1}}</td>
		<td>{{data.name}}</td>
		<td>{{data.birthday}}</td>
		<td>{{data.phone}}</td>
		<td>{{data.mail}}</td>
	</tr>
</table>

```

　`ng-class="{odd:$odd,even:$even}"`を追加しました。
　`$odd`と`$even`にはそれぞれbool値が自動で代入されます。`$odd`がtrueであればoddクラスを付与、というような構造です。
　これでテーブルがストライプになりました（cssについては色を指定してるだけなので言及しません）。

## マウスオーバーで行をハイライトする

``` HTML:index.html

<table>
	<tr>
		<th>No.</th>
		<th>Name</th>
		<th>Birthday</th>
		<th>Phone</th>
		<th>Mail</th>
	</tr>
	<tr ng-repeat="data in dataList" ng-class="{odd:$odd,even:$even,highlight:selected}"
			ng-mouseover="selected=true" ng-mouseleave="selected=false">
		<td>{{$index+1}}</td>
		<td>{{data.name}}</td>
		<td>{{data.birthday}}</td>
		<td>{{data.phone}}</td>
		<td>{{data.mail}}</td>
	</tr>
</table>

```

　ちょっとごちゃごちゃしてきました。仕様です。
　前述のngClassに`highlight:selected`を追加。ポインタが要素に乗った時(ngMouseover)と要素から離れた時(ngMouseleave)にそれぞれselectedにbool値を設定しています。
　selected変数は行ごとに作られているのでngMouseleaveを設定しないとどんどんハイライトが増えることになります。
　この辺はちゃんと関数作ればいいんですけどめんどくさくてビルトインディレクティブで書いたんですけど結局列ハイライトのために関数を作ることになりました。

## マウスオーバーで列をハイライトする

``` HTML:index.html

<table>
	<tr>
		<th>No.</th>
		<th>Name</th>
		<th>Birthday</th>
		<th>Phone</th>
		<th>Mail</th>
	</tr>
	<tr ng-repeat="data in dataList" ng-class="{odd:$odd,even:$even,highlight:selected}" ng-mouseover="selected=true" ng-mouseleave="selected=false">
		<td ng-class="{highlight:selectedCol==1}" ng-mouseover="selectCol(1)" ng-mouseleave="selectCol(0)">{{$index+1}}</td>
		<td ng-class="{highlight:selectedCol==2}" ng-mouseover="selectCol(2)" ng-mouseleave="selectCol(0)">{{data.name}}</td>
		<td ng-class="{highlight:selectedCol==3}" ng-mouseover="selectCol(3)" ng-mouseleave="selectCol(0)">{{data.birthday}}</td>
		<td ng-class="{highlight:selectedCol==4}" ng-mouseover="selectCol(4)" ng-mouseleave="selectCol(0)">{{data.phone}}</td>
		<td ng-class="{highlight:selectedCol==5}" ng-mouseover="selectCol(5)" ng-mouseleave="selectCol(0)">{{data.mail}}</td>
	</tr>
</table>

```

``` JavaScript:main.js

（略）
$scope.selectCol=function(col){
	$scope.selectedCol=col;
}
（略）

```

　HTMLがちょっと散らかりましたね。仕様です（二回目）。
　各tdにngMouseoverを付与、selectCol関数を呼んでselectedCol変数に列番号を代入しています。ngMouseleaveのやっつけ感については触れないでください。

　これでハイライト付きストライプテーブルが完成しましたヽ(´@ω@｀)ﾉ
スライド式イメージギャラリー


AngularJSの基本的な記法については言及しません。
ソースコードはこちら[github](https://github.com/perpouh/get-start-angular-design)

## サムネイルのクリック時にメイン画像を切り替える

``` HTML:index.html

<div id="container">
	<div id="navi">
		<ul>
			<li>
				<img src="img/photo1_thum.jpg" ng-click="changeMainImage('img/photo1.jpg')" alt="" />
			</li>
			<li>
				<img src="img/photo2_thum.jpg" ng-click="changeMainImage('img/photo2.jpg')" alt="" />
			</li>
			<li>
				<img src="img/photo3_thum.jpg" ng-click="changeMainImage('img/photo3.jpg')" alt="" />
			</li>
			<li>
				<img src="img/photo4_thum.jpg" ng-click="changeMainImage('img/photo4.jpg')" alt="" />
			</li>
			<li>
				<img src="img/photo5_thum.jpg" ng-click="changeMainImage('img/photo5.jpg')" alt="" />
			</li>
			<li>
				<img src="img/photo6_thum.jpg" ng-click="changeMainImage('img/photo6.jpg')" alt="" />
			</li>
			<li>
				<img src="img/photo7_thum.jpg" ng-click="changeMainImage('img/photo7.jpg')" alt="" />
			</li>
			<li>
				<img src="img/photo8_thum.jpg" ng-click="changeMainImage('img/photo8.jpg')" alt="" />
			</li>
		</ul>
	</div>
	<div id="main">
		<img ng-src="{{imgSrc}}" src="img/photo1.jpg" alt="" />
	</div>
</div>

```

``` Javascript:main.js

// 初期表示
$scope.imgSrc="img/photo1.jpg";
		
$scope.changeMainImage=function(imgSrc){
	$scope.imgSrc=imgSrc;
};

```

　`#main img`のngSrcに設定した`imgSrc`に画像パスを設定しています。
　フォルダ一箇所だし何ならファイル名も連番だしでもうちょっとリファクタはできそうですがそこは主題ではないので放置。

## アニメーション効果で画像を滑らかに切り替える

　AngularJSでアニメーションを使う場合、angular-animate.jsを個別に読み込む必要があります。

``` HTML:index.html

<script type="application/javascript" src="../angular/angular-animate.js"></script>

```

``` JavaScript:main.js

angular.module('sample', ['ngAnimate']).controller('IndexController',
		[ '$scope', function($scope) {} ]);

```

　アニメーション効果は[琴線探査](http://kinsentansa.blogspot.jp/2014/03/angularjsngshownganimate.html)さんを参考にCSSで実装。
　imgタグを二つ用意して交互に切り替えることで実装しました。強引なのではなく柔軟なのだと思っていただければ幸甚(´@ω@｀)

``` HTML:index.html

	<div id="main">
		<img ng-src="{{imgSrc1}}" ng-hidden="sw" ng-show="!sw" src="img/photo1.jpg" alt="" />
		<img ng-src="{{imgSrc2}}" ng-show="sw" ng-hidden="!sw" src="img/photo1.jpg" alt="" />
	</div>

```

``` JavaScript:main.js

$scope.changeMainImage=function(imgSrc){
	if($scope.sw){
		$scope.imgSrc1=imgSrc;
		$scope.sw=false;
	}else{
		$scope.imgSrc2=imgSrc;
		$scope.sw=true;
	}
	
};

```

　CSSで透過アニメーションかけつつ画像二枚を交互に出現させるソース。imgふたつは`position:absolute`に設定して重なるようになってます。
　詳しくはソースコード参照。

## 画像の追加に対応、スライド式ギャラリーに対応する

　しない
　CSSでスライドアニメーションってどうやるのボンジョルノ(´@ω@｀)
Webの制作の現場で使うAngularJSデザイン入門


　パクリじゃないですオマージュです。もしくはカバーです。
　かの有名なドーナツ本（[Web制作の現場で使うjQueryデザイン入門](https://www.amazon.co.jp/dp/4048913913/)）をAngularJSでコピーしていこうプロジェクトを開始しますヽ(´@ω@｀)ﾉ
　第1章と第2章はめんどくせえので第3章のサンプルのみ14種類。<DEL>HTMLとCSSは本題じゃないので基本同じです。</DEL> CSSでカバーする部分が大きいので「デザインは同じです」と訂正させてください。

## サンプル

　サンプルをgithub.ioドメインで公開しました。
　参考になれば幸甚：[Web制作の現場で使うAngularJSデザイン入門サンプル](https://perpouh.github.io/get-start-angular-design/)

## 目次

 - [CSS3セレクターでストライプテーブル](http://qiita.com/perpouh/items/2c87097741b7bfb879a2)
 - [スライド式イメージギャラリー](http://qiita.com/perpouh/items/51b052e40478b13957a2)
 - [なめらかアコーディオンパネル](http://qiita.com/perpouh/items/a6347f0e227bf16a2705)
 - [ポータルサイト風タブパネル](http://qiita.com/perpouh/items/96488398a7c4bd790b9e)
 - [個性的な3種類のツールチップ](http://qiita.com/perpouh/items/7c3da774685f758f4295)
 - ロールオーバー付きナビゲーションバー
 - 多階層対応ドロップダウンメニュー
 - Lightbox風モーダルウィンドウ
 - ドラッグ＆ドロップで動くフローティングウィンドウ
 - バリデーション付きメールフォーム
 - Amazon風カルーセルパネル
 - Ajaxでスムーズページング
 - Flashみたいなスライドギャラリー
 - 指で操作するスマホ用スワイプギャラリー

　詳しくは個別記事へ。
　ソースコードは[github](https://github.com/perpouh/get-start-angular-design)にて割とリアルタイム気味に公開しております。


　しかしあれだ、ドーナツ本、幅を揃えたかったのはわかるが見出し番号の全角半角混ざった表記だけは受け付けないエンジニア殺すつもりか幅を揃えたいだけならゼロ埋めにしてくれ(ワンブレス)

## メモ
[AngularJSとBootstrapを組み合わせるならAngularStrap](http://qiita.com/nakamura-to/items/4d963a52bceef1b8c741)
Issue, Pull-Request, Contribute Templateの作り方

結構前の記事になってしまいますが、Github上でIssue, Pull-RequestのTemplate機能を使うことが可能になりました。
https://github.com/blog/2111-issue-and-pull-request-templates

これを社内で試してみたところ、結構評判が良かったので、テンプレート作成方法を紹介します。

## 作り方
以下のルールでテンプレートファイルを作成し、それらを指定したパスに置けばテンプレート機能を使うことができます。

### テンプレートファイル名

| Template | ファイル名 | できること |
|:-:|:-:|:-:|
|  Issue | ISSUE_TEMPLATE.md  | Issue作成時のテンプレート　|
| Pull-Request | PULL_REQUEST_TEMPLATE.md  | Pull-Request作成時のテンプレート |
| Contribute  | CONTRIBUTING.md  | Issueへのコメント、PullRequest時に guidelines for contributing というリンクが表示される |

### テンプレートファイルを置く場所
- ルートディレクトリに置く [こんな感じ](https://github.com/vivayashi/template)
- ルートディレクトリに設置した.githubディレクト内に置く [こんな感じ](https://github.com/vivayashi/template/tree/master/.github)



### テンプレートが適用されると
例えばissue作成時に、ISSUE_TEMPLATE.mdの内容が入力された状態で表示されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/55807/ca55c8f1-aa39-2265-2ac9-04a8a7a74500.png)
CONTRIBUTING.mdの案内もちゃんと出てますね。

## Template機能使用時の注意
これらの機能を反映させるには対象リポジトリの**Default branch**上にテンプレートファイルが置かれている必要があります。
![defaultbranch.png](https://qiita-image-store.s3.amazonaws.com/0/55807/8cd97b27-7835-d826-ec38-d16286fea2f8.png)

Default branchとは、`git clone`した際に最初に設定されていたり、Pull-Request時のBase branchとして設定されているブランチのことです。
初期設定ではmasterに設定されているので、masterにテンプレートファイルが置かれればテンプレート機能を使うことができます。
運用上、Default branchが別のブランチに設定されている場合は、そのブランチ上にテンプレートファイルを設置するようにして下さい。
swift TabieViewにスワイプ削除を追加＆文言変更


### スワイプ削除機能を追加

```:HistoryViewController.swift
  
    // スワイプ削除
    func tableView(tableView: UITableView,canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool
    {
        return true
    }

```

### Deleteとでる部分のメッセージを変更する場合。   

```:HistoryViewController.swift
    override func tableView(tableView: UITableView, titleForDeleteConfirmationButtonForRowAtIndexPath indexPath: NSIndexPath) -> String? {
        return "削除"
    }
   
```

![image](https://qiita-image-store.s3.amazonaws.com/0/37406/cd66937f-1d6f-1b58-d267-d93acdbc07e7.png)


### スワイプ削除時の処理

``` :HistoryViewController.swift
    // 削除処理
    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        if editingStyle == UITableViewCellEditingStyle.Delete {
 
            
            // これはRealmSwiftでデータを削除しているケース
            let deleteHistory = self.result![indexPath.row]
            // トランザクションを開始してオブジェクトを削除します
            try! realm!.write {
                realm!.delete(deleteHistory)
            }
            
            
            // TableViewを再読み込み.
            self.table.reloadData()

            
        }
    }
```
[メモ] C言語: スタックをごにょごにょして関数からの戻り先を変える


[ここでコメントに書いたもの](http://qiita.com/kokono/items/7298b1ba0dafeec20d67#comment-001e287c2c696a1a1dae
)を記事として、ちゃんと終了できるようにしたものをメモっとく。

## 環境
- https://ideone.com/ の `C`

## 簡単な説明
- `main()`から、`f1()`を呼ぶ。
- `f1()`には、`f2()`を呼ぶコードはないけど、戻ろうとしていたアドレスを保存して、ウマいとこに、`f2()`のアドレスをつっこむ。
- `f2()`は、`f3()`を呼んだあと、`printf`する。
- だが、`f3()`でウマいところに、↑で保存したアドレスをつっこむので、`f3()`終了後、そっちにいくので、`f2()`の`printf`は呼ばれない。

## ソースコード

https://ideone.com/tyJAwg

```c:かなり環境依存
#include <stdio.h>

unsigned long adr_bak; 

void f3()
{
    unsigned long*p;
    p = (unsigned long*)&p;
    int i;
    for (i = -1; i < 5; i++)
    {// スタックの周辺をダンプしてみて、戻り先っぽいところを見つける..
       printf("f3() %d: %08x(%p)\n", i, *(p + i), p + i);
    }    

    printf("Hello in f3!\n");
    // 戻り先のアドレスをmainからf1をよんで帰ってくるところへ。
    *(p + 4) = adr_bak;
}

void f2()
{
    f3();    
    printf("Hello in f2!\n");
}
void f1()
{
    unsigned long*p;
    p = (unsigned long*)&p;
    int i;
    for (i = -1; i < 5; i++)
    {// スタックの周辺をダンプしてみて、戻り先っぽいところを見つける..
        printf("f1() %d: %08x(%p)\n", i, *(p + i), p + i);
    }
    /// 戻り先のアドレス保存
    adr_bak = *(p + 4);
    // 戻り先のアドレスをf2()へ。 
    *(p + 4) = (unsigned long)f2; 
}

int main()
{
    printf("main:%p, f1:%p, f2:%p, f3:%p\n", main, f1, f2, f3);
    f1();
    printf("Hello in main()!\n");
}
```

```txt:実行例
Success	time: 0 memory: 2168 signal:0
main:0x80483c0, f1:0x8048510, f2:0x80485c0, f3:0x8048560
f1() -1: 08048510(0xff818e48)
f1() 0: ff818e4c(0xff818e4c)
f1() 1: 08048560(0xff818e50)
f1() 2: ff818f14(0xff818e54)
f1() 3: 55804000(0xff818e58)
f1() 4: 080483f7(0xff818e5c)
f3() -1: ff818e5c(0xff818e3c)
f3() 0: ff818e40(0xff818e40)
f3() 1: 080483c0(0xff818e44)
f3() 2: 08048510(0xff818e48)
f3() 3: 55804000(0xff818e4c)
f3() 4: 080485c8(0xff818e50)
Hello in f3!
Hello in main()!
```
Resetting your password in Deis Workflow

# v1 or v2 ?

This article is written for Workflow (v2).
But you can reset your password in Deis(v1) by almost same procedure.

# case: you are not an administrator

Ask your administrator to exec `deis auth:passwd --user {your_account}`

# case: you are the one and only administrator

Ssh into your kube-master node and exec `manage.py` in the controller.

```shell-session
$ kubectl exec --namespace=deis -it deis-controller-3568054663-x4jk5 ./manage.py shell
Python 3.5.2 (default, Jul  5 2016, 12:43:10) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
```

Next, Type the script in Python like this.
 
```
>>> from django.contrib.auth.models import User
>>> u = User.objects.get(username__exact='{your_account_name}')
>>> u.set_password('{new_password_plain_text}')
>>> u.save()
>>> 
```

You can logout by pressing `Ctrl-D` after executing `u.save()`.

## Note

`deis-controller-3568054663-x4jk5` is the pod name.
Modify `{your_account_name}` and `'{new_password_plain_text}` as you like.

# See also

* [Request: `deis auth:passwd` takes --user argument for admins to change user passwords #3292](https://github.com/deis/deis/issues/3292)
iOSからSMBでファイルサーバへ接続する


やりたいことはiOSからSMBでWindowsファイルサーバにファイルを保存する。
フルスクラッチで実装したわけではなく、ライブラリを使用してみたその検証です。

#tango
https://github.com/38leinaD/tango
・SMB1.0で接続
・３ウェイハンドシェイク認証に非対応なのでWindows側はXPまで
・C言語

ライセンスはBSD
認証周りに手を入れられるならば使える。
ビルド時にはARCを使わないようにする。

#SMB4ios
http://sourceforge.net/projects/smb4ios/?source=navbar
・SMB1.0
・3ウェイハンドシェイクで認証。Windows7以降でも大丈夫
・接続先IPアドレスがXXX.XXX.XXX.XXXと全15文字を想定している。
→192.168.0.1とかだとリクエストヘッダが４バイト分ズレてしまい、認証でコケる。
→IPアドレスを0埋めするとサーバ見つからない。ヘッダ情報の接続先以降を４バイトオフセットしてあげると認証通った。
→ファイル一覧まで取得できることを確認。
→ファイル書き込み、読み込みは実装されていない。
・C言語

ライセンスは無いようなことがかかれているが使用してるntlmライブラリがLGPLなので結局LGPL。
ビルドはARCなしで、arm64off、ビットコードOFFにする。

#結論
そのまま使えるライブラリは無い。
SMBプロトコルに自信がある人でなければやめたほうが良い。
Quantum Chemistry - Postulates of Quantum Mechanics 1: Wavefunction

関連 http://qiita.com/7of9/items/d3a1799928734375f34f

CG分野で使われるSpherical Harmonics。自分の数値シミュレーション計算に用いたいと思い調べると、量子化学の講義にたどり着く。

短く分かりやすそうな159本のビデオを少しずつ消化中。

Quantum Chemistry - Postulates of Quantum Mechanics 1: Wavefunction
https://www.youtube.com/watch?v=ppvk2hSYcG4&index=24&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh

- Postulates とは何か?
  - trueとして証明されていない
  - trueとして考えられている(given)
  - predictionの妥当性を見てチェックされる
- 白文字
  - 量子化学のpostulateの例
  - 系の状態はプサイ(r,t)によって完全に特定される
     - r: 位置ベクトル
         - 1次元だとx
         - 3次元だと(x,y,z)
     - t: 時刻
- 緑の式
  - プサイ*(x)とプサイ(x)と微小体積dx dy dzの積
  - probability that particle is in volume element dx dy dz at r at t
  - 粒子が微小体積dx dy dz内、位置r、時間tにある確率
      - 余談: probability particle に見えるが違ってprobability that particle ...でthatを省略している
- 紫の文字
  - Measurable propertiesのことをObservableと呼ぶ
  - 観測可能なプロパティ
      - energy
      - momentum
      - position
      - angular momentum
      - kinetic energy
      - potential energy
      - など
- ピンクの文
  - もしプサイ(r,t)が分かれば観測可能なすべての特性が分かる @ 量子力学
- 黄色の式
  - 初期の位置(r0)と初期のmomentum(p0)とForce()が分かれば
  - trajectory (r(t))が分かる @ 古典力学
- 右上水色の式
  - 全空間においてプサイ*(r,t)とプサイ(r,t)の積の積分は1となる
  - 3次元なので積分の記号(∫)は3つある
- オレンジの式
  - 3次元の別の表現
  - Rの太字(実数のこと @ 工学における特殊関数 p10)
  - Rの太字の右上3は3次元を表す
  - dtauはdx dy dzのこと (左側の紫の式)
      - n次元に拡張した場合は右側の紫の式になる
- プサイ(r, t)は"normalizable"でないといけない
  - 規格化可能 (1にできる)
  - それは"square integral"でないといけない
- 紫の式
  - square integralの式
  - 二乗した値の積分が固定値になる (無限大にならない)
  - cの絶対値は無限大以下、ということでsquare integralを意味する
技術英語 > We're here Today to ... / We [are all here today] because something has been taken from us.

LOEの聞いているエピソードで here を使った例文があったが、hereで検索すると、here, thereなどでひっかかり例文検索を断念した。

記憶をたよりにしていくとVoyagerのエピソードででクルーが集まって話をしようとしている場面がある。Janeway艦長が以下のように始める。

> We're here today to ...

「我々は今日...をするために集まりました。」

会議などの冒頭で使うのでもいいだろう。

、という文章を書いていてふと検索したら見つかった。

@ LOE > August 1, 2003
http://www.loe.org/shows/shows.html?programID=03-P13-00031
> We <font color=red>are all here today</font> because something has been taken from us. In our hearts we feel some pain. What we knew, what we loved, we know will be no more.

EV1という電気自動車プロジェクトの撤退関係。
Pesterで自作ModuleをUnitTestする際にMockを使う方法

# ちょっとタイトルで何が言いたいのかわからない
自作module内で定義した関数で他のサービス等に依存するCmdlet(ex. `Invoke-WebRequest` )を使用する際に、それをテストする方法で少しつまづいた、というお話です。

# 検証環境
* OS: Windows10 Pro
* Powershell Version: 5.0
* Pester Vesion: 不明……
 - VisualStudio2015のPowerShell Tools for Visual Studio2015 Ver.3.0.399付属のもの

# 結論
`Describe` を `InModuleScope "{モジュール名}"` に内包することで実現できます。

```posh

# たとえばこういう階層でコードがあったとする。。。
# root/
# ├ src.ps1
# ├ modules/
# │ └ module.psm1
# └ tests/
# 　├ src.tests.ps1
# 　└ module.tests.psm1

# この例でやりたいこと:
# 1. module.psm1ではGet-IsSunnyDay関数を定義する。
# 2. Get-IsSunnyDayは、Invoke-WebRequest Cmdletを使用してお天気情報APIへアクセスし、「晴れ」が返されれば$trueを、それ以外の天候が返されれば$falseを、サービスが停止されている等で HTTPSTATUSCODE 200 以外が返された場合は例外を投げる仕様とする。
# 3. このテストではお天気情報APIがもしも死んでしまった場合、ちゃんと例外が投げられるかどうかを確認したい。……ので、お天気APIへリクエストを投げるInvoke-WebRequestをMockしたい。

# こう書くとうまくいく
Get-Module "モジュール名" | Remove-Module -Force
Import-Module "モジュール名またはモジュールファイルへの相対パス" -Force
InModuleScope "モジュール名" {
    Describe "Get-IsSunnyDay" {
        Context "Exception" {
            It "お天気情報APIが死んでる場合例外が投げられる" {
                Mock Invoke-WebRequest { return @{StatusCode=404} }
                { Get-IsSunnyDay } | Should Throw
            }
        }
    }
}

# うまくいかなかったのはこちら
Import-Module "モジュール名またはモジュールファイルへの相対パス" -Force
Describe "Get-IsSunnyDay" {
    Context "Exception" {
        It "お天気情報APIが死んでる場合例外が投げられる" {
            # ちなみにMockの位置をItの外、Contextの外に出しても、Mock -ModuleName "モジュール名"と指定してもうまくいきませんでした。。。
            Mock Invoke-WebRequest { return @{StatusCode=404} }
            { Get-IsSunnyDay } | Should Throw
        }
    }
}


```

# ちなみに
1. 今回は `Invoke-WebRequest` を例にしましたが、それに限らず、例えば `ls (Get-ChildItems)` 等、色々なCmdletをMockできるみたいです。
2. UnitTestの対象とするファイルが `.ps1` であれば、このような方法はとらなくてもよいようです。 (逆に、モジュールをテストする場合は必須になるのかな。。。)

# 参考にしたサイト様 / 記事等
+ Testing Script Modules with Pester - Hey, Scripting Guy! Blog (technet.microsoft.com)
https://blogs.technet.microsoft.com/heyscriptingguy/2015/12/17/testing-script-modules-with-pester/

+ Unit Testing within Modules - GitHub pester/Pester
https://github.com/pester/Pester/wiki/Unit-Testing-within-Modules
WebAudioAPIの使い方(0)

# WebAudioAPIの使い方の超入門編
## よく使うオブジェクト
### AudioContext
WebAudioAPIに関するオブジェクトをすべて管理するもの。
音源などもAudioContextを通して作られたオブジェクトを通じて行う。
### AudioNode
connectメソッドを使って他のAudioNodeに接続できるもの接続の解除であるdisconnectメソッドも持っている。
実際に使うのはこれらを継承した音源やエフェクターなどでそれを上流から接続してアウトプットにつなげる。
### AudioDistenationNode
出力先、AudioContext.destinationがブラウザの出力先を持っておりここに接続することで音を出す。

## 音を出す止める
```js:oscillator.js
// AudioContextはどこからでも使いたいからグローバルにする。
var audioCtx=new(window.AudioContext || window.webkitAudioContext)();

$(function(){
    var oscillator=audioCtx.createOscillator();
    oscillator.connect(audioCtx.destination);
    oscillator.start();

    $(document).on('click', function(){
	console.log(audioCtx);
// AudioContext.suspend/resumeを使うとソースは捨てられない。
        if( audioCtx.state=="running" ) audioCtx.suspend();
        else if( audioCtx.state=="suspended" ) audioCtx.resume();
    });
});
```
画面を読み込めばサイン波のC(440Hz)が流れる画面(document)をクリックすると止まる、もう一度クリックすると再び流れる。
oscillatorはAudioNodeを継承したOscillatorNodeでファイルを必要とせず音を再生できる。
これを出力先につなぐと音声が出せる。
パラメーターをいじることで音程/音色等はかえられる。
### 注意点
AudioContextはwebkitベンダープリフィックス付きもあるので対処をしておく。
(サポートしていないブラウザもあるので警告を出したほうがいいかもしれない)
oscillator.stop()でも音は止まるが音源は使い捨てなのでstopを呼ぶとそのoscillatorは使えなくなる。
AudioContext.suspendは停止状態なので捨てられない。
どっちがいいかは使い方によりそうである。

## どんなことが出来そうか
今回は音源はライブラリ提供のものを使ったがもちろん外部ファイルを使うこともできる。
foundfontを使ってMIDIを演奏しているサイトもある。
oscillatorでも自分で関数を定義も出来そうでエフェクターの種類もいろいろあるのでライブラリだけでどうにかなりそうな気もする。
<audio>要素や<video>要素も音源として使えるようなのでエフェクターの使いかたによってはブラウザだけで高性能な音楽プレイヤーになりそうである。
Analyzerというものがあり音声を可視化してくれる、それ以外にもいろいろ出来そうな、のでこれを使うと音声データの作成も捗るかもしれない。
## 参考にしたサイト
[MDN AudioContext 主要な要素はここから探せる](https://developer.mozilla.org/ja/docs/Web/API/AudioContext)
[MDN 利用例 利用例もシンプルでわかりやすく解説付きでわかりやすい](https://developer.mozilla.org/ja/docs/Web/API/Web_Audio_API/Using_Web_Audio_API)
[WebAudioAPIとsoundfontの利用例](http://imaya.blog.jp/archives/6531520.html)
やっぱり○○が好き（フロントエンド）

最近はBabelやSass案件ばかりですが、個人的にはもっと速く開発できる選択肢があると思っているので、そのまとめ。

## Sass → Stylus

- [公式](https://github.com/stylus/stylus/)

1. 透過的に変数とミックスインが使える（もちろん非透過的にも使える）
2. `gulp`不要で`npm script`だけでAuto Prefixingが行える（[kouto-swiss](https://github.com/leny/kouto-swiss)併用） 
3. タイプ数が一番少ない
4. Ruby由来ではなくNode発祥（[作者](https://github.com/tj)はExpressの人）

> Sassに比べるとエディタの補完機能が弱いけど、トータルで見た場合の時間的な差がばかにならないくらい大きい。（自分比）

```stylus:stylus
@import "components/*"

.foo
  clear fix
  line-height narrow
```

## Babel → Coffee

- [公式](http://coffeescript.org)

1. コンパイルに際してサポートブラウザを引き上げたりすることがない（自分たちがサポートしたいブラウザを自由に選べる）
2. セミコロンが要らない
3. 後置`if`や`unless`文が利用でき、読みやすいコードが書ける
4. ファットアローだけではなく、シングルアローも使える
5. 結局みんなES5を出力している

> とっととJS（ES5）を納品して、Coffee飲みに行きたい

```coffeescript:coffee
unless isNessesary then return

doSomething = ()->
  console.log('No need semi-colons')
```

## HTML手書き → Pug

- [公式](https://github.com/pugjs/pug-cli)

1. 記述量が半分で済む
2. 閉じタグ忘れとかのドジがない
3. 出力時の拡張子を変更できる（`.tx`他）
4. 変数とミックスインが使えるので、プログラマブル
5. 複雑なHTMLを静的に出力できるので、SEOに強い

> もとはJadeだったのに、[改名を余儀なくされ](https://github.com/pugjs/pug/issues/2184)てかわいそう

```jade:pug
- var $ = "block"

input(type="checkbox" class=$+"__element" name="foo" value="1")
```

## 以上です

出力結果を担保するので、手段はその時その時で最短なもので走り去りたい。コンパイル先を同一階層の同名出力にしておけば、後日これらをなかったことにもできる。`uglify`前の`HTML`と`JS`と`CSS`を残しておけば、未来の担当者がリバースエンジニアリングもできる。

> 爆速で改修できるのに、ノロノロ運転もったいない
Open AI GymでA3Cのコードを走らせてみる

過去７回で、Ubuntu14.04、CUDA、chainer、dqn、LIS、Tensorflow、Open AI Gymを順次インストールし、最後にOpen AI Gymのサンプルコードをいじりながら仕組みを学んだ。
http://qiita.com/masataka46/items/747fc12125958059b306

今回はOpen AI Gym上で第３者が作ったサンプルを走らせてみる。具体的にはこちらの方
https://github.com/coreylynch/async-rl
が作ったA3Cのサンプルコードを走らせてみる。
ちなみにA3Cのliteratureはこちら。
http://arxiv.org/pdf/1602.01783v1.pdf

##Requirementsを確認
Requirementsとして、TensorFlow、Gym、Gym's Atari environment、skimage、Kerasをあげている。足りないのはskimageとKerasなので、この両者をインストールする。

##skimageをインストール
まずskimageといのがわからん。初めて聞いた。画像関係っぽいが。ネットで調べるとこのサイト
http://nonbiri-tereka.hatenablog.com/entry/2014/11/27/102156
を見つけた。どうやらscikit-imageという画像処理系のライブラリだそう。OpenCVみたいなものか。このサイトに従ってインストールする。まずは

```
sudo pip install scikit-image
```

skimageのインストールは終了。

##Kerasをインストールする
次にKerasをインストールする。このサイト
http://ket-30.hatenablog.com/entry/keras/mnist
を見ると、pipで簡単にインストールできそうだ。

```
sudo pip install keras
・・・
Successfully installed keras-1.0.8 pyyaml-3.12 theano-0.8.2
```

theanoも同時にインストールされたようだ。

##A3Cのコードをcloneする
適当なディレクトリを作って、そこにcloneする。

```
git clone https://github.com/coreylynch/async-rl.git
```

##A3Cを走らせる
製作者の指示に従って走らせてみる。

```
python async_dqn.py --experiment breakout --game "Breakout-v0" --num_concurrent 8
```

すると、breakoutの画面が８つ表示され、うにょうにょと学習が始まった。CPUで走らせてるのか何なのか、chainer使った時のDQNより遅いね。
GLKTextureLoaderで画像が反転する場合の対処法


GLKitを使えばテクスチャのロードが簡単になりました。
しかしいざ使ってみると、画像の縦Vと横Uが逆になっていて困っていました。

ネットで調べたのですが、行列変換で対応するなどあって、そうするしかないのかなと諦めてましたが、
リファレンス見たらローディング時のOption指定で解決できたので共有します。

~~~swift
let textureInfo = try GLKTextureLoader.textureWithContentsOfFile(filePath!, options: [GLKTextureLoaderOriginBottomLeft:NSNumber(bool:true)])
~~~

> **GLKTextureLoaderOriginBottomLeft**
> This key specifies whether the image data should be vertically flipped to match OpenGL’s coordinate system. The value for this key is an NSNumber object that specifies a boolean value. If NO, the image data is not flipped. If YES, the image data is flipped before being loaded. If the key is not specified, the default value is NO.

OpenGLの座標システムに合うように垂直方向に画像をフリップします。
値はNSNumberのboolでtrue / falseを指定してください.
falseの場合はフリップしません。trueの場合は、読込の前にフリップします。
デフォルトではこの値はfalseです。

垂直と書いていますが、自分は水平方向も反転も治りました。

### 他オプションについて少し説明すると

#### GLKTextureLoaderApplyPremultiplication
アルファ値を事前にRGBに乗算しておくオプション。
圧縮形式の画像には使ってはいけないみたい。
デフォルトはfalse

#### GLKTextureLoaderGenerateMipmaps
テクスチャからミップマップを作成します。
trueを指定することで、全階層のミップマップを生成します。
ミップマップを生成した場合は、GL_TEXTURE_MIN_FILTERではなくGL_LINEAR_MIPMAP_LINEARを使うこと
デフォルトはfalse

##### ミップマップとは
同一画像だけどサイズが別の複数枚つかって、距離の遠い画像は、画質の荒い画像（メモリ消費の少ない）を表示し、距離の近い画像は画質の高い画像（メモリ消費の高い）を表示するといった、メモリ効率に役立つしくみです。

#### GLKTextureLoaderGrayscaleAsAlpha
グレイスケール画像の画像データをアルファ情報として扱うかどうかを指定する。
読込画像が画像がグレイスケール画像ではない場合はこのオプションは無視される。
デフォルトはfalse

##### グレイスケールとは
白から黒の間の色で構成された画像。
アルファ用として用いることが多く、単純な色抜きだったり、白の画像に対してグレイスケールをブレンドすることで、雲を表現したパーティクル系につかったり、ディスプレイスメントマップとしてシェーダーなどで使ったりされます。

#### GLKTextureLoaderSRGB
画像をsRGBデータとして扱うかどうかを指定する。
デフォルトはfalse
Android 7 で Vulkan を動かす

漢だったら Android 7 で Vulkan でレイトレーシングですね!

やりましょう!

できました.

![Screenshot_20160909-013219.png](https://qiita-image-store.s3.amazonaws.com/0/36275/b4935ef9-8bdf-db71-b0bd-4cf7459cf6c9.png)

コードは Sascha 先生の Vulkan サンプルを利用しました.
 
https://github.com/SaschaWillems/Vulkan

適当に SDK version を 24 にしたり, Windows でのビルド手順しかないので Linux/Mac でコンパイルする場合は適当に ndk-build とか ant を叩きましょう.

NDK r12b でコンパイル確認しました.

## 速度

Nexus 5X(Adreno 418) で 26 fps でした. 思ったほどは速くない...?

## TODO

* aobench vulkan やりたい
* **優秀な Vulkan 若人が, Android で Vulkan を自ら切磋琢磨し極めてくれるスキームを確立したい.**
LaravelでPHPMailerを導入してメール送信する手順

#初めに
PHPでメール送信したい場合はすぐに思いつくのは**mail()**関数だが細かい実装に陥る。Laravelではメール送信はもっと簡単にさせられて数行のコードでいけるようです。詳細に知りたい方は以下のリンクをご参照ください。

[Laravel > Mail](https://laravel.com/docs/master/mail)

その以外にあるもう一つのフレキシブルな方法が皆によく使われていると思います。それはPHPMailerというOpenSourceライブラリーです。

[PHPMailer](https://github.com/PHPMailer/PHPMailer)

Laravelのメール送信ライブラリーに慣れていないですがPHPMailerをこの前ずっと使っていて好きになったのでLaravelでもPHPMailerを使えるようにしたい方がいると思います。導入するのは難しくないですが素人に向けて手順を書かせていただきます。
#導入手順
ComposerでPHPMailerを導入するのができます。

```
composer require phpmailer/phpmailer
```

composerを使ったことがない方は以下のリンクに遷移してComposer.pharをダウンロードして自分が持っているLaravelプロジェクトにおいておいてください。composer.pharをプロジェクトのフォルダーにおいてからいかのように実行してphpmailerを導入します。

```
php composer.phar require phpmailer/phpmailer
```
#メール送信する
導入は完了したら通常にコーディングするだけでいいです。例えばControllerの中にGoogleのSMTPサービスを利用するsendMail関数は以下のように定義して

```php
//PHPMailer Object
$mail = new PHPMailer;

//Enable SMTP debugging. 
$mail->SMTPDebug = 3;                               
//Set PHPMailer to use SMTP.
$mail->isSMTP();            
//Set SMTP host name                          
$mail->Host = "smtp.gmail.com";
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;                          
//Provide username and password     
$mail->Username = "name@gmail.com";                 
$mail->Password = "super_secret_password";                           
//If SMTP requires TLS encryption then set it
$mail->SMTPSecure = "tls";                           
//Set TCP port to connect to 
$mail->Port = 587;                           

//From email address and name
$mail->From = "from@yourdomain.com";
$mail->FromName = "Full Name";

//To address and name
$mail->addAddress("recepient1@example.com", "Recepient Name");
$mail->addAddress("recepient1@example.com"); //Recipient name is optional

//Address to which recipient will reply
$mail->addReplyTo("reply@yourdomain.com", "Reply");

//CC and BCC
$mail->addCC("cc@example.com");
$mail->addBCC("bcc@example.com");

//Send HTML or Plain Text email
$mail->isHTML(true);

$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";

//Attachments
$mail->addAttachment("file.txt", "File.txt");        
$mail->addAttachment("images/profile.png"); //Filename is optional


if(!$mail->send()) 
{
    Log::info("Mailer Error: " . $mail->ErrorInfo);
} 
else 
{
    Log::info("Message has been sent successfully");
}
```

**smtp connect() failed** 
GMailのSMTPにアクセスする際に異常のエラーが発生したらまずローカル環境の設定を確認するのは必要となります。

- サーバーはアクセス可能状態であるかどうか：  ```ping smtp.gmail.com ```
- サービスはまだ生きているかどうか ``` telnet smtp.gmail.com 587 ```
- Gmail自体の設定はシステムからのアクセスを許可しているかどうか
    - https://myaccount.google.com/securityにアクセスして「Allow less secure apps」をONにしてください。（ログインは必要）

#参考リンク
- https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
- https://www.sitepoint.com/sending-emails-php-phpmailer/

以上です。
ViewでのpluckメソッドはN+1を引き起こす可能性があるので気をつける


## 具体例

例えば、CustomerテーブルとTelephoneテーブルがあり1つのCustomerがN個Telephoneテーブルを持つとする。
Customer一覧でそのCustomerが持ってる全てのTelephoneのtelカラムを一覧でカンマ区切りで表示したい場面があった時に

```customers_controller.rb
def index
  @customers = Customer.includes(:telephones)
end
```

```customers/index.html.slim
- @customers.each do |customer|
  = customer.telephones.pluck(:tel).join(', ')
```

とすると、コントローラーでincludesしてeager loadingしているにも関わらずN+1になる。

## 原因

pluckメソッドがSQLのselect文を発行するため。
そのため、Viewでループでcustomerのtelを参照するたびにselect文が発行されてN+1のクエリになります。


## 対策

`pluck(:tel)` を `map(&:tel)` に変える。それにより、本来の事前にロードされたtelephonesのtelを見るようになるため N+1を回避できます。

しっかりpluckメソッドの動きを把握すればハマらない問題でした。
Eclipse（Pleiades）で複数のGitHubアカウントを無理やり使う方法


# 結論

eclipse.iniに次の行を追加して再起動。

```ini
-Duser.home=.
```

その後、リポジトリ事に作成者、コミッターの情報を設定する。

「ウィンドウ => 設定」から「設定」ウィンドウを開き、「チーム => Git => 構成 => リポジトリ―設定 => リポジトリ」から対象のリポジトリを選択。
「エントリーの追加」ボタンをクリックする。
![b001.png](https://qiita-image-store.s3.amazonaws.com/0/81573/eda5a44b-4df1-9eec-a07a-a3e701d75a11.png)

「キー」に「user.email」を入力し、「値」に「作成者のメールアドレス」を入力し、「OK」をクリックする。
![b002.png](https://qiita-image-store.s3.amazonaws.com/0/81573/f9f9a521-06a5-992a-f6ad-b4103bac3b33.png)

再度「設定」ウィンドウで「エントリーの追加」ボタンをクリックする。
「キー」に「user.name」を入力し、「値」に「作成者名」を入力し、「OK」をクリックする。
![b003.png](https://qiita-image-store.s3.amazonaws.com/0/81573/9f1b1b04-8b8f-7a5b-3b45-3fcbda6177da.png)

「設定」ウィンドウで「OK」をクリックする。

# before, after

![a001.png](https://qiita-image-store.s3.amazonaws.com/0/81573/fffeaf87-c2ad-7ad6-ea8e-86128dd041f8.png)

![a002.png](https://qiita-image-store.s3.amazonaws.com/0/81573/e8ebcc12-e261-61a9-6778-50d428b322d7.png)

保管場所が変化していることが確認できます。
NodeJS-Android完璧なビルド方法&ビルド済Docker Image

from https://github.com/sjitech/build-nodejs-for-android-perfectly

NDKのstandalone toolchainでNodeJSをcross-compileする時に、一発成功した人はないでしょう。`--without-...`を指定したり、環境変数、GYPをいじったりしないと通らないですね。

いいニューズは、完璧にNodeJS for android-{arm,arm64,x86,x64,mipsel}をビルドする方法がありました。皆んなone lineコマンドです。ソース修正なし、機能制限なし！

しかも、ビルド済みのバイナリファイルもアップロードしました:https://github.com/sjitech/nodejs-android-prebuilt-binaries。

自分でdocker image `osexp2000/build-nodejs-android`を利用すれば、ビルド結果は見れるし、自分でソースを修正してコンパイルも素早くできる、そんなビルド環境dockerです。

詳しくは上記のURLを参照ください。

----

私はNDKのstandalone toolchainを便利に利用するために、[android-gcc-toolchain](https://github.com/sjitech/android-gcc-toolchain)を作る時に、テストとして、NodeJSのAndroid版をビルドしてみました。

前回のNodeJS Androidをビルドしてから2年前を経過した、もう大分改善された、すんなりビルド完了でしょうと思ったが、意外に、あれこれに怒られた。

一体どこで弾かれたのか、覗いて見たが、色々問題ですね、ほとんどはhost(現在利用中のマシン)側向けのコードを作成する時のエラーです。例えば、

1. [Mac]ar(.oを.aに合併するツール）の乱用。Android側向けの.oファイルをhost側の.oとして利用してしまった。
2. [Mac]-lrt: 存在しないlibrtへリンクしようとしている。Macはlibrtはない。
3. [Linux]-lpthread: どこかでlibpthreadをリンクするように指定し忘れたようです、変な"DSO command not found"エラーが出た。
4. [Mac/Linux]-m32: 32bitコードを作成するような指示-m32は一部指定、一部指定し忘れ、結局32bitと64bit混在でリンクエラーになった。

いずれも、一体NodeJS及び子プロジェクトのどこで設定間違ったのか、いちいち探すのは大変です。
GYP,CMake,autoconfいくつかビルドシステム混在しているようです、関節が多すぎ全部把握するのは難しい。

偶然に、思い出したアイデアは$PATH経由ar,gccなどコマンドのhookです。そこでオプションの増減をすれば、きっとうまく行く！試してみた、うまくできた。

こうして、色々整理して、android-gcc-toolchainツールを出来上がりました。
NDKのstandalone toolchainを自由に切り替え、素早く利用できるツールです。

今日はとりあえずここまで。
【JavaScript】画像などをランダムに表示する方法 

JavaScriptで画像などをランダムに表示する方法についてです。
表示させる内容を日替わりなどで変化させたいことがありますね。

次のようなコードを\<body\>タグ内の表示したい場所に記述します。

```js
<script type="text/javascript">
<!--

//赤字の箇所にランダムに表示したいものを列記します。（タグ可能。改行するのは不可）
//「' ',」で追加、最後のみカンマは不要。
var list = new Array(
'ランダム表示1',
'ランダム表示2',
'ランダム表示3'
);

var random_hyoji = Math.floor(list.length*Math.random());
document.write(list[random_hyoji]);

//-->
</script>
```


なお、上の方法だと直接HTMLに触れることになります。
ランダムに表示したいものを頻繁に変えるなら設定自体は別なファイルにしておいた方が楽でしょう。

その場合は、上の方法の最初の「\<script type="text/javascript"\>」「\<!--」と
最後の「//--\>」「\</script\>」の行を削除し、JavaScriptファイルとして保存します。（例 ファイル名「random_hyoji.js」）

そして\<body\>タグ内の表示したい場所で次のように記述します。

```js
<script type="text/javascript" src="random_hyoji.jsへのファイルパス"></script>
```
【jQuery】BODY内の特定の文字列を置換する方法

jQueryでBODY内の特定の文字列を置換する方法について紹介します。

次のように記述します。

```js
$(function(){
    $('.クラス名').each(function(){
        var txt= $(this).html();
        $(this).html(txt.replace('変更前の文字列','変更後の文字列'));
    });
});
```


replace関数の引数には正規表現も使えます。
詳しくはJavaScriptの仕様を確認しましょう。
[javascrit replace - Google 検索](https://www.google.co.jp/search?q=javascrit+replace&ie=UTF-8&oe=UTF-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a#hl=ja&q=javascript+replace&rls=org.mozilla:ja:official&spell=1)