OmniAICreator/Qiita-1.07M huggingface dataset:
CATIAの起動時間を短縮できる環境変数

# 前提条件

- OS : Windows 7 以降
- CATIA : R2013 以降

# 概要

以下のそれぞれの環境変数を使用すれば、CATIAの起動が多少は速くなる

| 説明 | 変数名 | 値 |
|:-:|:-:|:-:|
| スプラッシュスクリーン | CNextSplashScreen | No |
| ウィンドウの背景画像 | CNextBackGround | No |
| 起動時の新規ドキュメント | CATNoStartDocument | Yes |

## スプラッシュスクリーン

CATIA起動時に出るCATIAのロゴを非表示にする

## ウィンドウの背景画像

CATIAウィンドウの背景画像（宇宙の絵）を非表示にする

## 起動時の新規ドキュメント

CATIA起動時に新規ドキュメントが作成される機能を無効化する

参考：[CATIAの起動を速くする--PLM Tips Magazine](http://plm.try-s.com/?p=166)

# コマンドを使用して設定する

cmd の場合

```bat
SetX /M CNextSplashScreen No
SetX /M CNextBackGround No
SetX /M CATNoStartDocument Yes
```

powershell の場合

```pwsh
Set-Item Env:CNextSplashScreen No
Set-Item Env:CNextBackGround No
Set-Item Env:CATNoStartDocument Yes
```

## コマンドを使用せず手動で設定する

- Windows7 で **CNextSplashScreen** の場合
  1. [マイコンピュータ]を右クリック
  1. "プロパティ"をクリック
  1. [詳細設定]タブをクリック
  1. "環境変数"をクリック
  1. [システム環境変数]側の[新規]をクリック
  1. "変数名"に **CNextSplashScreen** と入力
  1. "変数値"に **No** と入力
  1. [OK]をクリック

## 参考

- [CATIA起動時に、空のプロダクトを作成しないように設定したい](http://3dsolblog.blogspot.jp/2016/12/catia.html)
- [About Environment Variables | PowerShell Documentation](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_variables?view=powershell-6)

**Excelsior!**
[Ubuntu16.04] timezoneの確認と設定

Ubuntu16.04でのtimezoneの確認と設定方法メモ
`timedatectl` を使用すれば良いようです

# コマンド

```console:現在のtimezoneの確認
$ timedatectl
      Local time: Thu 2017-06-01 02:09:07 UTC
  Universal time: Thu 2017-06-01 02:09:07 UTC
        RTC time: Thu 2017-06-01 02:09:07
       Time zone: Etc/UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: no
 RTC in local TZ: no
```

```console:設定値の一覧を確認
$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
...
```

```console:timezoneの変更（永続的）
$ timedatectl set-timezone <タイムゾーン>
``` 

# 設定例

```console:設定例(Etc/UTC=>Asia/Tokyo)
ubuntu@ubuntu-xenial:~$ timedatectl
      Local time: Thu 2017-06-01 02:09:07 UTC
  Universal time: Thu 2017-06-01 02:09:07 UTC
        RTC time: Thu 2017-06-01 02:09:07
       Time zone: Etc/UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: no
 RTC in local TZ: no

ubuntu@ubuntu-xenial:~$ sudo timedatectl set-timezone Asia/Tokyo

ubuntu@ubuntu-xenial:~$ timedatectl
      Local time: Thu 2017-06-01 11:09:47 JST
  Universal time: Thu 2017-06-01 02:09:47 UTC
        RTC time: Thu 2017-06-01 02:09:47
       Time zone: Asia/Tokyo (JST, +0900)
 Network time on: yes
NTP synchronized: no
 RTC in local TZ: no
```

# その他
`/etc/localtime` のリンクを変更する方法もあるようですが、上記の方法でも永続的な変更ができたため、個人的にはUbuntuでは`timedatectl`でのやり方のほうが良い気はします。
[【Linux】タイムゾーン(Timezone)の変更 - Qiita](http://qiita.com/azusanakano/items/b39bd22504313884a7c3)

# 参考
[Ubuntu 16.04 LTS : システムのタイムゾーンを設定する ： Server World](https://www.server-world.info/query?os=Ubuntu_16.04&p=timezone)
日本語単語で改行してくれるmikan.jsを改行タグ、半角タグ対応

# mikan.jsとは
[mikan.js : 機械学習なしで、日本語の単語の改行を処理するライブラリを書いた](http://qiita.com/trkbt10/items/9f8121ca084c80665e59)
[git :: mikan.js](https://github.com/trkbt10/mikan.js)
@trkbt10 さんが作った、日本語単語の途中で改行されたりせず、単語単語で改行してくれるという便利なもの。
お客さんが改行位置に煩い人がたまにいる時にb

ただこのままだと半角スペースで挿入したものが無視されてしまったり、
改行タグが加工されてしまって文字として表示されてしまったり、
といった部分があったので正規化部分とかちょっと変えてみた。
ほんとちょっと。

# 弄った場所
## 正規表現部分
```
var keywords = /([\(（「『]+.*?[\)）」』]|[a-zA-Z0-9]+\.[a-z]{2,}|[一-龠々〆ヵヶゝ]+|[ぁ-んゝ]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[ａ-ｚＡ-Ｚ０-９]+)/g;
```
↓

```
var keywords = /([\(（「『]+.*?[\)）」』]|\&nbsp;|<br>|[a-zA-Z0-9]+\.[a-z]{2,}|[一-龠々〆ヵヶゝ]+|[ぁ-んゝ]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[ａ-ｚＡ-Ｚ０-９]+)/g;
```
keywordに`&nbsp;`と`<br>`を追加

## spanで囲む部分
```
var html = words.map(function(word) {
  return '<span' + attr +'>' + word + '</span>'
}).join('');

```
↓

```
var html = words.map(function(word) {
  let inattr = word == "<br>" ? "" : attr;
  return '<span' + inattr +'>' + word + '</span>';
}).join('');
```
雑なやり方だけど。brの時はinline-blockさせないようにします。

## mikan.jsを使う部分
```
function startMikan(){
		var sampleElement = document.getElementsByTagName('p');
		var changeMikan = function(elm){
			elm.innerHTML = Mikan(elm.innerHTML.replace(/ /g, "&nbsp;"));
		}
		for(var i=0; i < sampleElement.length; i++){
			let elm = changeMikan(sampleElement[i]);
		}
}
startMikan();
```

p タグで囲んだ部分を全て取得し、回し、半角で入力している部分を`&nbsp;`に置換しました。
（最初からそう書いておけばいいんだけどすればいいんだけど~~面倒くさくて~~）

# やってみてわかったこと
スマホのドキュメントでmikan.jsを使用してみたのですが、なかなかどうしてキレイにはなりませんでした。
カタカナとか長くなってしまうものが多いため
結構凸凹具合が目立つ…。
特にスマホだと改行が多くなるので目立つかな。

ちょっとした見出しなどに使うくらいが丁度良さそう。
docker-machineのgoogle driverのgoogle-machine-imageの指定の仕方が変わってた件

gitlab ci runnerでdocker-machine使ってgceインスタンス作る部分がこけるようになってたのでいろいろ調べた結果、google-machine-imageの指定の仕方が変わってた。

使用してたdocker-machineのバージョンは0.10.0

今まではURLフルで書いてたのを、`https://www.googleapis.com/compute/v1/projects/`部分を省略して書くようにしたら直った。

下記の部分に関連して何か修正があったものだと思われるが、詳細はよくわからん。とりあえず動いたのでよしとする。

https://github.com/docker/machine/blob/master/drivers/google/google.go#L199
Kotlinいよいよ

Googleさん、JetBrainsと協力して、Kotlinの開発環境を提供していく。
Android Studio 3.0で、Kotlinをサポートする方向ぽいです。

てことで、Kotlinようやく日の目を浴びそうです。
これからは iOS Swift Android Kotlin　となりそうですね。

Kotlin と Swiftは記述がかなり似ている、横スライドが簡単になれば両方開発も簡単になりそうですね。
最近の言語というか、エディッタが優れもので、ほとんどコードはエディタが補完してくれるので
ますます、単語が覚えられなくなる・・・

Kotlinはかなり前からある言語で2011年辺りで、私が名前聞いたのが２年前2015年あたりでした
とりあえず凄いてことで調べて導入してみたら、確かに、
まずはコードがすっきりする、バグを減らすにはコードを減らすてのが有効ですね。

次に一番大きいのは、オプショナル型 ! ? ですね。
Nullを許容する、しない

Swiftやってた時は、オプショナル型に慣れるまで、かなり違和感がある感じでしたが、
なれると、逆にオプショナル型使わない意味あるの？　て疑問を持つくらいですね。

Kotlinにするメリットはこれでしょうね Nullぽ　から解き放たれるてことですね。

後は、現段階ではようわかってない！

こんなメリットしか無いように思えるKotlinですが弱点もあるようです。
まずは、サードパティー製品がKotlinに対応してるかどうかと、プロガードさんと喧嘩するらしい
プロガードさんが素直に動かないのは今に始まったことではないので、問題でもないのかな
ツンデレの扱いに慣れればどれも一緒て言ったとこでしょうか

Kotlinを導入してる会社さんは、まだまだ少ないですが、Kotlinこれからきますぞ〜
さて、Kotlinを勉強しましょう！
UnityのスクリプトエディターをVScodeにしようとしてハマった

##環境
OSX 10.11.6(EL Capitan)
Unity(5.6.1)
VScode(1.12.2)
VScodeのC#プラグイン(1.10.0)

##症状
http://qiita.com/shiena/items/0a4471d4902109eb309b
ここを参考にVScodeをUnityの外部エディタにしようとして謎のエラーが出て死んだ。

##C#プラグインを入れたら.Netを入れろと言われ、入れるがパスが通らない
https://www.microsoft.com/net/core#macos
ここからインストールしたけど、パスが通ってないのかなんなのかわかりませんが、VScodeでC#のスクリプトを開くたびに.Net Cli is not locatedみたいなエラーがでます。
単純にターミナルでdotnetとコマンドを打ってもnot foundです。
パスがおかしいみたい、直しましょう。

```
ln -s /usr/local/share/dotnet/dotnet /usr/local/bin/
```
でパスを通すと動く。
ターミナルでdotnetとコマンドして動くか確認。
##monoを最新にする
デバッグがうまくいかなかったり、インテリセンスが効かなかったりするらしい。公式のインストーラーで入れるとパスが通らずうまく動かなかった。ので、brewで入れたらうまく行きました。

```
brew update                   
brew install mono
```
過去に普通のインストーラーでインストールしていた場合何かbrewに言われるので

```
brew link --overwrite mono
```
などやると良い。
後輩にレビューで突っ込みを入れた話　JavaScript編[2]

#はじめに
ここは後輩に指導？助言？したコードレビューをつらつらと書いていたり。
とりあえずJavaScript編を適当に。もっといい実例とか修正先あったら教えてください。
前回の奴：[後輩にレビューで突っ込みを入れた話　JavaScript編](http://qiita.com/miihon_ani/items/50e492fdea8b5236faca)

##おことわり
自分も大それたコーダーではないのでいろいろやらかします。
現場的にはリードプログラマーに仕上げられてしまった程度です。たぶん実態はleadじゃなくてreviewのためのread。
「しょにょＸ」って書いてるのは笑い飛ばす意味も含めて軽いノリにしてるだけです。

##君何も考えずにコピペしてるよね編
鳥じゃないんだから最初に見たコードを妄信的に信用しちゃ駄目よ

###しょにょ４

```4_before.js
jQuery.expr[':'].Contains = function(a,i,m){
	return (a.textContent || a.innerText || "").toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
```
処理対象は必ず日本語(全角かな)なので、わざわざキャラをケースセンシティブにする必要が皆無。
見た瞬間英語サイトからのコピペが原因だろうなと悟ったのだけど、この後輩英語苦手なの知ってるので頑張りだけはとりあえず買うことにして、まずはさっさとafter（書くまでもない）。

```4_after.js
jQuery.expr[':'].Contains = function(a,i,m){
	return (a.textContent || a.innerText || "").indexOf(m[3])>=0;
};
```
さて、原因の方だけど、とりあえずコピペ元はここだったらしい。
[フォームにテキストを入力してリアルタイムに表示を絞り込む - jsdo.it](http://jsdo.it/haradaaa/8LVY)
あ、結局日本語なのね。そして2014年…いやまぁ、この人がスクラッチから作ってればまだ文句でなくコメントとかプルリクという言い様もあるんですが、どうせ英語からのコピペだろうと信じて疑わなかったので（←）、同じ内容で検索したらやっぱり出てきた
[簡単なjQueryコードでリストメニューにフィルタリング機能を加える - かちびと.net](http://kachibito.net/web-design/jquery-list-filtering.html)
ってこっちも日本語、そして2011年。前者と内容完全一致な上、なぜか二行だけ入ってるタブインデントまで一致してるので、2014年の奴は言い逃れのできないコピペ盗作。こいつの倫理観どうなってんだ…（ついでに「このインデント透かしいいな」と思ったのは内緒）

さらにここからは大元のリンクが貼られているみたいで、そっちを見る。
[jQuery list filtering – Papermashup](http://papermashup.com/jquery-list-filtering/)
あー、やっぱり大元は英語でしたかー。予想通りの場所には行きついたんですが、途中過程にいろいろ思うところがあったのもあって記録に残しておくことに。

#起こった原因
どう見ても「コピペしたら動いたからそれでいいや（思考停止）」パターンです。本当にｒｙ

##指導内容
とりあえず「動いたコードのコピペ元がこうだったから」ではなく、コピペした後に動作のトレースを行うよう指導。
ついでに、生まれたての雛鳥の如く最初に見たコードを信用するのではなく、そのコードの「根本」まで追いかけておくようにと言っておきました。

#つづくの？
続くのは本意ではないですがネタが出てしまったら（あと仕事が忙しくなかったら）書きます。
IFTTTの無料サービス「Maker」を使ってRSSが更新されたらいろんなSNSでシェアする仕組みを作ってみた

個人ユーザー向けに多出力で高機能なアプレットがつくれるIFTTTプラットフォームの新階層「Maker」が提供されたので、試しにこれを使ってRSSが更新されたら、SNSでシェアする仕組みを作ってみました。

試してみた感想としては、めちゃくちゃ簡単にサービス連携できたのですごくいい！というのが素直な感想です。
無料で何かウェブサービス連携したいなと思ったら、とりあえずIFTTTでできるか考えるのが良いかと思います。
サービスが対応していないなどでダメなら、LambdaやZapierの有料版を検討するって流れが効率がいいと思います。


詳細は下記リンクから閲覧できます。
http://dev.classmethod.jp/social/facebook/ifttt-rss-twitter-slack-facebook-linkedin/

![image.png](https://qiita-image-store.s3.amazonaws.com/0/155802/d5f7a61d-3fe9-dc00-2b7c-c6bdaa0cd0e2.png)
Cognos Mobile(iPad)をPC上のCognosサーバーにお手軽に接続する手順

##概要
ほとんどWindowsとiPadのネットワークの話ですが。。。
iPadやAndroidで動くCognos Mobileを、自分のPCにセットアップしたCognosサーバーに接続して検証する時に、社内の無線LANにiPad接続できれば良いのですが、それができない場合のお手軽な接続方法です。
図の赤線部分の接続です。
ちなみに、Cognos Mobileの構成は以下のような感じで、ゲートウェイ層やアプリケーション層でCognos Mobileのコンポーネントが動作しますが、Cognos 10.2.1まではCognos Mobileとしての別途インストールが必要でしたが、Cognos 10.2.2からはServerモジュールにMobileコンポーネントも組み込まれるようになったので、別途インストールは不要になってます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/4850ec5b-73e3-2ed1-43b0-a39bb5c3e1cb.png)

**IBM Cognos Mobile Deployment Guide 10.2.2**
http://www-01.ibm.com/support/docview.wss?uid=swg27045211

##手順
PCはWindows7を使用。無線はONにしたまま実行します。

コントロールパネルで、以下の下で「追加」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/4fd4ac69-cd25-09c9-5ca3-21b8e4952435.png)

アドホック ネットワークを追加します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/8fca9791-35fb-76ae-8125-ca5c053cea97.png)

ネットワーク名：任意
セキュリティの種類：WEP
セキュリティキー： 13桁で任意
このネットワークを保存します をチェック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/9f1a29c5-0138-bdc8-818f-c634d65e175b.png)

閉じる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/d3edb156-bdb4-3e8f-eb85-c94f21343067.png)

こんな感じになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/e8865f88-2314-ecbf-268a-6a4b58b16112.png)

iPadの「設定」アイコンから、「Wi-Fi」でDeviceのところに「CognosMobileNW」が表示されるので接続します。

2分くらいまっていると、PC側の表示が以下となります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/12b58908-3ba5-8197-02ec-424440e0b442.png)

ipconfigを打ってみるとIPを持っています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/bfb8f47f-6885-5ad5-db1a-d629742f5835.png)

さらに、しばらく待つとiPad側でIPが取得されます。
※iPad側で、「CognosMobileNW」の通信エントリーをクリックすると、DHCP設定でIPがふられている事を確認できます。

iPadでSafariを開きます。	
http://169.254.216.77/ibmcognos/ でつながります。

元に戻す時は、以下の画面でCognosMobileNWを削除すれば大丈夫です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/034b7608-a0bb-6602-8851-0e6931898146.png)

ちょこっとCognos Mobileの動きを確認してみたい時に、お手軽にできる手順です。
URLベースのiCalendarをServerless Frameworkを使って定期的にGoogleカレンダーに同期する

# URLベースのiCalendarをServerless Frameworkを使って定期的にGoogleカレンダーに同期する

手元のサーバが壊れてcronが実行できず困っていたので作りました。

https://github.com/k1LoW/serverless-ical2gcal

まず利用するために必要なものは以下の4つです

- 公開されているiCalendarのURL
- サービスアカウントID（メールアドレス）
- サービスアカウントキー（JSON）
- 同期先のGoogleカレンダーID（メールアドレス）

本当は公開されているiCalendarのURLがあればGoogle Calendarの機能だけで連携できるはずなんですが、自分のiCalendar URLではダメだったのでこれを使っています。

## Google Developer ConsoleのAPI Managerで新しいプロジェクトを作成する

<img width="748" alt="ScrenCaptured 2017-04-07 10.04.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/808/c09af83f-97d6-cc7f-f558-388f084e6b05.png">

## Google Calendar APIを有効にする

<img width="534" alt="ScrenCaptured 2017-04-07 10.05.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/808/6c4d84cb-ea07-9a60-ce06-bdb4d284727c.png">

## 新しいサービスアカウントとサービスアカウントキーを作成する

<img width="929" alt="ScrenCaptured 2017-04-07 10.05.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/808/1837cc8c-7215-2676-0038-4a57add0073a.png">

<img width="769" alt="ScrenCaptured 2017-04-07 10.06.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/808/17c5350a-ec58-104f-b271-ec10912d800f.png">

<img width="818" alt="ScrenCaptured 2017-04-07 10.07.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/808/3c21b623-5771-f84f-2882-34153c6a939c.png">

ここで ** サービスアカウントキー（JSON）** を取得できます。また、JSONの中を見れば `client_email` に **サービスアカウントID（メールアドレス）** を確認できます。

## Googleカレンダーで新しいカレンダーを作成する

作成時に「特定ユーザーと共有」に **サービスアカウントID（メールアドレス）** を「予定の変更権限」つきで登録します。

<img width="848" alt="ScrenCaptured 2017-04-07 10.08.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/808/2f21fba1-38a3-c443-e9f4-a25dbb4af49e.png">

作成後に **同期先のGoogleカレンダーID（メールアドレス）** を確認できます。

## serverless-ical2gcal のデプロイ

```sh
$ git clone 
https://github.com/k1LoW/serverless-ical2gcal
$ cd serverless-ical2gcal/
$ npm install
$ cp config.example.js config.js
$ cp [サービスアカウントキー（JSON）] key.json
$ [config.jsを編集]
```

config.jsは以下のような感じで編集してください。

```javascript
'use strict';
module.exports.config = () => {
    return {
        keyPath: '[サービスアカウントキー（JSON）のパス 例: ./key.json]',
        calendarId: '[同期先のGoogleカレンダーID（メールアドレス）]',
        icalUrl: '[公開されているiCalendarのURL]',
        timeZone: 'Asia/Tokyo'
    };
};
```

ここまでで、試しに同期してみます。

```sh
$ AWS_PROFILE=xxxxxxxx $(npm bin)/sls invoke local -t sync
```

うまく同期されればOK

あとは、デプロイして終わりです。

```sh
$ AWS_PROFILE=xxxxxxxx $(npm bin)/sls deploy
```

定期同期も15分間隔でやってくれますのでcronいらずです。

サーバーレス（管理レス）って良いですね。
ロック待ちのタイムアウト時間の確認／設定


## デフォルト値

* MySQLのデフォルトは 50 秒
* Aurora のデフォルトも同様



## 確認


```
mysql> SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';
```


## 設定


### その場で変更する場合

```
mysql> SET innodb_lock_wait_timeout=5;
```

### my.cnf に書く場合

[mysqld]
innodb_lock_wait_timeout = 5

# 参考

* [MySQL :: MySQL 5.6 リファレンスマニュアル :: 14.12 InnoDB の起動オプションおよびシステム変数](https://dev.mysql.com/doc/refman/5.6/ja/innodb-parameters.html#sysvar_innodb_lock_wait_timeout)
* [[MySQL]ロックタイムアウト時間を変更する (ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction)](http://nanoappli.com/blog/archives/6395)

* [MySQLのmy.cnfファイルサンプル - 世界の一部](http://time-complexity.blogspot.jp/2013/10/mysqlmycnf.html)
金は愛よりも重いし地獄の沙汰も金次第

ああ無情なりや

```go
package main

import "fmt"

func main() {
    fmt.Println(string('生' & '死')) //=>> '愛'
    fmt.Println('金' > '愛') //=> true
    fmt.Println('金' > ('生' & '死')) //=> true
}

```

## see also
- [愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)
- [金は愛よりも重い](http://qiita.com/Momiji0223/items/f4c47d90be59fca8585b)
webpack dev serverでhtmlをlivereloadしたかった

これで。watchContentBase: trueがポイント。

```js:webpack.config.js
const path = require('path');

module.exports = {
   entry: "./client/main.js",
   output: {
      path: path.resolve(__dirname, 'public/assets'),
      filename: "bundle.js"
   },
   devServer: {
      contentBase: path.resolve(__dirname, "public"),
      publicPath: '/assets/',
      watchContentBase: true
   },
   devtool: "source-map",
};
```

ディレクトリ構成はこんな感じ。

```text
./
├── client
│   └── main.js
├── package.json
├── public
│   ├── assets
│   │   ├── bundle.js
│   │   └── bundle.js.map
│   └── index.html
├── webpack.config.js
└── yarn.lock

```

設定内容は、

* build.jsはpublic/assetsに出力
* localhost:8080のルートをoutput.contentBaseでpublicディレクトリに設定
* build.jsの出力先(public/assets)をlocalhost:8080/assetsで見れるようにdevServer.publicPathを設定
* devServer.watchContentBaseでpublicディレクトリをlivereload対象にする
* index.htmlではassets/bundle.jsを読むようにする

これでlocalhost:8080/がlivereloadされる。

https://github.com/ymmtmdk/sand_pack
TensorFlowでFM復調

#概要
TensorFlowで、FM復調やってみた。

#写真
上　元の波形
中　FM変調
下　復調した波形

![fm3.png](https://qiita-image-store.s3.amazonaws.com/0/18104/f84572f9-43af-2429-2d3f-4964435c1154.png)
windowsでcurl.exeを使う

## curl.exe

https://curl.haxx.se/download.html

![download.png](https://qiita-image-store.s3.amazonaws.com/0/25728/7a4622f8-7da5-937f-c6df-159161ece367.png)

## grep.exe

http://gnuwin32.sourceforge.net/packages/grep.htm

find.exe や findstr.exe で満足できない時に。

## busybox.exe

https://github.com/rmyorston/busybox-w32
https://frippery.org/busybox/
https://frippery.org/files/busybox/busybox.exe

```bash
busybox.exe wget
```
SQL SELECT基礎(4-1) 列を減らす (project 射影)

この記事は「SQL SELECT基礎」の第4回目です。
[SQL SELECT基礎 目次](http://qiita.com/Hiraku/items/67cf329f1ddb897b1436)
←前の記事は[SQL SELECT基礎(3) その場で表を作る](http://qiita.com/Hiraku/items/aafc3b58d2efa4e97511)
→次の記事は[SQL SELECT基礎(4-2) 行を減らす (WHERE 制限)](https://qiita.com/Hiraku/items/683241229f6990d9edc2)

※以下がわかってたらこの章は飛ばしてOK

```sql
-- このSQL文の結果を説明して下さい。もちろん暗算で。
SELECT 1,"hello" FROM sample
```

## 表の加工(1) 列を減らす (project 射影)

SELECT文は、既にある表を加工してその場で別の表を作っていく構文です。
最も単純なのが`SELECT`から`FROM`の間に書く、1行1行に対して単純な加工を行う構文です。
**projection(射影)**操作と言ったりします。

こう、表からいくつか列を除外するイメージ。
<img width="440" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/1126/b4919268-8137-32e6-01e8-3162603ab03c.png">


また、スクリプト言語でよくある**map**関数に相当する機能も持ち合わせています。

### 今回のサンプル表


<img width="206" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/1126/089763b4-4d93-d76a-b962-30060e34ca59.png">


こんな感じでいいや。

```sql
(
SELECT 1 AS id, "taro" AS name, "1990-01-01" AS birthday
UNION ALL
SELECT 2, "hanako", "1995-04-12"
UNION ALL
SELECT 3, "jiro", "2004-03-02"
) AS sample
```

以降のSQLで`sample`と書いている部分は↑に置き換えると実行できます。

例えば `SELECT * FROM sample` と書いてあるSQLを実行したかったら、↓のような感じでコピペして実行して下さいね。

```sql
SELECT * FROM 

(
SELECT 1 AS id, "taro" AS name, "1990-01-01" AS birthday
UNION ALL
SELECT 2, "hanako", "1995-04-12"
UNION ALL
SELECT 3, "jiro", "2004-03-02"
) AS sample
```

### 全列を取得する`*`

無加工で全列取得するときは`*`と書くことができます。

```sql
SELECT * FROM sample
```

<img width="206" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/1126/089763b4-4d93-d76a-b962-30060e34ca59.png">

### 列を書き並べる

表を構成する列の名前を書き並べることもできます。`*`を使わずに丁寧に書くとこうです。

```sql
SELECT id,name,birthday FROM sample
```

`SELECT "hello world"`と違い、ダブルクォーテーションで囲っていないことに注意して下さい。`id`, `name`, `birthday` は列名であって、文字列ではないからです。

ここまでで察しがつくと思いますが、書き並べる列を減らせば、結果の列が減ります。

```sql
SELECT id,name FROM sample
```

<img width="212" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/1126/a9b50665-d080-1187-1526-2e5d50def396.png">

書く順番を変えれば列の順番も変わります。

```sql
SELECT name,id FROM sample
```

<img width="116" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/1126/bff2430f-59e0-ae5f-563f-ba4c1fea44c4.png">

簡単ですね。

### 列を増やす

逆にスカラ値をSELECT文中に直接書いて、列を増やすこともできます。

```sql
SELECT id, 1 FROM sample
```

FROM句があると、表を1行1行読みながら動作するため、定数値を書いていても行数分出力されます。

冒頭のクイズ結果は

```sql
SELECT 1,"hello" FROM sample
```
<img width="101" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/1126/8940520b-b9c1-f10f-67a7-0d068878a488.png">

sampleテーブルの行数分出力される、ということになります。



### 列を加工する

簡単な加工であれば、まとめて書いてしまうことができます。加工した後の値と、加工前の値を並べることもできます。

```sql
SELECT id * 2, id FROM sample
```

### 列同士を使って何か計算する

複数の列の値を同時に使って計算することもできます。たとえば文字列連結の`CONCAT()`関数を使って、適当な文字列を作ることもできます。

```sql
SELECT CONCAT(name, "さんは", birthday, "生まれです") FROM sample
```

<img width="266" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/1126/4fcb16c8-8250-5257-b5fb-be37c609afe6.png">

他にも四則演算やMySQL組み込みの関数を組み合わせたり、結構いろんなことができます。

感覚がつかめてきたでしょうか？
Powerlineをちょっと試したい人のために

![image.png](https://qiita-image-store.s3.amazonaws.com/0/95707/f1db365c-f82c-2a99-7662-2a8a691f4bad.png) 
from: oh-my-zsh themes


# Powerline
ターミナルのステータスラインをめちゃんこかっこいいやつにするプラグイン
> Powerline is a statusline plugin for vim, and provides statuslines and prompts for several other applications, including zsh, bash, fish, tmux, IPython, Awesome, i3 and Qtile.

この辺から入信してください。

- [POWERLINE が重いとか都市伝説を信じてる奴ってまだいるの？]
(http://blog.remora.cx/2013/05/use-powerline-daemon.html)
- [powerlineをいつ使う？今でしょ！](http://qiita.com/alpaca_taichou/items/ab70f914a6a577e25d70)
- [Powerline導入例](http://qiita.com/tkhr/items/8cc17c02dea1803be9c6)
- [PYTHON 版 POWERLINE を使ってみる（1日目）](http://blog.remora.cx/2013/04/use-python-powerlin.html)


# とりあえず導入
まずはとりあえず検索にひっかかった次の記事にお世話になる。

[5分でターミナルの表示をカッコよくする
](http://qiita.com/nakajmg/items/500342ef4d7595b47556)

私はこれを流して、フォントがインストールできなかった。

ので、新・フローを提示す。





1. `$ git clone https://github.com/banga/powerline-shell.git`
2. `$ cd /path/to/powerline.git`
3. `$ ./install.py`
4. `$ ln -s /path/to/powerline-shell.py ~/powerline-shell.py`
5. put following code in your `.bashrc`

```bash
function _update_ps1() {
    PS1="$(~/powerline-shell.py --mode compatible $? 2> /dev/null)"
}

if [ "$TERM" != "linux" ]; then
    PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi
```
ポイントは ２行目の `~powerline-shell.py --mode compatible`
`--mode compatible`をつけることでpowerline対応のフォントをインストールしなくとも、お豆腐 &#6848; がターミナルに現れることがない。

6. `$ bash`


> とりあえずこれでpowerlineがbashで動く

# powerlineをzshやfishで動かす
普段からzshやfishを使っている人は、次のコードをそれぞれ`.zshrc`や`config.fish`に記述する。
> `--mode compatible`はお好みで。

## zsh (~/.zshrc)
```zsh
function powerline_precmd() {
    PS1="$(~/powerline-shell.py $? --shell zsh 2> /dev/null)"
}

function install_powerline_precmd() {
  for s in "${precmd_functions[@]}"; do
    if [ "$s" = "powerline_precmd" ]; then
      return
    fi
  done
  precmd_functions+=(powerline_precmd)
}

if [ "$TERM" != "linux" ]; then
    install_powerline_precmd
fi
```

## fish (~/.config/fish/config.fish)
```zsh
# overwrite `fish_prompt`
function fish_prompt
    ~/powerline-shell.py $status --shell bare ^/dev/null
end
```
Raspberry Pi 3に安価なオーディオI/O基板を繋いでシンセサイザーを作る

ラズパイで何作りたいって、やっぱりシンセやエフェクターでしょう。ということで、安価に手軽にできる方法をさぐってみました。
# Audio I/Oが使えるもの
<b>USB-Audio</b>
手軽ですが、シンセという性質上レイテンシおよび安定性の問題からあまりいい選択肢ではありません。また、後で組み込んで筐体に入れるなどするときに厄介そうです。

<b>I2S</b>
いくつかドライバが用意されているチップがあります。BBのPCM5122が使われている例を多くみかけますが、これはInputがありません。サンプリング周波数が384kHzまで対応できるのは魅力…にみえますが、シンセでそこまで使いたくなることはあまりないでしょう。Cirrus LogicのWM8731というチップはI/O使えて96kHzまで対応できるので、これで探してみます。

# Audio Injector
WM8731とRaspberry Piをキーワードに検索するといくつかラズパイ専用に設計されたものが引っかかりますが、中でも<a href="http://www.audioinjector.net">Audio Injector</a>というのがとてもいい感じの仕様です。シンセとしては入出力がRCAピンなのは残念ですが。ドライバも今のRaspbianには既に入っていて、config.txtに１行追加するだけでALSAドライバが有効になります。購入方法はEbayで買うのが直球そうですが、実はAmazon.co.jpでも売ってます。しかもプライム対応なので明日届きます。これを書いている時点での価格は2,949円。十分安いと思うので、一番のおすすめです。
http://amzn.to/2shT6IW
<a href="https://www.amazon.co.jp/dp/B01HBC8CJ0/ref=as_li_ss_il?ie=UTF8&linkCode=li2&tag=studiorassoc-22&linkId=5d40d6eeedc00b0bd60cd9647360c9f7" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B01HBC8CJ0&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=studiorassoc-22" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=studiorassoc-22&l=li2&o=9&a=B01HBC8CJ0" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

# 試作用ボード
特に名前はないのでそう呼ぶしかないのですが、もっと安価なボードがAliExpressで売ってます。
<a href="https://ja.aliexpress.com/item/Free-Shipping-1pc-WM8731-module-audio-module-FPGA-audio-circuit-music-player-karaoke-OK/1399542257.html?spm=2114.010208.3.171.hlOEl0&ws_ab_test=searchweb0_0,searchweb201602_3_10152_10065_10151_10068_5010014_10136_10137_10157_10060_10138_10155_10062_10156_437_10154_10056_10055_10054_10059_303_100031_10099_10103_10102_10096_10147_10052_10053_10142_10107_10050_10051_5020014_10084_10083_10080_10082_10081_10110_519_10175_10111_10112_10113_10114_10182_10185_10078_10079_10073_10123_142,searchweb201603_9,ppcSwitch_5&btsid=bceeb3a9-5c24-43d6-adb5-dc285d9a9b70&algo_expid=e7463523-440e-4247-b6ba-0c2ac1e84e19-23&algo_pvid=e7463523-440e-4247-b6ba-0c2ac1e84e19">WM8731モジュール</a>
これを書いている時点での価格は送料込み1,595円。Audio Injectorのおよそ半額。送料無料だけど、いつ届くかはまったくわかりません。小さくていいのですが、Raspberry Pi専用に作られているわけではないので、自分でRaspberry Piのピンに繋ぐ必要があります。また、水晶が載ってない状態で届いたので、12.288MHzもしくは12.000MHzの水晶と20pくらいのチップコンデンサを２個自分で実装する必要があります。12.288MHzを使う場合はRpi-Protoドライバ(ただし48kHzでしか使えません。96kHzで使う場合はソースコードを修正してカーネルをビルドする必要あり)、12.000MHzの場合はAudio Injectorのドライバがそのまま使えます。また、DAC部分とADC部分のクロックは同じピンに繋ぐ必要があるので、僕は基板上でジャンパ線をはんだづけして使ってます。![IMG_9296.jpg](https://qiita-image-store.s3.amazonaws.com/0/107818/4744fa3d-1812-59ae-c685-db254b22c321.jpeg)

| モジュール上のピン | ラズパイのピン番号 |
|:--|:--|
| GND | 6:GND |
| 3v3 | 1: 3.3V |
| BCLK | 12:GPIO-18(I2S BCK) |
| DACDAT | 19:SPI MOSI |
| DALRC | 35:I2S LRC |
| ADCDAT | 21:I2S MISO |
| ADCLRC | 35:I2S LRC |
| MCLK | (非接続) |
| IIC_SCK | 5:I2C SCL |
| IIC_DAT | 3:I2C SDA |
うまくいけばこんな風に使えます。
![IMG_9300.jpg](https://qiita-image-store.s3.amazonaws.com/0/107818/6388f5c7-7847-cebc-fb03-cca9ddd8f974.jpeg)
AWS CodeDeploy でデプロイを自動化する

AWS CodeDeploy を使ってデプロイを自動化したときの資料です。

---

## Before

---

### EC2 + UserData

- AMIから新しいインスタンスを作成
- UserDataでGithubからコードをpull
- Capistranoで自分自身にアプリをデプロイ
- ELBに新しいインスタンスを追加
- ELBから古いインスタンスを退役
- 古いインスタンスを削除

---

![before.png](https://qiita-image-store.s3.amazonaws.com/0/44003/78d370f1-382b-2bb1-e4a4-c26b3375f33f.png)

---

### ここが問題
- インスタンスの作成〜削除が手作業
    - 膨大な手順書
    - 作業ミス
- スクリプトの終了がログ以外から確認できない
    - サーバに入って`cloud-init-output.log`を監視

---

## After

---

### CodeDeploy
- EC2インスタンスへのファイル配置とスクリプト実行の自動化・管理ツール

---

### CodeDeployの利用方法

#### 事前準備
1. アプリケーションを作成
1. デプロイグループを作成
    - デプロイ対象 (EC2のタグ名 / AutoScalingGroup)
    - デプロイ方法 (1台ずつ / 半分ずつ / すべて一度に)
1. [EC2にcodedeploy-agentをインストール](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/codedeploy-agent-operations-install.html)
1. [AppSpecファイルを配置](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file-example.html)
    - ファイルの配置場所を指定: [files](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file-structure-files.html)
    - 各イベントで実行するスクリプトを指定:[hooks](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html)

#### デプロイ
1. リビジョンを作成
    - S3 / Github にファイルをアップロード
    - リビジョンとして登録
1. デプロイを実行
    - 使用するリビジョンを指定(デフォルトは最新)
    - AWS CLI / マネジメントコンソールから実行

---

![after.png](https://qiita-image-store.s3.amazonaws.com/0/44003/f84af4bf-3156-a5ee-cc48-17fc0530ec5c.png)

---

### ここがうれしい
- インスタンスの作成〜削除がすべて自動化
- デプロイ開始と終了がSlack通知で確認できる
- デプロイの経過がモニタリングできる
- デプロイの結果と所要時間が記録される
- マネジメントコンソールからも実行できるので、段階的に移行できる
- **CodeDeployの利用自体は無料**
fabricをUbuntuにインストールして試す

fabricは、python製のデプロイツール。
http://fabric-ja.readthedocs.io/ja/latest/tutorial.html

ローカル環境やリモート環境で、任意のコマンド実行手順をpythonで記述することができる。
PCのセットアップをする際に、毎回コマンドを実行するのが面倒になったので、fabricでまとめて実行できるようにしたい。

シェルスクリプトで書くこともできるけど、pythonの方が条件分岐とかを記述しやすいし、便利なAPIが用意されているらしいから、こちらを使うことにする。

## 環境

```
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="GalliumOS 2.1"
```


```
$ python --version
Python 2.7.12
```

## pipの導入

fabricのインストールは、pip経由が推奨らしい。
pythonは最初から入っていたけど、pipは入ってなかったので入れる。

```
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
```

## fabricの依存ライブラリのビルドに必要なライブラリ 

これらが必要らしい。とりあえず、最低限のものを。

```
$ sudo apt install python-dev build-essential libssl-dev
```

## fabricのインストール

```
$ pip install fabric
```

## 試しに使ってみる

```
$ cat fabfile_1.py
from fabric.api import local 

def test():
  local("echo hello!")

$ fab -f fabfile_1.py test
[localhost] local: echo hello!
hello!

Done.
```

## 参考

* http://www.aipacommander.com/entry/2014/06/04/100000
* http://qiita.com/Kuchitama/items/18b63271bf706e34e8b1
* http://qiita.com/shinichi62/items/b188ca9f5e92bd92d39a
MacのVirtualBoxに作った仮想マシンへCentOSをインストールまでしたがインターネットに接続できない時の対応方法


## ① NAT用ネットワークインターフェースでネットワークに繋がらない
- 事象
    - `ip addr show`でenp0s3にIPアドレスが表示されない。
    - curlコマンドに `Could not resolve host:` と言われた。
    - 結論 : ネットワークに繋がらないらしい。
    - ![Screen Shot 2017-05-31 at 23.39.36.png](https://qiita-image-store.s3.amazonaws.com/0/159761/9e7d2a9c-e7e1-d95b-dd36-8a06d08b5bc8.png)

### 対応方法
1. `shutdown -h now` で仮想マシンを停止する
2. Oracle VM VirtualBox Managerで仮想マシンの設定をする
    1. [Setting]を押下する![Screen Shot 2017-06-01 at 0.21.31.png](https://qiita-image-store.s3.amazonaws.com/0/159761/9731ae67-845a-c57d-f3ad-53ff2dd883b3.png)
    2. [Network] > [Attached to:]で[Briged Adapter]を選択して[OK]を押下する![Screen Shot 2017-06-01 at 0.23.19.png](https://qiita-image-store.s3.amazonaws.com/0/159761/136a5a4c-4d94-8226-ef91-3876b2300d18.png)
3. 仮想マシンでインタフェースを有効にする
    1. 仮想マシンを起動してログインする
    2. ifcfg-eth0s3ファイルでインタフェースを有効にしてネットワークサービスを再起動する
        - こちら:arrow_lower_right:のサイト様に各項目の説明がありました。
        - [Linux ネットワーク基本設定 其の三](http://kazmax.zpp.jp/network/net1.html)

```linux
$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0s3
----ifcfg-eth0s3ファイルの中身-------
<省略>
ONBOOT=yes　<---------- noをyesに変更する
---------------------------------
$ service network restart
```
![Screen Shot 2017-06-01 at 0.27.13.png](https://qiita-image-store.s3.amazonaws.com/0/159761/304c9ea0-7c28-70d1-cd61-90873524ef2a.png)

### 接続できるかを確認する
:tada:できた:confetti_ball:
![Screen Shot 2017-06-01 at 0.28.23.png](https://qiita-image-store.s3.amazonaws.com/0/159761/416d04b3-5d7a-30c7-0d4b-dc1dc04f5b78.png)


### 経緯
[Software Design 2017年4月号｜技術評論社](http://gihyo.jp/magazine/SD/archive/2017/201704) の特集を見ながらVirtualBoxにCentOSをインストールしてネットワーク接続接続確認をしていた。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/159761/01d9f889-0c44-263e-1bfc-df93056a8090.png)

やったことは・・・
1. [MacにVirtualBoxをインストールする](http://ponsuke-tarou.hatenablog.com/entry/2017/05/25/235711)
2. [MacのVirtualBoxに仮想マシンを作る](http://ponsuke-tarou.hatenablog.com/entry/2017/05/26/131538)
3. [MacのVirtualBoxに作った仮想マシンへCentOSをインストールする](http://ponsuke-tarou.hatenablog.com/entry/2017/05/29/224034)

### 調べた
> **CentOSを仮想マシンにインストールする前に**
> まず、CentOSをインストールする前にやることがある。
> <省略>
> ここで**いきなりCentOSをインストールしてはいけない**。
> まずはVirtualBoxのネットワークアダプタを追加しよう。
> [Windows上でVirtualBoxにCentOSを入れてネットワーク設定で詰まった話 - datchの日記](http://doriven.hatenablog.com/entry/2014/04/25/184930)

既にCentOSをインストールしてしまった・・・。

そんな時にこちらの:arrow_double_down:サイト様に対応方法を教えて頂きました。
[VirtualBoxにCentOSをインストールした後にネットワークを設定する方法 &middot;  DQNEO起業日記](http://dqn.sakusakutto.jp/2013/08/virtualbox_centos_network.html)
Qiitadonのコードシンタックスにファイル名を表示するChrome拡張

## リポジトリ

https://github.com/hrs-o/qiitadon_display_filename/

## ことはじめ

- [Qiitadon](https://qiitadon.com/)に参加してみたところ、何人かがコードシンタックスにファイル名欲しい的なトゥートしてた。
- [ソースみたら](https://qiitadon.com/@HRS/10407)DOM上にはファイル名きちんと保持しているっぽいから表示できそうだなぁ。
- 夜になってもパッと見誰も作ってないから書いてみるかー
- ~~公式が普通に表示してくれれば無用~~


## やってること

もともとこんな感じでDOMが作られているので `data-filename` の有無を確認してcodeタグの子要素に追加してるだけ。

```html
<code data-language="php" data-filename="test.php" class="hljs" data-highlighted="true">
<span class="hljs-keyword">echo</span> <span class="hljs-string">'test'</span>;
</code>
```

1秒ごとにぶん回してるのが良いとは思ってないけど思いつかなかった。

## おわり

久しぶりに簡単だけどjavascript書いたのは楽しかった、dom周りとかいままでjQueryでやっていたところを使わないでやってみたいなぁと思ってたのでリハビリ的には良かったかなぁ。
指摘やら何やらあればよしなに。


~~てかデータいれてるなら公式がスタイル作って表示するだけなのでは~~
JavaScript基礎 オブジェクト編

オブジェクトについて内容さらっと纏めました。
各組み込みオブジェクトについて深堀した記事を作成しようと思うのでここでは
内容薄いですが参考になると嬉しいです。


# オブジェクト
JavaScriptの肝であるオブジェクトについて纏めます。
オブジェクトとはプロパティ名とプロパティ値の組み合わせの集まりです。

## オブジェクトリテラル
もっともシンプルに記載するなら以下のようになります。

```javascript
{}
```
このオブジェクトにはプロパティを何も記述していませんが、参照しているプロパティがあります。
オブジェクトリテラルに限った話ではないですが、理由はこの後を読み進めて行くと解決するはずです。

```javascript
var x = {};
console.log("toString" in x);  // true
```

## コンストラクタ
同じプロパティ名を持ち、異なるプロパティ値を持つ複数のオブジェクトを生成する方法としてコンストラクタがあります。
コンストラクタの役割は、オブジェクトを生成し初期化することです。
JavaScriptにはクラスがないので、コンストラクタを用いてオブジェクトを以下のように生成します。

```javascript
function Human(weight, height) {
  this.weight = weight;
  this.height = height
}
```

このコンストラクタでオブジェクトを生成するにはnew演算子を用います。

```javascript
var humanA = new Human(60, 175)
console.log(humanA);  // Human {weight: "60", height: "175"}
```

コンストラクタは関数です。関数はオブジェクトなのでプロパティに値だけではなく、
関数のへの参照などを代入することができます。オブジェクトのプロパティのうち値が関数オブジェクトへの参照で
あるものをメソッドと呼びます。

## 組み込みオブジェクト
はじめからJavaScriptに組み込まれているオブジェクトを組み込みオブジェクトと言います。
以下の種類があります。それぞれについては別記事で詳しく書こうと思います。

- Array
- Boolean
- Date
- Error
- Function
- Global
- JSON
- Math
- Number
- Object
- RegExp
- String

## プロトタイプ継承
オブジェクトは全てにプロパティとして`__proto__`を持っています。
オブジェクトの`__proto__`プロパティは、そのオブジェクトの継承元を参照します。

```javascript:__protp__によるオブジェクトの参照関係
var objA = {
  name: "neko",
  cry: function() {console.log( this.name + "cry Nyao!")}
};
var objB = {
  name: "dog"
};
objB.__proto__ = objA;
objB.cry();  //  "dog cry Nyao!"
```

`objB`はcry()メソッドを持っていませんが、呼び出すことができ、値も返って来ています。
これは`__proto__`プロパティによって継承元の参照を辿ってメソッドを見つけて実行するからです。

① `objB`はcry()をプロパティに持っているか調べます。見つかりません。
② 次に、`objB.__proto__`の参照先にcry()があるか調べます。ここで`objB.__proto__`の参照先はobjAとなります。 
　objAにはcry()があるので、objA.cry()を用います。
③ 次に、`objA.cry`の中の`this.name`を以下のように見つけていきます。
④ `objB`自身が`this.name`を持っているか調べます。
⑤ 見つかるので自身の`this.name`を使用します。

このように自分にないプロパティを`__proto__`プロパティの参照するオブジェクトへ連鎖的に探しに
いきます。これをプロトタイプチェーンと言います。
自分自身にないプロパティやメソッドをプロトタイプであるオブジェクトに委譲（delegate）していると言います。




終わり
のらメモたぬき

どうも。テスト投稿がてらに書いてみます。:innocent:

**Houdini Core**を買って
一括で支払いにしなかった理由となぜ買った？のかを。

**①支払い**
まずは1ヶ月/1万円として
1月で1万円分を勉強するという意味に置き換えて考えました。


**②購入経緯**　
ボーンデジタルさんでは以下のような内容でした。
・**特典**
6月下旬発売予定の『倫理と実践で学ぶHoudini -SOP&VEX編-』がもらえる！

Houdini CORE 自体は5月末まで**50%OFF**ということで
お求め安かったのが大きいと思います。

pokoponmaru
画像屋は夢想する　画像認識に関わる書籍の紹介 「眼の誕生――カンブリア紀大進化の謎を解く」

[「眼の誕生――カンブリア紀大進化の謎を解く」](https://www.amazon.co.jp/%E7%9C%BC%E3%81%AE%E8%AA%95%E7%94%9F%E2%80%95%E2%80%95%E3%82%AB%E3%83%B3%E3%83%96%E3%83%AA%E3%82%A2%E7%B4%80%E5%A4%A7%E9%80%B2%E5%8C%96%E3%81%AE%E8%AC%8E%E3%82%92%E8%A7%A3%E3%81%8F-%E3%82%A2%E3%83%B3%E3%83%89%E3%83%AA%E3%83%A5%E3%83%BC%E3%83%BB%E3%83%91%E3%83%BC%E3%82%AB%E3%83%BC/dp/4794214782)

![](https://images-na.ssl-images-amazon.com/images/I/51G3VNJA17L._SX345_BO1,204,203,200_.jpg)

眼の発生に関する遺伝子は、ショウジョウバエとマウスで共通である。ショウジョウバエの目の発生に関する遺伝子はマウスに目を発生させる。

ショウジョウバエは節足動物、マウスは脊椎動物で、動物としての系統が大きく異なります。昆虫は複眼・単眼の眼をもち、脊椎動物はレンズ眼をもっています。にもかかわらず、眼の発生に関わる遺伝子が共通に作用するということは、極めて不思議なことです。

カンブリア紀は、さまざまな生物が出現した時代です。
この本は、カンブリア紀に何が起こったのかを解き明かす本です。

その主張することは、生物が視覚をもったことが、生物の世界を大きく変えたということです。

## ディープラーニング は機械に視覚を与えだした。

現在、ディープラーニングは、機械の分野に視覚というものを与えるという歴史的な変化を引き起こしつつあります。
　従来は、監視カメラといってもその大半は画像を記録しているだけであって、画像情報を知覚しているものではありませんでした。それが顔検出(Viola-Jonesの論文の寄与が大きい。)や動き検出がカメラ自体の機能となりだしてだいぶ経過しています。それが今度はディープラーニングの進展によって、より多様な情報を知覚して、その場で自律的な判断を可能にする状況に達しています。
　ディープラーニングの枠組みは、ほぼ共通の枠組みのまま、さまざまな認識内容を扱える汎用性の高い枠組みになっています。Viola-Jones由来の顔検出に特化した専用のハードウェアはそのままでは、人検出に利用することは（たいがいの場合）できません。しかし、ディープラーニングの枠組みは、同一の枠組みのまま、認識する内容を差し替えられる可能性が極めて高いのです。それが各社がディープラーニングに特化したアーキテクチャの開発にあたっている理由です。
 例をあげれば、[YOLO Real-Time Object Detection](https://pjreddie.com/darknet/yolo/)というライブラリは、多数のカテゴリーのオブジェクトの検出を同時に行うライブラリです。顔検出用の専用ライブラリ、人物検出用の専用ライブラリがあって、それぞれが画像の縮小とRaster scanの実装をもっているというオーバーヘッドの大きい実装が昔はありました。それが汎用的なアプローチによってオーバーヘッドの少ない実装によって置き換えられうることを示しています。人物検出の精度が、人物検出に特化したものを上回るか、同等の水準になるかしたときには、人物検出専用の検出器という枠組みが過去のものになるのでしょう。
　他に例をあげれば、[OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)のような人物のポーズを推定するライブラリもディープラーニングを利用して実装されている。このような人物のポーズを推定するには、Kinectのような特殊な装置を必要とするものだったが、単眼のカメラの1枚の画像から姿勢を推定するようになっています。

　全てのものに安価な視覚（カメラの画像を元に判断する機能）が入ってくる。それは自動車だけではなく、自動販売機や、ドローン[1]や、携帯電話や、ディジタルサイネージ（広告用のディスプレイなど）[2]や、農業用の機器とありとあらゆるものに入ってくる可能性が生じてくる。今より10倍以上高性能がものが、今のものの1/10以下の価格で安く実現されて、社会が真っ向から変わってしまう可能性があるのです。
　現時点での世界一、使い勝手がよくて、コストパーフォーマンスもいい製品が、視覚を持った製品にとって変わられる可能性がでてきたと言えるのです。
　経験の伝承によってだけ伝えることができた検査方法は、人材の確保が困難になってきた時代においては、もはや伝承不可能なやり方になってしまってきているのです。目視検査や打音検査などの手法は、ディープラーニングに置き換えることで、技術の損失を防止しなければならないと思えるのです。
　
　**「眼の誕生――カンブリア紀大進化の謎を解く」は、ディープラーニングについては語っていません。** しかし、視覚がどのように世界を一変させたのは語っています。
　
ぜひ、この本は一読の価値があります。ぜひ本屋で手にとってみてください。

レビュー記事の1例「眼の誕生　カンブリア紀大進化の謎を解く」(http://zip2000.server-shared.com/eye.html)

[1]　[手と指で操るドローン、自撮りもラク　中国ＤＪＩ ](http://www.nikkei.com/article/DGXLASDZ26HNM_W7A520C1000000/)

[DJI、ジェスチャーで操作できる小型ドローン「Spark」を発売](http://itpro.nikkeibp.co.jp/atcl/news/17/052601509/)

[新型「Spark」でDJIが小型ドローン界に参入。ジェスチャーで操作できるパームコントロールがスゴかった！](http://www.gizmodo.jp/2017/05/dji-spark-handson.html)


[2]{デジタルサイネージがさらに進化中！インタラクティブ性で新体験を提供するOOH広告の最前線](http://www.movie-times.tv/purpose/communication/6501/)


-----

[「NHKスペシャル」生命大躍進第1集 そして”目”が生まれた](http://colaryourlife.seesaa.net/article/418845845.html)

ロドプシンという光を感知するたんぱく質を作る遺伝子が、植物から動物に取り込まれたという仮説がある。
そのことを紹介している。
i18nやpartial view、schema.rb、routes.rbと華麗に連携するAtomパッケージを作った

最近Rails用のAtomパッケージを4つ作ったのでその紹介です。
[autocomplete\-plus](https://atom.io/packages/autocomplete-plus)と[hyperclick](https://atom.io/packages/hyperclick)のプロバイダという組み合わせが大半です。

## 翻訳（i18n）を便利に使う - [rails\-i18n\-plus](https://atom.io/packages/rails-i18n-plus)

![screenshot](https://i.gyazo.com/5d186719e4543190407eb610ad7ea568.gif)

### 機能
* 自動で現在のviewに応じたprefixが補完される
* 登録済みの翻訳内容を確認しながら補完可能
* 日時フォーマットの補完にも対応
* hyperclickで翻訳内容を表示
* 辞書ファイル変更に応じて自動更新

### 設定
* `localesPaths`: 辞書ファイルを置くディレクトリ
* `priorityOfLocales`: この順序に応じて翻訳内容を表示する(例: `ja, en`)
* `translateMethods`: 独自のtranslateメソッドを定義している場合はこちらで指定
* `localizeMethods`: 独自のlocalizeメソッドを定義している場合はこちらで指定

## パーシャルビュー名を自動補完する - [autocomplete\-rails\-partial](https://atom.io/packages/autocomplete-rails-partial)

![screenshot](https://i.gyazo.com/a380bf28961eca90f38242cb54563056.gif)


### 機能
* renderパーシャルの補完
  * 現在位置に近いパーシャルを優先して表示


## schema.rbを参照した自動補完や定義元にジャンプする - [rails\-db\-scheme](https://atom.io/packages/rails-db-scheme)

![A screenshot](https://i.gyazo.com/7657febab1170ca47deaac26a577de4c.gif)

### 機能
* `scheme.rb`に応じて補完
	* ファイルと変数名に応じてモデルを判断
* モデルから`scheme.rb`のテーブル定義にジャンプ
* `scheme.rb`変更に応じて自動更新


### コマンド
* `rails-db-scheme:open-scheme`: 現在開いているモデルからscheme.rbのテーブル定義にジャンプ

## URLヘルパーの補完や該当アクションにジャンプする - [rails\-routes](https://atom.io/packages/rails-routes)

![A screenshot](https://i.gyazo.com/a5067e4fc9cec1f50253d0df12a2f17c.gif)

### 機能
* URLヘルパーの補完
	* 現在位置に近いURLを優先して表示
* URLから該当アクションにジャンプ
* `routes.rb`変更に応じて自動更新

### コマンド
* `rails-routes:reload`: routes.rbからリロード
	* 時々上手く読み込めていないことがあるので暫定対応として用意
WordPressでwp_head()追記の際に出来てしまうページ上部の空白の対処

## 自己紹介
プログラミング初心者です。
使用OSは主にwindows、開発環境はxamppでローカルサーバーを立ち上げての作業になります。
HTML少々、CSS少々、JavaScript少々、PHP少々。と、どれも少々です。
そんな私ですが、とりあえずものにしたいと思い手を付けたのが**WordPress**
プログラミング超初心者なのでプログラミングを理解している方たちが説明しているサイトの説明の理解に苦しむことがありますｗ
僕と同じように超初心者の方が始めるときにほんの少しだけでも参考になれば幸いです。
ドットインストールさんのお勉強が終わったので僕が最初に立ち上げたサイトをWordPressでリメイク中です。

## header.phpにwp_head()を追記した時に出来る空白の原因
どうやらログイン状態でページを見ると**管理バー**表示用のスペースが出来てしまう事のようです。

## 対処
**functions.php**に

```php:functions.php
add_filter( 'show_admin_bar', '__return_false' );
```
と追記すれば解決する模様です。

管理画面からも個別ユーザーごとに設定できるようですが、基本的には一括でいいかな。と思い今回の対処をしました。
Perlでファイルをバイナリで読む

2017/07/03 binmodeを追加。
``open my $fh, <:raw``も同等。``binmode($fh)``なら過去のPerlとも互換がある。


テキストファイルを特に意味はないけどバイナリで読む方法。
画像ファイルとかの解析なら役に立つ。

# まずは普通にテキストファイルを読む

```
$ cat test1.pl
#!/usr/bin/perl
use strict;
use warnings;

my $file = $0; # 自分自身を読む
open my $fh, "<", $file or die $!;
binmode($fh);
while (my $row = <$fh>) {
        print "read:" . $row;
}
close $fh;

$ perl test1.pl
read:#!/usr/bin/perl
read:use strict;
read:use warnings;
read:
read:my $file = $0; # 自分自身を読む
read:open my $fh, "<", $file or die $!;
read:binmode($fh);
read:while (my $row = <$fh>) {
read:   print "read:" . $row;
read:}
read:close $fh;
```
# テキストファイルをバイナリで読む

```txt
$ cat test.pl
#!/usr/bin/perl
use strict;
use warnings;

my $file = $0;
open my $fh, "<", $file or die $!;
binmode($fh);
while (sysread $fh, my $buf, 16) {
        my @data = unpack "C*", $buf;
        my @s = map { sprintf "%02x", $_ } @data;
        print "@s\n";
}
close $fh;

$  hexdump -C test.pl
00000000  23 21 2f 75 73 72 2f 62  69 6e 2f 70 65 72 6c 0a  |#!/usr/bin/perl.|
00000010  75 73 65 20 73 74 72 69  63 74 3b 0a 75 73 65 20  |use strict;.use |
00000020  77 61 72 6e 69 6e 67 73  3b 0a 0a 6d 79 20 24 66  |warnings;..my $f|
00000030  69 6c 65 20 3d 20 24 30  3b 0a 6f 70 65 6e 20 6d  |ile = $0;.open m|
00000040  79 20 24 66 68 2c 20 22  3c 22 2c 20 24 66 69 6c  |y $fh, "<", $fil|
00000050  65 20 6f 72 20 64 69 65  20 24 21 3b 0a 77 68 69  |e or die $!;.whi|
00000060  6c 65 20 28 73 79 73 72  65 61 64 20 24 66 68 2c  |le (sysread $fh,|
00000070  20 6d 79 20 24 62 75 66  2c 20 31 36 29 20 7b 0a  | my $buf, 16) {.|
00000080  09 6d 79 20 40 64 61 74  61 20 3d 20 75 6e 70 61  |.my @data = unpa|
00000090  63 6b 20 22 43 2a 22 2c  20 24 62 75 66 3b 0a 09  |ck "C*", $buf;..|
000000a0  6d 79 20 40 73 20 3d 20  6d 61 70 20 7b 20 73 70  |my @s = map { sp|
000000b0  72 69 6e 74 66 20 22 25  30 32 78 22 2c 20 24 5f  |rintf "%02x", $_|
000000c0  20 7d 20 40 64 61 74 61  3b 0a 09 70 72 69 6e 74  | } @data;..print|
000000d0  20 22 40 73 5c 6e 22 3b  0a 7d 0a 63 6c 6f 73 65  | "@s\n";.}.close|
000000e0  20 24 66 68 3b 0a 0a 0a  0a                       | $fh;....|
000000e6

$ perl test.pl
23 21 2f 75 73 72 2f 62 69 6e 2f 70 65 72 6c 0a
75 73 65 20 73 74 72 69 63 74 3b 0a 75 73 65 20
77 61 72 6e 69 6e 67 73 3b 0a 0a 6d 79 20 24 66
69 6c 65 20 3d 20 24 30 3b 0a 6f 70 65 6e 20 6d
79 20 24 66 68 2c 20 22 3c 22 2c 20 24 66 69 6c
65 20 6f 72 20 64 69 65 20 24 21 3b 0a 77 68 69
6c 65 20 28 73 79 73 72 65 61 64 20 24 66 68 2c
20 6d 79 20 24 62 75 66 2c 20 31 36 29 20 7b 0a
09 6d 79 20 40 64 61 74 61 20 3d 20 75 6e 70 61
63 6b 20 22 43 2a 22 2c 20 24 62 75 66 3b 0a 09
6d 79 20 40 73 20 3d 20 6d 61 70 20 7b 20 73 70
72 69 6e 74 66 20 22 25 30 32 78 22 2c 20 24 5f
20 7d 20 40 64 61 74 61 3b 0a 09 70 72 69 6e 74
20 22 40 73 5c 6e 22 3b 0a 7d 0a 63 6c 6f 73 65
20 24 66 68 3b 0a 0a 0a 0a
```
Jekyll + Travis CI + Netlify での設定のコツ

# 仕様など
* [Jekyll](https://jekyllrb.com/) でサイトを作る
* GitHub にリポジトリを置く
* [Travis CI](https://travis-ci.org/) で Jekyll のテストをする
* [Netlify](https://www.netlify.com/) でホスティング

# Jekyll + Travis CI

ドキュメントがあるのでその通りに
http://jekyllrb.com/docs/continuous-integration/travis-ci/

~~なお、 htmlproofer という gem が依存する activesupport のバージョン5.1.1が Ruby 2.2.2以上が必要で、このままだと 2.1.2p95 がデフォルトの Netlify でデプロイがこける。~~
~~（なお Travis CI は 2.3.3p222 なので問題ない）~~
2018.5.7 追記
その後、NetlifyのRubyのデフォルトバージョンが2.3.6になったので不要に

# Netlify で Ruby のバージョンを指定する
バージョンは指定できる
https://www.netlify.com/docs/continuous-deployment/

~~リポジトリのルートに `2.3.3` とだけ記入した `.ruby-version` というファイルを作るだけ。~~

現場からは以上です。
新卒１年目を終えて新人に伝えたいことあれこれ

##はじめに
新卒としてWebサービスの運営、開発に携わってあっという間に１年が経ちました。
この１年間は、サイトを運営することの難しさとチームで開発することの難しさを痛感しました。
これから研修が終わって配属される新人デザイナーやプログラマーの方に何か一つでも参考になればと思います。

##1.基本をおさえよう
当然ですが何事も基本が大切です。
疎かにすると途端にミスに繋がります。
なぜそのようなことが起こってしまったのかその原因と対策を行いましょう。
特に、長い間運営されているサービスであればあるほど何か一つプログラムでの出力を誤ると大きな事故に繋がることもあります。
例えば出力用の記述を忘れていたことで表示が大きく崩れる。
ということも十分起こります。
簡単な記述だからといって油断は禁物です。

HTML5もタグの意味が変化しているものや非推奨になっているようなタグもあります。
サイトで使われているからといって理解しないで使用しないように心がけましょう。

##2.まずは真似をすることから始める
任せられたことを自分の力で完成させる技術力も必要ですが、何より早く仕上げることが仕事をする上では大切なスキルです。
サイトを運営している会社では、先輩方の努力の結晶がたくさんあります。
まずは

- サイトのソースコードを見て利用できるものはないか
- これまでに同じようなものを作ってないか

などを調べるなり、聞くなりして「早く実装すること」を意識してください。

##3.慣れと反復練習
まず配属されてびっくりしたことはgit管理に「SourceTree」などを使用していないことです。
プログラマーさんはもちろん、デザイナーさんも全員コマンドを叩いて操作されています。
また、ファイル間の移動も「cd（Change Directoryの略）」を使用します。

▼gitコマンドの例

```
git add [ファイル名]
git commit -m "任意のコメント"
git push origin [ブランチ名]
```
その他にも検索したい文字列を検索する「git grep」などの便利なコマンドもあります。
会社によってはショートコマンドが設定してある場合もあるので、一覧にしておくと便利かもしれません。

初めは苦労するかもしれませんが、gitをコマンドで操作するようになるとgitの仕組みの理解が深まります。
エラーが発生すると非常に焦ります。
ただ、自分で解決できないと思ったら迷わず知っている人に尋ねましょう。
誤った操作をすると

- 自分の作業分が消えてしまった
- 消してはいけないデータを消してしまった

なんてことになりかねないので操作には十分注意してください。

##4.目的・意図を理解する
初めは頼まれることが多く、自分で考えたものを開発することが少ないと思います。
そこで考えてもらいたいのが「なぜそれをやるのか」です。
もし理解していないと

- 気がつけたミスを見落とす
- 仕様書と違うものを製作してしまう
- 当事者意識の薄れる
- 行動範囲や考え方が狭くなる

などの悪い循環が起こりやすくなってしまいます。
自分が行なっている作業を人に説明できることを目指すと良いと思います。

##一つずつ理解していく
社会人1年目は覚えることがたくさんあります。
何もプログラマーなら技術的なことだけを勉強していれば良いのではありません。

- 社会人としてのマナーや常識
- 言葉遣いや文章の書き方
- 考え方や姿勢
- 会社の行事に関わる準備

など職種によっても様々だと思います。
それに加えて運営しているサービスのKPI、事業課題盛りだくさんです。
全てを一気に覚えられる人は少ないと思います。
なので初めは自分の携わっている周りの数値をしっかり覚えましょう。
それから徐々に範囲を広げて覚えていけば良いと思います。

##5.サービスを運営する上で使用しているツールへの理解
サービスを運営しているということは様々なツールを使用していることが多いです。
有名なものでいうと・・・

- Google Analytics
- Google Search Console
- Google AdWords

などの分析ツールがあげられます。
これら使えるというのは大きなアドバンテージだと思います。
ユーザーのニーズの把握や問題の原因究明をすることができるからです。
それぞれの項目が何を意味しているのか、どのようにフィルターをかければ目的の数値が出せるのかなどできることが多いので理解していないと目的のデータを出すのにも時間がかかります。
どんどん使って理解を深めましょう。

##まとめ
初めから効率良く開発ができたりなんてことはできないことが多いです。
それは、やったことがないことが多いのだから当然です。
めげずにがむしゃらに立ち向かって欲しいと思います。
そして時々振り返ってみてください。
その繰り返しが気づきを生み、より自分を成長さえてくれるのではないかと思います。

これから多くの失敗をするとは思いますが、反省はしても落ち込まないでください。
「反省すること」と「落ち込むこと」は違います。
落ち込んでいるなと感じた時はとにかく手を動かして知識を蓄える時間に使ってください。

- プログラムを書く
- 本を読む
- ネットから新しい情報を得る

なんでも構いません。
そのようにして有意義な時間を増やし、失敗を成功体験に変えていって欲しいと思います。

##リンク集
googleでの検索方法いろいろ
http://search.nifty.com/search/detail/detail_command.htm
コマンド一覧
http://www.k4.dion.ne.jp/~mms/unix/linux_com/
gitコマンド一覧
http://qiita.com/konweb/items/621722f67fdd8f86a017
Sequelizeの同期処理をマスターする

## Sequelize

-  PostgreSQL、MySQL、SQLite、MSSQLといったDBに簡単にアクセスするためのNode.jsのORM

## こんな構造のデータを新規に追加する
![ER図.PNG](https://qiita-image-store.s3.amazonaws.com/0/77327/220fb110-51c1-2251-ab15-a033fb9892fb.png)

※現実には部と課が１対１ということはありませんが、サンプルコードをシンプルにするたにこのような構造になっております

## サンプルコード

```ruby:Node.js
var bushos = [
  {
    name: "部署名",
    leader: "リーダー名",
    Ka: {
      name: "課名",
      leader: "リーダー名",
      Projects: [
        {
          name: "プロジェクト名",
          leader: "リーダー名"
        },
        {
          ・・・
        },
        {
          ・・・
        }
      ]
    }
  },
  {
    ・・・
  }
];


function saveBushoInfo(bushos){
  var bushoFunctions = [];
  bushos.forEach(function (busho) {
    bushoFunctions.push(new Promise(function (bushoResolve, bushoReject) {
      models.Busho.create({
        name: busho.name,
        leader: busho.color
      }).then(function (savedBusho) {
        models.Ka.create({
          BushoId: savedBusho.id,
          name: savedBusho.Ka.name,
          leader: savedBusho.Ka.leader
        }).then(function (savedKa) {
          var projectFunctions = [];
          busho.Ka.Projects.forEach(function (project) {
            projectFunctions.push(new Promise(function (projectResolve, projectReject) {
              models.Project.create({
                KaId: savedKa.id,
                name: project.name,
                leader: project.leader
              }).then(function () {
                 projectResolve();
              }).catch(function (err) {
                console.log('err', err);
                projectReject();
              });
            }));
          });
          Promise.all(projectFunctions).then(function () {
            bushoResolve();
          }).catch(function (err) {
            console.log('err', err);
            bushoReject();
          });
        }).catch(function (err) {
          console.log('err', err);
          bushoReject();
        });
      }).catch(function (err) {
        console.log('err', err);
        bushoReject();
      });
    }));
  });
  Promise.all(bushoFunctions).then(function () {
    // 正常に保存された
  }, function (err) {
    console.log('err', err);
    // 保存に失敗した
  });
}
```

## 説明

- 配列になっているデータを保存するときは、Sequelizeをただ使うだけでは、非同期の機能がじゃまをする
    -  そこでbushoFunctionsのような配列を用意してあげ、そこにDB処理を行うPromiseオブジェクトをプッシュして、Promise.all()を使って、配列の中のすべての処理が終わったら、次の処理に移るようにしてあげる
- 上のサンプルコードはPromise.all()の入れ子の処理のサンプルになります
- createメソッドに.thenすることでDBに保存したデータを取得することができ、新規のデータを追加するにあたって採番されたidをリレーションのあるテーブルのデータに含めることができる
[ビギナー向け] 5行で済ますjavascriptテスト環境構築


　シェル上で行うJavascript のテスト環境の実装方法にご紹介したいと思います。

　テスト環境には様々なものがありますが、あまりに詳しく書くとわかりづらく感じると思います。

　そこで今回はmocha を使ったもっともシンプルな実装までを行います。

　あまりこの方面に詳しくない方も以下のコマンドを無心にbash へコピペしていけば大丈夫です。

 　[環境] macOS Sierra version 10.12.4


　1行目：homebrew のインストール
--


```bash:1行目：homebrewのインストール
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

　homebrew を持ってない方はまずこれをインストールします。

　**homebrewって何？**
　世の中には数多のソフトウェアがあります。しかしわざわざサイトまでいってソースコードをビルドするのは骨が折れますし、開発者によって微妙にビルド方法が違ったりするので機械的にいきません。

　homebrew はほぼ１つのコマンドで有名なソフトウェアのダウンロード・ビルド・パス設定までを自動で行ってくれるソフトです。

　また、アップデートした時などに設定が変になって使えなくなった場合も、その対処法を提案してくれます。
　極めて有用なのでソフトウェアをダウンロードするときは積極的に使うのがおすすめです。

　２行目：node のインストール
--

```bash:２行目：nodeのインストール
brew install node;
```

　homebrew を使ってnode.js と npm をインストールします。

　**node.jsって何？**
　私も専門的に把握しているわけではありませんが、ブラウザを介さずにjavascript を動かすプラットフォームの一つです。
　サーバサイドでJavascript を動かす上では極めて有用なツールとなっています。

　**npm って何？**
　node.js のような非ブラウザ環境で動かすことを前提としたjavascript のパッケージ管理ツールです。
　python でいうpip やR のpackage をイメージしてもらえばよいと思います。

　３行目：mocha のインストール
--
```bash:３行目：mochaのインストール
npm install --global mocha;
```

　npm を使ってmocha インストールします。

　このmocha がテストを行うためのツールとなります。


　４行目：テスト環境の構築
--
```bash:４行目：テスト環境の構築
mkdir testJS;cd testJS;
```
　ただディレクトリを作るだけです。
　またついでにテストにかけるコードを用意しておきましょう。
　以下をコピペしてtestJSディレクトリ上においてください。

```JS:test.js
console.log('テスト開始')
var value=1
//テストしたい関数
function myfunc(arg){
 return(arg+1);
}
console.log('予想値:'+2)
console.log('実際の値:'+myfunc(value))
console.log('等価であるか？'+(2===(myfunc(value))))
```

　５行目：テスト実行
--
```bash:５行目：テスト実行
mocha test.js;
```

```bash:結果
テスト開始
予想値:2
実際の値:2
等価であるか？true


  0 passing (0ms)


```

　これでテスト環境の構築ができました。

　補足説明
--
　test.jsを実行するだけならばnode.js をインストールするだけで大丈夫です。

```bash:test.jsの実行
node test.js;
```

　しかしmocha を使うと時間も測ってくれるのであったほうがよいでしょう。

　またこの記事では説明しませんがmocha はこんなテストを実行するだけでなく、もっとちゃんとしたテストも実行できます。
　むしろ今回のテストはテストと言っていいのか怪しいくらいのものです。
　
　よりちゃんとしたテストは以下の記事などを参考にしていただければと思います。

　[mocha公式](http://mochajs.org/)
　[小さく始める JavaScript のテスト](http://qiita.com/Jxck_/items/0f5437dd3ab48f1ffd6e)
　[テストフレームワーク mocha](http://hokaccha.hatenablog.com/entry/20111202/1322840375)
　[一から始めるJavaScriptユニットテスト]
(http://developer.hatenastaff.com/entry/2016/12/05/102351)

　以上です。ありがとうございました。