OmniAICreator/Qiita-1.07M huggingface dataset:
ubuntu16へのsmokepingインストール


smokepingとは、fpingで定期的にネットワーク品質を測定してデータをrrdファイルに格納し、Web UIで可視化するまでやってくれる古いツール。
今回はubuntuで。smokeping自体はcentos/redhatでも稼働するけど設定ファイルの構造が全くちがうので注意。
個人的に日本と中国の間の通信を追っているので今回はAlibaba Cloudの仮想サーバ(ECS)を使うけど、AWSでも、もちろんオンプレサーバでもubuntuなら問題なく動くはずだ。

## hosts設定
IPアドレスを覚えるのめんどくさいのでhostsに書き込む
shanghai_cenのあどれすが10.1.0.1、shanghaiのアドレスが139.xxx.xx.xxである場合、下記２行を追記する。

```
$ vi /etc/hosts 
10.1.0.1        shanghai_cen
139.xxx.xx.xx   shanghai

```

## ubuntu準備
とりあえずubuntuのECS(仮想サーバ) instanceを立ち上げてsmokepingをインストールする。ECS無料じゃないけど１時間1〜2円ぐらいで買えるし、普通にアカウント作れば３万円分のクーポンもらえるはずなので、まあタイトルに偽りなし、ということでよろしく。
デフォルトではubuntuのapache2のcgiモジュールは無効になっているので、有効にするためにa2enmodを使う。

### smokeping install

```bash
$sudo apt update
$sudo apt install smokeping 
$sudo a2enmod cgid
```
### smokeping設定ファイル追記
設定ファイル、いろいろ設定できるけど、今回はping対象のターゲットを追記するのみの設定を追記。

```bash: 
$sudo cat /etc/smokeping/config.d/Targets 
*** Targets ***

probe = FPing

menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of xxx Company. \
         Here you will learn all about the latency of our network.

+ Local

menu = Local
title = Local Network
#parents = owner:/Test/James location:/

++ LocalMachine

menu = Local Machine
title = This host
host = localhost
#alerts = someloss


############ ここから下を追記　############
++ internet
menu = shanghai internet  
title = shanghai inernet
host = shanghai

++ cen
menu = shanghai CEN
title = shanghai CEN
host = shanghai_cen

## マルチラインな比較グラフの設定
++ compare
menu = Internet vs CEN
title = Internet vs CEN
host = /Local/internet /Local/cen
```

雑に説明すると、`+Local`や``++internet`はpingの結果のrrdファイルが格納されるディレクトリで、smokepingのhome(/var/lib/smokeping)以下に配置される。 
`host`はIPアドレスか、名前解決可能なホスト名またはFQDNを設定する方法と、別の設定によってすでにrrdファイルが格納されているディレクトリを設定する方法があり、後者は複数のホストを一つのグラフにまとめて表現するときに使用する。

### smokeping 起動

```bash
$sudo service apache2 start 
$sudo service smokeping start
```


### smokeping確認
自分の環境からのwebアクセスができるようにTCP 80portをセキュリティグループの設定で解放し、以下のURLへアクセス。正しく設定されて入れば品質比較の結果が表示されるはず。

http://[東京のECSのEIP]/smokeping/smokeping.cgi?target=Local
![image.png](https://qiita-image-store.s3.amazonaws.com/0/132165/2850d5fe-3c45-e153-e979-e79e06d9bdd2.png)
App Store Connectの「Invalid Pre-Release Build」に対応する

iOSアプリのアップデートを申請したら、App Store Connectから下記のメールが届きました。

> Title：アプリ名 has one or more issues

> **Invalid Pre-Release Build** - The CFBundleVersion key in the app’s Info.plist file contains a build number (11) that’s lower than the latest build number (12) that’s been submitted for the app version '1.0.6'.

設定したビルドバージョンが、以前提出したビルドバージョンよりも低いのでだめだよって言われています。
確認したらたしかにうっかり設定間違えてたので、ビルドバージョンをインクリメントして再提出。
無事に申請通りました。

ちなみにCFBundleVersionというのがビルドバージョンで、
CFBundleShortVersionStringというのがリリースバージョンだそうです。
[正しく理解する iOS アプリのバージョニング | RyukyuInteractive Tech Blog](https://tech.ryukyu-i.co.jp/2017/01/01/ios-versioning/)
OpenModelicaで伝熱流動　use*Inputについて

OMEditを使って下図の極めて簡単なシステムを作ってみたのですが、
![simplest.png](https://qiita-image-store.s3.amazonaws.com/0/317126/6e36ddb0-1014-eabf-f0a1-30978f80dc51.png)

Too few equations, under-determined system. The model has 36 equation(s) and 38 variable(s).
というエラーで、コンパイルが通らない。
メッセージの通り、未知数に対して方程式が足りないということですが、こんな簡単なシステムでそんなことあるのかと、しばらくハマりました。

![useInput.png](https://qiita-image-store.s3.amazonaws.com/0/317126/052513c4-9f36-5c15-f902-18016948f45b.png)

ようやく、わかった原因がこちら。
わたしはこのuse*Inputという項目が、その下の入力値を使用するか否かだと考えていたのですが、実際には下図の赤丸部分に外部からの信号をインプットとして使用するか否かだったわけです。
![input.png](https://qiita-image-store.s3.amazonaws.com/0/317126/c47510c5-8498-8f18-8d41-91c074dc9bf0.png)
ここでは、ambient1とambient2のusePressureInputとuseTemparetureInputと、volumeFlow1のuseVolumeFlowInputを全てfalseに変更することで、めでたくエラーは解消し、コンパイルと実行ができるようになりました。

だいぶ苦戦して、ようやくスタート地点に立った気分です。
第46話 立法数の和

この記事は[仮面ライダービルドの数式](https://qiita.com/izmktr/items/e26a624e79bce3edccc9)の第46話です。

```math
\sqrt[3]{3^3+36^3+37^3}=46
```

3つの立方数の和が立方数になる数です。

2つの平方数の和が平方数、というのはピタゴラス数と呼ばれます。
例えば、(3,4,5),(5,12,13)です。
これらは直角三角形の辺が整数になる例としても有名です。

これらの数は次の式で簡単に作れます。

```math
(m^2-n^2,2mn,m^2+n^2 )   ※m-nは奇数
```

たとえば、m=2,n=1だと(3,4,5)ですし、m=3,n=2で(5,12,13)になります。

それと同じく、3つの立方数の和が立方数というものが冒頭の式になり、
次のような式を使って求めることが出来ます。

```math
(n(n^3+m^3 ),m(m^3-2n^3 ),n(2m^3-n^3 ),m(m^3+n^3 ))\\
(m(m^3-n^3 ),n(m^3-n^3 ),n(2m^3+n^3 ),m(m^3+2n^3 ))
```

ちなみに、それぞれの最小は次の式です。なにかシンパシーを感じますね。

```math
3^2+4^2=5^2\\
3^3+4^3+5^3=6^3
```
敵対生成ネットワークGAN

機械学習の一手法の

**GAN**（敵対生成学習）について

*Generative Adversarial Networks*

#####二つのAIが競い合って学習精度を向上していく。
- 結果生成AI
- 結果判定AI

生成AIが生成した結果を判定AIが評価するよ。

天才画家の描いたトリックアートを手描きの絵なのか画像なのか判別する場合において、

`本物＝手描きの絵`　、　`偽物＝画像データ`

本物にできるだけ似せた偽物の画像を生成AIが生成し、判定AIが本物か偽物を判別する。

生成AIは、判定AIを**騙そう**と努力する。 一方、
判定AIは、生成AIの嘘を**見破ろう**とする。

それを繰り返し、生成AIの処理制度を向上させる。
切磋琢磨して、学習するようなイメージだよ。

この手法を<u>敵対生成学習</u>という。

その一連を上で、出来上がる学習データが
 **敵対生成ネットワーク** 
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 




---
Emacs の Magit を fish から使う

# TL; DR

```fish:~/.config/fish/functions/magit.fish
function magit
    emacsclient -a '' -e '(progn
             (magit-status-internal "'(string escape -n (realpath .))'")
             (x-focus-frame nil))' >/dev/null
