OmniAICreator/Qiita-1.07M huggingface dataset:
プレミアムフライデーを求めるメソッドを作った


2017年2月24日金曜日から始まったプレミアムフライデー。賛否両論激しいシステムですが、何がともあれ休みが増えることはよいことですね。みなさんは初のプレミアムフライデーは午後3時に退社できましたか? __わたしはできませんでした(´・ω・｀)__  定時退社すらできなかったぜふぁっきん(´・ω・｀)

そこで(?)プレミアムフライデーを計算するメソッドを作っておきました。ご活用ください。

```java

import java.util.Calendar;

public class PremiumFridayUtils {
    
    /**
     * 指定した月のプレミアムフライデーの日を求める。プレミアムフライデーが存在しない月の場合は-1を返す。
     * @param year 年 (1..*)
     * @param month 月 (1..12)
     * @return 指定した月のプレミアムフライデーの日 (1..31)
     */
    public static int getPremiumFriday(int year, int month) {
        // yearは正の数、monthは1以上12以下をそれぞれ満たす必要がある。
        if (year < 1 || month < 1 || month > 12) {
            throw new IllegalArgumentException();
        }
        
        // プレミアムフライデーの実施は2017年02月以降。
        if (year < 2017 || (year == 2017 && month == 1)) {
            return -1;
        }
        
        // 対象の月の最終日から1日づつ金曜日かどうか判定し、最初に金曜日と判定された日が
        // その月の最終金曜日=プレミアムフライデーとなる。
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month - 1);
        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
        
        while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.FRIDAY) {
            calendar.add(Calendar.DATE, -1);
        }
        
        return calendar.get(Calendar.DAY_OF_MONTH);
    }
        
    public static void main(String[] args) {
        // 2017-2019年のプレミアムフライデーを求めて出力する。
        for (int year : new int[]{2017, 2018, 2019}) {
            for (int month = 1; month <= 12; month++) {
                int day = PremiumFridayUtils.getPremiumFriday(year, month);
                if (day != -1) {
                    System.out.printf("%d-%02d-%02d\n", year, month, day);
                }
            }
        }
    }
}
/*
2017-02-24
2017-03-31
2017-04-28
2017-05-26
2017-06-30
2017-07-28
2017-08-25
2017-09-29
2017-10-27
2017-11-24
2017-12-29
2018-01-26
2018-02-23
2018-03-30
2018-04-27
2018-05-25
2018-06-29
2018-07-27
2018-08-31
2018-09-28
2018-10-26
2018-11-30
2018-12-28
2019-01-25
2019-02-22
2019-03-29
2019-04-26
2019-05-31
2019-06-28
2019-07-26
2019-08-30
2019-09-27
2019-10-25
2019-11-29
2019-12-27
*/

```
（個人メモ）rubyでcsvファイルを読み書きする時のテンプレート

# 概要
* rubyでcsvを読み書きする時、個人的によく使う書き方のメモ。
* __HEADER_ARRAY__ に出力したいカラム名を書いて、 __row_hash__ でカラム名をキーとしたハッシュを利用して出力する。
* 入力ファイル名は第1引数、出力ファイル名は第2引数。（省略した場合はそれぞれ、input.cscとouptput.csc）


## コード

```main.rb
require 'csv'

INPUTFILE = ARGV[0] || 'input.csv'
OUTPUTFILE = ARGV[1] || 'output.csv'

# ヘッダー
HEADER_ARRAY = [
  :name, :address, :message
  ]

def get_header_ordered_array(row_hash)
  row_array = []
  HEADER_ARRAY.each do |col|
    row_array.push(row_hash[col.to_sym])
  end
  row_array
end

CSV.open(OUTPUTFILE, 'w') do |csv|
  csv << HEADER_ARRAY
  row_hash = {}
  CSV.foreach(INPUTFILE, headers: true) do |row|

    # row_hash[:ヘッダーカラム名] = 出力
    row_hash[:name] = 'カラム１' + row[0].to_s
    row_hash[:address] = 'カラム２' + row[1].to_s
    row_hash[:message] = 'カラム３' + row[2].to_s

    csv << get_header_ordered_array(row_hash)
  end
end
```

## 使い方
* 入力ファイル
 
```input.csv
"id","kudamono","sakana"
1,"ringo","iwashi"
2,"mikan","sanma"
3,"banana","azi"
```

* 実行方法

```console
$ ruby main.rb
```

* 出力ファイル

```output.csv
name,address,message
カラム１1,カラム２ringo,カラム３iwashi
カラム１2,カラム２mikan,カラム３sanma
カラム１3,カラム２banana,カラム３azi
```
「けものフレンズ」風のフォントができたよ！たっのし...うーん。

```
Update:
* 20170226, フォントのデモ画像を差し替え、CalligraphrのAdjust Baseline機能の説明を追加
```

## TL;DR

* フォントを作るのは決して「たっのしー」ことではなかった。高度な文字組の知識と経験が要求される職人的な作業であり、**片手間にできるものではなかった** のだ。。。
* 成果物はウェブフォントとして使用するには `letter-spacing` や `font-size` などを組み合わせないとバランスが悪い代物になってしまったが、クリエイティブの一部に数文字使用するだけならPhotoshopやIllustratorで補完できそうだ。
* **ぎりぎり脳が溶けそうだった** （後述）が、とりあえず完成したことにして記事化。

## 成果物

*「まだいろいろ変なところはあるけど、その辺は直してPull Requestしてくれたらうれしいな！」*

