OmniAICreator/Qiita-1.07M huggingface dataset:
vue製のslide show frameworkのeagle.jsを試す

# eagle.js
vueで実装されたslide show framework。

https://github.com/zulko/eagle.js/

公式のdemoは[こちら](https://zulko.github.io/eaglejs-demo/#/)から確認できる。

# できあがりイメージ
ひとまずこれ。最低限で動かすには、にフォーカスした。

![eagle-animation.gif](https://qiita-image-store.s3.amazonaws.com/0/105926/1f23315b-5b12-ed1a-ef2b-7edbf9ed9300.gif)

ソース一式はgithubにあげている。
https://github.com/abcb2/eagle-sample


# @vue/cli-service
どうbuildすればよいのだろうかと思ったが、cli-serviceを使うとちょうど良いコマンドが提供されていることがわかった。

ビルドする時に下記のようなエラーが出たが、他の記事で対応策が書かれていてwebpackのconfigに書けばよいとのことだった。

```
[Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.
```
vue.config.jsに下記の通り記述している。@vue/cli-serviceが拾ってくれるっぽい。

```
module.exports = {
  chainWebpack: config => {
    config.resolve.alias.set('vue$', 'vue/dist/vue.esm.js')
  },
};
```
# 所感
public/index.htmlの中のhead内でanimate.cssを読み込んでいる所とかはどうだろうかと思ったりもしたけれど、あまり元の公式demoから崩したくなかったのでひとまずそれでいいやと。

ふんわりとvueのことが分かったのは良かった。
機械学習における最適化問題の解き方

# はじめに
前回の[記事](https://qiita.com/ryouka0122/private/01a58a2d7fc34ddef0ad)に記載した最適化問題である

```math
\min_{\Theta} \frac{1}{2m} \sum^{m}_{i=1}\|x^{(i)} \Theta - y^{(i)}\|^2 \\
```

の基本的な解き方を自分なりにまとめておく．

# 準備
色々計算しやすいように事前に最適化問題の式を整理しておく．
まず以下のような関数に切り出しておく．

```math
\begin{align}
h_{\theta}({\it{\bf{x}}})&=\sum^n_{i=1} x_i \theta_i \\
J(\Theta)&=\frac{1}{2m} \sum^{m}_{i=1}\|h_{\theta}(x^{(i)})-y^{(i)}\|^2 \\
\end{align}
```


そうすると，最小値を求める$\min$式は

```math
\min_{\Theta} J(\Theta) \\
```
となる．関数$J(\Theta)$を最小化させるため，関数$J(\Theta)$を目的関数と呼ぶこともある．
また，$h_{\theta}(x)$のことを，コスト関数や仮説(Hypothesis)などと呼ぶ．

# 勾配降下法
この最適化問題を解くのは勾配降下法/最急降下法と呼ばれる方法でパラメータ$\Theta$の最適値を求めていくのが一般的である．
以下の式が収束するまで，繰り返していく．

``` math
\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j}J(\Theta)\quad(j = {0,...,n}) \\
```

ここで注意するべき点は$\theta_j$の値は「まとめて更新する」ということ．

例えば，$\Theta = (\theta_0, \theta_1)$と2つのパラメータを求めるとする．
このパラメータを上記の式で表現する場合，

``` math
\theta_0 := \theta_0 - \alpha \frac{\partial}{\partial \theta_0}J(\theta_0, \theta_1) \\
\theta_1 := \theta_1 - \alpha \frac{\partial}{\partial \theta_1}J(\theta_0, \theta_1) \\
```
としてはいけないということ．
$\theta_1$は，更新された$\theta_0$を使っているため，これは正しい勾配降下法の実装になっていない．
正しくは，

``` math
\begin{align}
temp0 &:= \theta_0 - \alpha \frac{\partial}{\partial \theta_0}J(\theta_0, \theta_1) \\
temp1 &:= \theta_1 - \alpha \frac{\partial}{\partial \theta_1}J(\theta_0, \theta_1) \\
\theta_0 &:= temp0 \\
\theta_1 &:= temp1 \\
\end{align}
```

と仮変数を使うことで，更新後の値はそれぞれ更新前の$\theta_0$と$\theta_1$から求めることができ，正しい勾配降下法の実装ができるようになる．

勾配降下法を感覚的に捉えるとすれば，丘の上から緩やかに坂を下っていくボールをイメージするとわかりやすい．ボールが転がりきって，それ以上動かなくなれば，その位置が最小値ということである．
しかし，「その時に坂が下っているほうに進む」ということを繰り返しているため，進んでいる方向が必ずしも大域的最小値（global minimum）であるとは限らない．つまり，局所的最小値（local minimum）にたどり着くこともある．これを念頭に置いておく必要がある．

# 勾配降下法で使用するαについて
勾配降下法で使用する$\alpha$は，パラメータを求めるための処理を制御するパラメータということで，超パラメータ(hyper-parameter)と呼ばれることもある．
この値は，繰り返し計算する際の更新度合いを定義するものである．
$\alpha$が大きすぎると更新しすぎて，最小値を行ったり来たりすることがある．（ボールの勢いがつきすぎる）
逆に$\alpha$が小さすぎると，あまり更新しないため，繰り返し回数が多くなる．（ボールがあまり転がらない）
これを解消するために，回を重ねるごとに$\alpha$を少しづつ小さくさせるという工夫を入れることもある．

# おわりに
今回は，機械学習で利用するパラメータ$\Theta$を，勾配降下法を使って求める方法をまとめてみた．
勾配降下法は，局所的最小値を取ることもあるが，実装の容易さが特徴であり，感覚的にもわかりやすいということからよく使わているようだ．
行列を利用して複数のデータをまとめて計算することで実装が簡素になることが多い．
また言語によっては，その演算が組み込まれていて行列計算自体を考えなくてもいいこともある．（matlabなど）
データの分類と尺度水準について【そのデータ、平均とって大丈夫？】

# 導入

仕事をしているとしばしば平均値を取る場面に出くわします。
「ビジネスの現場ではビジネス的な観点で改善ができれば良い」というスタンスなのでいちいち突っ込まないのですが、違和感がある人もいるかもしれないのでここにまとめました。

```md:違和感がある例
あるサービスについてアンケートを取った。

- 問
    - このサービスは使いやすいですか？
- 選択肢
    1. すごく使いにくい
    2. 使いにくい
    3. どちらかといえば使いにくい
    4. どちらとも言えない
    5. どちらかといえば使いやすい
    6. 使いやすい
    7. すごく使いやすい

アンケート結果の平均は5点であった。
今期の目標として平均で6点を目指す。
```

違和感はないでしょうか？

# データの分類と尺度水準

調査等でより得られたデータは、その情報の性質に基づいて4個の尺度水準に分類できます。

## 名義尺度 (Nominal)

名義尺度とは、変数へラベル付けしたような尺度です。
等しいかどうかに意味はありますが、大小関係や四則演算に意味はありません。

例えば以下のようなアンケートがあったとします。

```md:名義尺度の例
- 問
    - サーヴァントのクラスは？
- 選択肢
    1. セイバー
    2. アーチャー
```

「サーヴァントAとサーヴァントBは同じクラスだ」には意味がありますが、
「サーヴァントAはサーヴァントBの２倍だ」には意味がありません。

名義尺度の例: 血液型、性別、電話番号等

## 順序尺度 (Ordinal)

順序尺度とは、変数を順位づけした尺度です。
大小関係には意味がありますが、四則演算には意味がありません。

例えば以下のようなアンケートがあったとします。

```md:順序尺度の例
- 問
    - サーヴァントのレア度は？
- 選択肢
    1. ☆
    2. ☆☆
```

「サーヴァントAよりサーヴァントBのほうがレアだ」には意味がありますが、
「サーヴァントAはサーヴァントBの２倍レアだ」には意味がありません。

順序尺度の例: 震度、ログレベル等

## 間隔尺度 (Interval)

間隔尺度とは、変数の間隔に意味がある尺度です。
差には意味がありますが、乗除には意味がありません。

例えば以下のようなアンケートがあったとします。

```md:間隔尺度の例
- 問
    - サーヴァントを召喚した日は12月の何日ですか？
- 選択肢
    1. 1日
    2. 2日
    3. 3日
```

「サーヴァントA(1日)とサーヴァントB(2日)を召喚した日の差は1日で、サーヴァントB(2日)とサーヴァントC(3日)を召喚した日の差と同じだ」には意味がありますが、
「サーヴァントA(1日)を召喚した日の２倍の日にサーヴァントB(2日)を召喚した」には意味がありません。

間隔尺度の例: 西暦、摂氏温度等

## 比率尺度 (Ratio)

比率尺度とは、変数の比にも意味がある尺度です。
四則演算に意味があり、ゼロにも意味があります。

例えば以下のようなアンケートがあったとします。

```md:比率尺度の例
- 問
    - サーヴァントを召喚してから何時間生存しましたか？
- 選択肢
    1. 1時間
    2. 2時間
```

「サーヴァントA(1時間)はサーヴァントB(2時間)の半分の時間しか生存していない」に意味があります。

比率尺度の例: 年齢、華氏温度、質量等

# 尺度水準と統計処理

前節で示したように尺度水準によって適用できる統計処理も変わってくる。
尺度水準と意味のある代表値の表は以下。

| 尺度水準 | 最頻値 | 中央値 | 平均値 | 幾何平均 |
|:--------:|:------:|:------:|:------:|:------:|
| 名義尺度 | true   |        |        |        |
| 順序尺度 | true   | true   |        |        |
| 間隔尺度 | true   | true   | true   |        |
| 比率尺度 | true   | true   | true   | true   |

それぞれの尺度は下位の尺度の性質も合わせて持っている。

# まとめ

導入で示したサービスの使いやすさの例のどこに違和感があったのでしょうか？

サービスの使いやすさの選択肢は順序尺度となっていました。
例えば「1(すごく使いにくい)よりも2(使いにくい)のほうが使いやすい」と言えます
しかし「1(すごく使いにくい)と2(使いにくい)の差」と、「2(使いにくい)と3(どちらかといえば使いにくい)の差」は定義されておらず、「3(どちらかといえば使いにくい)は2(使いにくい)に比べて2倍使いやすい」とは言えないのです。

ですので、上記の例での使いやすさの**平均**は統計的には意味のない数字となります。

違和感の正体がわかりましたでしょうか？

# 補足

一番下位の名義尺度から一番上位の比率尺度を作り出す方法も存在します。
数え上げるのです。
例えば、名義尺度のアンケート例で数え上げるとセイバーが2人、アーチャーが4人いたとします。
数え上げたこの数は比率尺度なので「アーチャーはセイバーの2倍の人数いた」というのは統計的に意味があります。
ややこしいですね。。。
HTML5ゲームエンジンの徹底評価[日本語訳] (1) 2D・3D対応とプログラミング言語の比較

李海彬@Golang Language Community(Golang语言社区)による[HTML5ゲームエンジンの徹底評価 @ cloud.tencent.com](https://cloud.tencent.com/developer/article/1075163) の日本語訳です。

李さんより許可をいたただいています。またこちらは昨年末の記事になるので今年誰か書かないかな？

# HTML5ゲームエンジンの徹底評価

最近インターネット上で「イケてるHTML5ゲームエンジン15 2016年盤」という記事を読みました。HTML5ゲームを開発のソリューションはたくさんありますが、比較されていませんでした。みなさんのお役にたてるように数日かけて、先ほどの記事に登場した12の無料オープンソースエンジンの比較分析を徹底的に行いました。

技術的な製品を比較するためには、技術的な視点だけでなく、結果に影響を与える多くの非技術的な内容も含めて、一般的には複数の比較軸があります。この記事では次のような軸で比較しています。する複数の次元があります。この記事では、以下の次元から複数の比較を行います。

1. 2D / 3D
2. プログラミング言語
3. デザインコンセプトと機能
4. ワークフロー
5. パフォーマンス
6. ドキュメント
7. 採用事例

# 2D・3D対応とプログラミング言語の比較

ゲームのもっともシンプルな分類方法の一つは2Dと3Dで区別することです。ゲームエンジンにおいては2Dと3Dはまったく異なる製品の種別だと考えられています。もとの記事で言及されていたエンジンはとても人気があるHTML5ゲームエンジンです。多くのエンジンは、2D、3Dもしくは両方に対応しており、テーブルにまとめました。

## プログラミング言語

HTML5ゲームエンジンにとって、スクリプトはJavaScriptである必要があります。JavaScript言語のみがブラウザーの上で実行できます。ですがTypeScript、CoffeeScriptやLiveScriptなどのようなAltJsがたくさんあります。言語間の直接の位置づけは異なり、言語の哲学は同じではありません。いくつかのゲームエンジンの言語選択はかなり興味深いものです。

|エンジン|2D描画|3D描画|JavaScript|TypeScript|
|----|----|----|----|----|
|Three.js|no|**YES**|**YES**|no|
|Phaser|**YES**|no|**YES**|**YES**|
|Pixi.js|**YES**|no|**YES**|**YES**|
|Egret|**YES**|**YES**|**YES**|**YES**|
|enchant.js|**YES**|no|**YES**|no|
|craftyJS|**YES**|no|**YES**|no|
|Turbuluenz|**YES**|**YES**|**YES**|**YES**|
|cocos2d-js|**YES**|no|**YES**|no|
|PlayCanvas|no|**YES**|**YES**|no|
|melonJS|**YES**|no|**YES**|no|
|Quintus|**YES**|no|**YES**|no|
|Hilo|**YES**|no|**YES**|no|
|TinyUnity※|**YES**|no|**YES**|**YES**|

※TinyUnityは訳者が追記／TypeScriptが使えるとJavaScriptも実質使えるということでYESとしています

# 2D・3D対応とプログラミング言語の比較の結論

前記事の表の通り、以下の3つのエンジンが2Dと3D両方に対応しています。

- Egret
- Turbulenz
- PlayCanvas

HTML5ゲームの分野で利用されているプログラミング言語はJavaScriptとTypeScriptだけです。しかし、ほとんどのHTML5ゲームエンジンはJavaScriptを使用しています。 TypeScriptをサポートするエンジンは4つだけです。
現在のフロントエンド技術界隈の状況をふまえると、おそらく多くのフロントエンドのフレームワークやエンジンはTypeScriptに対応するでしょう。AngularJSからはTypeScript対応を開始したとアナウンスされました。フロントエンド界隈ではTypeScriptの認知度は高く、マイクロソフトはオープンソースコミュニティー界隈で上手にやっているといわざるを得ません。

・・・続く・・・
https://qiita.com/motoyasu-yamada/items/0139a933ded6f478f92a
toString()をオーバーライドして自身の情報を親切に伝える

### toString()とは
java.lang.Objectに実装されているメソッドで、すべてのクラスでオーバーライド可能なメソッドです。そのインスタンスの文字列表現を返すメソッドなのですが、特にオーバーライドしていない場合デフォルトメソッド（Objectクラスに実装されているtoString)が呼ばれます。

### toString()をオーバーライドしていないことによる問題
以下のような構成でtoStringをオーバーライドせず、Objectクラスに実装されているtoStringでEmployeeインスタンスの文字列表現を返すとします。

```Employee.java
package co.jp.arsware;

public class Employee {

	private String id;

	private String name;

	public Employee(String id, String name) {
		this.id = id;
		this.name = name;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}
```

```Main.java
package co.jp.arsware;

public class Main {

    public static void main(String[] args) {

        Employee nagaoka = new Employee("001", "Nagaoka");
        System.out.println(nagaoka);
    }
}
```

結果は以下の通りです。

```.txt
co.jp.arsware.Employee@15db9742
```

ここで期待するのは、idやnameにどんな値が設定されているのかがほとんどだと思うのですが、これではなんのことか分かりませんよね。基本的にObjectクラスのtoStringが返す結果にはそのクラスを利用するユーザーが見たい情報は存在しません。

### toString()をオーバーライドして自身の情報を親切に伝える
次に、Employeeクラスに以下の通りtoStringをオーバーライドして、再度Mainメソッドを実行してみます。

```Employee.java

～省略～

@Override
public String toString() {
	return "id=" + this.getId() + ", name=" + this.getName();
}
```

結果は以下の通りです。先ほどの出力に比べてより有用な情報が出力されていることがわかります。

```.txt
id=001, name=Nagaoka
```

しかし、これはこれでtoStringのオーバーライド実装工数がかかります。そのため、[LombokのToStringアノテーション](https://blog.y-yuki.net/entry/2016/09/30/003000)等のような、[ボイラープレートコード](https://terasolunaorg.github.io/guideline/5.0.0.RELEASE/ja/Appendix/Lombok.html)を自動生成してくれるライブラリを導入することで、冗長なコードを書くという工数を削減することができます。

### 教訓

優れたtoStringの実装を提供することでそのクラスが使いやすくなり、そのクラスを使っているシステムをデバッグしやすくなります。println、printf、文字列結合演算子（+）、assert等のメソッドにインスタンスが渡されたり、デバッガによりインスタンスが表示されたりすると、toStringが自動的に呼び出されます。つまり、toStringを自分では呼び出さないとしても、他の誰かが呼び出す可能性があります。例えば、そのインスタンスの内容をそのままログ出力するケース等がそれにあたるかと思います。そういったケースも考慮して、可能な限りtoStringはオーバーライドして自身の情報を親切に伝えることを意識すると良いかと思います。

### 参考
* [Effective Java](https://www.amazon.co.jp/Effective-Java-%E7%AC%AC3%E7%89%88-Joshua-Bloch/dp/4621303252)
async/await 入門

今更ですが、`async/await`を学びました。


##async/awaitとは
今までPromise等を使って書いていた非同期処理をもっと簡素に書くことができる構文。
`async`と`await`というワードを使用する。

##動作確認環境
- node.js: v10.14.0
- OS: Mac


##async
`関数宣言`。
関数の前に`async`を宣言することで、この関数は`Promise`を返すようになる。

以下の２つの例は同じことを意味する。

**Promiseを使った例**

```js

function promiseSample() {
  return new Promise(function(resolve, reject){
    resolve("promise sample");
  });
}

promiseSample().then(function(value){
  console.log(value);  // "promise sample"
});
```

**asyncを使った例**

```js

async function asyncSample() {
  return "async sample"
}

asyncSample().then(function(value){
  console.log(value);  // "async sample"
});
```

`async`を宣言した関数は、呼び出されるとPromiseを返す。
関数内で値をreturnしていたらその値を`resolve`し、例外などを投げていたら`reject`する。
上記例で見る限りでも、Promiseを使っている関数(promiseSample)より、asyncを宣言している関数(asyncSample)の方が簡潔に書くことはできている。


##await
`演算子`。
asyncを宣言した関数をよび出す前に書くことで、関数のPromiseが解決するのを待つ。
`await`は`async`を宣言した関数内でしか使うことができない。

以下の２つの例は同じことを意味する。

**Promiseを使った例**

```js
function promiseSample() {
  return new Promise(function(resolve, reject){
    resolve("promise sample");
  });
}

function waitPromise() {
  return promiseSample().then(function(value){
    return value;
  });
}

waitPromise().then(function(value){
  console.log(value);  // "promise sample"
});
```

**async/awaitを使った例**

```js
async function asyncSample() {
  return "async sample"
}

async function waitAsync(){
  var value = await asyncSample();
  return value;
}

waitAsync().then(function(value){
  console.log(value);  // "async sample"
});
```



##個人的な感想
確かに、`async/await`を使った方が短く、簡潔にかけると感じました。
非同期のコードを書くときは大抵ネストがどんどん深くなっていくので、そうなればなるほど良さが出てきそうです。
その一方、まだ慣れていないため、`Promise`というワードがある方が非同期感があってわかりやすい(認識しやすい)と感じてしまっています。。。
ただ、Promiseというワードで見ていたところが`async/await`になっただけなので、時間の問題かなと思っています。
どんどん使っていこうと思います。
[News] Visual Studio 2019 Preview


[Visual Studio 2019 プレビュー版](https://visualstudio.microsoft.com/vs/preview/)がくるそうです。

# 見た目すっきり
全体的には見た目はすっきりさせて、エディターがより見やすく改善とのこと。たしかに、ごちゃごちゃしてた・・ので普段は複数画面で仕事してます。

# よりモダンな利用シーンを想定したスタートアップ画面

スタートアップ時にClone or checkout codeが追加されてモダンな利用シーンを想定。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/241909/2e4a38fa-ab9a-dc1a-c694-76a9c36e80ce.png)

# 検索バー

検索機能が充実、＋デフォの検索バー。たしかに規模の大きい開発になるといつも検索してた。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/241909/a7f48fbf-4919-f7ad-5fac-2b74386ef4a2.png)

# コードクリーンアップ

コードクリーンアップも充実。Resharper使ってるのであまりこれは使わないかも？

![image.png](https://qiita-image-store.s3.amazonaws.com/0/241909/1a93baec-aa8f-9807-4f7a-fcee26a6dca9.png)

# デバグ中でも検索

デバグ中でも検索モード。これも使い始めると便利そう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/241909/11b3de60-1faf-0ae3-655f-e2630671fb90.png)

# .NET CORE 3.0

これに追加して.NET CORE3.0にも対応とのことでした。近日試してみようと思います。
Laravel触ってみた

この記事はロボP Advent Calendar 2018の11日目の記事です。
# Laravelとは
Laravelの[公式ページ](http://laravel.jp/)には次のように書かれています。
> ウェブ職人のためのPHPフレームワーク。

PHPフレームワークの中では一番人気があるみたいです。
コマンドが豊富で、様々な機能があるみたいです。
自分はウェブ職人どころか殆ど触ったこともないし、PHPも殆どやっていません。
が、色々あってLaravelを触りたくなったので、ここにメモ程度に残しておきます。

#Laravelの導入
PHP開発環境の導入は省略する。自分はWindowsでXAMPPを用いました。
## Composerのインストール
Laravelをインストールするには、ComposerというPHP向けのパッケージ管理システムが必要になります。
ここで、そのComposerのインストールについて説明します。
### Windows
まずは、Composerの公式ページにアクセスします。
https://getcomposer.org/
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/130974/6df45baa-a6c3-ad72-8043-78a5e004262e.png)
そこで"Download"を選択します。
![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/130974/a001e994-97d6-d3ab-c572-babaa5bcda8f.png)
そしてここで"Composer-Setup.exe"をクリックすると、インストーラのダウンロードが始まります。
後はそのインストーラを起動して手順通り進めてください。

### Mac
コンソールで以下のスクリプトを実行してください。

```
curl -sS https://getcomposer.org/installer | sudo php
mv composer.phar /usr/local/bin/composer
```

これでComposerのインストールは完了します。

##Laravelのインストール
Laravelのインストールには2種類方法があり、ComposerでLaravelインストーラを用いてインストールする方法と、
Composerのcreate-projectを用いてインストールする方法の2種類あります。ここでは、後者を用います。
この場合は、以下のコマンドを実行すると,sampleをいうフォルダが現在の場所に作られ、その中にLaravelがインストールされます。

```
composer create-project --prefer-dist laravel/laravel sample
```

これで、無事Laravelがインストールされるはずです。
前者のインストール方法が気になる方は、[公式ドキュメントのインストール手順](https://readouble.com/laravel/5.7/ja/installation.html#installing-laravel)を参照してください。

#動作確認
プロジェクトフォルダ内に移動し、下記のコマンドを実行して、ブラウザでhttp://127.0.0.1:8000を開くと、確認できます。

```
php artisan serve
```
このような画面が出るはずです。
![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/130974/7e325e5e-f82e-0d15-11b0-5f5ce479a12a.png)
これで、動作確認はできました。
#コードを書いてみる
これで環境はできたので、何かしら書くものはないかと漁ったところ、一応Laravelの初心者向けのチュートリアルと中級者向けのドキュメントが出てきました。
この初心者向けの基本のタスクリストには、データベースを扱いやすくするmigration,Eloquentモデルや、ルーティング、ページ間共通のレイアウトを簡単に共有できるBladeテンプレートなど、基本的なLaravelの機能について試せるみたいです。

初心者向け　基本のタスクリスト
https://readouble.com/laravel/5.1/ja/quickstart.html

中級者向け　タスクリスト
https://readouble.com/laravel/5.1/ja/quickstart-intermediate.html

ただ、これらはLaravelのバージョンが5.1のドキュメントで、今の最新の5.7と違う可能性があったので、ここで5.7だとどんな感じに書けばいいのかという解説、そしてどんなことをやっているのか簡単に説明していきたい所でしたが、時間がない、Web初心者ということもあり、初心者向けの方ですらあまりまだ理解できていないので、今は割愛させて頂きます。後で書くかもしれません。

#参考にさせて頂いたページ
Laravel ドキュメント
https://readouble.com/laravel/

Laravel 5.7で基本的なCRUDを作る
https://qiita.com/sutara79/items/ef30fcdfb7afcb2188ea
ゴミの分別問題「スチール缶とアルミ缶」をmicro:bitで識別

# きっかけ

ある小学校の授業でmicro:bitでごみ問題を解決する授業がありました。その中で「スチール缶とアルミ缶を判別するロボットを作りたい」という子供たちの声があり、試しに雛形を作ってみました。

# 実現手段

磁石の上にスチール缶を置くと磁界が変化する現象を離れたmicro:bitで検知

※無理にmicro:bitを使わなくてもという意見もあります(^^;

# 用意する物

- micro:bit
- ボール箱
- 100均のネオジウム磁石

# 工作

箱の内側にネオジウム磁石を貼り付け、10cm程度離れるようmicro:bitを固定します

![46083183_190273905185762_5105373224699428864_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/44523/9b69a1b8-ba92-365e-06c2-2d0f0bc4d1ba.jpeg)

![46051497_255197505168182_1939215370942414848_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/44523/3057e3bf-00b3-c762-bb14-47269ef0d826.jpeg)

# プログラム

スチール缶をネオジウム磁石の上に置いた時に「TESU」と表示するプログラム

![microbit-画面コピー (18).png](https://qiita-image-store.s3.amazonaws.com/0/44523/098982d6-43ba-3c9f-2354-4d6b66d2e5e3.png)


# 動作結果


[![https://youtu.be/rRWZ2dONks0](http://img.youtube.com/vi/rRWZ2dONks0/0.jpg)](http://www.youtube.com/watch?v=rRWZ2dONks0)
Windows 10でHoudiniのライセンス更新に失敗する時の対処法

# こういう問題

Windows 10上に、インストール済みのHoudini Apprenticeを居れていて、しばらくするとライセンスの更新を求められるが、そのライセンス更新に失敗してしまう、以下の画像のケースの問題。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/51857/0f77cfa6-9c0b-6189-e499-af26796d3a54.png)

# 原因

ライセンスファイルの更新に管理者権限が必要だが、通常起動だとその権限がないままHoudiniを実行してしまうため。

Houdini Apprenticeは、インストールしてライセンスを取得してから1ヵ月で再度ライセンス取得を行う。
その際に、Houdiniがhkey.exe(Houdiniがライセンス管理するためのアプリケーション(ライセンスサービス自体ではない))経由で実行しようとするので、この権限の問題に引っかかる。

# 解決方法

どのバージョンのHoudiniでもいいので、Houdini Apprentice起動になるスタートメニューからの「管理者として実行」で起動を行う。
そして、ポップアップしてくる案内に従ってHoudini Apprenticeのライセンスの更新を適応。

とりあえず、ライセンスの更新さえしてしまえば良いので、これで解決。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/51857/ac1e9b37-aa40-df3f-231a-14919d119393.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/51857/9e866cde-49ae-1d0f-2f65-d23863402393.png)


# Houdini Apprentice以外

まだ未確認だけれども、Indie以上の有償ライセンスの期限切れの際にも起こると思われるので、その際は「管理者権限で実行」で :+1:
【VR学まとめ】2.1 脳神経系と感覚・運動

# はじめに

この記事は[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の5日目の記事です。

[バーチャルリアリティ学](https://www.amazon.co.jp/バーチャルリアリティ学-舘-暲/dp/4904490053)の2章「ヒトと感覚」の内容をまとめていきます。
書籍の方も是非ご購入いただいた上でご利用ください。

# 2 ヒトと感覚

## 2.1 脳神経系と感覚・運動

### 2.1.1 脳神経系の解剖学的構造と神経生理学の基礎

**中枢神経系の分類**

- 大脳
    - **感覚や知覚を担う** (VRにとって重要)
- 小脳
    - 運動・姿勢制御・運動学習
- 脳幹
    - 脊髄と橋
    - 生命の基本的な維持機能

**大脳の構成**

![aJPEG image-CD99B3AD30AA-1.jpeg](https://qiita-image-store.s3.amazonaws.com/0/55365/de3eec0f-d0c6-8544-b6bc-84bddd0cae23.jpeg)
引用元: [バーチャルリアリティ学](https://www.amazon.co.jp/%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%83%AA%E3%82%A2%E3%83%AA%E3%83%86%E3%82%A3%E5%AD%A6-%E8%88%98-%E6%9A%B2/dp/4904490053)

- 大脳半球
- 間脳
    - 視床や視床下部
- 大脳皮質の皮下組織
    - 大脳基底核
        - 大脳皮質と視床や脳幹との間を中継する
    - 辺縁系
        - 情動・意欲・記憶・自律神経活動に関わる
- 中心溝
    - 大脳半球の大きな溝
- 一次体性感覚野
    - 後部の頭頂部と後頭部
    - 体性感覚を受容
    - その後ろには二次体性感覚野
        - 高次の信号処理
        - 頭頂連合野
            - 空間知覚
- 一次運動野
    - 前部の前頭葉
    - 運動刺激を出力

感覚野や運動野は延髄で交差しているので、右脳が左半身、左脳が右半身を支配している

**ペンフィールドの地図**

![3g-2.png](https://qiita-image-store.s3.amazonaws.com/0/55365/e39d5a32-ea34-bc6d-c839-cbb43b682d93.png)
引用元: http://nou-reha.com/stroke/whats_stroke/5276

受容器の精度に身体のサイズを合わせた時の図として紹介されていた

### 2.1.2 知覚・認知心理学の基礎

大きさや奥行きの知覚について

- 単眼手がかり
    - 陰影
    - 重なり
    - 線遠近法
    - 大気遠近法
    - きめの勾配
    - 経験的な物体の相対的大きさ
    - 運動しさ
- 両眼手がかり
    - 輻輳
        - 近くを見つめると寄り目になるやつ
    - 両眼視差


大きさの恒常性
網膜上の大きさが異なっていても、同一の大きさだと知覚できる

### 2.1.3 感覚と運動

運動の知覚について

- 網膜上の対象物の移動
- 移動する物体を眼球で追跡する

遅い運動(視角1~2度/秒)や早すぎる運動(35度/秒)も知覚できない

**ベクション**

- 自己運動感
- 動いていないのに動いているように感じる
- 映像酔いの原因にもなる


# まとめ

脳のどこで感覚が受容されるかわかり、知覚の仕組みもなんとなく理解できました。

[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の6日目は[【VR学まとめ】2.2 視覚](https://qiita.com/nkjzm/items/00e4223c7b5989a3d07b)です。
Auth::logoutで「remember_tokenフィールドが見当たりません」という例外がスローされた

## 追記(2019/08/01)
Laravel5.8からは考慮不要になりました
https://github.com/laravel/framework/pull/25952

## はじめに
既存のプロダクトをLaravelに移植している際に、異なるフレームワークでのログイン状況の同期(?)でつまずいた時の話です
よくあるn番煎じの話だとは思いますのでご了承を・・・

## ことのはじまり
既存フレームワークからLaravelに遷移する際、ログインユーザーの整合性をとるようにしており、ユーザーが一致しないこと(既存ではログアウトなのにLravel側ではログイン状態のまま)があるのでそのチェックをMiddlewareでしてました。

単純に一致してないからLaravel側で `Auth::logout` で抜ければよかったのですが、ここで問題発生
`Auth::logout` を叩くと「`remember_token`フィールドが見当たりません」という例外がスローされてしまいました・・・

`remember_token` 自体はログイン維持機能を使うためのトークンを保管するフィールドで、`Auth::logout`の時に `remember_token` が必ず更新されるようです。
https://github.com/laravel/framework/blob/5.7/src/Illuminate/Auth/SessionGuard.php#L478-L534

通常ならばサクッとマイグレーションすれば解決はしますが、既存では別のやり方でログイン維持機能を実装していたので、別の方法で解決策を探してました。

## 解決策
大体こういうのは英語のサイトに書いてある法則
https://laravel.io/forum/05-21-2014-how-to-disable-remember-token


Userモデルで`remember_token`を書き換えようとしたら、無視するだけでいいようです

```php
/**
 * remember_tokenがカラムにないテーブルでAuth::logout時に存在しないremember_tokenが更新しようとしてエラーになるので無視する
 */
public function setAttribute($key, $value)
{
    if ($key !== $this->getRememberTokenName()) {
        parent::setAttribute($key, $value);
    }
}
```

## おわりに
Laravel自体ドキュメントがしっかりしてたので、内部のソースとにらめっこする機会があまりなかったため、なんとなく動きが把握できたのはよかったところ

ただ、やっぱり既存の機能もLaravelに寄せていかないと同じような弊害がありそうだから考えないといけない危機感ひしひしと・・・・

Laravelを完全に理解する日は遠い・・・
【Unity】コンポーネントを参照しているオブジェクトを検索するエディタ拡張

# はじめに

find-references-in-sceneはコンポーネントを参照しているオブジェクトを検索するエディタ拡張です。

- Unity 2018.3以降は同等の機能が追加されているため不要です
- 検索出来る対象はInspectorで設定されているオブジェクトです
- プレハブの子プレハブも表示されます

[【Unity】コンポーネントを参照しているオブジェクトを見つけ出す方法](http://tsubakit1.hateblo.jp/entry/2018/09/12/233000)

# find-references-in-scene

## 導入方法

[find-references-in-scene](https://github.com/tomori-hikage/find-references-in-scene) (GitHub)からダウンロードして、インポートしてください。

## デモ

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">コンポーネントを参照しているオブジェクトを検索するエディタ拡張を作りました！<br>Unity 2018.3から入った機能ですが、Unity 5.xやUnity 2017.xでも動作します。<a href="https://t.co/SXHlJLmQUL">https://t.co/SXHlJLmQUL</a><a href="https://t.co/nNt0lSCcaJ">https://t.co/nNt0lSCcaJ</a> <a href="https://t.co/a4vP5h6bxc">pic.twitter.com/a4vP5h6bxc</a></p>&mdash; 戸森ひかげ(Tomori Hikage) (@tomori_hikage) <a href="https://twitter.com/tomori_hikage/status/1072196851120529408?ref_src=twsrc%5Etfw">2018年12月10日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 配布ライセンス

[MIT](https://github.com/tomori-hikage/find-references-in-scene/blob/master/LICENSE)
【VR学まとめ】1.3 VRの歴史

# はじめに

この記事は[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の4日目の記事です。

[バーチャルリアリティ学](https://www.amazon.co.jp/バーチャルリアリティ学-舘-暲/dp/4904490053)の1章「バーチャルリアリティとは」の内容をまとめていきます。
書籍の方も是非ご購入いただいた上でご利用ください。

# 1 バーチャルリアリティとは

## 1.3 VRの歴史

**ラスコー洞窟の壁画**

![02_01.jpg](https://qiita-image-store.s3.amazonaws.com/0/55365/d505dfdb-96b3-0b76-cbb5-54a04d075bf6.jpeg)
引用元: http://archeologie.culture.fr/lascaux/fr

- 古くは古代洞窟の壁画に始まる
- 1万8000年前

**全天球絵画のパノラマ**

- 18世紀から19世紀
- イギリスの画家Robert Barkerが始めた360度の絵画
- 鑑賞者は中央の展望台から周囲に、円筒状に置かれた絵画を見る
- 大規模なもので円周200m以上に及んだ
- ローリル式の絵を巻き取りながら動かすことで動画を表現した「ムービングパノラマ」という手法も

**Ultimate Display**

![large_dc422dbd62c171aa495865b8ee355f86.jpg](https://qiita-image-store.s3.amazonaws.com/0/55365/53015b12-5b1a-66ff-ef78-b73d1327f8c8.jpeg)
引用元: SutherlandのHDM

- 1968年 I.Sutherlandが提唱
- ハーフミラーを介して見る光学シースルーシステム
- 線画によって描かれた単純なCG映像

**METAPLAY**

![new-media-new-technolog-2015-workshop-2-space-33-638.jpg](https://qiita-image-store.s3.amazonaws.com/0/55365/6aab4b21-7055-a942-f0cc-4da73890678f.jpeg)
引用元: https://www.slideshare.net/pvdputten/new-media-new-technolog-2015-workshop-2-space

- 1969年 M. Krueger
- インタラクティブアート分野
- 鑑賞者の姿を作品の映像に合成し、映像が鑑賞者に反応して動く

**SENSORAMA**

![Sensorama-From-web-page-InventorVR-retrieved-in-March-2014-from.png](https://qiita-image-store.s3.amazonaws.com/0/55365/01a83150-5d55-e5e7-66ff-68590f49c3f3.png)
引用元: https://www.researchgate.net/figure/Sensorama-From-web-page-InventorVR-retrieved-in-March-2014-from_fig1_263388241

- アミューズメントやゲームの分野
- 1964年 M. Heilig
- 街中をバイクに乗って走り回る体感型ゲーム
- 立体ビデオ映像、音響、椅子の振動、ファンによる風、風景に合わせた臭いなどが組み込まれていた

**VCASS**

- 1982 T. Gurness
- ヘルメット型HMD

**Media Room**

- 1981 MITのMedia Lab
- 壁面スクリーンの情報を音声、ジェスチャー、ジョイスティックなどで操作

**TELESAR**

- ロボット工学分野
- 1982年 機械技術研究所 舘暲
- テレイグジスタンスの概念の提案

# まとめ

VRのルーツは多くの分野に見られ、多岐に渡る技術が基礎になっていることが分かりました。

[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の5日目は[【VR学まとめ】2.1 脳神経系と感覚・運動](https://qiita.com/nkjzm/items/dd8f9236c33e0f2afb7c)です。
Unity2018.xで知っておきたいC# Job System機能の概要

# 最初に

この記事はUnity2018.x系の目玉機能であるC# JobSystemについて簡単に概要をまとめたものとなります。

## C# Job Systemとは？

C# Job Systemとは**並列処理を行うための機能**です。アプリ等の実行端末が持つ**CPUのコアをフル活用する**ために使用されます。時間のかかる処理の負荷を複数コアに分散し、コアの性能を十分発揮させて**メインスレッドへの負荷を減らして**フレームレートの大幅な向上ができます。また、端末自体の**バッテリー消費を軽減する**効果も期待できます。

元々Unity自体、内部処理を並列処理で行なっており、元からコアを使用してはいたが、C# Job Systemによって自作するC#スクリプトもコアをフル活用できるようになりました。

### ここでいう並列処理とは

実行の順番や実行タイミングを気にしないで処理をスレッドに詰めるだけ詰めて行うことです。

デメリットとしては、デッドロックや、データの受け渡しがあるとそこがボトルネックとなるので気にする必要があります。

## C# Job Systemの特徴

- 簡潔にコードを書くことができる。
- オーバーヘッドが低い。
- コンテキストスイッチの増加を防ぐ。
- Burstコンパイラ向けに最適化される(GC使用不可)。
- 値型しか扱えない。
- エディタではメモリリークやデッドロックが起きないよう監視を行なっているようでビルド前とビルド後でパフォーマンスに大きな差がある。
- ロックやタイミングの同期、データの受け渡しはできない。
- ECSと連携可能。
- .NETやUnityのAPIはJob内では基本使えない。

C# Job Systemは基本的に**算術系を高速化する**のに使用する。

例えばユニット同士の相互距離計算や、ソート、シューティング系統…。
 
## Job Systemの流れ

Job SystemはJobを作成して、Job queueに入れ、実行します。Job System内のWorker threadはqueueからJobを取り出して実行します。Job Systemは依存関係を管理しているため、**Jobが適切な順序で実行される**ようにします。このため、Job自体は自己完結型でも他のJobに依存しても問題ありません。例えばJobBがJobAに依存している場合はJobAが完了するまでJobBは実行開始されないことが保証されます。

1.NativeContainer系で入力・出力のバッファを用意する
2.入力バッファの中身を埋める
3.メインスレッドからSceduleを実行して、JobSystemにジョブを発行
4.メインスレッドにてCompleteで終了まで待つ
5.結果を出力バッファから受け取る

## Jobの定義方法

基本的には**IJob**を継承するstructを定義してExecuteに処理を書くことで動作します。
ただし、マルチスレッドに分散する場合は**IJobParallelFor**を使用します。この辺はまた別の記事で紹介できればと。


# 参考
- [[GCC2018] Unity 2018は「カスタマイズ」で小さく速く多機能に](http://jp.gamesindustry.biz/article/1804/18040201/)
- [【Unity】C# Job Systemを自分なりに解説してみる](http://tsubakit1.hateblo.jp/entry/2018/03/04/223804)
- [Unity:C# JobSystemとBurstCompilerそしてECSこと(EntityComponentSystem)の概要](https://simplestar-tech.hatenablog.com/entry/2018/08/22/090034)
- [C# Job System Overview(Unity公式)](https://docs.unity3d.com/ja/current/Manual/JobSystemOverview.html)
虫眼鏡機能を比べてみた

ECサイト制作で虫眼鏡機能を導入する機会があったので今回は
虫眼鏡機能のプラグインをいくつか比べてみました。


##OKzoom.js
マウスオーバーでルーペ（虫眼鏡）みたいにズームできます。
比較的簡単に導入できるし使いやすいが、スマホの時の制御が難題
オプションもあり、デフォルトの虫眼鏡機能といったイメージ。

導入手順
JSファイル読み込み

```html
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="js/okzoom.js"></script>
```

要素を指定。ルーペのサイズやスタイルを設定。

```Javascript
$(function(){
    $('#okzoom').okzoom({
        width: 250,  // ルーペの幅
        height:250,  // ルーペの高さ
        round:true,  // ルーペの形
        border: "1px solid black", // ルーペのボーダー指定
        shadow: "0 0 5px #ffffff"  // ルーペの影指定
    });
});
```
画像に任意のIDを付けます

```html
<img id="okzoom" src="img/img01.jpeg">
```
##Zoomple.js
こちらも導入は簡単だが大きな画像と通常の画像の2枚を用意しないといけない。
オプションでルーペのサイズやスタイルを変更可能。スマホの時の制御が面倒。

導入手順
JS、cssファイル読み込み

```html
<link href="css/zoomple.css" rel="stylesheet"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="js/zoomple.js"></script>
```

要素を指定。

```Javascript
$(document).ready(function() {
  $('.zoomple').zoomple({ 
    blankURL : 'images/blank.gif',
    loaderURL : 'images/loader.gif',
    offset : {x:-150,y:-150},
    zoomWidth : 300,  
    zoomHeight : 300,
    roundedCorners : true
  });
});
```
画像に任意のクラスを付けます。

```html
<a href="img/img01.jpg" class="zoomple"><img src="img/img_min.jpg" alt="" /></a>
```

##Drift.js
こちらも導入は簡単だが大きな画像と通常の画像の2枚を用意しないといけない。
しかしオプションが豊富でレイアウトも変更しやすい。

導入手順
JS、cssファイル読み込み
drift-basic.cssに拡大鏡（虫眼鏡）や、ローディング画像のレイアウトが設定されているので、
CSSを変更して、拡大鏡の形や、大きさを変更できます。

```html
<link href="css/drift-basic.css"/ rel="stylesheet">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="js/Drift.js"></script>
```


要素を指定。

```javascript
new Drift(document.querySelector('.img'), {
  paneContainer: document.querySelector('.detail'),
  zoomFactor: 3,
  inlinePane: 790,
  inlineOffsetY: -85,
  containInline: false
});
```

画像に任意のクラスを付けます。
"img/samll.jpg"には小さな画像を、data-zoom="img/large.jpg"には拡大した画像を指定します。

```html
<div class="content">
  <img class="img" src="img/small.jpg" data-zoom="img/large.jpg">
  <div class="detail"></div>
</div>
```


3つとも簡単に導入できるので試しに入れてみてはどうでしょう。
使ってみた感じ、どれもメリット、デメリットがあるがオプションの豊富さ、レイアウトの変更のしやすいものが喜ばれるだろう。

アクセサリー、小物など商品を細部まで見せるユーザには嬉しい機能なので是非。
無作為抽出法についてまとめてみた

# はじめに
エンジニア？アナリスト？サイエンティスト？歴5ヶ月めの新卒社員が最近学んだことをちょっとずつまとめてみたもの。実は、今日、Advent Calendarがついに10日目です、わーい！！
ここまで、道のりが長かった！！！と、手放しに喜びたいところなんですが、帰って寝落ちをしてしまい、せっかく書いたのに投稿そのものは11日目なんです、がーん

肝心なところでハズしてしまう癖がこんなところにあらわれちゃうのがちょっと悔しいですが、投稿します(.・v・)ノ<今日は統計関係です)

ちなみに、これまでに書いた記事の最新3回分はこちら↓
[第11弾](https://qiita.com/icchy_sh33p/items/15a6d98aa292e773d71f)
[第12弾](https://qiita.com/icchy_sh33p/items/ab6069de8a315a2d06b2)
[第13弾](https://qiita.com/icchy_sh33p/items/4b082101aa1fd41c58a2)

# 標本抽出の方法
- 標本抽出の方法は主に**無作為抽出法**と**有意抽出法**の2種類に分類できる

# 無作為抽出法
- 無作為抽出法・・・母集団を構成するもの（データや人など）が等しく選ばれるように標本を抽出する方法。
- メリット
  - 無作為抽出の利用によって、標本誤差の影響が推定可能
- デメリット
  - 非標本誤差の影響を推定することが困難→誤差を厳密に評価できるわけではない
  - 標本抽出に手間がかかる
  - 想定できる母集団によっては、原理的に無作為抽出ができない可能性が孕んでいる

## 無作為抽出の種類
### 単純無作為抽出法
- データ全体が入っている台帳から、乱数を使ってランダムに標本を抽出する方法
- メリット
  - 理論的に単純のため、精度や誤差の評価が容易
- デメリット
  - 母集団を見るリストが必要
  - 標本の抽出に手間がかかる→母集団が大きい場合には実施がほとんど不可能に、母集団が小さいときに有効

### 系統抽出法
- 1からNまで通し番号のついた名簿がある際、大きさ*n*の無作為標本を作る方法
- 1からHまでの数字の中から無作為に数字を選択、最初の要素だけを乱数などで抽出したあと、等間隔で順番に（系統的に）抽出する（→等間隔抽出法）。
- メリット
  - 確率的な抽出は1回で済むので、抽出作業が大幅に軽減
- デメリット
  - 母集団を見るリストが必要
  - データの台帳の中に偏りがあると、抽出も偏る可能性が孕んでいるので注意が必要

### 集落抽出法
- 全体の縮図になっている集落（クラスター）を抽出、ランダムに抽出された集落のすべての要素を標本とする方法。
- フィールドワークのような調査に向いている

### 層別抽出法
- 母集団の属性（性別、職業など）の構成比率の予備知識を使って母集団を層化して抽出する方法。
  - 層化・・・相互排他的な層を等質性を見て要素で構成させること
- メリット
  - 各層ごとでの無作為抽出を行うため、同じ標本数で抽出をした際、単純無作為抽出法よりも精度が高い
  - 層間での比較に適している
- デメリット
  - 層を構成する比率について、事前情報が必要

### 多段抽出法
- 2段階、あるいは3段階に分けて抽出する方法。全国調査など、母集団が大きく単純無作為抽出法の実施が困難な際に行われる
- 1回抽出した（一次抽出）うえで、その単位ごと改めて標本を抽出
- メリット
  - 最終単位の台帳があれば調査が可能なので、大規模な調査に適している
- デメリット
  - 調査の精度がほかの抽出法を使用したときに比較して悪くなってしまう

# 感想
無作為抽出については、自分も卒業論文執筆で被験者を募集した際に（実は臨床心理学専攻でした）、無作為に抽出しないとですね、という話になったこともあり、単純無作為抽出法で行ったのですが、まさか、こんなにたくさん種類があるなんて、思いませんでした。データサイエンティストとして、たくさんの種類のデータを今後触っていくのかなぁと考えたときに、今回、データ標本の抽出について改めて勉強し直すっていうのはいい機会になったんじゃないかなぁ、と思っています。

今日はこんな感じで。まだまだやりたいこともやらないといけないこともたくさんです
明日（というか、今日だ・・・）はStapyのみんなのPython勉強会なので、久しぶりにPythonを触ってこようと思います！！

ではでは
[備忘録][Swift]Realm導入

## Realm導入
参考

- <a href="https://qiita.com/ShinokiRyosei/items/3090290cb72434852460">【Swift】CocoaPods導入手順</a>

### CocoaPod導入
ターミナルで以下のコマンドを実行（場所はどこでも良い）

```
sudo gem install cocoapods
```
インストールが終わったら以下のコマンド

```
pod setup
```

### CocoaPodをプロジェクトに適用
ターミナルでxcodeprojファイルがある場所へ移動。

下記のコマンドを実行してディレクトリ内に Podfile を作成する。

```
pod init
```

Podfileを編集。

```
vi Podfile
```
```
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'

target 'アプリ名' do
pod 'RealmSwift'
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for アプリ名
```

最後に`pod install`を行う。

```
pod install
```
処理が完了したら[プロジェクト名].wordkspaceというファイルが作成される。
プロジェクトが開いていたら一旦閉じて[プロジェクト名].wordkspaceを開く。
※CocoaPodsを使用する場合は常にこの[プロジェクト名].wordkspaceで開く。
Kotlinの動作環境の調査（初心者向け）

#【経緯】
何度かそれ関係で記事を書いていますが、社内もくもく会が週1回で開催されています。月ごとにテーマは変わり、今月は前にも触っていたKotlin…だったのですが、初回から業務優先でもくもく出来ませんでした。。。
そもそも業務多忙だったのでもくもく会の準備も出来ていなかったので、まずは復習がてらKotlinの学習環境について再度調査した結果をメモしておきます。
Android StudioではPCが死ぬので毎回オンライン実行環境を調べているのがつらいので。

# 【勉強方法】
swiftみたいに[Progate](https://prog-8.com/)さんとか[Codeprep](codeprep.jp)さんとかをよく利用させてもらっているので、今回もそれで行こうかなーと思っていたら、案外Kotlinの勉強材料が無い事が判明。
前にやっていたみたいにJavaの参考書をKotlinで実装するとかいう無意味なやり方で勉強していこうかと思いますが、心が折れたらswiftみたいに[paiza](https://paiza.io/)さんで問題集を解いていく感じでも良いかも。
Android StudioはKotlinを動作させること自体はすごく簡単に出来るんですが、そもそもかなり重いのでPCに負担がかかるので避けたい。とはいえ実際にAndroidで動作させるようなプログラムはAndroid Studioを使うのが最適解かもしれないですが。。

# 【統合開発環境】
・Android Studio
Android開発のメイン統合開発環境。軟弱なPCではメモリもCPUも処理を食われて他のアプリやソフト、ブラウザがまともに動かなくなる。
でも設定自体はすごく簡単なので、既にPCにAndroid Studioが入っていたりAndroid実機で触りながら確認をしたい場合にはメインの選択肢になるかと思います。

・Eclipse
Android Studioの前のAndroid開発用のメイン統合開発環境。こっちもAndroid Studioに負けず劣らず重い…気がします。どっちも設定次第かもしれないですが。。
EclipseでKotlinを動作させるのは多少手間がかかったイメージがあるので、あんまりおすすめはしないです。


# 【オンライン実行環境】
・[Try Kotlin: Simplest version](Try Kotlin: Simplest versionhttps://kotlinlang.org/)
サンプルコードとかが既に用意されていて、自由に触れる状態なのが嬉しい。
英語ベースなので色々分からないところとかもありますが、そこは翻訳に頼れば問題ないかと。
ブラウザなのにレスポンスがとても速いのも好きです。

・[paiza](https://paiza.io/ja/projects/new?language=kotlin)
言わずと知れたオンライン実行環境です。
会員登録とか必要ですが、動作も軽いし日本語で説明や使い方が書いてあったり、プログラミング問題集があったりするので勉強しやすいです。
よくpython/swiftなんかでもお世話になってます。

・[compile kotlin online](https://rextester.com/l/kotlin_online_compiler)
シンプルで見やすいしコードも書きやすいオンライン実行環境です。
Try Kotlinより多少遅いかな？ってくらいです。シンプルなコードをさらっと確認したい時にはいいかも。

#【結論】
オンライン実行環境が優秀すぎてさらっと書いて動作確認するくらいならオンライン実行環境で問題なさそうです。
ただ実際の画面やファイル書き出し、画像なんかの実ファイル絡みになってくるとやっぱり実機での実行が出来る統合開発環境が強いので、用途によって要使い分けかと思います。

## 【参考】
・https://qiita.com/SYABU555/items/25b1e81a2437d6a2559f
・https://qiita.com/shinyay/items/6a3501da60e36d62414d
12-11 VSCO-2-CE

https://adventar.org/calendars/3353 の11日目のエントリーです。

## 自由なサウンドフォント・自由な音源

サウンドフォントまでの話を書いたので、今日は自由ソフトウェア互換の音源について書きます。

いわゆる「フリーの」サウンドフォントというものは数多くありますが、「無料」のフリーと「自由」のフリーの間には大きな違いがあります。特にサウンドフォントなどを扱うフリーソフトウェアで、自由に配布できるデータの存在は重要です。

fluidsynthをディストリビューションに含んでいるUbuntuの場合は、サウンドフォントもパッケージされています（Ubuntu 18.04であればfluid-soundfont-gm、fluid-soundfont-gs、fluidr3mono-gm-soundfontなど）。また、musescoreでもサウンドフォントの存在は重要なので、musescore-general-soundfontというパッケージが別途存在しています。musescoreのサウンドフォントはsf3で38MB程度、fluidR3_GMはsf2で150MBほど、モノラルsf3で23MBほどあります。

## VSCO

今日はこの関連でひとつ面白い試みを紹介します。github上にリポジトリのあるVSCOプロジェクトです。

https://github.com/sgossner/VSCO-2-CE/

これは管弦楽器の生音をサンプリングして得られたものを、サウンドフォントなどの構築に向いた形で生PCMデータとして公開しているものです。ライセンスもCC-0 (public domain) なので安心して使えます。プロジェクトのサイトでは、これを活用したsfz、VSTi/AU、Kontakt音源などへのリンクが紹介されています。

http://vis.versilstudios.net/vsco-community.html

残念ながらこれらをビルドするスクリプト等は公開されていないのですが(!)、まあ使うことはできるでしょう。

（サウンドフォントに「ライセンス」などというものがありうるのかという議論があるはず・あるべきですが、これは書体のプログラムとしてのライセンスとほぼ同様の論理構成で考えるのが筋でしょう。すなわちプログラムと称しうるものを複製しているか否かで決まるべき事柄です。）
Karabiner-ElementsでcommandキーでのIME切替設定したときにcommand+マウスクリックがうまく動かない問題を解決する

## 問題点
Karabiner-ElementsはComplex-Rulesで左commandを押したときに英数キー、右commandを押したときにかなキーを送信するという設定が用意されている。
<img width="1112" alt="スクリーンショット 2018-12-11 01.46.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/207982/fbe7873d-cae9-8fae-9811-b57cc09e2e4f.png">
IMEの切り替えとして機能するのは単体で押したときのみでcommand+cのように組み合わせたときはちゃんとcommandキーとして動作する。
ただ一つ問題があって、command単体で押した際にcommandが送信されることはないのでcommandを押しながらマウスのクリックをするという動作がうまくできなくなる。

## 解決策
Karabiner-Elementsの設定ファイルである`~/.config/karabiner/karabiner.json`内の左commandを押したときの設定、右commandを押したときの設定それぞれに`to_if_held_down`を設定する。
`to_if_held_down`とはそのキーが一定時間押されたときの動作なので、`key_code`を使い元のキーの入力が送られるようにすればいい。

```json:karabiner.json
"rules": [
          {
            "description": "コマンドキーを単体で押したときに、英数・かなキーを送信する。（左コマンドキーは英数、右コマンドキーはかな） (rev 2)",
            "manipulators": [
              {
                "from": {
                  "key_code": "left_command",
                  "modifiers": {
                    "optional": ["any"]
                  }
                },
                "to": [
                  {
                    "key_code": "left_command",
                    "lazy": true
                  }
                ],
                "to_if_alone": [
                  {
                    "key_code": "japanese_eisuu"
                  }
                ],
                "to_if_held_down": [{ "key_code": "left_command" }],
                "type": "basic"
              },
              {
                "from": {
                  "key_code": "right_command",
                  "modifiers": {
                    "optional": ["any"]
                  }
                },
                "to": [
                  {
                    "key_code": "right_command",
                    "lazy": true
                  }
                ],
                "to_if_alone": [
                  {
                    "key_code": "japanese_kana"
                  }
                ],
                "to_if_held_down": [{ "key_code": "right_command" }],
                "type": "basic"
              }
            ]
          }
        ]
```
アニメーションを含むUSDZを生成する

アニメーションを含まない場合は
https://qiita.com/noppefoxwolf/items/2a410ebe2db919fe236d
の記事を参考にobjからusdzへ変換するのが手っ取り早いです。

アニメーションを含む場合（今回はキーフレームの補間アニメーションを指します）、gltfからusdzへ変換する方法でうまくいきました。

# Blenderでgltf形式でexportする

デフォルトではgltf形式でエクスポートする事が出来ないのでaddonを追加する

https://github.com/KhronosGroup/glTF-Blender-Exporter

`scripts/addons/io_scene_gltf2`フォルダをblenderの`scripts/addons/`へコピー
[Blenderユーザー設定]>[アドオン]から`Import-Export glTF 2.0 format`にチェックを入れて有効化する

exportからglTF2.0 (.gltf)を選択して適当な名前で保存する。
この際に、テクスチャなどの関連するファイル名に２バイト文字が含まれないように注意する。

# gltfをusda形式へ変換する

https://github.com/kcoley/gltf2usd

を使って変換します。
以下うまくいった環境

```
python - macOSに入っているsystemのPython
USD - USDPythonではなく自前で後述のパッチをあててビルドしたもの
```

## ビルドスクリプトへパッチをあてる

py_initializeで突然死んだりするのでパッチをあてる。

```python:build_scrips/build_usd.py
def InstallUSD(context, force, buildArgs):
    with CurrentWorkingDirectory(context.usdSrcDir):
        extraArgs = []

        if context.buildPython:
            extraArgs.append('-DPXR_ENABLE_PYTHON_SUPPORT=ON')
+            if MacOS():
+                import distutils.sysconfig
+                pyLibPath = distutils.sysconfig.get_config_var('LIBDIR')
+                pyIncPath = distutils.sysconfig.get_config_var('INCLUDEPY')
+                extraArgs.append('-DPYTHON_LIBRARY=' + pyLibPath + '/libpython2.7.dylib')
+                extraArgs.append('-DPYTHON_INCLUDE_DIR=' + pyIncPath)
```

ビルド。適宜sudoで

```
python USD/build_scripts/build_usd.py /opt/local/USD
```

少し時間がかかる。
終わったら

```
set -x PYTHONPATH /opt/local/USD/lib/python
set -x PATH $PATH /opt/local/USD/bin
```

とかにパス通しておく

## usdaへの変換

直接usdzへ変換することは出来ないようなので、一度usdaへ変換する

```
python gltf2usd.py -g file.gltf -o file.usda --arkit
```
`--arkit`を付けると多分最適化される。

## usdzへの変換

```
xcrun usdz_converter file.usda file.usdz -color_map uv.png -v -a -l
```

適当にオプションを付けて`usdz_converter`でusdzへ変換する
Spacemacsにカスタムlayerを追加する


# SpacemacsにカスタムLayerを追加するサンプルを作りました
https://github.com/kentakozuka/my-layer

## インポート方法
カスタムレイヤーを格納する場所（`~/.emacs.d/private/`）に移動します。

```
cd ~/.emacs.d/private/
```

サンプルレイヤーをcloneします。

```
https://github.com/kentakozuka/my-layer.git
```

`~/.spacemacs`の`dotspacemacs-configuration-layers`に`my-layer`を追加します。

```
...
   ;; List of configuration layers to load.
   dotspacemacs-configuration-layers
   '(
     ;; ----------------------------------------------------------------
     ;; Example of useful layers you may want to use right away.
     ;; Uncomment some layer names and press `SPC f e R' (Vim style) or
     ;; `M-m f e R' (Emacs style) to install them.
     ;; ----------------------------------------------------------------
     ...
     my-layer
   )
...
```

`.spacemacs`をリロードしてインポートは終了です。

## 使ってみる
あとは、拡張子が`.mm`のファイルを作成し（e.g. `sample.mm`）、spacemacsで開くとモードラインに`MM`が表示されます。

`SPC m h w`をタイプすると`Hello, world!`がバッファーに挿入されます。
MeteorアプリをUnix Domain Socketで待ち受けさせたい時の設定

ずいぶん長い間謎だった案件が解決したので備忘録。

# TL;DR
以下の環境変数を指定しましょう。
こうやってパスが指定してあれば、`PORT`は設定していなくてもMeteorアプリは起動します。

```bash
UNIX_SOCKET_PATH=/var/run/webapp/webapp.sock
```
vlasky@github先生に感謝。

# 注意点
~~パーミッションに注意してください。筆者の調べた限り`UNIX_SOCKET_PERMISSION`的な環境変数はまだ無いようで、~~**追記：[今ではあります](https://docs.meteor.com/environment-variables.html#UNIX-SOCKET-PERMISSIONS)。`UNIX_SOCKET_PERMISSIONS=660`といった形で書けるのでしっかり使いましょう。**  
~~出来上がるソケットのパーミッションはなんと **755** となります。
当然オーナー以外接続できないので、必然的にサービス定義ファイルで起動ユーザーを接続先サービスと同一にしておかねばなりません。~~

# 参考資料
[バージョン1.5.2.1のChangelog](https://docs.meteor.com/changelog.html#v152120170926)
[GitHubのIssue](https://github.com/meteor/meteor/issues/7392)
[同プルリク](https://github.com/meteor/meteor/pull/8702)
~~なお、[公式のドキュメント](https://docs.meteor.com/environment-variables.html)にはまだ書かれていません。~~ もう書いてあります
Ubuntu 16.04 に LLDB 7.0 をインストールする

漢なら LLDB 7(debugger) を Ubuntu 16.04 で使いたいですね!

やりましょう!

clang は prebuilt package がありますが, LLDB はなぜかありません.

Ubuntu 16.04 で apt でデフォルトで入ってる lldb は 3.8 となり古くてつらい.

## apt 

llvm.org で apt の source.list が公開されていますのでこれを活用します.

https://apt.llvm.org/

2018 年 12 月 10 日時点では lldb-7 はまだ svn からのビルド扱いからか, バージョン番号がすこし違います.

```
$ sudo apt install lldb-7
```
バンクーバーで就職するまでに乗り越えた3つの壁

# はじめに
バンクーバーの会社でReactデベロッパーとして働き始めて、今日でちょうど3ヶ月が経ちます。こちらの学校でプログラミングを学んだ後にReactを勉強し、Web/UIデザイナーからジョブチェンジをしました。今回はその就活時に感じたそれぞれの採用ステップの壁と、どうやってそれを乗り越えたかについて書き残しておきます。

その会社は社内コミュニケーションのためのWebツール、Gmailのエクステンション、Outlookのアドインなどを開発していています。社員約80名のうち35名弱が開発側で、5つほどの開発チームに分かれています。私はその中でWebツールの新機能を開発するチーム(チームリーダー1名、デザイナー1名、QA1名、開発3名)に所属し、ReactとScssを書いています。JiraのBacklogとKanban boardを活用してタスクを管理し、Bitbucketやプライベートnpmを活用してコードを管理しています。

# 0. 一般的なデベロッパーの選考過程
1. レジュメ提出
2. 電話面接(採用担当の人である場合が多い)
3. 技術試験(課題やペアプログラミング、プレゼン、ロールプレイング、ペーパー試験など)
4. 対面面接(オンサイト面接)
5. 給与交渉とオファー

技術職に必須の技術面接では実際に会う面接の前に、まず基本的な理解度を判断するための課題が与えられます。会社によりますが、私が受けたところでは、ビデオ通話でエディタを画面共有してアルゴリズムの問題を解くものや、宿題を与えられて期限までに実装して提出するものがありました。パスすれば後日会社に呼ばれ、その課題を掘り下げる面接が行われたりします。

# 1. レジュメ通過
私はデベロッパーとしての経験がなかったので、まず面接に進むまでに苦労しました。在学中から度々レジュメを送っていましたが、電話面接に進む返事が来ることはありませんでした。そこで試したのが下記の方法です。

### 1-1. レジュメに書ける仕事をする
レジュメの内容が薄いことが面接に進めない原因だと推測してからは、しばらく知り合いからReactのフリーランスの仕事をもらったり、React Nativeで個人プロジェクトを作成したりすることで、アピールできる実績を作ることに専念しました。

### 1-2. 技術とポジションを絞る
1番興味のあったReact/React Nativeに技術を絞って勉強し、レジュメもその方向でアップデートしました。応募する会社も要項が近く、外国人を雇っていそうな会社を選ぶことで反応が良くなりました。それまではひたすらデベロッパーと名の付くポジションの求人に応募しては撃沈していました...

その他にも最初はポートフォリオサイトを用意したり、Githubで1日1コミットして芝を生やしたり、アルゴリズムを解いたり、形からデベロッパーらしいことを試していきました。

# 2. 電話面接通過
顔の見えない相手との会話はすごく気を使いますし、聞き取りが難しいです。そのためできる限りの事前準備を入念に行いました。

### 2-1. スクリプトの用意
面接でよくある質問、考えられる質問に対する答えをあらかじめ用意しておき、電話中に手元に開いて確認していました。すると全く同じ質問でなくとも、用意した回答を組み合わせてスムーズに回答することができました。また面接前日はその会社のリサーチを行い、質問したい内容もまとめていました。

### 2-2. 聞き返す
とにかく質問の意味が分からなければ何度でも聞き直し、他の言葉で言い直してもらったりします。英語のリスニングテストではないので、確実に質問を理解して、相手の求めている答えを提供するように努めます。言い回しが分からず、結局ほぼすべての質問を聞き直した気がします。

### 2-3. ゆっくり、明るくはっきり話す
たくさん話す必要はなく質問されたことに答えれば良いので、相手が話している間は軽く相槌を打つ程度で大丈夫だと思います。その上で表情が見えない分、自分が話すときには意識して朗らかにはっきりと話すようにしました。

# 3. 技術面接通過
電話面接の反応が良かったとしても、肝心の技術が伴っていなければ先へ進むのは厳しいです。私は技術面接が通らないと気づいたときに一旦就活をやめて、個人のReact Nativeのプロジェクトをリリースすることに注力することでまず技術と自身を付けました。

### 3-1. 課題
問題を予想してReact用のdirectoryを用意したり、使えそうなコードをすぐに参照できるようにして、自分ができることを確実に見せられるように事前準備をして臨みました。

### 3-2. 技術面接、ペアプログラミング
事前に出題されそうな問題を解いて勉強しました。この試験ではアプローチ方法を見られているため、面接中は解決方法が分からない場合でも何に悩んでいるのか、何をしようとしているのかをとにかく口に出して説明し、沈黙する時間を無くすようにしました。

大抵ここを通れば脈アリです。あとは社風に合う人物かどうかを判断する面接(Cultural fit interview)を残すのみです。私はチームになる予定のメンバーとのランチでしたが、CEOや社長との雑談が一般的なようです。その面接まで呼ばれてオファーをもらえなければ、性格的にマッチしなかったということなので、その会社は潔く諦めましょう。

## おわりに
私は英語で流暢に自分の意見を伝えられるわけでも、飛び抜けた技術を持っているわけでもありません。就活中は都度自分に何が足りないかを分析して、一つずつ確実に克服してきました。もちろんこれは一例に過ぎませんが、この記事で海外就職を目指している方の背中を押すことができれば幸いです。

## 寄稿先
- [Frog Advent Calendar 2018](https://adventar.org/calendars/2875)
マークアップコーダーとフロントエンドエンジニアの決定的な違い

マークアップコーダーとフロントエンドエンジニアの決定的な違いを調べて見ました。

調べたきっかけは、会社で一番凄いフロントエンドの方が、自分の書いたjQueryを「余計な記述多いから、最適化して表示速度をあげよう！」と言って作業してくれたことです。

# フロントエンドに興味をもったきっかけの会話

（自分が書いたjQueryのアドバイスをいただいていたときのこと）

最強のフロントエンドの先輩曰く・・・

「jQueryを書くときは、「プラグイン」を選んでから記述しちゃダメだよ。
どういう動きにしなければいけないのか！目的から要件定義・設計をする。その設計を、いちから構築するのがすごく時間がかかるときに、プラグインを使用するんだ。
はじめからプラグインありきで作業してると、同じ記述が多くなって表示速度が遅れたり、jsがバッティングしてトラブルが起きたりするから気をつけて。」

そして、話がかわり・・・

「えっ！？マークアップとフロントエンドの違い？
そりゃー決定的に違うでしょ。そもそも、マークアップはプログラマーとは呼ばないからね。マークアップもjQueryとかJavaScript使ったりするけど、フロントエンド名乗るなら、jsのフレームワークが使えるレベルじゃないとね。」

というわけで・・・

# 結論
フロントエンドを名乗りたいなら、jsのフレームワークを使えるようになれ！

## フロントエンドを名乗るその前に・・・

・生のJavaScriptを勉強するべし
・目的から設計をしたjQueryを書けるようになるべし






# フリーランス案件情報で、職種と案件と必須スキルを調べてみる


▼職種
フロントエンド・マークアップエンジニア

▼案件
ECサイトリニューアル

▼必須スキル
PHPを使用しての開発経験
ECサイトの開発経験

▼尚良
JavaScript、CSSなどフロントエンドに強い

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

▼職種
フロントエンド・マークアップエンジニア・webデザイナー
    
▼案件
ECサイトのリニューアル

▼必須スキル
・WEB製作の実務経験
・Photoshop、Illustratorが使える方
・JavaScript、CSS 等フロントエンド開発に強い方

▼尚良
・SEO、ユーザビリティの基本的な知識

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

▼職種
フロントエンド・マークアップエンジニア

▼案件
インターネットサービスのフロント開発や、新規サービス開発に携わって頂きます。

・Slim、 Sass、PostCSS、JavaScript ES6 （React、JQuery）による開発
・レスポンシブW...

▼必須スキル
・JavsScript / ES5, ES6の経験
・React / flux architectureの経験
・Mocha等のテストフレームワーク経験

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

▼職種
フロントエンド・マークアップエンジニア・webデザイナー・UI/UXデザイナー

▼業務内容
・フロント周りの設計／開発／テスト／運用
・HTML5、CSS3、JavaScript を利用した開発
（モックアップ作成、テスト、バージョン管理 含む）
・負荷軽減などによるプログラムの高速化

▼必須スキル
・基本的なHTMLのマークアップや、CSSによるスタイリングが可能な方
・JavaScriptを使用したWebサイトの開発経験

▼尚良
・node.jsを使用したwebアプリケーショ...

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

▼職種
webアプリケーション	・フロントエンド・マークアップエンジニア

▼業務内容
自社サービス動画配信メディアの
Webアプリケーションの開発業務をお任せします。
現場はAngularを使用しており、
サーバーサイドの理解があると尚良です。

▼必須スキル
・HTML、CSS、JavaScriptでのフロントエンド開発経験
・Anguler、React、Vue等のjsフレームワークを用いた開発経験

▼尚良
・サーバーサイドの理解

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

▼職種
フロントエンド・マークアップエンジニア

▼業務内容
●●会社のメルマガ制作・修正・調整業務を
お任せします。

▼必須スキル
・HTML、CSSの実務経験
・社会人としてのビジネスマナー
・コミニュケーション能力

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

募集ではマークアップとフロントエンドは同じ土俵に乗っている気がしました。
ただ、自分はまだフロントエンドは名乗れない・・・。


# マークアップエンジニアに求められるスキル

▼必須スキル
・HTML
・CSS
・JavaScript
・Photoshop
・CMSの構築（組込）
・jQuery（プラグインの利用）

▼尚良
・sass
・bootstrap（CSSフレームワーク）
・gulp
・babel
・webpack
・npm



# フロントエンドエンジニアに求められるスキル

▼必須スキル
・HTML
・CSS
・JavaScript
・Anguler（jsフレームワーク）
・React（jsフレームワーク）
・Vue（jsフレームワーク）
・CMSの構築（拡張）
・laravel（PHPフレームワーク）
・jQuery（プラグインのカスタマイズ・スクラッチで制作）

▼尚良
・サーバーサイドの理解

# 5人以上のチーム開発に求められるスキル
Git（チェックアウト・コミット・プッシュを理解している。Git-flowがわかる。）
GitHub（issue・pullreq・マージ・レビューを理解し、周囲に教えることができる）


# まとめ

マークアップコーダーは、Webサイトの目に見える範囲をコーディングできることが最低条件。
フロントエンドは、Anguler、React、Vue等のjsフレームワークを用いた開発経験が必要。

マークアップエンジニアからフロントエンドエンジニアになるには、jsフレームワークまで踏み込む必要がある。
そのためには、生のjavascriptやjQueryの勉強の必要性を感じた。

でも、大事なことは、自分のあとに誰が何をするのか理解すること。
自分の作業を受けとった人が楽になるような仕事をすること。

それはすなわち「愛」なのだ。

そーいうひとになるために、今日も勉強しちゃいましょ！

ただし、フロントエンドエンジニアの最先端は・・・まだまだ見えない雲の上でした。
> [2018年の最先端フロントエンドエンジニアになろう](https://qiita.com/rana_kualu/items/5986ceab8fd4e353de1b)
> [roadmap](https://cdn-images-1.medium.com/max/1000/1%2a_EfUP-q18EfebxPgZ6BCbA.png)
> [Modern Frontend Developer in 2018
](https://medium.com/tech-tajawal/modern-frontend-developer-in-2018-4c2072fa2b9c)
Ubuntu 18.04 にclaspをインストールする

GASを書くためにUbuntuにclaspをインストールしようとしたら少し手間取ったのでその備忘録

##aptでnpmをインストールする

claspをインストールするために必要なnodejsとnpmをインストールする

```
sudo apt install nodejs
sudo apt install npm
```

このとき

```
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 npm : 依存: node-gyp (>= 0.10.9) しかし、インストールされようとしていません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

```
と表示されてnpmがインストールできなくなってしまった

##aptitudeを利用する

どうやらパッケージの依存関係がうまく行っていないために失敗したらしい。aptitudeを使えば修正できるみたいなのでやってみる

```
sudo apt install aptitude
sudo aptitude install nodejs-dev
```

こうするといろいろ解決方法を表示してくれる。とりあえず大丈夫そうだと思ったので`y`と入力して次にすすめる。

再度

```
sudo apt install npm
```

としたらうまくインストールできた。

##claspのインストール

あとは[公式のドキュメント](https://github.com/google/clasp)の通りにインストールするだけ

```
sudo npm i @google/clasp -g
```

##参考リンク
https://blog.tizen.moe/entry/2016/02/13/202938
ConoHaのVPSのテンプレートイメージのはなし

# 自己紹介
サービスデザインチームで「[ConoHa](https://www.conoha.jp/)」を担当している坂元って言います。
「[ConoHa](https://www.conoha.jp/)」で提供しているイメージを作成・管理したりとか、プロダクト考えたりとかしてます。
今年の4月に転職してきて今は20歳です。(新卒より若い)
元々はアプリケーションエンジニアでプログラムばっか書いてたので設計力も今後必要になってくるだろうと考えてこのチームを選びました。
今は色々任せてもらえてて挑戦できるので楽しいです。
ちなみにこのアドベントカレンダーにはConoHaの中の人である強いエンジニアが何人かいます。

## サービスデザインチームって？
プロダクトの企画から設計、検証、公開した後は改善したりと
主にUI/UXを考えて色々するようなチームです。
採用ページにはインタビューが書いてあったりするのでご参考にしてください。
1dayインターンシップもやったりしているので是非。
「[プロダクト設計・企画職 採用ページ](https://recruit.gmo.jp/recruiting/product/)」「[1dayインターンシップ](https://job.rikunabi.com/2020/company/r551010047/preseminar/V005/)」

# 本題
「[WING](https://www.conoha.jp/wing/)」ではなく「[VPS](https://www.conoha.jp/vps/)」の方の話をしようと思います。
WINGは爆速だしコンパネは使いやすいし良いところがいっぱいあるので使ってみてください。

ConoHaのVPSではテンプレートイメージとして[OSとアプリケーションのテンプレートイメージ](https://www.conoha.jp/vps/function/template/)を提供しています。
提供の裏側では「どういうツールを使っているのか」「どうしてツール作ったのか」等を書いていこうと思います。

元々、僕が入社した当初はAnsibleでの構成管理しかされていませんでした。
イメージは作成した後、本番に反映された後正しく動作するかというのを検証していますが全部手動で行っていました。
属人化だったり、検証の手間だったり、そういったところを改善するために色々なツールを作って改善してきました。
(イメージ自体の作成作業に関しては基本的に2人体制で行なっていて、僕が入るずっと前からやっている**プロ**の方がいて最近は任せっきりなのでなんとかしたい)

## イメージ提供の際に使っているもの
1. Ansible
2. オブジェクトストレージ
3. SSHテスト用ツール(Rust製)
4. ブラウザテスト用ツール(Go製)
5. 言えないようなツールがいっぱい

### Ansible
イメージの中身の構成管理、「**Infrastructure as Code**」
一番大事です。Makefileを使っているので``make``を叩くだけで誰でも作れます。

### オブジェクトストレージ
提供しているイメージのバックアップ用途であったり、ファイルの受け渡しに使っています。
[ConoHaのオブジェクトストレージ](https://www.conoha.jp/objectstorage/)は100GB/450円と安いのに大容量で転送量もかかりません。
[swiftコマンド](https://support.conoha.jp/v/objectstorageswift/)ですぐに使えちゃいます。
ブロックストレージとは勝手が違いますがすぐに慣れて使えます！

### SSHテスト用ツール(Rust製)
検証にはpingが通るかとか、ディスク容量が正しいかとか、パーティション等・・・毎回コマンド打って確認するのはすごいめんどくさいです。
コマンドが書かれていたエクセルがありましたが開くのもめんどくさいです。
普段から作業している人であれば頭の中に打つべきコマンドはありますが、その人の頭の中にしかないのは大変よろしくないです。

という事で入社して一番最初に作ったツールです。(4/26にコミット)
なんでRustかというと僕がRustを書きたかったからです。
clapを使った普通のCLIツールで、以下のような感じです。

- SSHでコマンドを実行して結果を確認するだけのツール
- YAMLで実行するコマンドを管理
- 鍵認証対応
- 200行もないから小さいので誰でも読める

### ブラウザテスト用ツール(Go製)
ConoHaではOSだけではなく様々なアプリケーションイメージも提供しています。
例えば「[Mattermost](https://www.mattermost.org/)」であればちゃんと登録からチャットまでの一連のフローができるかとか、バージョンが正しいかとか等の確認するべき項目が結構あります。
そのアプリケーションを知らないと確認するべき項目がわからない点やブラウザ操作の手間を減らすために使っています。

[agouti](https://github.com/sclevine/agouti)というライブラリを使っていて、アプリケーション毎に1から書いてます。
なんでGoかというと調べて書いてすぐできたからです。
そのうちこれも設定ファイルに分離したい。

### 他にも言えないようなツールがいっぱい
PythonだったりGoだったり、業務改善のために作ったツールは他にもあります。
なんでこんなに言語がばらばらかというと、書きたい言語で書くみたいなところはあります。

# まとめ
今回はConoHaで提供しているテンプレートイメージで使っているものとかを軽く書きました。

メインでやっているサービスデザインという仕事についてはあまり触れませんでした。
サービスデザインチームでは色々な人と協力してConoHaを良いプロダクトにしようと考えてます！熱い想いがある方は是非！