end
```

```shell-session
$ magit
```
RでTSP信号を作る

TSP(Time Stretched Pulse)とはインパルス応答測定でよく用いられる信号で、音響機器の周波数特性やホールや部屋の残響測定を調べるときに使われます。matlabやscilabやOctaveで作るスクリプトは検索で出てきたのですが、Rのものは見つからなかったので`tuneR`と`singal`を使って作ってみました。私の検索力不足で、もしかするとすでに存在しているかもしれませんが・・・

#TSP信号について
TSP信号はサイン波のスイープパルスの一種で、伝達関数等の測定に用いられる信号で、波形は以下の式で表されます。(Optimized ATSP(OATSP)と言います)

```math
\begin{equation}
  H\left( n \right) = \left\{ \begin{array}{l}
    a_0 \exp \left( \frac{j 4 \pi m n ^2}{N ^ 2} \right) & \left( 0 \leq n \leq \frac{N} {2} \right) \\
    a_0 \exp \left( \frac{-j 4 \pi m \left( N - n \right) ^2}{N ^ 2} \right) & \left( \frac{N} {2} - 1 \leq n \leq N - 1 \right)
  \end{array} \right. \\
\end{equation}
```

ここで$N$は波形全体の長さ(サンプル数)、$a_0$はTSPの振幅、mはTSPのパルス長を決めるパラメータで、$m=N/4$にするとTSPのパルス長は凡そ$N/2$になります。


#TSPによるインパルス応答の測定
具体的にTSPを用いてインパルス応答を測定する方法をざっくり述べると以下の通りです

1. TSP をスピーカーから再生する
1. 適当な場所にマイクを置いて、スピーカーからの再生音を録音する
1. SN比を稼ぐため、1. と 2. を繰り返して録音波形を平均する
1. 録音波形にTSPの逆信号を畳み込んでインパルス応答を求める

TSPの逆信号とは、上記$H(n)$の複素共役を取った波形になりますが、結果としてはTSP信号を時間軸で逆転させるとTSP逆信号になります、

#TSP信号のコーディング
RでTSPのWAVファイルを作成します。上記の式をそのままコーディングしました。

```r:R
library(tuneR)
library(signal)

Fs <- 44100  #サンプリング周波数
bit <- 24    #ビット長
N <- 22100   #作成するwaveオブジェクト全体のサンプル数(0.5秒)
m = N / 4    #TSPパルスの長さ(約0.25秒)

# 0～N/2までの時間における位相(expのカッコ内)w1を作成
k1 <- c(0:(N / 2))
w1 <- 4 * pi * m * (k1 / N) ^ 2

# N/2～N-1までの時間における位相w2を同様に作成
k2 <- (N / 2 + 1) : (N - 1)
w2 <- -4 * pi * m * ((N - k2) / N) ^ 2

# w1とw2を結合させて0～N - 1までの位相wを作成
w <- append(w1, w2)
# 波形を作る
H <- exp(complex(re = 0,im = w))

# TSP信号を作る
# 逆FFTを計算
y <- fft(H, inverse = T)
# 実部のみを取得
y <- Re(y)
# 波形の始まりをずらす
y <- append(y[(m + 1) : length(y)], y[1 : m])
# 逆転させる
tsp <- rev(y)

#TSP逆信号を作る
# Hの複素共役をとる
H = Conj(H)
# 逆FFTを計算
y <- fft(H, inverse = T)
# 実部のみを取得
y <- Re(y)
# 波形の始まりをずらす
y <- append(y[(length(y) - m + 1) : length(y)], y[1 : (length(y) - m)])
# 逆転させる
tsp_inv <- rev(y)

# Waveオブジェクト作成
wav_tsp <- Wave(tsp, samp.rate = Fs, bit = bit)
wav_tsp_inv <- Wave(tsp_inv, samp.rate = Fs, bit = bit)
# 正規化（ノーマライズ)
wav_tsp <- normalize(wav_tsp, as.character(bit))
wav_tsp_inv <- normalize(wav_tsp_inv, as.character(bit))
```

作成した波形を表示

```r:R
plot(wav_tsp)
plot(wav_tsp_inv)
```
![plot_zoom_png.png](https://qiita-image-store.s3.amazonaws.com/0/213574/4e1865fa-9964-a74d-c595-242bbe73d17d.png)
![plot_zoom_png (1).png](https://qiita-image-store.s3.amazonaws.com/0/213574/5e9c69c3-04a9-8cce-06a8-6a32ddde7b6b.png)

インパルス応答測定の実際はまたの機会に。
オブジェクト指向の人たちに向けた関数型プログラミングへの足がかり

## 本記事の立ち位置
　この記事は「関数型プログラミング？ナニソレ？美味しいの？」と言うオブジェクト指向な人たちに

　「食べてみなよ！美味しいから！ほら、一口。」と食べさせて
　「あ、美味しいねコレ。店員さーんコレお願いしまーす。」と言わせたい。
　そんな立ち位置の記事です。

## 本題
例として、Javaを使っていきます。

```java
public static int plus10 (int val) {
	return val + 10;
}

public static int minus5 (int val) {
	return val - 5;
}
```

```java
int input = 100;
int output = plus10(input);
output = minus5(output);
// output = 105
```

　コードの善し悪しはさておき、いつものJavaって感じですし
`100 + (10 - 5) = 100 + 5 = 105` です。簡単ですね。

しかし、

## このコード`output` が３つもあってキモい

　そのように思ったあなた、どのようにリファクタリングしますか？

　マジックナンバーを止めろとか言う話は脇に置いておくと、メソッドの引数にメソッドを渡すような形になりませんか？

```java
int output = minus5(plus10(100));
```

「せめて、もうちょっと良いメソッド名にしてよ！」もっともな意見ですね。

```java
public static int plus5(int v) {
    return minus5(plus10(v));
}

// int output = plus5(100);
```

## 実はこれだけ
　と言い切ってもいいでしょう。

さらっと補足すると

今までやったことは、
圏論で言うところの「射の合成」と呼ばれるモノで、
高校数学、高校物理では「ベクトルの合成」とか「力の合成」と呼ばれるようなモノです。
Bitbucket | Git | SmarGit > cloneして別リポジトリにする

```txt:動作環境
SmartGit 18.1.5
Windows 7 pro (32bit)
```

### 関連

- [unity > github | sourcetree > cloneして別リポジトリにする](https://qiita.com/7of9/items/d8677c0991628c79e15a)

### 処理概要

- 既存のリポジトリがある
- 別リポジトリにしてチェックインしたい
- SmartGitを使う

### 手順

1. 既存のリポジトリをcloneしてローカルに取得
    - 例. XXX_YYY_181015
2. Webブラウザ上で、Bitbucketにおいて新規リポジトリを作成
    - 例. XXX_YYY_181118
    - 「バケツに何かを入れましょう」が表示されるが、そこからは何もしない
    - ブラウザは開いたままにしておく
3. ローカルにおいて既存フォルダをコピーしてRename
    - `XXXX_CNGraph_181015`から`XXXX_CNGraph_181118`へコピーRename
4. ローカルの`XXXX_CNGraph_181118/.git/config`設定書換え
    - `remote "origin"`のurl
    - 前: url = [中略]/xxx_yyy_181015
    - 後: url = [中略]/xxx_yyy_181118
5. SmartGitにリポジトリ読込み
    1. SmartGitにて「Repository」＞「Search for Repositories...」を選択
    2. 表示されるリポジトリのうち、`xxx_yyy_181118`のチェックを入れてOKを押す
7. SmartGitにてPushする
    1. (左上)Repositoriesペインにて`XXX_YYY_181118`を選択し、右クリック
    2.  `Push...`クリック
    3.  `Do you want to push branch 'master'?`で`Push`をクリック
8. 手順2のブラウザをリロードする
    - ファイルがチェックインされている
    
以上
HTML生成用のコントローラーもどきを作る

Railsのシステムを作っていて、コントローラーからPDFKitに流してPDFを生成していたのですが、あるときそれをメールに添付する必要が出てきました。ActionMailerで二重に実装するのもアホらしいし、かといって普通のコントローラーに再アクセスさせるのも認証の加減で厄介になるしといろいろ考えた挙げ句、コードで駆動する、コントローラーのようなものを作ることで対応することにしました。

## おことわり

これはRails 4.2で実践してみたものなので、他のバージョンでは書き方が違う可能性があります。

## 直接ERBでの問題点

もちろん、コントローラーと無関係にERBを呼ぶことでHTMLを生成することも可能です…が、それではコントローラーのビューと比べて機能的に足りないことだらけでした。

* ヘルパーが使えない
* 渡す値の取りまとめが煩雑になる
* アセットなどの位置が取れない

ということで、ある程度以上複雑なビューを組み立てるには、コントローラーと同じ枠組みに載せるしかなさそうです。

## 既存のものを参考にする

コントローラー以外で同様にビューから生成できるものとして、ActionMailerがあります。それを見ていると、`AbstractController::Base`を基底クラスにして、各種のモジュールを加えてメーラーを構築していました。これに則れば、組み立てていけそうです。


## 実際に書いてみたコード

試行錯誤しつつ、足りないモジュールを足していったところ、以下のようなコードが出来上がりました。

```ruby
class Renderrers::Base < AbstractController::Base
  abstract!

  include Rails.application.routes.url_helpers
  include AbstractController::Rendering
  include AbstractController::Logger
  include AbstractController::Helpers
  include AbstractController::AssetPaths
  include AbstractController::Callbacks

  include ActionView::Layouts

  helper :application

  class_attribute :template

  # パス設定のコピー
  %i|asset_host assets_dir|.each do |sym|
    __send__(:"#{sym}=", ActionController::Base.public_send(sym))
  end

  # URL設定のコピー
  class << self
    delegate :default_url_options, to: :ApplicationMailer
  end

  def render
    run_callbacks(:process_action) do
      html = render_to_string(template, layout: 'pdf')
      PDFKit.new(html).to_pdf
    end
  end

  # ビューの処理に必要となる情報
  def action_name
    'print'
  end

  def controller_name
    self.class.name.to_s.demodulize.underscore
  end
end
```

引っかかった点としては、

* アセットの設定やURL設定は、他所から借りてくる必要がありました。
* コールバックを動作させるために、`run_callbacks`の中で`render_to_string`する必要がありました。
* ここでは省略していますが、`active_decorator`のような、`ActionController`に追加のコードを組み込むgemを使っている場合、そのモンキーパッチ用コードも入れる必要があります。

なお、コントローラーと同じく1回`render`するために1インスタンスが必要となりますので、都度`new`する必要があります。
オフラインリアルタイムどう書く E24 の実装例（腕力版, Rust）

問題 : http://nabetani.sakura.ne.jp/hena/orde24tancho/
実装リンク集 : https://qiita.com/Nabetani/items/928d6a94d83c21ef64d7

次回のイベントは 12/8。
詳しくは
https://yhpg.doorkeeper.jp/events/82699
を御覧ください。
まだ問題も決まってないけど、 Rust での実装例を用意したいと思っている(未定) ので、Rust 好きの方も是非。

で。
https://qiita.com/Nabetani/items/e979f3575f82916960c6 を移植した。
実装例は以下の通り。

```rust:Rust
const NUMS: &'static str = "0123456789abcdefghijklmnopqrstuvwxyz";

fn digit_values(digits: &mut Vec<i64>, mut num: i64, base: i64) {
    digits.clear();
    loop {
        digits.push(num % base);
        num /= base;
        if num == 0 {
            return;
        }
    }
}

fn digit_text(num: i64, base: i64) -> String {
    let mut digits: Vec<i64> = Vec::new();
    digit_values(&mut digits, num, base);
    digits.reverse();
    digits
        .iter()
        .map(|c| (NUMS.as_bytes()[*c as usize] as char).to_string())
        .collect::<Vec<String>>()
        .join("")
}

fn maxvalue(base: i64) -> i64 {
    let mut r = 0i64;
    for i in 1..base {
        r = r.wrapping_mul(base);
        r = r.wrapping_add(i);
        if r < 0 {
            return i64::max_value();
        }
    }
    r + 1
}

fn is_mono(digits: &mut Vec<i64>, num: i64, base: i64) -> bool {
    digit_values(digits, num, base);
    for s in 1usize..digits.len() {
        let c0 = digits[s - 1];
        let c1 = digits[s];
        if c0 <= c1 {
            return false;
        }
    }
    true
}

fn solve_impl(base: i64, ord: i64) -> i64 {
    let mut count = 0;
    if (1i64 << (base - 1)) < ord {
        return 0;
    }
    let max = maxvalue(base);
    let mut digits: Vec<i64> = Vec::new();
    for i in 1i64..max {
        if is_mono(&mut digits, i, base) {
            count += 1;
            if count == ord {
                return i;
            }
        }
    }
    0
}

fn solve(src: &String) -> String {
    let nums = src
        .split(",")
        .map(|e| e.parse::<i64>().unwrap())
        .collect::<Vec<i64>>();
    let ans = solve_impl(nums[0], nums[1]);
    return if ans == 0 {
        "-".to_string()
    } else {
        digit_text(ans, nums[0])
    };
}

fn test(num: i32, src: String, expected: String) {
    let actual = solve(&src);
    let okay = actual == expected;
    println!(
        "{}, {}, src: {}, act: {}, exp: {}",
        num,
        if okay { "ok" } else { "**NG**" },
        src,
        actual,
        expected
    );
}

macro_rules! test {
    ($n:expr, $x:expr, $y:expr) => {
        test($n, $x.to_string(), $y.to_string());
    };
}

fn main() {
    test!(0, "16,333", "38e");
    test!(1, "2,100", "-");
    test!(2, "2,1", "1");
    test!(3, "2,2", "-");
    // 中略
    test!(56, "36,44811", "abpu");
}
```

いつもどおりテストの大半は省略。

手元のマシンで 30秒ぐらい。Go と同じぐらい。

まだ高速化の余地があるんじゃないかと疑っているけどよくわからない。

今回は i64 のオーバーフローでパニックになることを知った（デバッグ版だけかな）。便利。

今回の不満は。

ruby なら

```ruby:ruby
s.each_cons(2).all?{ |c0,c1| c1<c0 }
```

と書けるところを

```rust:Rust
    for s in 1usize..digits.len() {
        let c0 = digits.iter().nth(s - 1).unwrap();
        let c1 = digits.iter().nth(s).unwrap();
        if c0 <= c1 {
            return false;
        }
    }
    true
```

と書いてしまったところ。なんかいいメソッドあるのかなぁ。
CakePHP2で開発環境で git管理しているdatabase.php core.phpを編集しても無視したい。


.gitignoreできないときは、下記で無視させるのがよさそう。

```
git update-index --skip-worktree app/Config/database.php
git update-index --skip-worktree app/Config/core.php
```


参考 [既に git 管理しているファイルをあえて無視したい - Qiita](https://qiita.com/usamik26/items/56d0d3ba7a1300625f92)
Pixar USD Houdiniプラグインのビルド

![houdini_2018-11-10_05-07-33.png](https://qiita-image-store.s3.amazonaws.com/0/51857/6e7ad6af-252a-3c0b-ab95-4643364fb888.png)


# 環境

> * Houdini 17.0.352 or 17.0.395
> * Windows 10 (or Windows 7)
> * Visual Studio 2017

### Note

この記事現在のHoudini Production Buildは17.0.352なので、そちらも環境に挙げているが、ビルド時に次のような問題がある。しかしながら、利用においては今のところ問題は感じてない。次のProduction Buildが出た時は、そちらを安定版として運用するのもアリ。

* Installパスが `C:\Users\<username>\Documents\houdini17.0(以下、ユーザーパス)`の中にある *dso* ディレクトリ以下になっており、本来ユーザーパス直下にあるべき *otls* や *scripts* 、 *python_panels* が *dso* ディレクトリの中に作成されてしまう。
    * 手動でそれらのお決まりディレクトリをユーザーパス直下に移してあげれば解決はする。
* アイコンの `pxh_gusdIcon.png` ファイルが含まれておらず、いくつかのノードのアイコンが飛んだ状態になる。
    * Daily Buildの方には含まれているため、そのファイルだけを引っ張ってきて `ユーザーパス\config\Icons` 以下に保存すれば解決はする。

# CMake

項目を次のように設定

Source code: `C:\Program Files\Side Effects Software\Houdini <HOUDINI_VERSION>\toolkit\usd_houdini_plugins`
Buld binaries: 任意の書き出し先

追加でパスを設定
Houdini_DIR = `C:\Program Files\Side Effects Software\Houdini <HOUDINI_VERSION>\toolkit\cmake`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/51857/675480cd-b95a-e3e7-ef19-767a5eedb917.png)

### VSプロジェクト環境の選択

![cmake-gui_2018-11-18_08-27-22.png](https://qiita-image-store.s3.amazonaws.com/0/51857/ed83057c-0988-1538-cfec-6732c435fe6b.png)


# ビルド

特に何もせずReleaseでビルドするだけ。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/51857/abd3b003-a20e-b900-a603-ec88cfb2f26d.png)



# ベストプラクティス

こういったビルドを行う場合は、上記のNoteに記述のとおり、想定してなかった事が起こることもあるため、クリーンな状態で、問題をなるべく排除したうえで行うのが良い。
でないと、ユーザーのローカル環境が汚染されてしまうため、いざ、また同じビルドを行う際にどのファイルが古かったのか、どのファイルを除けばいいのかが不明確になる。

なので、以後の管理のためにも次の事を行うのをお勧めする。

1. ユーザーパス(A)のディレクトリを *_houdini17.0* とかに名前を変えてあげたうえで、一度Houdiniを立ち上げて、クリーンなユーザーパス(B)構造を作った上でビルドする。
2. ビルドでユーザーパス(B)に作成されたファイルを抜き出してきて別ディレクトリに移す。
    * 例：`C:\tools\Houdini\USD\17.0.395_181118`
    * ビルドで作成されたファイルのみを以下の様にまっさらなディレクトリに移す。
    * ![image.png](https://qiita-image-store.s3.amazonaws.com/0/51857/4b1cdc25-aab1-d553-84fb-b13af19d6e1c.png)

3. ビルドに使用したユーザーパス(B) *houdini17.0* を削除する。
4. *_houdini17.0* とリネームしたユーザーパス(A)を *houdini17.0* に戻す。
5. ユーザーパス(A)の中にある　**houdini.env** にパスを追加する。
    * `HOUDINI_PATH=C:\tools\Houdini\USD\17.0.395_181118;&`
vbsの作法 その11

#概要

vbsの作法を調べてみた。
プロパティ・メソッドを調べてみた。

#WScript プロパティ・メソッド

|プロパティ・メソッド      |    内容       |
|:-----------------|:------------------|
| Arguments     | コマンドライン引数    |
| CreateObject  |  指定したObjectを作成  |
| Echo  |  文字プリント  |
| Stdin  |  標準入力  |
| Stdout  |  標準出力  |
| Quit  |  終了  |
| ScriptFullName  | スクリプトのパス   |
| Version  | バージョン   |
| MsgBox  | メッセージボックス   |
| Sleep  | スリープ   |
| ConnectObject  | Objectに接続   |
| Name  |  exeの名前  |
| InputBox  |  インプットボックス  |
| Path  |  exeのパス  |
| ScriptName  | スクリプトの名前   |
| DisconnectObject  |  Objectを開放  |
| GetObject  | Objectを取得   |

以上。
インポートプログラム spinel-produce の概成

[ハンズオン準備](https://qiita.com/hfu/items/6026eec6816465d7e7a9)の第６回です。

# インポートプログラムの機能定義とソースコード分割
インポートプログラムは、データソースから地物単位に読み込みを行い、地物ごとにレイヤ名とズームレベルを割り当てるプログラムとします。

ソースコードは次の通り分割します。

- **download.js**: ハンズオンの対象となるデータをダウンロードして保存します。
- **import.js**: ダウンロードしたデータを読み出して、レイヤ名とズームレベルを割り当て、GeoJSON Text Sequence にします。このうち、レイヤ名とズームレベルを割り当てる部分については、データ依存ですので、下記　modify.js に掃き出します。
- **modify.js**: 地物を受け取って、レイヤ名とズームレベルを割り当てて変換する関数を記述します。このコードが実質的にベクトルタイルスキーマを定義するものとなります。modify.js の仕様については、[modify-spec](https://github.com/hfu/modify-spec) に書き出してあります。

# 実装
https://github.com/un-vector-tile-toolkit/spinel-produce に実装を置いています。

import.js の結果を Tippecanoe で処理して得られた mbtiles を、さしあたり tileserver-gl-light にかけることで、ダウンロードしたデータが確かにベクトルタイルとして表示できることは確かめました。

これから、それぞれのデータによりしっかりとしたベクトルタイルスキーマを与えることで、最低限の性能を持つベクトルタイルにしていく必要があります。

# 次回
modify.ms を使ってOSM データに割り当てるベクトルタイルスキーマについて検討を進めます。
What is a JSON file ?

A JSON(JavaScript Object Notation) File is a file containing JSON object and JSON Array. JSON file is mainly used for exchange data from the server to web Application or Mobile Application.  it is a stander Data exchange format. JSON files are very lightweight, text-based, human-readable, easily editable with any text editor.

You can refer below files. This file contains that JSON object.
{
    "firstName": "Rajesh",
    "lastName": "Kumar",
    "gender": "man",
    "age": 24,
    "address": {
        "streetAddress": "126 Udhna",
        "city": "Surat",
        "state": "GJ",
        "postalCode": "394221"
    },
    "phoneNumbers": [
        { "type": "home", "number": "7383627627" }
    ]
}

You can also call sample-json API directly.
 

https://tools.learningcontainer.com/sample-json.json

 

 


www.learningcontainer.com

Refer for more information on Json and other technology.

 

You can compare JSON file, data and URL on


http://jsoncompare.org

   its best tool for comparing with details.


http://jsondiff.org

This is also Good Tool for Diff check in Json Data.


You can format your JSON file and URL and Data directly on


http://jsonbeautifier.org
http://jsonparser.org/
– it is very powerful and easy tool for view JSON data.
git よく使うコマンド一覧

# 目次
__・clone__
__・add__
__・commit__
__・push__
__・log__
__・pull__
__・checkout__
__・fetch__
__・merge__
__・cherry-pick__

# clone
```php
# 1. リポジトリをコピー
git clone [repository PATH]
```

# add
```php
# 1. ファイルやディレクトリをインデックスに追加
git add [filename]

# 2. 全ての変更を含むワークツリーの内容をインデックスに追加
git add -A
or
git add --all

# 3. 以前コミットしたことがあるファイルだけインデックスに追加
git add -u
```

# commit
```php
# 1. インデックスに追加されたファイルをコミットする
git commit

# 2. コミットメッセージを同時に指定
git commit -m "[comment]"

# 3. 変更されたファイル（新規を除く）をインデックスに追加し、コミットする
git commit -a

# 4. 直前のコミットを修正する
git commit --amend
```


# push
```php
# 1. リモートリポジトリに変更を書き込む
git push [remote] [branch]

# 2. リモートリポジトリに全てのタグをアップロード
git push push [remote] --tags

# 3. リモートリポジトリに指定したタグをアップロード
git push [remote] [tagname]

# 4. 指定したブランチ、もしくはタグをリモートリポジトリから削除
git push [remote] :[branch or tagname]
```


# log
```php
# 1. コミットログを参照する
git log

# 2. コミットログの先頭７文字のコミットIDを表示する
git log --oneline

# 3. コミットログのHEADの位置を明示する
git log --decorate

# 4. コミットログを縦グラフで表示する
git log --graph

# 5. 指定した文字がコミットログに含まれるコミットを表示する
git log --grep "検索文字"
```
# pull
```php
# 1. リモートリポジトリの変更を取り込む
git pull [remote repository PATH] [branch]
```

# checkout
```php
# 1. ブランチを変更
git checkout [branch]

# 2. コミットされた過去のリポジトリを復元
git checkout [commit id]

# 3. マージでコンフリクトしたときに情報を指定してファイル内容を採用する
git checkout --ours [filename]

# 4. マージでコンフリクトしたときに下方を修正してファイル内容を採用する
git checkout --theirs [filename]
```
# fetch
```php
# 1. リモートリポジトリの最新情報を追加する
git fetch [remote repository]

# 2. リモートリポジトリの削除情報をローカルに更新する
git fetch --prune
```
# merge
```php
# 1. 現在のブランチに他のブランチをマージする
git merge [input_branch]

#現在：master 取込む：dev
#masterにdevのファイルが取り込まれる
git merge dev
```
# cherry-pick
```php
# 1. 特定のコミットだけマージ
git cherry-pick [commit id]

git cherry-pick ed3eea08d74d5c458b670f6175bbc0b4f77c1308
```
Discordで動作するワンナイト人狼BotをPythonで作ってみた

# 概要
友人とよくDiscordで通話しながらボードゲームやワンナイト人狼を遊びます。ワンナイト人狼はWebで遊んでいたのですが、自分でカスタマイズして自由に遊びたいと思い立ち作ってみました。

# ソースコード・遊び方
[GitHub](https://github.com/ughvj/discord-onenight-werewolf)にソースコードや遊び方を公開しています。`Docker`をインストールしておく必要があります。(ローカルにpythonの環境を作れば当然`Docker`無しでも動きます。)

# つまずいた点
Qiitaでは、DiscordのBotを作る上でつまずいた点を書き留めておきます。

## `discord.py`のバージョンがよくわからなかった
`discord.py 1.0.0a`の[リファレンス](https://discordpy.readthedocs.io/ja/latest/api.html)があるので、最新版はこれだろうと思っていたのですが、`pip`で`discord.py`を落としても、最新は`0.16.12`だと怒られました。調べてみても結局よくわからなかったので、`0.16.12`で開発しています(なお、`python`は`3.5.3`です)。

## 日本語の情報が少ない
DiscordでBotを作ってみたという情報はQiitaにも個人ブログにもそこそこあるのですが大体がハンズオンのみで、それ以上のことをしたいとなると途端に情報が途絶えました。「チャンネルじゃなくて個人にメッセージを送りたい！」っていう一見簡単な要求も日本語の情報は無かったです(探し方の問題でしょうか ちなみに、個人にメッセージを送りたい場合は、`discord.Client.send_message(discord.Member, String)`です)。拙い英語力で仕方なく[公式のリファレンス](https://discordpy.readthedocs.io/en/latest/api.html)とにらめっこしてました。とりあえず検索してみてお目当てのものが無さそうだったらすぐに公式リファレンスを参照した方がかえって効率良いと思います。

## 非同期処理に慣れていなかった
Discordへメッセージが送られてきたイベントのハンドラは`async def on_message()`です。これは、ユーザがメッセージを送信したタイミングで呼ばれるので、複数のユーザが同じタイミングでメッセージを送信した場合、同じ数だけハンドラが呼ばれます。当たり前ですが。この性質を抑えておかないと、ちょっと実装で苦労するかもしれません。このワンナイト人狼Botでいうと、全員が夜行動を終えたタイミングや、投票を終えたタイミングをどう判定するか、という点で悩みました。私の場合、プレイヤーに行動完了フラグと投票完了フラグを持たせ、ハンドラが呼ばれるたびにプレイヤー全員のフラグをチェックし、全部立っていたら次へ進む、といった同期方式で実装しました。正直この実装も、他の方式が思いつかなかったので苦肉の策です。全く同じタイミングでメッセージが送信された場合、フラグチェックをパスしてしまう気がします。どういう実装が良いんだろ。。
rubocopのConventionからexpand_path、__FILE__、__dir__を理解する

rspecを導入してrubocopを実行すると以下のConventionが表示された  

```console
$ bundle exec rubocop
〜省略〜
spec/rails_helper.rb:4:14: C: Style/ExpandPathArguments: Use expand_path('../config/environment', __dir__) instead of expand_path('../../config/environment', __FILE__).
require File.expand_path('../../config/environment', __FILE__)
             ^^^^^^^^^^^
〜省略〜
```

**rubocopが言っていること:**
`expand_path('../../config/environment', __FILE__)`の代わりに 
 `expand_path('../config/environment', __dir__)`を使ってね。  

**本当に書き直していいのか？:**
`expand_path`、`__FILE__`、`__dir__`がフワッとしていたので今回の内容に合わせて整理

- 取得したいものは、`{app_dir}/config/environment`
- File.expand_pathは第1引数の絶対パスを返す。
- File.expand_pathの第2引数は参照の基準となるパス。
- `__FILE__`は実行ファイル名を相対パスで取得する
- `__dir__`は実行ファイルのディレクトリ名を絶対パスで取得する

**試してみる:**
ディレクトリ構成  

```
{app_dir}
├── config
│   ├── environment.rb # ←ここを参照しようとしている
├── spec # 実行されるカレントディレクトリ
│   ├── rails_helper.rb # ←ここから
```
検証  

```console
$ cd spec/
$ pry
[1] pry(main)> File.expand_path('../../config/environment', __FILE__)
=> "/Users/XXX/app/{app_dir}/config/environment"
[2] pry(main)> File.expand_path('../config/environment', __dir__)
=> "/Users/XXX/app/{app_dir}/config/environment"
```
同じ結果が取得できた。書き換えても問題ない。  


参考:
https://docs.ruby-lang.org/ja/latest/method/File/s/expand_path.html
https://docs.ruby-lang.org/ja/latest/method/Kernel/m/__dir__.html
Electronでvue-cli-service buildしたindex.htmlを読みこんだら躓いた話


## 概要

とりあえずElectronを触ってみたくなったので、vue uiでプロジェクトを作成して
```yarn run build```したものを読み込むようにして```electron .```で
起動してみたところ以下みたいに真っ白の画面が表示されてしまった…
![image.png](https://qiita-image-store.s3.amazonaws.com/0/177947/5e70f597-b3c3-1fd8-4602-944b5a5daf83.png)

## なぜこうなったのか

Devtoolを起動してソースコードを覗いてみたところ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/177947/3e55528f-56bc-d883-3445-c26764908523.png)

読み込んでいるbundleしたjsのパスが```/js/chunk...```のようになってしまっていて、読み込めていないようであった

## 解決策

[Add baseUrl option in vue-cli-service build command · Issue #1623 · vuejs/vue-cli](https://github.com/vuejs/vue-cli/issues/1623) 

vue.config.jsというファイルを作成し以下のように記載すると、build時のbaseUrlを変更できる。

```javascript:vue.config.js
module.exports = {
  baseUrl: './'
}
```
作成後、```yarn run build```しなおして```electron .```して見ると、無事vue.jsのサンプルページが表示された。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/177947/2fc6e582-0f5f-be1b-0f16-2bd2124740b6.png)
プログラミング言語初心者がTensorflowで良品・不良品判断をするプログラムを作るまで

#初めに
この記事は多くの知識者にとっては役に立たないかもしれません。
私はプログラミング初心者なので、新しくAIや機械学習といった言葉に興味を持った人の目線の記事になります。
今日から主にTensorflowや実際の使用を目指して勉強したことを書いていこうと思いますが、間違ったことを言うかもしれません。
その場合は気が付いた時点で記事を修正していきます。
目標は**ベルトコンベアに流れる製品の良品・不良品の判断をしたい！**です。

以下に始めるにあたって私の情報をまとめます。

# 私のレベル
生物理系院卒ですが、授業でR使ったなーくらいのレベルです。
あとはRNASeqデータをいじるのに若干Parlを扱ったくらい。
tensorflowってどんな言語？って思ってたくらいわかりませんでした。

# 目標
上にも書きましたが、ベルトコンベアに流れる製品の良品・不良品判断を実用化レベルまで持っていけたらいいなと考えてます。
具体的には冷凍食品のアピアランス検査がしたいです。
（道のりは長い…）
短期的にはtensorflowのチュートリアルから理解していきたいと思います。

# どうしてこの目標を持つようになったのか
PCでカタカタッターン！ってやるのが夢だったんです。
だからAIとかニューラルネットワークとか言ってるとわくわくしてきます。
（学生の時は授業でいきなりR使って動機もなくIrisデータの回帰分析やらされたので嫌いでした。）
最近、何かを作ってみたい欲があったのですが、”家で実用化するようなことないな”となり、現在、仕事で多くの工数割いてる検品業務をAIがやってくれたらいいなと考えて今に至ります。
実用化がどれ程の難易度なのかわかりませんが、とりあえずやってみます。

# 終わりに
実は昨日から色々調べていて、自宅PCにAnaconda入れてPythonでtensorflow使えるようにしてあります。
はじめは記事を書くつもりがなかったので、インストールの仕方の画像とか撮ってなく、次の記事はチュートリアルから初めて行きます。
いきなり親切じゃなくてすみません。
CircleCiとFireBaseを連携させるのに4時間かかった



CircleCiとFireBaseの連携に4時間かかったのでまとめ( ;∀;)

#結果は下記の.circleci/config.yml
https://github.com/kazukinakamuraKN/my-markdown-2

####やったこと

#Firebaseデプロイ用トークンの発行

以下のサイトを参考にさせていただきました。
https://qiita.com/ottijp/items/974e092a87fbffc3f191

#Firebaseデプロイ用ID

![2018-11-18.png](https://qiita-image-store.s3.amazonaws.com/0/253014/22f4953d-6cd3-6f64-72de-81aa588b03b8.png)

赤押して、緑押せば、プロジェクト ID が表示されているはずです。それです。

#デプロイするにはCI環境下で、Firebase のデプロイをしたいので、firebase-toolsをインストールする必要がある

以下のサイトを参考にさせていただきました。
https://qiita.com/samuraikun/items/a7de51dab70ab853b9ff

#デプロイコマンドが実行されない

今まで見てきたサイトを参考にすると、

```
command: >- 
              ln -s ./node_modules/firebase-tools/bin/firebase . &&
              ./firebase deploy --only hosting --project "$FIREBASE_PROJECT_ID" --token "$FIREBASE_TOKEN"
```

か、

```
commands:
      - firebase deploy --project "$FIREBASE_PJ" --token "$FIREBASE_TOKEN"
```

といったコマンドをじっこうすればよいと考えられます。

しかし、自分の環境ではうまくいきませんでした。

node_modules/firebase-tools/binにある、firebaseを実行すればよいものだとおもい、パスを調べるためにyml内に

```
find `pwd` -maxdepth 1
```

上記コマンドを仕込み、/home/circleci/repo/node_modules/firebase内のfirebaseに対して、コマンドを実行したりして、みたのですが、うまくいかず

```
/bin/bash: repo/node_modules/firebase-tools/bin/firebase: No such file or directory
Exited with code 1
```

このエラーを30回くらいみました。

#解決

https://blog-tech.xyz/2018/08/31/hexo-on-circleci-and-firebase/
https://discuss.circleci.com/t/deploy-to-firebase-not-working/22887/3

上記サイトを参考にしたところ、

〇　node_modules/.bin/firebase
×　node_modules/firebase-tools/bin/firebase

だということが判明しました。確かに、正しいほうのフォルダ内を見ると、firebaseや、firebase.cmdといった、それっぽいファイルがあります。

ということで、最終的には、

```config.yml
# Javascript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
#
version: 2
jobs:
  build:
    docker:
      - image: circleci/node:8

    working_directory: ~/repo

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "package.json" }}
          # fallback to using the latest cache if no exact match is found
          - v1-dependencies-

      - run: npm install

      - run:
          name: 'Install Dependecies'
          command: npm install --save-dev firebase-tools

      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package.json" }}

      - run:
          name: 'Build Client Code(react-scripts によるビルド実行)'
          command: npm run build
          
      - attach_workspace:
          at: .
          
      - run:
          name: 'Deploy to Hosting'
          command: node_modules/.bin/firebase deploy --only hosting --project "$FIREBASE_PJ" --token "$FIREBASE_TOKEN"