![Screen Shot 2017-02-26 at 11.55.10 PM.png](https://qiita-image-store.s3.amazonaws.com/0/105252/dbc3c890-b6c7-35ab-cb88-aaaf584b140f.png)

ダウンロードは https://github.com/kyoyababa/font-FriendsFu から。

## フォントファイルの作り方

フォントの作り方にはいくつか方法があるが、最も簡単にできる（であろう）サービスとして [Calligraphr](https://www.calligraphr.com/) を紹介したい。

### Calligraphr

PhotoshopやIllustratorで必要な文字をベクタで組み、アップロードするだけでフォントファイル化してくれる。

![Screen Shot 2017-02-26 at 5.19.30 PM.png](https://qiita-image-store.s3.amazonaws.com/0/105252/0972f27b-16c0-7cba-e150-0dd88ba92aa4.png)

## フォントファイル作成の流れ

### 1. Calligraphrからテンプレートをダウンロード

アカウントを作成し、指示に従ってテンプレートを作成・ダウンロードできる。今回対象にしたフォントセットは以下の通り。

![Screen Shot 2017-02-26 at 6.38.52 PM.png](https://qiita-image-store.s3.amazonaws.com/0/105252/2031288a-a149-845b-a6da-fb7a18d436bb.png)

### 2. ざっくりとパーツを作成

書道で「永」にあらゆる規則が含まれているという例のように、ひらがなとカタカナにも一定の構成要素があるので、ざっくりとパーツを作ってみる。

![Screen Shot 2017-02-20 at 12.52.52 AM.png](https://qiita-image-store.s3.amazonaws.com/0/105252/b5dff7d4-4103-fd78-0116-18de9d92e465.png)

### 3. ざっくりと下書き、ベクタパスの作成

雰囲気を掴むためにざっくりと下書き。

![image1.JPG](https://qiita-image-store.s3.amazonaws.com/0/105252/8d0f11c9-07a6-21ea-1094-8d74770e5a6f.jpeg)


そのあと、まずは全体のバランスとかは気にせずに文字を組んでいってみる。
（テンプレートに「PaintFont.com」と記載があるが、これはCalligraphrの以前のサービス名。）

![Screen Shot 2017-02-20 at 12.52.22 AM.png](https://qiita-image-store.s3.amazonaws.com/0/105252/55e64b8d-bcfe-39c2-c683-5fa20852502e.png)

### 4. 文字ごとにベクタパスを調整し、幅・高さ・各要素の太さなどを微調整

この作業が **かなりしんどい** 。冒頭で「片手間にはできない」と述べたのは主にここが原因だ。実際の成果物を見てもわかるとおりただでさえバランスの取り方のルールに精度が要求されるので、ここまでたどりつくのにかなりの時間を使った。

### 5. Calligraphrに成果物をアップロードし、フォントファイル化。

Calligraphr内でもそれぞれの文字の大きさは調整できるが、素人であればおそらく一発でうまくいくことはないだろう。今回の場合は、何度かアップロードを繰り返しながら、「まあ文章として読むことはできる」までに数回のトライアンドエラーが必要だった。

### 6. Adjust Baseline

このサービスの **すごーい！** なところは、ビルド時にフォントサイズとbaselineを細かく調整できるところだ。（ちょっとレスポンスが不安定だけど）Material UIだし、いい感じに操作できる。

![Screen Shot 2017-02-26 at 11.12.32 PM.png](https://qiita-image-store.s3.amazonaws.com/0/105252/6cf1ba99-b89b-89ad-22b0-1d93d73c7e9f.png)

### 最後に

いざフォントを作り始めると、**ゲシュタルト崩壊がひどく** 何度か体調を崩した。文字に襲われる夢を何度か見たし、特に今回の場合はかなりぶっ飛んだフォントを作っていたので、ひらがながまともに読めなくなりそうなこともあったが、とりあえずリリース。

これをフォント制作の嚆矢とするのはどうかと思うけど、まずは少しずつ改修していったり、気長にPull Requestを待ったりしてみようかなと思う。
[Visual Studio Code][Python][Windows] VSCodeのタスク/デバッグ出力でのPythonの日本語文字化け対応

デバッグ時の日本語出力が文字化けして困ったので対応方法をメモ
どうも出力時に使われる端末がUTF-8ではないらしいです。

# 環境

+ Windows 10
+ Visual Studio Code 1.9.1
+ Python 3.5.1 32bit

VSCode 拡張機能：

+ [Python - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=donjayamanne.python)

# 1.タスクの出力の日本語が文字化けする

TODO: 未解決（Issueには挙がってるようです）

[Tasks should support specifying the output encoding · Issue #3550 · Microsoft/vscode](https://github.com/Microsoft/vscode/issues/3550)

タスクの出力も端末に流すようにすれば解決するようなコメントも見かけました。（未検証）

[Run build task fails · Issue #20152 · Microsoft/vscode](https://github.com/Microsoft/vscode/issues/20152)

## [追記] Pythonの標準出力の設定を変更する

以下の設定を加えることでも対応が可能でした

```py3:標準出力のエンコーディングの変更
import sys
import io

sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8')
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
```

[Python3でUnicodeDecodeErrorに遭遇したときのTODOリスト - Qiita](http://qiita.com/narupo/items/c6ea890c485fecee440a)

# 2. デバッグ出力の日本語が文字化けする

launch.jsonに以下のような設定があることが前提です。（初期状態でデバッグの歯車マークを押すと生成されます）

```json:launch.json
        {
            "name": "Integrated Terminal/Console",
            "type": "python",
            "request": "launch",
            "stopOnEntry": true,
            "pythonPath": "${config.python.pythonPath}",
            "program": "${file}",
            "cwd": "null",
            "console": "integratedTerminal",
            "debugOptions": [
                "WaitOnAbnormalExit",
                "WaitOnNormalExit"
            ]
        },
```

![1.png](https://qiita-image-store.s3.amazonaws.com/0/37721/6e6d9b4f-0cd7-95ff-0511-162912ed9a74.png)

デバッグで、`Integrated Terminal/Console` を選択します。
一度実行して、表示された端末で以下を実行します。

```console:端末をUTF-8に修正
端末> chcp 65001
```

これで以後の日本語出力は問題ないはずです。（端末は使いまわされますが、もし閉じてしまったら再度実行してください）

# 参考
[Visual Studio Code - Visual Studio CodeのOUTPUTが文字化けする(42828)｜teratail](https://teratail.com/questions/42828)
深層学習 第7章 再帰型ニューラルネット

[第6章]に引き続き、深層学習(青イルカ本)の第7章を読み進めていく。

# 本章の概要
これまではサンプルの次元が固定のニューラルネットを扱ってきた。
しかし本章では、系列データの分類問題を扱う。
系列データとは、個々の要素が順序付きの集まりとして与えられたものであり、サンプルごとに系列の長さが異なる。

こうした系列データを扱うために以下のネットワークを使っていく。

* Recurrent Neural Network（RNN）
    * 系列長が異なるサンプルの予測・学習
* Long Short-Term Memory(LSTM)
    * 系列長が非常に大きいデータの予測

# RNN
## RNNとは？

内部に閉路を持つニューラルネットの総称。
RNNは、過去のすべての入力から１つの出力への写像を表現する。

![rnn3.png](https://qiita-image-store.s3.amazonaws.com/0/53193/b6eb4d61-8f2a-c55d-a826-6776912a2688.png)

#### 入出力定義

* 入力層ユニット
    * 入力 $\boldsymbol{x^t} = (x_i^t)$
* 中間層ユニット
    * 入力 $\boldsymbol{u^t} = (u_j^t)$
    * 出力 $\boldsymbol{z^t} = (z_j^t)$
* 出力層ユニット
    * 入力 $\boldsymbol{v^t} = (v_j^t)$
    * 出力 $\boldsymbol{y^t} = (y_j^t)$

#### 重み定義

* 入力層と中間層間の重み $\boldsymbol{W^{(in)}} = (w_{ji}^{(in)})$
* 中間層から中間層への帰還路の重み $\boldsymbol{W} = (w_{jj^{\prime}})$
* 中間層と出力層間の重み $\boldsymbol{W^{(out)}} = (w_{kj}^{(out)})$

## RNNの順伝播計算は？

### 中間層の入力

時刻 $t$ における中間層の各ユニットへの入力は、
$t$ に入力層から伝達されるもの　+ 時刻 $t-1$ の中間層の出力、となる。
$$
u_j^t = \sum_{i} w_{ji}^{(in)} x_i^t + \sum_{j^{\prime}} w_{jj^{\prime}} z_{j^{\prime}}^{t-1}
$$

### 中間層の出力

中間層の出力は、活性化関数 $f$ を施したものとなる。
$$
z_j^t = f(u_j^t)
$$
よって、
$$
\boldsymbol{z_t} = \boldsymbol{f}(\boldsymbol{W}^{(in)} \boldsymbol{x}^t + \boldsymbol{W} \boldsymbol{z}^{t-1})
$$

### ネットワークの出力

$$
\boldsymbol{y_t} = \boldsymbol{f^{(out)}}(\boldsymbol{v})^{t} = \boldsymbol{f^{(out)}}(\boldsymbol{W}^{(out)} \boldsymbol{z}^{t})
$$

## RNNの逆伝播計算は？

BTRL法とBPTT法がある。

* BTRL法
    * realtime recurrent learning
    * メモリ効率が良い
* BPTT法
    * backpropagation through time
    * 計算が高速
    * シンプル

簡単なので省略．

## RNNで勾配が不安定になるのはなぜ？

RNNは系列データの入力履歴の長さに応じて、層が深くなる。
層が深くなると、誤差逆伝播法により勾配を計算するとき、層を遡るにつれて勾配が消失するか爆発してしまう性質がある。
RNNでは短期的な記憶は実現できても、より長期にわたる記憶を実現するのは難しいと表現することもできる。

# LSTM

[わかるLSTM](http://qiita.com/t_Signull/items/21b82be280b46f467d1b)を参照すると，本当にわかる．

この[スライド](https://www.slideshare.net/shotarosano5/chapter7-50542830)も大変参考になる．

# CTC（Connectionist Temporal Classification）

入力と出力の系列長が異なるときに用いられる。
任意のRNNやLSTM等の出力に適用できる。

出力に何も出力しなことを示す空白を導入し、許容することで系列長の違いを吸収する。
これにより単語数や音素数が入力音声特徴ベクトルの数に比べて少なく、固定長でないような出力を表現できる。

## 前進・後退法(forward backward method)


正解文字列を順番に生成する確率を求める。
コスト関数：全パスの生起確率の負の対数尤度
[小ネタ] Stream を Iterable に変換する

# やりかた
例として `Files#write(Path, Iterable<? extends CharSequence> lines, OpenOption...)` を使います。

```java
Stream<String> stream = Stream.of("foo", "bar", "baz");
Iterable<String> iterable = stream::iterator;
Files.write(Paths.get("test.txt"), iterable);
```

あるいは

```java
Stream<CharSequence> stream = Stream.of("foo", "bar", "baz");
Files.write(Paths.get("test.txt"), stream::iterator);
```

ちなみに

```java
Stream<String> stream = Stream.of("foo", "bar", "baz");
// コンパイルエラー
Files.write(Paths.get("test.txt"), stream::iterator);
// これなら通る
Files.write(Paths.get("test.txt"), (Iterable<String>)stream::iterator);
```

# 背景と注意点
Stream/BaseStream は `iterator()` というメソッドを持ちますが Iterable を実装していません。`Iterable#iterator()` は繰り返し呼ばれる可能性があるというのが理由らしいです。
[`Iterable#iterator()`](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Iterable.html#iterator--)  のドキュメントにはイテレータを返すということしか書かれていませんが、[`BaseStream#iterator()`](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/BaseStream.html#iterator--) には終端操作である、つまり一度しか呼べない旨が明記されています。
参考: [Why is Stream<T> not an Iterable<T> ? ](http://mail.openjdk.java.net/pipermail/lambda-dev/2013-March/thread.html#8876)

したがって、前掲の方法で変換したものを安易に Iterable を使用するクラスに渡すと、実装によっては実行時例外が発生する可能性があることを考慮しておいて下さい。
ActionScript3でAWS API Gatewayと通信

そのものズバリをコピペで動くように。
API GatewayはPOSTにしておくとラク:relaxed:
API_URL と API_KEY に、API Gatewayから払い出されたデプロイURLとAPIキーを代入しておく。
APIキーは、AWSのコンソールから、API Gateway内にある使用量プランの設定を忘れないように。

```ActionScript3
// API_URL API GatewayからデプロイされたURL
// API_KEY API Gatewayから発行されたAPIキー
// data    任意の値。Object型
var request:URLRequest = new URLRequest(API_URL);
request.method = URLRequestMethod.POST;
request.requestHeaders.push(new URLRequestHeader('x-api-key', API_KEY));
request.data = JSON.stringify(data);

var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, function(event:Event){
  trace('complete');
});
loader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, function(event:HTTPStatusEvent):void{
  trace('status');
});
loader.addEventListener(IOErrorEvent.IO_ERROR, function(event:IOErrorEvent):void{
  trace('token register error.');
});
loader.load(request);
```
Windowsでキーボードの速度の限界を突破する

長らく「これが出来ないからWindowsの常用は辛い…」と思っていたことの一つが今日解消しました．本当に長いことこれを実現する方法を探していました．

キーリピートの速度と，キーリピートになるまでの時間を短くするための方法です．

## TL;DR

コマンドプロンプト(管理者)を開いて以下を実行

```
reg add "HKEY_CURRENT_USER¥Control Panel¥Accessibility¥Keyboard Response" /v AutoRepeatDelay /d 170 /f
reg add "HKEY_CURRENT_USER¥Control Panel¥Accessibility¥Keyboard Response" /v AutoRepeatRate /d 9 /f
reg add "HKEY_CURRENT_USER¥Control Panel¥Accessibility¥Keyboard Response" /v BounceTime /d 0 /f
reg add "HKEY_CURRENT_USER¥Control Panel¥Accessibility¥Keyboard Response" /v DelayBeforeAcceptance /d 0 /f
reg add "HKEY_CURRENT_USER¥Control Panel¥Accessibility¥Keyboard Response" /v Flags /d 59 /f
```

## 普通のやり方と値の意味解説

Win + R で「ファイル名を指定して実行」に

```
regedit
```

と入力してレジストリエディタを起動した後(もちろん他の方法で起動しても構わないですがこれが一番説明が楽だったので)，

```
HKEY_CURRENT_USER¥Control Panel¥Accessibility¥Keyboard Response
```

のそれぞれの値を

- `AutoRepeatDelay` を `170` (デフォルト `1000`)
- `AutoRepeatRate` を `9` (デフォルト `500`)
- `BounceTime` を `0` (デフォルト `1000`)
- `DelayBeforeAcceptance` を `0` (デフォルト `1000`)
- `Flags` を `59` (デフォルト `126`)

に変更して再起動．

`AutoRepeatDelay` がキーを押しっぱなしにし始めてから連打状態に入るまでの時間(小さいほど速い)

`AutoRepeatRate` がキーの連打の間隔の時間(小さいほど速い)

`DelayBeforeAcceptance` は `1000` のままだと体感が全然変わらなかったのでちゃんと `0` にしないとダメそう

`Flags` の数値 `59` とデフォルトの `126` の意味は分からないです…

`BounceTime` は参考にした記事では弄ってなかったのですが，どうもこれを `1000` のままにしておくとキーが効かなくなることがよくあるのです…言葉では上手く言えませんが…

全てのキーの意味を知ってる人居ましたらコメント下さい．

ちなみに `170` と `9` というのは私の好みの調整なので，ここは各自で調整してください．

## 自動化

管理者モードでコマンドプロンプトを開いて

```
reg add "HKEY_CURRENT_USER¥Control Panel¥Accessibility¥Keyboard Response" /v AutoRepeatDelay /d 170 /f
reg add "HKEY_CURRENT_USER¥Control Panel¥Accessibility¥Keyboard Response" /v AutoRepeatRate /d 9 /f
reg add "HKEY_CURRENT_USER¥Control Panel¥Accessibility¥Keyboard Response" /v BounceTime /d 0 /f
reg add "HKEY_CURRENT_USER¥Control Panel¥Accessibility¥Keyboard Response" /v DelayBeforeAcceptance /d 0 /f
reg add "HKEY_CURRENT_USER¥Control Panel¥Accessibility¥Keyboard Response" /v Flags /d 59 /f
```

`/f` オプションは，既に存在する値を上書きしますか？yes/no という問いをすっ飛ばすためのオプションです．怖い人は `/f` を削って1行ずつ実行してください．

## Version

Windows 10 Homeでのみ試しています．Windows 10の他のエディションやWindows 7や8.1やWindows Serverのことは分かりません．

## References

- [Tech TIPS：コマンドプロンプトでレジストリを操作する - ＠IT](http://www.atmarkit.co.jp/ait/articles/0402/21/news005.html)
- [windows 7 - Keyboard - Repeat Rate/Repeat Delay values in Win7 - Super User](http://superuser.com/questions/388160/keyboard-repeat-rate-repeat-delay-values-in-win7)
- [コマンドプロンプト REG コマンド](http://pasofaq.jp/windows/command/reg.htm#nameid1)

## Special Thanks

- Sert
  - [Qiita](http://qiita.com/Sert)
  - [GitHub](https://github.com/sert-uw)
  - [Twitter](https://twitter.com/DemoSert)
KVMでLinux環境(Ubuntu, CentOS)を導入する

Linux上での仮想環境はDocker(コンテナ型)が流行りのようですが，様々な環境での動作をテストする時や，1から手順書のようなものを作る際にはKVMが役に立ちます．本投稿では，よく使うディストリビューションの環境を構築するコマンドと，管理用のコマンドをメモします．コピペで使えます．

# 実行コマンド
Ubuntu16.04(または14.04)上で実行する例を示します．
インストールする対象はos_locationによって変更します．

- Ubuntu 14.04 http://jp.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/
- Ubuntu 16.04 http://jp.archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/
- CentOS 7 http://ftp.iij.ad.jp/pub/linux/centos/7/os/x86_64/

```bash
# 導入
sudo apt-get install -y kvm qemu-system libvirt-bin bridge-utils virt-manager
sudo service libvirt-bin start

# 実行準備
workspace=~/workspace
image_name=linux_image_mytest
disk_size_gb=30
ram_size_mb=4096
os_location=http://jp.archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/

mkdir -p ${workspace}
cd ${workspace}

# 実行
qemu-img create -f qcow2 ${image_name}.img ${disk_size_gb}G
sudo virt-install \
  --name ${image_name} \
  --virt-type kvm \
  --disk ${image_name}.img,format=qcow2,bus=virtio \
  --accelerate \
  --ram ${ram_size_mb} \
  --vcpus 2 \
  --arch x86_64 \
  --graphics none \
  --location ${os_location} \
  --extra-args "console=ttyS0, 115200n8"
```
 仮想環境
# 種々の管理コマンド
作成した仮想環境の種々の管理コマンドを列挙します．
GUIではvirt-managerコマンドで同様の操作を行うこともできます．

## 仮想マシンの状態を確認する
```bash
sudo virsh list --all
```

## 仮想マシンに接続する
open-ssshをインストールしている場合は，consoleではなくSSHで接続することもできます．

```bash
sudo virsh start <machine_name>
sudo virsh console <machine_name> 
```
## 仮想マシンを終了する 仮想環境
```bash
sudo virsh shutdown <machine_name>
```

## 仮想マシンをクローンする

```bash
sudo virt-clone --original <original_machine_name> --name <machine_name> --file <image_path>
```
JavaでStream APIを使ってみる


```:java
public class Test {
	public static void main(String[] args) {
		List<Integer> sales = new ArrayList<>(Arrays.asList(12, 30, 22, 4, 9));
		for (Integer sale : sales) {
			if (sale % 3 == 0 ) {
				System.out.println(sale);
			}
		}

		sales
		.stream()
		.filter(e -> e % 3 == 0)
		.forEach(System.out::println);

		sales
		.stream()
		.filter(e -> e % 3 == 0)
		.map(e -> "(" + e + ")")
		.forEach(System.out::println);
	}
}
```

結果；1番目と2番目は同じ。3番目でカッコをつけてみた。
スッキリ見える気がします。

```:java
12
30
9
12
30
9
(12)
(30)
(9)
```
Go言語でFizzBuzz!を書いてみた

# Go言語でFizzBuzz!
Go言語でFizzBuzz!を書いてみた

## ルール
1~100までの数字で、
3で割り切れれば、「Fizz!」を表示する
5で割り切れれば、「Buzz!」を表示する
3と5で割り切れれば、「Fizz Buzz!」を表示する
上記以外の場合は、そのままの数字を表示する

## いざコード
``` go
package main

import (
	"fmt"
)

func main() {

	i := 1
	for i < 101 {
		switch {
		case i%15 == 0:
			fmt.Println("FIZZ BUZZ!")
		case i%3 == 0:
			fmt.Println("FIZZ!")
		case i%5 == 0:
			fmt.Println("BUZZ!")
		default:
			fmt.Println(i)
		}

		i++
	}

}
```

## 結果

```
1
2
FIZZ!
4
BUZZ!
FIZZ!
7
8
FIZZ!
BUZZ!
11
FIZZ!
13
14
FIZZ BUZZ!
16
17
FIZZ!
19
BUZZ!
FIZZ!
22
23
FIZZ!
BUZZ!
26
FIZZ!
28
29
FIZZ BUZZ!
31
32
FIZZ!
34
BUZZ!
FIZZ!
37
38
FIZZ!
BUZZ!
41
FIZZ!
43
44
FIZZ BUZZ!
46
47
FIZZ!
49
BUZZ!
FIZZ!
52
53
FIZZ!
BUZZ!
56
FIZZ!
58
59
FIZZ BUZZ!
61
62
FIZZ!
64
BUZZ!
FIZZ!
67
68
FIZZ!
BUZZ!
71
FIZZ!
73
74
FIZZ BUZZ!
76
77
FIZZ!
79
BUZZ!
FIZZ!
82
83
FIZZ!
BUZZ!
86
FIZZ!
88
89
FIZZ BUZZ!
91
92
FIZZ!
94
BUZZ!
FIZZ!
97
98
FIZZ!
BUZZ!
```

※ ブログでも同一記事を投稿している
http://www.sekky0905.com/entry/2017/02/26/Go%E8%A8%80%E8%AA%9E%E3%81%A7FizzBuzz%21%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%BF%E3%81%9F
けものフレンズで理解するモジュール・クラス・インスタンス

# 1. はじめに
　見た人のIQが下がるアニメとして巷で話題の**けものフレンズ**。最近、ヲタクなフレンズたちにすっごい人気だよねー！
　わたしはプログラミングが分からないフレンズだから、けものフレンズを使って（Rubyの）モジュール、クラス、インスタンスについて下がりきったIQでも理解できるようにまとめてみようと思うんだ！この世界は弱肉強食だから、強くならないと生きていけないからね…。

　へーきへーき！フレンズによって苦手なこと違うから！できることからやっていこー！

# 2. けものフレンズとRubyを比較してみよう
　継承とか、ディテールが違うところはいっぱいある気がするけど、みんな細かいことは気にしちゃだめだよ！

### ジャパリパーク => プログラム
　どっちも今見てるその世界全体のことを指してるよ！
### ちほー => モジュール
　ジャパリパークには色んな特徴を持ったちほーがあるように、プログラムには色んなジャンルのモジュールがあるよ！
### フレンズの種族 => クラス
　それぞれのちほーには色んな種族のフレンズがいるように、それぞれのモジュールには色んなクラスがまとまっているよ！サーバルちゃんはサバンナちほーにいる、サーバルキャットっていう種族のフレンズだよね！
### 各フレンズ => インスタンス
　サーバルちゃんはサーバルキャットだから足が速くて、ジャンプと木登りが得意で鼻も耳もいいけど、おっちょこちょいだよね！たぶんサーバルのキャットのフレンズみんながみんなおっちょこちょいなことはなさそうだから、これはサーバルちゃんだけの特徴だよね！
### セルリアン => グローバル変数
　各ちほーにしかいないフレンズたちと違ってジャパリパーク全体にセルリアンがいるように、グローバル変数はプログラム全体で働くよ!
### ラッキービースト(ボス) => 特殊変数
　ボスはじめラッキービーストたちがジャパリパーク各所でパークの維持のために人知れず働いているように、特殊変数もみんなに気付かれないようプログラミングのためのフレームとして保持していくために人知れずいろんな働きをしているんだよー！


# 3. まとめ
　やったー！これでモジュールとクラスとインスタンスがわかったよ！けものフレンズとRubyの枠組みがだいたい一緒だなんて知らなかったけど、こうやって考えたら簡単だね！これでわたしもプログラミングができるフレンズに一歩近づいたかな？？

　ここまでこれを読んだ君もこれでモジュールとクラスとインスタンスがわかるフレンズだね！すっごーい！

　Qiitaパークはプログラミングが得意なフレンズが多いから、弱肉強食なワールドワイドウェブの世界とはいえ、後ろから刺すようなことはせずお手柔らかにしてほしいな！！
selinuxを無効に

セキュリティのためにselinuxが動いていますが、それによってミドルウェア―のインストールや設定変更の際にわけわからないエラーになったりします。その原因を数時間しらべていると原因はselinux...

本番環境はともかく、開発環境ではselinuxを無効にして学習やテストを行うのが時間的にいいかもしれないです。

```
# sudo setenforce 0
# sudo getenforce
Permissive
```


恒久的に無効にするには、

```
# /etc/selinux/config
----
SELINUX=disabled
----
```
【Laravelメモ④】Bladeテンプレート第一歩

# 前提
[【Laravelメモ③】ビュー第一歩](http://qiita.com/kure/items/841aa745a141786fcdc7)が終わっていること

# 手順
## レイアウト用テンプレート

```html:[PJ]resources\views\layouts\master.blade.php
<html>
    <head>
        <title>test</title>
        </head>
        master
        <body>
        @yield('contents')
        </body>
</html>
```

## メインテンプレート

```html:[PJ]resources\views\test.blade.php
@extends('layouts.master')

@section('contents')
hogehoge
@stop
```
TypeScript(JavaScript)でアロー関数で即時関数でFizzBuzz!

# TypeScriptでアロー関数で即時関数でFizzBuzz!
TypeScriptでアロー関数と即時関数を使ってFizzBuzz!を書いてみた

## ルール
1~100までの数字で、
3で割り切れれば、「Fizz!」を表示する
5で割り切れれば、「Buzz!」を表示する
3と5で割り切れれば、「Fizz Buzz!」を表示する
上記以外の場合は、そのままの数字を表示する

## いざコード

``` js
(() => {
    for (let i = 1; i < 101; i++) {
        if (i % 15 === 0) {
            console.log('Fizz Buzz!');
        } else if (i % 3 === 0) {
            console.log('Fizz!');
        } else if (i % 5 === 0) {
            console.log('Buzz!');
        } else {
            console.log(i);
        }
    }
})();
```


## 結果

```
1
2
Fizz!
4
Buzz!
Fizz!
7
8
Fizz!
Buzz!
11
Fizz!
13
14
Fizz Buzz!
16
17
Fizz!
19
Buzz!
Fizz!
22
23
Fizz!
Buzz!
26
Fizz!
28
29
Fizz Buzz!
31
32
Fizz!
34
Buzz!
Fizz!
37
38
Fizz!
Buzz!
41
Fizz!
43
44
Fizz Buzz!
46
47
Fizz!
49
Buzz!
Fizz!
52
53
Fizz!
Buzz!
56
Fizz!
58
59
Fizz Buzz!
61
62
Fizz!
64
Buzz!
Fizz!
67
68
Fizz!
Buzz!
71
Fizz!
73
74
Fizz Buzz!
76
77
Fizz!
79
Buzz!
Fizz!
82
83
Fizz!
Buzz!
86
Fizz!
88
89
Fizz Buzz!
91
92
Fizz!
94
Buzz!
Fizz!
97
98
Fizz!
Buzz!
```

※ ブログでも同一記事を投稿している
http://www.sekky0905.com/entry/2017/02/26/TypeScript%E3%81%A7%E3%82%A2%E3%83%AD%E3%83%BC%E9%96%A2%E6%95%B0%E3%81%A7%E5%8D%B3%E6%99%82%E9%96%A2%E6%95%B0%E3%81%A7FizzBuzz%21
Vagrantを使ってCentOS7をインストールする

Vagrantを使うと自分のローカルマシンに複数の仮想環境を簡単に作ることができます。
開発環境の構築、新しい技術のインストールテストなど気軽に行うことができます。
Vagrantの使い方が少し変わっていたので改めてここに残しておきます。(何バージョンからかは不明)


##VirtualBoxをDL＆インストール
https://www.virtualbox.org/wiki/Downloads
使ったバージョン：5.1.12

##VagrantをDL＆インストール
https://www.vagrantup.com/downloads.html
使ったバージョン：1.9.1

##CygwinをDL＆インストール
Vagrant1.9.1ではDefaultでホストOSとゲストOSのファイル共有にrsyncを使う設定になっています。
WindowsではDefaultでrsyncコマンドは使えないのでCygwinをインストールしてrsyncコマンドが使えるようにします。
Vargrantfileの設定で旧仕様の「shared folder」に戻すこともできますのでその時はCygwinのインストールは不要です。
参考URL
http://www.1x1.jp/blog/2014/03/vagrant-rsync-synced-folder.html
DL
https://cygwin.com/install.html
インストール参考URL
http://qiita.com/ringo0321/items/5ab066078ffa822b4f49
rsync以外にsshコマンドも使えるようにしないので「rsync」、「openssh」二つを有効にします。
※インストールが終わった後、PCの再起動が必要です。(任意のタイミング)


##ゲストOSの立ち上げからssh接続まで
Diretory生成＆移動

```
>mkdir laravel_test
>cd laravel_test
>pwd
/cygdrive/c/dev/vagrant/laravel_test
```

公式HPから情報公開されているCentOS7のBoxを使って初期化

```
>vagrant init centos/7
```
https://atlas.hashicorp.com/centos/boxes/7
※昔はホストOSにBoxをDLするステップ(vagrant box add title url)がありましたが、今は初期化する時にネットからDLするようになっています。今回は「centos/7」が予約語のような感じです。
起動

```
>vagrant up
```

SSH接続

```
>vagrant ssh
```

ifconfigが使えない状態なのでインストール

```
# yum install net-tools
```

##PuTTYを使ってSSH接続
ip:127.0.0.1 port:2222
vagrantユーザのログイン方法は公開鍵暗号方式になっているので、PuTTYgenを使ってPuTTY用秘密鍵(ppk)を作ってそれをログインに使います。
http://qiita.com/pakiran/items/eeeb736cbef5d8b609db
上記のURLを参考にしながら、内容が若干古いので秘密鍵の場所だけ「C:\#vagrant upしたとこまで#\.vagrant\machines\default\virtualbox\private_key」を使ってください。
秘密鍵の場所は
「vagrant up」コマンドで残るログや「vagrant ssh-config」コマンドから確認できます。

##ゲストOSをパブリックネットワークに設定
Vargrantfileに以下の設定を追加
config.vm.network "public_network"
サーバにssh接続をし、ifconfigで振られたipを確認してそのipで接続し直します。(portは22)

※DHCP方式のネットワークでもまだ振られてないIPを指定することでIP固定ができますが、ネットワークによってはできない場合もあります。対応策わかる方はご教示をお願いします。m(_ _)m
例)config.vm.network "public_network", ip: "192.168.123.120"
[iOS]お気に入りマークはどっち？ ♥ vs ★（ショッピングカテゴリー編）

超暇だったので、iOSアプリのお気に入りマークで、♥と★のどちらが多く使われているのか調べてみました。
調査対象のアプリは、2017年の2/26（日）１６：３０時点でショッピングカテゴリーの4０位以内に入っているもの。ただし、お気に入り機能がそもそも存在しないアプリは除いています。

##♥派
・メルカリ
・Yahoo！ショッピング
・BASE
・アッテ
・Creema
・WEAR
・ZOZOTOWN
・FRIL
・ラクマ
・minne
・SHOPLIST
・BUYMA
・MUJI Passport
・ジモティー
・ZOZO フリマ
・価格.com
・バザリー
・H&M App
・au WALLET Market
・グーネット
・モノキュン！

##★派
・楽天市場
・ヤフオク！
・Ticket Camp
・モバオク
・Qoo10ショッピング
・ShuFoo!
・オタマート

##その他のお気に入り追加ボタン
・amazon
・ビックカメラ.com
・WEGO公式アプリ
・ロハコ
JavaでThreadを実装して、無名クラス、ラムダを使ってみる


Thread 処理を実行するには、Thread クラスのインスタンスを作ってあげて、そちらのstart メソッドを呼んであげます。
次に処理内容を書いていきたいのですが、Runnableというインターフェースを実装したクラスを書いてあげて「new Thread();」に対して渡してあげればOK

```:java
class MyRunnable implements Runnable {
	public void run(){
		for (int i=0; i < 500; i++){
			System.out.print('*');
		}
	}
}

public class Test {
	public static void main(String[] args) {
		MyRunnable r = new MyRunnable();

		Thread t = new Thread(r);
		t.start();

		for (int i=0; i < 500; i++){
			System.out.print('.');
		}
	}
}
```

ローカル変数だらけなので、省略してみる

```:java
class MyRunnable implements Runnable {
	public void run(){
		for (int i=0; i < 500; i++){
			System.out.print('*');
		}
	}
}

public class Test {
	public static void main(String[] args) {
		new Thread(new MyRunnable()).start();

		for (int i=0; i < 500; i++){
			System.out.print('.');
		}
	}
}
```


無名クラスを使って、２つを1つにまとめる。

```:java
public class Test {
	public static void main(String[] args) {
		new Thread(new Runnable() {
			public void run(){
				for (int i=0; i < 500; i++){
					System.out.print('*');
				}
			}
		}).start();

		for (int i=0; i < 500; i++){
			System.out.print('.');
		}
	}
}
```

抽象メソッドを一つだけ持つインターフェースのことを入力に対して出力が一つだけに定まるという意味で「関数型インターフェース」と呼びます。
Javaのバージョン8から関数型インターフェースはラムダ式という特殊な記法で置き換えることができるようになりました。

ラムダ式で置き換える

```:java
public class Test {
	public static void main(String[] args) {
		new Thread(() -> {
			for (int i=0; i < 500; i++){
				System.out.print('*');
			}
		}).start();

		for (int i=0; i < 500; i++){
			System.out.print('.');
		}
	}
}
```
package.jsonのdependenciesとdevDependenciesについて~npm~

※ 記載に間違っていた部分がありましたので、修正しました
ご指摘いただいた@chitokuさんありがとうございました

## package.jsonのdependenciesとdevDependenciesとは？
> dependencies
> →実行に必要なパッケージの定義
> 
> devDependencies
> →パッケージの開発に必要なパッケージの定義

以下より、引用
http://nakagaw.hateblo.jp/entry/2015/06/20/204222



## package.jsonへの自動格納方法
npmレジストリに登録された様々な外部ライブラリやパッケージをインストールする時には、以下のoptionをつけてインストールすると、依存関係のあるライブラリやパッケージがpackage.jsonのdependenciesプロパティやdevDependenciesプロパティに追加される

### dependenciesに追加したい場合

```bash
$ npm install —save インストールしたいパッケージ
```

~~もしくは~~ 

~~```
$ npm install -S インストールしたいパッケージ
```~~

### devDependenciesに追加したい場合

```bash
$ npm install --save-dev インストールしたいパッケージ
```

もしくは

```bash
$ npm install -D インストールしたいパッケージ
```

## アンインストールする場合

### dependenciesのパッケージを消し去りたい場合

```bash
$ npm uninstall —save アンインストールしたいパッケージ
```

~~もしくは~~

~~```
$ npm uninstall -S アンインストールしたいパッケージ
```~~

### devDependenciesのパッケージを消し去りたい場合

```bash
$ npm uninstall --save-dev アンインストールしたいパッケージ
```

~~もしくは~~

~~```
$ npm uninstall -D アンインストールしたいパッケージ
```~~

## 参考にさせていただいたサイト
http://qiita.com/sinmetal/items/395edf1d195382cfd8bc
https://docs.npmjs.com/misc/scripts

※ ブログでも同一記事を投稿している
http://www.sekky0905.com/entry/2016/10/22/%E3%80%90package.json%E3%80%91dependencies%E3%81%A8devDependencies%E3%80%90npm%E3%80%91
Javaのenum型の使い方


列挙型はクラスのように自分で作ることができるデータ型で、定数をまとめたものになります。

```java
enum Result {
	SUCCESS,
	ERROR,
}


public class Test {
	public static void main(String[] args) {
		Result res;
		res = Result.SUCCESS;

		switch(res) {
		case SUCCESS:
			System.out.println("OK!");
			System.out.println(res.ordinal());
			break;
		case ERROR:
			System.out.println("NG!");
			System.out.println(res.ordinal());
			break;
		}
	}
}
```
BNF記法のススメ

達人プログラマーを読んでいる時に出てきて、
そういや最近いろんなところで見たなと思ったので調査。

BNFをすらすら読めると資料解読がはかどりますよ、という話です。

# BNF(バッカスナウア記法とは)

>文脈自由文法を定義するのに用いられるメタ言語のこと

by [Wikipedia](https://ja.wikipedia.org/wiki/バッカス・ナウア記法)より

## 例

達人プログラマーの演習問題から。

>時刻表記を定義するBNF文法を作成せよ、ただし以下の例を解釈できること
>4pm, 7:38pm, 23:42, 3:16, 3:16am

```:時刻を表すBNF
<時刻> ::=  <時間><午前午後>|
           <時間>:<分><午前午後>|
           <時間>:<分>
<午前午後> ::= am|pm
<時間> ::= <10進桁>|
          <10進桁><10進桁>
<分> ::=<10進桁><10進桁>
<10進桁> ::= 0|1|2|3|4|5|6|7|8|9

```

34:15とか余分なものも解釈できてしまうが今回はその解説は省略。

# SQLとの関係

最近、この[投稿](http://qiita.com/gooddoog/items/a12d500b331f2ecf718f)で教えていただいた[SQL92のドキュメント](http://www.contrib.andrew.cmu.edu/%7Eshadow/sql/sql1992.txt)がBNFで書かれていた。通常、こういう厳密な定義のあと、わかりやすい具体例が表示されるが、お硬い資料だとそういうのを付けてくれないので、BNFを理解する気がないと解読できない。

```:クエリの定義
<query specification> ::=
     SELECT [ <set quantifier> ] <select list> <table expression>

<select list> ::=
       <asterisk>
     | <select sublist> [ { <comma> <select sublist> }... ]

<select sublist> ::=
       <derived column>
     | <qualifier> <period> <asterisk>

<derived column> ::= <value expression> [ <as clause> ]

<as clause> ::= [ AS ] <column name>
```

```:補足
<set quantifier> ::= DISTINCT | ALL

<table expression> ::=
     <from clause>
     [ <where clause> ]
     [ <group by clause> ]
     [ <having clause> ]
```

※[]はあってもなくても良い項目です。

>  [ ]   Square brackets indicate optional elements in a formula. The
               portion of the formula within the brackets may be explicitly
               specified or may be omitted.



加えてBNFを視覚的に表現した[構文図式](https://en.wikipedia.org/wiki/Syntax_diagram)というものもある

![Example_syntax_diagram_3.svg.png](https://qiita-image-store.s3.amazonaws.com/0/155509/c5c3cd42-3667-0279-4426-06112de309f4.png)

[Oracleのドキュメント](https://docs.oracle.com/cd/E16338_01/server.112/b56299/queries003.htm)ではBNFの代わりとして使われているので、こちらも一緒に覚えておくと資料調査に役立つ。

# 感想
ググったら応用情報の問題とかで出て来るし、実は大学でちょっとだけかじったことがある。
プログラミング言語なんか作らないから関係ないっしょwと適当にその場限りで学習しており、自分の仕事に関係するところ(SQLのドキュメント)で出てくるとは思っていなかったのですっかり忘れていた。

情報系の学部でないとまず知らない(学習する機会がない)と思うので、
未経験でスタートした人はこういうものでドキュメントが書かれることもあると知っておくと、後々役立つかもしれない。

# 参考
達人プログラマー https://estore.ohmsha.co.jp/titles/978427421933P
達人プログラマー(amazon) https://www.amazon.co.jp/dp/427421933X
Wikipedia https://ja.wikipedia.org/wiki/バッカス・ナウア記法
BNFが使われている資料 http://www.contrib.andrew.cmu.edu/%7Eshadow/sql/sql1992.txt
構文図式(英語) https://en.wikipedia.org/wiki/Syntax_diagram
構文図式が使われている資料 https://docs.oracle.com/cd/E16338_01/server.112/b56299/queries003.htm
ESP32をEclipse上でデバッグする

#はじめに

①[ESP32(ESP-WROOM-32)でLチカ (WindowsでESP-IDF使用) ](http://qiita.com/rukihena/items/d226972972a360fc2648)
から始まり、
②[ESP32の開発をEclipse+Pleiadesで行う](http://qiita.com/rukihena/items/d3068c97c98ba0cb6383)
と
③[ESP32 を FT232H でつないで OpenOCD+GDBでデバッグ](http://qiita.com/rukihena/items/f5585436c16f74d0f01d)
を経て、これから
④**ESP32をEclipse上でデバッグする**
という話をします。

①～③の環境構築が終わっていることが前提条件となります。

参考資料は [On chip debugging on ESP32 with Eclipse and OpenOCD](https://www.matthias-jentsch.de/2017/02/16/on-chip-debugging-on-esp32-with-eclipse-and-openocd/) 他、ググりながら書いております。

#Eclipseへのプラグインインストール

デバッガのプラグインをインストールします。

http://gnuarmeclipse.github.io/plugins/install/ をブラウザで開き、「Install」ボタンを Eclipse にドラッグ＆ドロップするとインストールできるらしいのですが、なぜか失敗します。

ヘルプ→新規ソフトウェアのインストール からのURL指定でも同様に失敗します。

仕方がないので zip を取得してのインストール方法を用います。

https://sourceforge.net/projects/gnuarmeclipse/files/Current%20Releases/

から、`ilg.gnuarmeclipse.repository-3.3.1-201702251311.zip` をダウンロードします。（特にこのバージョンである必要はなく、最新版があればそれを使って大丈夫だと思います。）

- ヘルプ→新規ソフトウェアのインストール
    - 追加 ボタンクリック
        - アーカイブ クリック
            - 先ほどダウンロードしたzipを指定
        - OK クリック
    - GNU ARM C/C++ Cross Compiler
    - GNU ARM C/C++ OpenOCD Debugging
    - 上記2つを選択し、次へ クリック
    - 後は適当に 次へ などクリック。。。

この後、Eclipseの再起動を促されるのですが、以下のダイアログが表示されてしまいます。

「いいえ」で抜けちゃってください。

この章で必要なのは、以下2つのプラグインのインストールでした。

- GNU ARM C/C++ Cross Compiler
- GNU ARM C/C++ OpenOCD Debugging

なんで Xtensa なのに ARM なんだ？ というのは、分かりませんｗ

#Eclipseプロジェクトへのデバッガの設定

プロジェクトの設定をしていきます。

- プロジェクト右クリック → デバッグ → デバッグの構成
    - GDB OpenOCD Debugging を選択し、左上の新規ボタンクリック
    - メインタブ選択
        - C/C++ アプリケーション に `build/app-template.elf`
    - デバッガータブ選択
        - OpenOCD Setup - 実行可能ファイルに~~`C:\msys32\usr\bin\openocd.exe`~~`C:\msys32\mingw32\bin\openocd.exe`
(最近のバージョンでインストール先が変わったようです)
        - OpenOCD Setup - Config options に `-s /usr/share/openocd/scripts -f /home/rukihena/esp32.cfg`

        - GDB Client Setup  - 実行可能ファイルに `C:\msys32\opt\xtensa-esp32-elf\bin\xtensa-esp32-elf-gdb.exe`
    - 始動タブ選択
        - Enable ARM semihosting チェックボックスをOFF
        - Load executable チェックボックスをOFF
        - Set breakpoint at を `main` から `app_main` に修正

以上で設定終了です。
とりあえず「適用」して「閉じる」

#デバッガ実行

デバッガを動かしてみましょう。

虫アイコンの右の▼から、先ほど作ったデバッグ構成を選択します。

初めは、ipc_task() で止まります。
これは、デバッグ構成の始動タブ内、Run/Restart Commands の 型：をhalt から run に変えると止まらなくなります。

F8 で再開しましょう。

次に app_main() で止まります。
これは、デバッグ構成の始動タブ内、Run/Restart Commands の Set breakpoint at を OFF にすると止まらなくなります。

F8 で再開しましょう。

LEDが点滅し始めましたか？

while ループの中にブレイクポイントを仕掛けてみましょう。

いつものように、行番号の左側をダブルクリックしても反応しません。

右クリック → ブレークポイント型 → C/C++ Breakpoints に変更すると、ブレイクポイントを仕掛けられるようになります。

ブレイクして、LEDの点滅が止まったでしょうか？

ブレイクできれば、変数の中も見ることができるようになっています。

## 不具合？

ブレイクポイントを先に仕掛けてからデバッグ実行を開始すると、ブレイクして再開した後、xtensa-esp32-elf-gdb.exe が落ちてしまいました。いまのところ対処方法は不明です。。。

# おわりに

700円のチップ上での開発で入力補完が効いてデバッガも使えるなんて、すごーい！
Windowsの開発環境を整えてみる Ver. 20170520


## 概要

Mac至上主義(というかUnix系OS主戦場で戦ってる人には確実に)な中、個人的に何か悔しいものを感じていたので、 **敢えて** Windows 7/10 で開発環境を整える方向にもっていければなぁ、と思い、ここにメモを果敢に残していく方向で。

## 前提環境

* Windows10 1703 (Creators Update)
    * Windows 7 SP1 でも 動きはすると思います…

## 基本的に必要そうなツール
---

* 言語系(perl？ruby？python？)
* CVS (現状だとおそらくgit一択)
* エディタ(必要であればIDEがほしいかも)
* ローカル開発環境(出来ればリモートで欲しいけど、予算の都合上、ローカルで建てたい需要は高い筈)
    * ぇー、OpenStack,vSphere,AWS,GCP とか使えばイーじゃーん、って人はいったん無視…

## 言語系
---

* 意外と探すとFor Windowsな言語系はそこそこあります。 
    * Ruby(非公式,有志,wingw32) : [RubyInstaller for Windows](https://rubyinstaller.org/)
    * Python(公式？) : [Python Releases for Windows | Python.org](https://www.python.org/downloads/windows/)
    * node.js(公式？)：[Node.js](https://nodejs.org/ja/)

* Rubyは日本初のインタプリタ言語で、日本語資料は膨大、Pythonは海外のインタプリタ言語のファーストチョイス。AI系でも使いますしね。
* node.js は javascript系の開発で npmコマンドを多用するので、やはり入れておかないと辛そうです。

* **Fall Creators Update** の話を聞いていると、それなら言語系や頻繁に使うCLIツールもストアからインストールさせてくれよというお気持ちもあったりはしますが…



## CVS
---

* git for windows というのが用意されています。個人的には git for windows に 含まれている git bashが多くの部分でUnix系のよく使うタスクをこなしてくれるので、**MS純正ツールしか使えないんですー…**って所も、Unix系OSを操っていくつもりなら入れていきましょう。
    * [Git for Windows](https://git-for-windows.github.io/)

* gitをwindowsで使っていくために、便利なツールの一つとして「Powershell用のgit prompt」としてPosh-gitというのが存在します。Powershellでgit 使いたいって方はどーぞ。(個人的には多少のプロンプトカスタマイズがいりそうです)
    * GitHub - dahlbyk/posh-git: A PowerShell environment for Git https://github.com/dahlbyk/posh-git
    * Windows PowerShell 使いは posh git を入れよう - ハトネコエ Web がくしゅうちょう http://nekonenene.hatenablog.com/entry/2015/09/11/020018


## エディタ
---

* **MS純正しか使えないので…** という話であればメモ帳頑張れ感はありますが、個人的にはVisual studio code 位入れてもよくね？ 派です。(MS純正だし。)
    * Visual Studio Code - Code Editing. Redefined https://code.visualstudio.com/

* sublime textも環境整えればvscodeよりかなり強力ですが、「デフォルトで日本語処理が比較的まともな」vscodeで頑張りたいなぁ…とは思います。
     * Sublime Text: The text editor you'll fall in love with https://www.sublimetext.com/

* また個人的にはCUI用にWindows用の日本語vim環境を整えるのもお勧めです。下記サイトのvimを使える環境を用意すれば結構強力です
    * Vim — KaoriYa https://www.kaoriya.net/software/vim/

* ちなみにIDE界の雄？である IDEA IntelliJは「個人利用だけOKな無料版」がwindows版も存在します。Scala系を見たい人は突っ込みましょう。業務では使えないけど。
    * IntelliJ IDEA :: Download Latest Version of IntelliJ IDEA https://www.jetbrains.com/idea/download/

## ローカル開発環境

* 現状手軽さで言うとやはり下記となりそうです。
    * Vagrant + Virtualbox

* Windows10 だと下記構成も考えていいですが、下準備が大変すぎるのでまだお勧めできる段階ではないですね。こなれてくれればVirtualbox捨てて、こっちに来たいものですが。
    * Vagrant + Packer + Hyper-V(Win10用)

* 参考
    * Vagrant : Vagrant by HashiCorp https://www.vagrantup.com/
    * Packer : Packer by HashiCorp https://www.packer.io/
    * Virtualbox : Oracle VM VirtualBox https://www.virtualbox.org/
Javaの基本データ型と参照型


###基本データ型

| 基本データ型|ラッパークラス  |
|:-----------|:------------|
| byte| Byte |
| short| Short |
| int| Integer |
| long| Long |
| float| Float |
| double| Double |
| boolean| Boolean |
| char| Character |

ラッパークラスは便利なメソッドを持っている。

```:java
int x = Integer.valueOf("99");
int y = Integer.parseInt("88");

System.out.println(x);
System.out.println(y);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
```

###参照型

| 参照型|
|:-----------|
| String| 
| Array|
| Class|


###基本データ型と参照型の違いを確認する。

####基本データ型の場合

```:java
public static void main(String[] args) {
	int x = 10;
	int y = x;
	y = 5;
	System.out.println(x); 
	System.out.println(y);
}
```

```
10
5
```

####参照型の場合

```:java
public static void main(String[] args) {
	int[] a = {3, 5, 7};
	int[] b = a;
	b[1] = 8;
	System.out.println(a[1]);
	System.out.println(b[1]);
}
```

両方とも8。これは、aもbも同じメモリの番地が入っているから、こういう動作になる。

```
8
8
```

####ラッパークラスの場合は、どうなるか？

```:java
public static void main(String[] args) {
	Integer x = 10;
	Integer y = x;
	y = 5;
	System.out.println(x);
	System.out.println(y);
}
```

```
10
5
```

####String型の場合はどうなるか？

```:java
public static void main(String[] args) {
	String x = "hello";
	String y = x;
	y = "world";
	System.out.println(x);
	System.out.println(y);
}
```

参照型なのに、基本型っぽく表示される。
文字列は変更が不可になっていて、違う文字列を割り当てると別の領域に新しくデータを確保するため

```
hello
world
```

###boxingとunboxingについて

Javaのクラスによっては参照型の引数しか受け付けないものもあるので、ラッパークラスと基本データ型
を相互に変換する必要がある。

参照型にいれることをauto boxing

```:java
Integer i = new Integer(32);
Integer j = 32;
```

auto unboxing

```:java
Int n = i; 
int m = j.intValue();
```
lsblk コマンドが便利

# はじめに

お恥ずかしいながら、今までこのコマンドを知りませんでした。 :scream: 
ただ単に、サーバで使っているディスクのデバイス名リストが欲しかっただけなのですが、df コマンドとかだとパーティションの名前になってしまい、余計な数字が末尾についてくるので困っていました。 :sweat_drops: 

そこで、`lsblk` コマンドの登場です！ :sunglasses: 

# lsblk コマンドについて

このコマンドは、単純に実行するだけでこんな情報がとれます。 :confetti_ball: 

```
$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0  21.9T  0 disk
├─sda1   8:1    0 488.3M  0 part /boot
├─sda2   8:2    0  11.5G  0 part [SWAP]
└─sda3   8:3    0  21.8T  0 part /
```

オプションもイロイロ有りますので、ウマく活用すると出力内容を変えることも可能です。たとえは取得できる情報にはこんなのがあります。 :pencil: 

```
Available columns (for --output):
        NAME  device name
       KNAME  internal kernel device name
     MAJ:MIN  major:minor device number
      FSTYPE  filesystem type
  MOUNTPOINT  where the device is mounted
       LABEL  filesystem LABEL
        UUID  filesystem UUID
          RA  read-ahead of the device
          RO  read-only device
          RM  removable device
       MODEL  device identifier
        SIZE  size of the device
       STATE  state of the device
       OWNER  user name
       GROUP  group name
        MODE  device node permissions
   ALIGNMENT  alignment offset
      MIN-IO  minimum I/O size
      OPT-IO  optimal I/O size
     PHY-SEC  physical sector size
     LOG-SEC  logical sector size
        ROTA  rotational device
       SCHED  I/O scheduler name
     RQ-SIZE  request queue size
        TYPE  device type
    DISC-ALN  discard alignment offset
   DISC-GRAN  discard granularity
    DISC-MAX  discard max bytes
   DISC-ZERO  discard zeroes data
```

ワクワクしてきましたね。 :smile:
【Laravelメモ③】ビュー第一歩

# 前提
[【Laravelメモ②】ルーティング/コントローラ第一歩](http://qiita.com/kure/items/014c83256abaea513c27)が終わっていること

# 動作確認
http://localhost:8000/test
でテストページが表示される
# 手順
## コントローラ修正
```php:[PJ]\app\Http\Controllers
<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class testController extends Controller
{
    public function test()
    {
-        return 'test';
+        return view('test');
    }
}
```

## ビューファイル作成

```php:[PJ]\resources\views\test.blade.php
<html>
    <head>
        <title>test</title>
        </head>
        <body>
        testbody
        </body>
</html>
```
expr の 結果が 0 になると 戻り値が 1 になる件


こやつに数日悩まされていたので…

* man page : https://linuxjm.osdn.jp/html/GNU_sh-utils/man1/expr.1.html

## manからの抜粋

```text
 expr は終了時に以下のような値を返す。

0: 式がヌルでも 0 でもなかった場合。
1: 式がヌルまたは 0 だった場合。
2: 式が正しくなかった場合。 
```
* **式がヌルまたは 0 だった場合** がミソ。

## 嵌る例

* 下記bash scriptは OKが表示されずに終了します。

```bash
#!/bin/sh

set -ex

a=`expr 2 + 5 - 7`
echo "OK!"
exit 0
```

* `set -e` とは何ぞや？という話になりそうですが、これは各コマンドで0以外のステータスが帰ってきたら終了するオプションとなります。
    * 参考 : http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230881/
* なんで、OKが出ないのよ？というのは、 **expr の式評価時にexpr 自体が戻り値1を返してくるので変数aに代入した時点で、set -e の制約に引っかかり、終了する** という事が起こります。

## 回避例

* googleさんに尋ねると幾つか見つかりますね…
    * [Bash] letによる四則演算 http://sweng.web.fc2.com/ja/program/bash/bash-let.html
    * [Bash] 二重括弧による四則演算 http://sweng.web.fc2.com/ja/program/bash/bash-calc.html
    * [Unix command] bcによる少数の演算 http://sweng.web.fc2.com/ja/program/shellscript/bc.html

* 個人的には「二重括弧で計算」が一番スマートかな、と。(bash限定になってしまうのが問題といえば問題ですが)。ちなみに二重括弧に置き換えるとこうなります。

```bash
#!/bin/sh

set -ex

a=$((2 + 5 - 7))
echo "OK!"
exit 0
```

* ちなみに上記は「OK!」の文字が出て0が返ります。

## それじゃ expr って悪なの？

* それじゃ、expr禁止令？と思われがちですが、そーでもない感じです。例えばこういうパターンにexprが活躍したりします。

```bash
#!/bin/sh

if [ $# -lt 1 ] ; then
  echo "error." ; exit 1
elif expr "$1" : ^[0-9]*$ > /dev/null ; then
  echo "number." ; exit 0
else
  echo "not number." ; exit 1
fi
```

簡単な数値パターンマッチングですね。0～9しか存在しなければ expr が 0 を返すので数値と判定する、というオチです。

## 追記 : expr 使っても 戻り値1 を検知しないパターンが存在する模様

* 下記パターンはexprを使っても戻り値1を拾わずにエラーにならないようです。echoがexprの戻り値を見ないで捨てるのでOKとか、ですかね…？(仕組みはよくわからん) 

```bash
#!/bin/sh

set -ex
echo `expr 2 + 5 - 7`
exit 0
```
【Laravelメモ②】ルーティング/コントローラ第一歩

# 前提
[【Laravelメモ①】ルーティング第一歩](http://qiita.com/kure/items/59ef6102b82d07ddc43b)が終わっていること

# 動作確認
localhost:8000/test
すると「test」が表示される

# 手順

## コントローラのファイル作成

```php:[PJ]\app\Http\Controllers
<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class testController extends Controller
{
    public function test()
    {
        return 'test';
    }
}
```

## ルーティング設定追加

```php:web.php
Route::get('test','testController@test');
```
viでよく使うコマンドメモ

##前提
viは入力`コマンドモード`がある、`入力モード`がら`コマンドモード`に切り替える際は`Esc`を押下する、コマンドモードから入力モードへの切り替え方は下記に記載する。

##起動
- 編集対象のファイルを開く

		vi ファイル名　
				

###移動
- 左に移動
		
		h
- 右に移動
		
		l
- 上に移動
		
		k
- 下に移動

		j
		
- 画面の最上行に移動

		H
- 画面の中央行に移動

		M

- 画面の最下行に移動

		L

- ファイルの最終行に移動
	
		G
- ファイルのn行目に移動

		nG
		
- 行の頭へ移動

		0
		
- 行の最後へ移動

		$
		
###入力(入力モードへの切り替え)

- カーソルの右から入力開始

		a

- 行末から入力開始

		A

- カーソルの左から入力開始

		i

- 行頭から入力開始

		I

- 現在の行の下に１行挿入し、その行頭から入力開始

		o

- 現在の行の上に１行挿入し、その行頭から入力開始

		O
		
###削除

- カーソル上の１文字削除

		x

- カーソルの左の文字を１文字削除

		X

- 現在の行を削除（バッファにコピーされる）

		dd

- n 行、削除

		ndd

- カーソル上の一語を削除

		dw

- カーソル位置から指定した字 までを削除

		df 字

- カーソル位置から行の最後までを削除

		d$

- カーソル位置から行の先頭までを削除

		d^
		
###検索

- 文字列 を検索する

		/<文字列>
	

- 文字列を検索する（逆方向）

		?<文字列>

- 順方向へ検索する

		n

- 逆方向へ検索する

		N
		
###置換

- カーソル上の１文字を他の１文字に置換

		r

- カーソル上の文字からEscが押されるまでの文字列を置換

		R

- カーソルのある１文字を他の文字列で置換

		s

- 現在の行を他の文字列で置換

		S

- カーソル位置からこの語の最後までを置換

		cw

- カーソル位置から指定した字 までを置換

		cf 字

- カーソル位置から行の最後までを置換

		C

- 直前のsコマンドの繰り返し

		:&,　&
		
- 大文字/小文字を変更する

		~　（チルダ）
		
###カット＆ペースト

- 現在の行をバッファにコピー

		yy

- n 行分をバッファにコピー

		nyy

- 単語をバッファにコピー

		yw

- バッファ内のテキストを挿入（文字、単語はカーソルの右に、行は現在の行の下に挿入される）

		p
		
- バッファ内のテキストを挿入（挿入位置はpの逆。文字、単語はカーソルの左に、行は現在の行の上に挿入される）

		P	
		
###Undo・Red

- 直前の操作を取りやめる

		u

- 行全体の操作を取りやめる

		U

- 直前の操作の繰り返し

		.
		
###終了

- 保存して終了

		ZZ

- 上書き保存

		:w(Enter)

- 名前を付けて保存

		:w ファイル名(Enter)

- 保存して終了

		:wq(Enter)

- 保存せずに終了

		:q!(Enter)

- 終了

		:q(Enter要)

- ファイルを開く

		:e ファイル名(Enter要)


##参考
[http://www.ritsumei.ac.jp/~tomori/vi.html](http://www.ritsumei.ac.jp/~tomori/vi.html)
[http://hp.vector.co.jp/authors/VA016670/unix/vi_reference.html](http://hp.vector.co.jp/authors/VA016670/unix/vi_reference.html)


##おわりに
他にも、コマンドはありますが、個人的によく使うコマンドのみを抜き出して、まとめました。
Railsのフォームの送信ボタンのi18nの処理をhelperに切り出す

Scaffoldで生成される `_form.html.erb` 等に記述される `f.submit` は ActionView::Helpers::FormBuilder#submit を呼んでいて、 `form_for` に与えられた `record` の状態に応じて `update`, `create`, `submit` の3種類を判別して良い感じに `I18n#t` を呼んでくれる。

しかし、 submitボタンにFont Awesomeのようなアイコンを表示したい場合に面倒だ。下記の通り `I18n#t` の引数に与えるキーがprivateメソッドに実装されていてカスタマイズしづらい。

https://github.com/rails/rails/blob/master/actionview/lib/action_view/helpers/form_helper.rb#L2240-L2256

```ruby
private
[...]

  def submit_default_value
    object = convert_to_model(@object)
    key    = object ? (object.persisted? ? :update : :create) : :submit

    model = if object.respond_to?(:model_name)
      object.model_name.human
    else
      @object_name.to_s.humanize
    end

    defaults = []
    defaults << :"helpers.submit.#{object_name}.#{key}"
    defaults << :"helpers.submit.#{key}"
    defaults << "#{key.to_s.humanize} #{model}"

    I18n.t(defaults.shift, model: model, default: defaults)
  end
```

というわけで、コピペ＆小改修して下記のとおりi18n関連の処理をhelperとして切り出す。

```ruby
# @see https://github.com/rails/rails/blob/master/actionview/lib/action_view/helpers/form_helper.rb#L2240-L2256
module I18nHelper
  def i18n_submit_default_value(form)
    object = convert_to_model(form.object)
    key = object ? (object.persisted? ? :update : :create) : :submit

    model = if object.respond_to?(:model_name)
      object.model_name.human
    else
      form.object_name.to_s.humanize
    end

    defaults = []
    defaults << :"helpers.submit.#{form.object_name}.#{key}"
    defaults << :"helpers.submit.#{key}"
    defaults << "#{key.to_s.humanize} #{model}"
    I18n.t(defaults.shift, model: model, default: defaults)
  end
end
```

Viewsでの使い方は以下の通り。

```erb
<%= f.button type:'submit' do %>
<%= fa_icon(:save, text:i18n_submit_default_value(f)) %>
<% end %>
```

ちなみに `fa_icon` は [font-awesome-rails.gem](https://rubygems.org/gems/font-awesome-rails) というFont AwesomeをRailsで使いやすくするgemのHelperメソッドです。
初めましてXamarin。Xamarinを触ってみた

先日、xamarinの勉強会に参加したのでxamarinについての記事を投稿します。
みなさんにxamarinってこういうのなんだって思ってもらえたら幸いです。
※受け売りです。

##Xamarinとは？

Xamarin→ザマリンと読みます。
.NET Framework(主にC#)を使用してiOS、Android、Mac、UWPの「ネイティブアプリ」を開発できるクロスプラットフォーム開発環境です。
対応力がいい。それがクロスプラットフォームですが。w

##Xamarinの特徴

###1.XamarinはC#で書きます。
###2.ネイティブのUIを活用したアプリを作成できます。
###3.C#からAPIを100%呼び出すことができる。

他にもあるかもしれませんが、僕の情報はまだまだこんなところです。


僕としては、Xamarinを触ってみたそんなに難しさを感じませんでした。
ハードルはそんなに高くないのではないかなぁという印象です。まだまだがっつり触っていませんが。。。

また、様々なクロスプラットフォームがある中でC#のみで開発できるのは魅力的ですね。
あとはバックにMicrosoftさんがいるのは大きいですね。
プラットフォームの裏側にプラットフォームがいると、影響力が出てきますし。。。
ただ触って損はないプラットフォームだとは思いますので、一緒に触れる方は是非触っていきましょう！


またより詳細な情報は下記のリンクの方が良いです！
[リンク！]
[リンク！]:http://qiita.com/ytabuchi/items/c1cd365bf10d2385d847
渋谷LT2/15 ①Slackの使えそうな機能②FTPでファイルがアップロードされたらRailsで即座に処理する③ゼロつくDeepLearning第六回

#今日のLT
プレゼンター:本間さん
FTPでファイルがアップロードされたらRailsで即座に処理する
[本間Lt 20170215](http://qiita.com/norifumi/private/62f1ba118e6b4c49ba81)
プレゼンター:角さん
Slackで使えそうな機能
[角Lt 20170215](https://www.slideshare.net/kumaco/slacklt) from [kumaco](https://www.slideshare.net/kumaco)

#ゼロから作るDeep Learning第六回
###勾配とは
適当な重みを入れた時に教師データとどのくらい乖離があるかの算出

①訓練データの中からランダムに一部データ（ミニバッチ）を呼び出す
②取り出したデータの損失関数を減らすべく、重みパラメータの勾配を求める
③重みパラメータを勾配方向に微小量だけ更新する
④繰り返す

勾配は、損失関数の値を最も減らす方向を示す。
6万の中から１００個を評価して、ダメそうだったら過学習。
入力は行列、出力はベクトル。
__main__の名前空間への3つのアクセス方法

スクリプトで実行した場合、下記の`x`、`y`、`z`はすべて同じ`dict`オブジェクトを指している。

```py:test_globals.py
import sys

x = globals()

y = sys.modules["__main__"].__dict__

def foo():
    print("foo.")

z = foo.__globals__
```
確認するためには、`python -i test_globals.py` を実行し、インタプリタで下記を実行。

```pycon:
>>> x is y is z
True
>>> [id(w) for w in (x, y, z)]
[10317376, 10317376, 10317376]
```
[EC-CUBE] ローカル環境とデモ環境のテンプレートをマージする

**※ 今回はEC-CUBE 2.13.5 を利用**
ローカル環境で開発したテンプレートをデモ環境へ反映する流れについてのメモ。
反映する対象はDB、ページ（デザイン管理＞PC＞ページ詳細設定）、ブロック（デザイン管理＞PC＞ブロック設定）。

## 初期追加のときに行うこと
一番最初にテンプレートを追加・反映する際に行うこと。
### テンプレート用のファイルをアップロード
* data/Smarty/templates/追加テンプレート名/*
* html/user_data/packages/追加テンプレート名/*

### 追加テンプレートの適用についてファイルに記載
* /data/cache/mtb_constants.php
* /data/mtb_constants_init.php

TEMPLATE_NAME を追加テンプレート名に変更する

### テンプレート設定の選択肢追加
dtb_templates テーブルをマージすることで、管理画面「デザイン管理＞PC＞テンプレート設定」より追加テンプレートの選択肢が増える。


## 初期追加とそれ以外の時に行うこと
### 以下のテーブルをマージ
* dtb_bloc
* dtb_blocposition
* dtb_pagelayout

ブロックとレイアウトの設定を反映する。

### 追加ページファイルをアップロード
「デザイン管理＞PC＞ページ詳細設定」で設定した追加詳細ページの反映を行う。

* data/Smarty/templates/追加テンプレート名/user_data/ほげ.tpl
* html/user_data/ほげ.php

### ブロックファイルをアップロード
「デザイン管理＞PC＞ブロック設定」で設定した追加ブロックの反映を行う。

* data/Smarty/templates/追加テンプレート名/frontparts/bloc/ほげほげ.tpl
PyYamlの出力時にreferenceの機能を無効にする方法

何も設定せずにyaml.dumpするとreferenceの機能が使われてしまう。不要な場合もある。

```python
import yaml


person = {
    "name": "foo",
    "age": 20
}
d = [person, person]

print(yaml.dump(d))
```

例えば以下のような出力になる。

```yaml
- &id001 {age: 20, name: foo}
- *id001
```

yaml.dumpにDumperオプションが渡せる。そしてここで渡すDumperクラスのignore_aliases()メソッドをTrueを返すようにしてあげれば良い。

```python
class IgnoreReferenceDumper(yaml.Dumper):
    def ignore_aliases(self, data):
        return True

print(yaml.dump(d, Dumper=IgnoreReferenceDumper))
```

平和が訪れた。

```yaml
- {age: 20, name: foo}
- {age: 20, name: foo}
```