```
となりました。

#参考にさせていただきました。助かりました。

https://blog-tech.xyz/2018/08/31/hexo-on-circleci-and-firebase/
https://discuss.circleci.com/t/deploy-to-firebase-not-working/22887/3
https://qiita.com/samuraikun/items/a7de51dab70ab853b9ff
https://qiita.com/ottijp/items/974e092a87fbffc3f191
Markdown記法を使ってアカウント一覧表を作る

# Markdown記法を使ってアカウント一覧表を作る

アカウントが色々増えてしまい、どうまとめようか考えた時に
Markdownで表を作り管理することとしました。
１つのセルの中に改行をいれて上段にID、下段にパスワードを入れるようにしました。
行も列も好きなだけ追加可能です。

### アカウント一覧表

| MailAdress <br> password | TwitterID <br> password | InstagramID <br> password | Memo etc |
|:--|:--:|:--:|:--:|
|`hoge1@gmail.com` <br> いつもの | hoge1<br>いつもの | hoge1<br>いつもの | メインアカウント |
|`hoge2@i.softbank.jp` <br> いつもの | hoge2<br>xxx123xxx | hoge2<br>xxx456xxx |  サブアカウント |
|`hoge3@gmail.com` <br> xxx123xxx | <br> | | 捨てアカウント |
|`hoge4@yahoo.co.jp` <br> xxx789xxx | hoge4<br>xxx789xxx | | 捨てアカウント |

### Markdown

```
| MailAdress <br> password | TwitterID <br> password | InstagramID <br> password | Memo etc |
|:--|:--:|:--:|:--:|
|`hoge1@gmail.com` <br> いつもの | hoge1<br>いつもの | hoge1<br>いつもの | メインアカウント |
|`hoge2@i.softbank.jp` <br> いつもの | hoge2<br>xxx123xxx | hoge2<br>xxx456xxx |  サブアカウント |
|`hoge3@gmail.com` <br> xxx123xxx | <br> | | 捨てアカウント |
|`hoge4@yahoo.co.jp` <br> xxx789xxx | hoge4<br>xxx789xxx | | 捨てアカウント |
```
photoshopのjsxをプロトタイプで簡潔に。

フォトショップのjsxはprototypeで簡潔に書く事ができます。

以下、サンプルです。（座標とカラーだけ指定すれば、描画できるプロトタイプを宣言しています。）

参考サイト：http://www.openspc2.org/book/PhotoshopCC/

```js




//プロトタイプで描画を宣言する
function Draw() {}
Draw.prototype.bark =
//x1〜y4まで→座標、R,G,B→RGBでカラー指定
function (x1,y1,x2,y2,x3,y3,x4,y4,R,G,B) {
//単位をピクセルにする
　preferences.rulerUnits = Units.PIXELS
//画像のサイズを取得
  const w = activeDocument.width;
  const h = activeDocument.height;

  RGBColor = new SolidColor();
  RGBColor.red    = R;
  RGBColor.green  = G;
  RGBColor.blue   = B;
  selReg = [[w-x1,h-y1],[w-x2,h-y2],[w-x3,h-y3],[w-x4,h-y4]];
activeDocument.selection.select(selReg);
activeDocument.selection.fill(RGBColor,ColorBlendMode.NORMAL, 100, false);
activeDocument.selection.deselect();
}

//インスタンスで座標とRGBだけ指定すれば描画できる。
draw = new Draw;
draw.bark(10,10,10,0,0,0,0,10,25,54,47)

```
エクセルでモンテカルロシミュレーションを実行し投資信託の将来成績を予測する

こんにちは、東北投信という投資関連のウェブサイトを運営しています。
https://blog.tacos-heaven.xyz/

今回は、東北投信で記事を作成する際に利用している、__モンテカルロシミュレーション__ツールの作成について解説します。__モンテカルロシミュレーションとは、乱数を用いたシミュレーション方法__のことで、東北投信では__投資信託の運用成績をランダムに発生させる方法__として利用しています。

「投資信託の運用成績が乱数シミュレーションで完全に再現できるか」には限界がありますが、投資信託への理解を深めるためにはとても便利です。今回は簡単に「__正規分布__」で乱数を発生させる方法について解説します。

##乱数を発生させる数式

乱数を発生させる数式はエクセルのセルに用意します。式は以下の通り。

```vb
=NORM.INV(RAND(),リターン,リスク)
```
>NORM.INV(確率,平均,標準偏差)
>NORM.INV 関数の書式には、次の引数があります。
>確率    必ず指定します。 正規分布における確率を指定します。
>平均    必ず指定します。 対象となる分布の算術平均 (相加平均) を指定します。
>標準偏差    必ず指定します。 対象となる分布の標準偏差を指定します。

https://support.office.com/ja-jp/article/norm-inv-%E9%96%A2%E6%95%B0-54b30935-fee7-493c-bedb-2278a9db7e13

ここでは確率の部分に、0～1の間で数値を乱数生成するRAND関数を与えることで、投資の成績に代用します。

正規分布する乱数の発生の解説はこちらが役立ちます。

http://zellij.hatenablog.com/entry/20111029/p1

今回は毎年の運用成績をこの数式で発生し、運用成績を累積させます。例えば50年間の運用をシミュレーションするならば、このNORM.INV関数も50個（50年分）用意し、毎年の利回りとして運用している金額に掛け算するわけです。

実際に毎年の運用成績を乱数で作ったものがこちらです。

![20170426b.png](https://qiita-image-store.s3.amazonaws.com/0/317345/da72e0e2-ca67-847e-ea10-8e78f7f0c8c5.png)

以下はmyINDEX様にて公開されている、TOPIXの毎年の成績です。

![20170426a.png](https://qiita-image-store.s3.amazonaws.com/0/317345/c1d3bce5-d91f-2753-251b-501585adec39.png)

https://myindex.jp/data_i.php?q=TS1047JPY

なんとなく似ているように感じませんか？

##計算回数を増やす

ここまでの話は__1回の運用を乱数で再現しただけなので、統計データとしては不十分__です。そこで、計算回数を増やすことで、統計的に利用できるようにします。

特に根拠はありませんが、筆者作成のツールでは__1万回__の計算を行なっており、2回目以降の再計算を行なうためにVBAの出番となります。

計算の流れは、

1. 最初に運用年数、リターン、リスク、積立額などをインプットする
2. 計算開始する
3. NORM.INV(RAND(),リターン,リスク)にて、1回の運用の計算を行なう
4. VBAで必要なセルから必要なデータを別のセルにコピーする
5. シートを再計算し、新たな乱数を与える
6. 再び1回の運用計算を行なう（以後、4→5→6の繰り返し）
7. 1万回計算を行なったら、1万個のデータから最小値・最大値・平均値・中央値などを取得する
8. 終わり

です。

VBAで行なうことはデータのコピーと簡単な統計処理ぐらいなので、正直簡単です。実際構文自体もセルの読み込みのほか、For文ぐらいしか使っていません。


```vb
For i = 1 To 繰り返し回数
    Worksheets("シート名").Calculate 'シートの再計算
    Worksheets("シート名").Cells(セル書込位置, セル書込位置).Value = i
    Worksheets("シート名").Cells(セル書込位置, セル書込位置).Value = Cells(セル読込位置, セル読込位置).Value
Next
```

```vb
Set Rng = Range(セルスタート位置, セル終了位置)

平均値：WorksheetFunction.Average(Rng)
最大値：WorksheetFunction.Max(Rng)
最少値：WorksheetFunction.Min(Rng)
中央値：WorksheetFunction.Median(Rng)
```

これで膨大なデータ群ができますので、あとは好きにデータ処理を行ないます。

![20181117ab.png](https://qiita-image-store.s3.amazonaws.com/0/317345/6591950a-85a5-21e1-5daa-ebc89f2c769f.png)

ちなみに、2012年のCore i7マシンにて1万回の乱数計算を行なうと大体10秒ぐらいかかります。計算毎に画面の描画を伴うと時間の浪費に繋がるので、Application.ScreenUpdatingを使うことで高速化可能です。

```vb
Application.ScreenUpdating = False '画面に描画しない
Application.ScreenUpdating = True  '画面に描画する
```

##今後の課題

投資信託の運用成績は「対数正規分布」に近いとも言われます。

http://www.fund-no-umi.com/blog/2008/12/post-c019.html

このあたりも考慮した話も記事にしたいと思ってます（ファイル自体は作ったので、あとは記事ネタに使うだけ）
GUIアプリ移行が楽になるhomebrew-cask(Mac)

PC移行や、フリーランスで現場が変わる度に発生する「開発環境」の設定が簡略化できる。

#手順#

##１）homebrewをインストール##
パッケージ管理ツール。
インストールコマンドは、以下公式サイトにあるコマンドをコピペし実行
https://brew.sh/

※Xcodeがインストールされていない場合は、homebrewインストール中にインストールが始まるので、
リターンキー押下→パスワード入力でインストール
※homebrew以外でインストール済みだけどXcodeを起動した事がない場合はXcodeを起動して、
ライセンス契約のウィザードが出るので同意しておく。（未同意のままだとhomebrewがインストールできない為です）

##２）homebrew-caskをインストール##

```
brew install cask
```

以上。
あとはcaskでインストールしたいGUIアプリを探してインストール。

インストールしたいソフトがcaskにあるか探す。部分検索できます。

```
brew search [アプリ名]
```
例えば、firefoxを探す場合、

```
brew search fox
```
他サイトではbrew cask search ~で探すとあって試したら、そんなのないよ、brew searchでやってとTerminalに言われてしまったので、上記で検索。

検索結果が以下のように表示されます。

```
==> Formulae
fox

==> Casks
firefox ✔                    firefox-esr                  foxitreader                  multifirefox
firefox-beta                 firefox-nightly              foxmail                      waterfox
firefox-developer-edition ✔  fox                          gifox
izumi:~ MasakoIzumi$ 
```
Formulaeはhomebrew（パッケージ管理）でのパッケージ検索結果
Casksはhomebrew-caskでの（GUIアプリ管理）でのアプリ検索結果
チェックが入っているものはインストール済のアプリ

##３）アプリのインストール##

アプリのインストールコマンドは以下。
上記検索結果で表示された、caskに登録されている名称を入力。

```
brew cask install [アプリ名]
```
例：firefoxをインストールする場合

```
brew cask install firefox
```

以下のように出ればインストール完了。

```
==> Downloading https://download-installer.cdn.mozilla.net/pub/firefox/releases/63.0.3/mac/en-US/Firefox%2063.0.3.dmg
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'firefox'.
==> Installing Cask firefox
==> Moving App 'Firefox.app' to '/Applications/Firefox.app'.
🍺  firefox was successfully installed!
```

インストールしたアプリをリストで確認

```
brew cask list
```

リストが以下のように表示されます

```
The domain/default pair of (kCFPreferencesAnyApplication, AppleLanguages) does not exist
appcleaner                   firefox-developer-edition    onyx                         virtualbox
cakebrew                     google-chrome-canary         opera                        visual-studio-code
```

##４）インストールしたアプリを書き出す##
Brewfileというファイル名で、ホームディレクトリ直下に書き出されます。

```
brew bundle dump
```

Brewfileの上書き保存

```
brew bundle dump --force
```

##５）別のPCでアプリを一括インストール##

homebre-caskインストールまで済ませたら、BrewfileをPCに入れて(コピペやダウンロードでOK)、
TerminalでBrewfileファイルがあるディレクトリまで移動

```
cd [Brewfileファイルがある場所]
```
例：自分のホームディレクトリ直下の場合

```
//xxxはホームディレクトリ名。家アイコンのがホームディレクトリです。
cd /Users/xxxx
```
ちなみに、cdと半角スペース入力後、Finderからフォルダを直接Terminalにドラッグすると
ディレクトリのパスが自動入力されます。

移動後、以下コマンドで一括インストール

```
brew bundle
```

####参考サイト####
以下サイトを参考にさせていただきました。
https://www.evoworx.co.jp/blog/homebrew-cask/
G Suiteのサービス概要

#G Suite
存在は知っていたけど、それぞれのサービスについてそこまで詳しく知らなかったので
メモ程度ですがまとめました。

##Gmail
- 独自ドメインが作成可能
- オフラインでも作業可能（閲覧と下書き）
- チャット（ハングアウト）を受信トレイから起動可能
- 無制限のメーリングリスト
- ファルダ容量は30GB

##Googleコンタクト
- Gmailで利用できるアドレス帳のようなもの
- 連絡先のグループも作成、一斉送信も可能
- Gmail,Googleカレンダーなどのすべてのサービスと連携可能

##Googleカレンダー
- 他人の予定も確認可能
- 会議室などの空き状況も確認して予約もできる
- 会議の参加者も設定できる（参加者のカレンダーにも反映される）
- 場所を設定しておくとGoogleマップとも連携可能

##Googleハングアウト
- コミュニケーションツール
- ビデオ通話
- 音声通話
- チャット（最大150人参加可能）
メンバー同士の位置情報の共有もGoogleマップと連携可能

##GoogleハングアウトMeet
- 解像度の高いビデオ会議
- 最大30人参加可能

##Googleドライブ
- 様々なファイルを保存可能
- あらかじめ権限を設定することで閲覧のみ、など設定可能
- Gsuite Business以上は容量無制限（4人以下は1TB）
- 共同編集が可能、最大50人参加可能
- 検索機能が優秀（ファイルの内容まで含まれる）
- Googleドキュメント、スプレッドシート、スライド、フォーム
- ドキュメントはワード形式に変換可能（スライドはPDFもいけそう）
- 自動保存される（もとに戻すのも可能）
- ファイル上でチャットのやり取りも可能

##Googleドキュメント
- インストール不要（ブラウザ上で動作する）
- 自動保存
- 共同編集可能

##Google＋
- いわゆる社内SNS
- オフィシャルサイトと紐付けることでGoogle検索結果の右上の方に表示される
- 個人向けは段階的に終了予定（50万人分の情報漏えいがあった）

##GoogleKeep
- メモアプリ
- 音声メモの場合はテキストに変換される
- Googleドライブとの連携可能
- 写真も保存可能（あとで検索もできる）
- チェックリストも作成可能（タスク管理）
- 共同編集可能
- リマインダー機能あり
- アーカイブ機能あり

##Googleサイト
- 簡単にWEBサイトが作成できるサービス
- テンプレートからカスタマイズ可能

##全体編
- 24時間365日体制のサポート
- オンラインストレージの容量が多い（Basicで1人30GB、Business以上なら無制限）
- モバイル端末の保護（端末を探したり、パスワード必須にしたり、データ削除も可能）
- 高度な管理機能（設定が簡単、2段階認証や）
- スムーズなデータ移行（MicrosoftExchangeサーバ、YahooのWebメールから移行可能）
- データは複数のデータセンターにコピーされ管理されているのでデータ消失のリスクが低い
「戻るボタン」を押して、入力値を保持させるには？

現在、連携フォームを作成していますが、「戻るボタン」を押すと入力値を保持したまま、ページ遷移できる方法が、やっとわかったため、今回はそのことについてご紹介します。

#セッションの使用
ページ遷移をするにあたって、**セッション**の設定は欠かせません。
**セッション**とは、個々のユーザーのデーターを格納して、複数のページをまたがるときに情報を永続させたまま、移動できる機能を持っています。

このとき、次のように入力します。

```php

<?php
session_start();

if(!isset($SESSION_['変数名'])) {
$SESSION_['変数名'] = 0;
} else {
$SESSION_['変数名']++;
}
?>
```
ちなみに、解除するときは、次のように表します。

```php

<?php
session_start();

unset($SESSION_['変数名']);
?>
```

このように、セッションを使うことで、ページ遷移を機能させます。

##history.back()の使用
「戻る」ということは、前のページに戻るということです。
そのため、前のページに移るように、指示する必要があります。

このとき、**history.back()**を使います。

入力例は以下の通りです。

```html

<button type="button" onclick=history.back()>戻る</button>
```

この「onclick」とは、ボタンを押したときに発動するという意味があります。


以上のように、戻るボタンを押して入力値も保持させます。
Macで便利なテキストエディタは何？

# はじめに

2年前にMacを購入するも自宅ではほとんど使わず。
今年から働き始めた職場で、Macを使い始めました。
何をするにも、いちいちネットで調べながらで大変だったのですが、
半年を過ぎるころから自宅でもデフォルトでMacを使うようになりました。
しかし、テキストエディタで満足できるものが見つかりません。
秀丸やサクラエディタが恋しい。

# 試したテキストエディタ

CotEditorを利用していますが、同僚が使っているテキストエディタを試して行っています。
現時点での感想をまとめます。

## CotEditor
最初に使い始めたテキストエディタ。可もなく不可もなくという印象です。
使いこなせてないだけかも知れませんが、あまり使い安さを感じないです。

２０１８/12/28 追記
・検索は別画面で表示される。主画面を閉じても残るのが気に入らない

## Visual Studio Code

IDE(Integrated Development Environment)ですが、普段はEclipseで開発しているため、メモやSQLを書くときに利用しています。使いこなせれば、これで十分かも知れません。

## Sublime Text

日本語の文字置換を試して見たが、日本語入力変換後にエンターキーを押すと、入力した文字が消えてしまう。仕事できる同僚が使っているので便利なのかと思ったら、全然使えない。

- [Sublime Textの検索窓に日本語を入力する方法](https://gist.github.com/chibicode/ad1f50b3b191ee694556)

## Adobe Bascket2

Webデザイナーが重宝するエディターのようです。
普段、純粋なHTMLやJavaScript、CSSのコーディングをしないので、プログラマーには Visual Studio Code の方がいいかも知れません。

## Atom

2018/12/28 ダウンロードしました。

## mi

2018/12/28 ダウンロードしました。
x == x が false になることはあるか

Ruby についての問題です。

以下の条件のもとで `x == x` が `false` になることはあるか。

* `x` は左辺・右辺ともローカル変数である
* `x` には**組込みクラスの**インスタンスが代入されている
* `==` は再定義されていない

<details><summary>答えはここをめくってね</summary>
ある。`x` に NaN が代入されているとき。
NaN は `Float` のインスタンスであり，`0.0/0.0` のような計算不能な演算の結果として得られるオブジェクト。そのため，たとえ自分自身とでも「数値的に等しい」とは言えない。
</details>
Apex での引数の扱いについて

Apexにおいては、プリミティブデータ型は値渡し、非プリミティブ型は参照渡しとざっくり覚えてましたが、どうも挙動を見ていると厳密にはJavaと同じく「参照の値渡し(共有渡し)」と呼ばれる動きになってるっぽい。

```java
Example__c e1 = new Example__c(Name = 'hoge');

System.assertEquals('hoge', e1.Name); 

fuga(e1);

System.assertEquals('fuga', e1.Name); 

void fuga(Example__c e2) {
    e2.Name = 'fuga';

    e2 = new Example__c(Name = 'fugafuga');
    System.assertEquals('fugafuga', e2.Name); 
}
```

e1の値は、fugaで書き換えた'fuga'には書き換わりますが、その後newした時の'fugafuga'には書き換わりません。

よく見ると、開発者ガイドでもそれっぽいこと書いてますね。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_defining_methods.htm

>メソッド内の参照を別のオブジェクトを指し示すように変更することはできませんが、オブジェクトの項目の値は変更できます。
javascript 有効桁を…(ﾟДﾟ;)

#Math.pow()

成功
function round(num){
 let r = num*Math.pow(10,d);
  r = Math.round(num);
 return num/Math.pow(10,d);
}

失敗
function round(num){
 let r = num*Math.pow(10,d);
 r = Math.round(r);
 return num*Math.pow(10,-1*d);
}

書きかけ
HerokuでEdge(CDN:CloudFront)アドオンを利用する

# 参考
[Edge \- Add\-ons \- Heroku Elements](https://elements.heroku.com/addons/edge)
[Edge \| Heroku Dev Center](https://devcenter.heroku.com/articles/edge)

# Edgeアドオンとは？

HerokuアプリをCloudFront経由で配信可能にするアドオン。

# 価格
$5/月から利用できる。

![スクリーンショット 2018-11-17 23.44.36.png](https://qiita-image-store.s3.amazonaws.com/0/141934/fecf7609-b977-5a69-3703-3828be95628b.png)

# 利用方法
アドオンを追加するとCloudFrontのURLが払い出される。
CloudFrontのURLはCLI,ダッシュボードから確認できる。

```shell-session
$ heroku config:get EDGE_URL
https://xxxxx.cloudfront.net
```

# ダッシュボード

CloudFrontのステータスやカスタムドメインの設定ができる。

![heroku-edige.png](https://qiita-image-store.s3.amazonaws.com/0/141934/b00baf0d-5493-669e-9dbd-a14c1a966ef5.png)

# キャッシュコントロール

CloudFrontの設定はドキュメントの[CloudFront configuration](https://devcenter.heroku.com/articles/edge#cloudfront-configuration)に記載されている。

ダッシュボードとドキュメントを見る限り、細かい設定はできないので、アプリ側で[cache-control](https://devcenter.heroku.com/articles/edge#cache-control)する必要がある。

```shell-session
# キャッシュされてないときのレスポンスヘッダ
$ curl -i https://xxxxx.cloudfront.net/users.json
HTTP/2 200
...
Cache-Control: max-age=3600, private
...
X-Cache: Miss from cloudfront
...

# キャッシュされてるときのレスポンスヘッダ
$ curl -i https://xxxxx.cloudfront.net/users.json
HTTP/2 200
...
cache-control: max-age=3600, public
...
x-cache: Hit from cloudfront
...
```




# レスポンスタイム

USリージョンに配置されているHerokuアプリへ直接アクセスする場合と比較して、Edge(CloudFront)経由のほうが断然はやい。

```shell-session
# Heroku(US)へ直接アクセス
$ curl -kL 'https://xxxxx.herokuapp.com/users.json' -o /dev/null -w "%{time_total}" 2> /dev/null
#=> 1回目: 1.074277
#=> 2回目: 0.859620
#=> 3回目: 0.784184
#=> 4回目: 0.881247
#=> 5回目: 0.735450

# Edge(CloudFront)経由でアクセス
$ curl -kL 'https://xxxxx.cloudfront.net/users.json' -o /dev/null -w "%{time_total}" 2> /dev/null
#=> 1回目: 0.054274
#=> 2回目: 0.059614
#=> 3回目: 0.153303
#=> 4回目: 0.067805
#=> 5回目: 0.058396
```
Vueの練習で色々作ったお話

# 作った。

## 宣伝
今回の作成物
→https://dafu.cf/tools/

みんな見てね(* ॑꒳ ॑*  ) 

## 何を作った？

* curlコマンドジェネレーター
* 文字数チェッカー
* IP確認(PHP/Leaflet.js)

## なぜVue.js??
* 簡単なリアルタイム処理
* 数行で実装可能
* PHPよりカンタン

例えば、文字数チェッカーはパラメータ1つ指定して、`{{hoge.length}}`だけで出来る。

きのこの里食べながらでも5分で作成可能(私は~~小枝シロノワール味派~~)


ちなみに細かいソースコードはGitHubにある。

https://github.com/kikiriko200/tools

これでファイルのDLが捗る(はず)
Angular " Can't resolve 'fs' in ~ " の対処法 

###各種バージョン

- Angular CLI: 7.0.6
- Node: 10.13.0
- OS: win32 x64
- Angular: 7.0.4

###エラーの詳細
外部ライブラリを導入しng serveを実行したところ
```Module not found: Error: Can't resolve 'fs' in 'C:\```
というコンパイルエラーが出た。
```npm install fs --save```
等、諸々をインストールしたけれど、ダメ。

#解決策
```packge.json``` に

```json:package.json
"browser": {
    "fs": false
}
```
を足したらコンパイルできた。
dockerでPostGISを入れたPostgreSQL環境構築

docker-composeでPostgre環境を構築するところから、データの確認までを紹介します。

## 環境
PostgreSQL 10.1
PostGIS 2.5

## 構成
今回は下記のような構成になります。dataディレクトリは自動で作成されますので、作らなくて問題ありません。

```
.
├── docker
│   └── db
│       └── data
│       └── sql
│           ├── create-tables.sql
│           ├── init-database.sh
│           └── insert-data.sql
├── docker-compose.yml
└── init-db.sh

```

## 構築
### 1. docker-compose.yml  
まずは、docker-compose.ymlでPostgreコンテナを用意します。

```docker-compose.yml
version: '3'

services:
  db:
    container_name: postgre_container
    image: mdillon/postgis
    environment:
      POSTGRES_DB: postgre
      POSTGRES_USER: docker
      POSTGRES_PASSWORD: docker
    volumes:
    - ./docker/db/data:/var/lib/postgresql/data
    - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
    - 5432:5432
```

### 2. sql
初期テーブル用のsql

```sql:create-tables.sql
-- 拡張をインストール
CREATE EXTENSION IF NOT EXISTS postgis;

-- テーブル削除
DROP TABLE IF EXISTS test_table;

-- テーブル作成
CREATE TABLE IF NOT EXISTS test_table
(
    gid    INTEGER PRIMARY KEY,
    geom   GEOMETRY(POINT, 4612)
);
```  

初期データ用sql

```sql:insert-data.sql
INSERT INTO test_table (gid, geom) SELECT 1, ST_GeomFromText('POINT(135 35)', 4612);
```

sql実行用シェルスクリプト

```bash:init-database.sh
#!/usr/bin/env bash

psql -U docker -d postgre < "/docker-entrypoint-initdb.d/create-tables.sql"
psql -U docker -d postgre < "/docker-entrypoint-initdb.d/insert-data.sql"
```

### 3. DB初期化シェルスクリプト
コマンドで打つのは少々面倒なので・・・。

```bash:init-db.bash
#!/bin/sh
docker-compose exec db bash -c "chmod 0775 docker-entrypoint-initdb.d/init-database.sh"
docker-compose exec db bash -c "./docker-entrypoint-initdb.d/init-database.sh"
```

## 実行
docker-compose起動

```bash
$ docker-compose up -d
```
たまに起動して、そのあとすぐに落ちることがあります。その際はまた上記のコマンドで起動すればOKです。

DB初期化
コンテナ立ち上げてから数秒待つ方がいいかもです。

```bash
$ ./init-db.sh
```

## 確認
### 1. pdAdminダウンロード
[pgAdmin 4](https://www.pgadmin.org/download/)をダウンロードして確認できます。  

### 2. 接続
<img width="513" alt="スクリーンショット 2018-11-12 13.52.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/290840/b8a3fe72-94f8-9cfa-55b2-f53988b699ad.png">

### 3.結果
<img width="1306" alt="スクリーンショット 2018-11-12 13.58.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/290840/a8099e12-f531-0713-5fab-8166ac04def0.png">
【第4回】SourceTreeを使用したGUIでのGit操作

#sourcetreeの使い方
クローンして､リモートブランチにチェックアウトして､コミットして､プッシュまで｡

###ダウンロードリンク
https://ja.atlassian.com/software/sourcetree

##初期設定
[参考ページ](https://eng-entrance.com/sourcetree-use)
※初期設定の他も詳細に記載されています｡

##フォーク
まずは、フォークしましょう。

##クローン
「ファイル」をクリック､「新規」で下記ウィンドウを表示
　⇒「新規」をクリック､「URLからクローン」を選択
![スクリーンショット 2018-11-17 23.42.24.png](https://qiita-image-store.s3.amazonaws.com/0/297231/3658b1ed-27f3-ff10-ce67-4b8428e1fad1.png)


リモートリポジトリの選択
![スクリーンショット 2018-11-17 23.47.00.png](https://qiita-image-store.s3.amazonaws.com/0/297231/e26d6319-3362-176f-ae5e-6c050c2a62fe.png)
※編集権限のある自分のリポジトリを指定すること

##リモートブランチにあるブランチを作成してチェックアウト
[参考ページ](https://qiita.com/inabe49/items/be38f569040aed7d85b0)
「リモート」タブにあるブランチを右クリックして「チェックアウト」を選択
![スクリーンショット 2018-11-17 23.50.58.png](https://qiita-image-store.s3.amazonaws.com/0/297231/89471577-2813-f32f-2dae-8536ef5e926d.png)

「チェックアウト」ボタンをクリック
![スクリーンショット 2018-11-18 0.00.19.png](https://qiita-image-store.s3.amazonaws.com/0/297231/63359c2a-67b9-7a8e-48fa-5808799fe453.png)


##コミット
ステージング前(hogeファイル追加のみ)
![スクリーンショット 2018-11-18 0.02.24.png](https://qiita-image-store.s3.amazonaws.com/0/297231/50d24300-133c-27de-ae0d-b71d70c061c8.png)

ステージング後(hogeファイルをドラッグ&ドロップで完了)
![スクリーンショット 2018-11-18 0.03.14.png](https://qiita-image-store.s3.amazonaws.com/0/297231/f049e78f-3ce2-6be2-626d-520ee01552a4.png)

コミットメッセージを記載して､右下のコミットボタンからコミット

##プッシュ
![スクリーンショット 2018-11-18 0.05.08.png](https://qiita-image-store.s3.amazonaws.com/0/297231/e4f195a2-a6f1-065d-3229-40ceef2180e5.png)
上のプッシュをクリックして､プッシュする｡

##リモートの追加
![スクリーンショット 2018-11-18 20.59.22.png](https://qiita-image-store.s3.amazonaws.com/0/297231/0fdb9387-ee54-6b3d-449c-eb0ebb08860b.png)

![スクリーンショット 2018-11-18 21.01.53.png](https://qiita-image-store.s3.amazonaws.com/0/297231/cb21ab0b-e255-85cb-767f-441f63842b27.png)

![スクリーンショット 2018-11-18 21.02.43.png](https://qiita-image-store.s3.amazonaws.com/0/297231/324a16c7-ae5b-00a7-2bdc-3a255c14163c.png)

リモートの名前:upstream とか
URL/パス:追加したいリポジトリのURL

##フェッチ
右上のフェッチを選択
![スクリーンショット 2018-11-18 21.25.12.png](https://qiita-image-store.s3.amazonaws.com/0/297231/3cae6db8-c5c2-9269-ea22-e64ca2d90682.png)

##マージ
右上のマージを選択
![スクリーンショット 2018-11-18 21.25.29.png](https://qiita-image-store.s3.amazonaws.com/0/297231/cc3d74a2-b46e-f483-1e3a-1b60685229c3.png)

おしまい｡
プログラミング初心者の心得(全言語対象)

#目的

- プログラミングの勉強を行う前の考え方や取っ付きかたについて書く。
- 自分の様な社会人になり始めてプログラミングを行う人も少なくないと想い、少しでもそんな方々の力になりたいと思い本記事を書く。
- 自分に対する初心を忘れないようにする。

# この記事のターゲット

- プログラミング初心者の方
- これからプログラムを組む予定の方

#プログラミングの勉強で重要な三つの事の概要

自分のようなプログラミング初心者が実際に言語を学ぶ際、重要なことは主に次の三つであると感じる。

1. 該当言語の知識
1. ノウハウ
1. 実施内容の展開

#プログラミングの勉強で重要な三つの事の詳細
### 1. 該当言語の知識

これは主に自分が学びたい言語のルールや、文法などを指す。
しかし、該当言語の知識に関してはすべてを暗記しする必要は全くない。
必要な時に書籍や皆さんが今見ているQiitaを参考するようにしてコーディングを行おう！

### 2. ノウハウ

ここで言う「ノウハウ」とは「1.該当言語の知識」をどのような場面でどのように使えばよいかなどの知恵である。

最も重要なノウハウは段階的にプログラミングを行うことである。
心がけたいことは「一つの命令文を書いたらその都度動作確認を実施する」である。

複数の命令文を記載しテストを実施して、不具合が発生した歳に不具合箇所の発見に時間がかかってしまうためである。
大変な思いをしてモチベーションの低下を防ぐためにも、一命令文書く→動作確認を実施するとで確実にコーディングを行うことを心がけると気楽にプログラミングを学べると思う。

### 3. 実施内容の展開

正直これが最も重要であるといっても過言ではない。
これからプログラミングを実施していく方、全員におすすめしたいのが専用のTwitterアカウントを開設すること。
自分がどんなコードを書いて、その日何行コードを書いたかを関連ハッシュタグをつけてつぶやこう。
最初のおすすめハッシュタグは`#駆け出しエンジニアと繋がりたい`である。
自分のコードに関連するハッシュタグが何かわからないときはとにかく`#駆け出しエンジニアと繋がりたい`でもいいのでハッシュタグをつけてつぶやいてほしい。
幸いなことにコードを書く方々の界隈は比較的初心者に優しい。頑張っている初心者さんを見つけるといいねを押してくれることが多い！これは結構モチベーションアップにつながるのでおすすめ！！！