OmniAICreator/Qiita-1.07M huggingface dataset:
AWS EC2上でNode.jsを管理者ユーザーから実行した際のError: listen EACCES: permission denied 0.0.0.0:XXXXについて

#はじめに

よく理解しないまま続けてしまい、ハマってしまったので書き残しておきます。

#問題

前回まででローカル(VScode)からリモートサーバー(AWS EC2)の編集ができるようになりましたが、いざindex.jsファイルを追加し、実行しようとすると以下のようなエラーが出ます。

前回の記事:https://qiita.com/kobyta/items/510e638ba6693de12871

![スクリーンショット 2019-07-30 8.03.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449631/a4ef959f-41cf-d6b2-6744-a89725ff54f1.png)

permission deniedとなっているので、安直にsudo権限からアクセスしたら、「sudo : node : コマンドが見つかりません」と出てくきます。
同じような問題にぶつかっていた人がいたので、自分もそれに習い下のようにシンボリックリンクを作成しましたが、下記画像のようにaddress already in useと出てきて断念、、（既に22番ポートをローカルとリモートサーバーのやりとりに使っていたせいか、、。そもそもシンボリックリンクを作る理由がわかっていない。管理者ユーザーとrootユーザーでPATHが同じならばエラーが解決するのか、、。）

参考URL：https://stackoverflow.com/questions/4976658/on-ec2-sudo-node-command-not-found-but-node-without-sudo-is-ok

```terminal:terminal
$ sudo ln -s /home/ec2-user/.nvm/versions/node/v12.6.0/bin/node /usr/bin/node
$ sudo ln -s /home/ec2-user/.nvm/versions/node/v12.6.0/bin/npm /usr/bin/npm
$ sudo ln -s /usr/local/bin/node-waf /usr/bin/node-waf
```

![スクリーンショット 2019-07-30 8.11.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449631/7d7c962f-9b79-c136-7fef-d715aaf0aa84.png)

- 一言メモ 「管理者ユーザーとrootユーザーと一般ユーザー」  
ここまで「管理者」＝「root」と思ってきましたが、そうでは無いようです。「root」は管理者より上位にいる神みたいな存在で、「管理者」だけが「sudo」コマンドを使って一時的に神の力を得るということらしいです。「一般」ユーザーはそもそも「sudo」コマンドが使えません。

#解決策

別のやり方を模索。以下の参考記事①で1024番以下のポート番号は管理者権限を持たないユーザーには実行できないことを知る。また参考記事②でnode.jeを管理者ユーザーから実行する際にポート番号3000を使っている人がいたので自分も同じようにやってみる。

参考記事①：http://dotnsf.blog.jp/archives/1066514800.html
参考記事②：https://qiita.com/oishihiroaki/items/bc663eb1282d87c46e97

AWS EC2のセキュリティグループで以下のようにインバウンドに3000番のポートを増やす。

![スクリーンショット 2019-07-30 8.16.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449631/7ad7d803-a4e2-aa7f-7458-12cf1be39ccf.png)

実行しようとしていた「index.js」のポート番号を3000に変更。ローカルからリモートサーバーに変更を送信。

![スクリーンショット 2019-07-30 8.19.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449631/1d857154-28ca-0746-0435-9d7ee5ab5e81.png)


「管理者」ユーザーで実行した後、「 http://パブリックIPアドレス:3000/ 」にアクセスすると実行できていました。

- 一言メモ「ブラウザのアクセス先について」  
httpやhttpsなどではポート番号のデフォルトが80、443と決まっており「 http://パブリックIPアドレス/ 」とすればアクセスできる。今回のように別のポートを使いたい場合、「 http://パブリックIPアドレス:ポート番号/ 」というように指定しなければならない。

なんとか実行できる環境まで行けたので、nodeでのアプリ制作を進めたいと思います。
【AWS】いろいろなサービスをいじってみた 

#■サービス一覧
![サービス一覧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412778/8b8e896f-8669-733f-35e6-06274a6ec4f7.png)

#■AWSとは
・AWSについて
https://qiita.com/modokkin/items/fc1280eda4356816a3f9/

・AWSアカウントの作成
https://aws.amazon.com/jp/register-flow/

#■IAM（Identity and Access Management）
AWSのユーザとアクセスの管理

・セキュリティの初期設定
　https://qiita.com/tmknom/items/303db2d1d928db720888
　①ルートアカウントの MFA を有効化
　※多要素認証（MFA）
　　E メールアドレスとパスワードの他に、MFA デバイスからの認証コードを求められます。
　　https://aws.amazon.com/jp/iam/details/mfa/

　②個々の IAM ユーザーの作成
　　ルートアカウント
　　　└ユーザアカウント　　←普段こちらを使うようにする
　
　③グループを使用したアクセス許可の割り当て
　④IAM パスワードポリシーの適用
　⑤アクセスキーのローテーション

・ロールの設定
　例）
　Lambda関数A
　└ロールA
　　└ポリシーA
　　└ポリシーB

#■EC2（Amazon Elastic Compute Cloud）
仮想サーバー機能を提供するクラウドサービス。
初期費用は不要。スペックと稼働時間に応じて課金される。
オートスケール機能を利用することで、インスタンスの処理能力を自由に拡張または縮小できる。

・EC2を使ったWebサーバー構築
https://qiita.com/tseno/items/47ae835933fd919772e6

・teratermでログイン
https://dev.classmethod.jp/cloud/aws/aws-beginner-ec2-ssh/

・WinScpでログイン、アップロード
https://torutsume.net/aws-ec2_fileupload/

・Python3環境構築
https://qiita.com/tisk_jdb/items/01bd6ef9209acc3a275f

・EC2でFlaskアプリを立ち上げる
https://qiita.com/2355/items/7b4074afa5e0f16656f1

※Python用Webアプリケーションフレームワーク「Flask」について
https://qiita.com/t-iguchi/items/f7847729631022a5041f
http://python.zombie-hunting-club.com/entry/2017/11/03/223503#/

#■API Gateway
データ、ビジネスロジック、機能にアクセスするための「玄関」として機能する
REST API および WebSocket API を作成できます。

https://aws.amazon.com/jp/api-gateway/
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/welcome.html

※APIとは
http://e-words.jp/w/API.html

※RESTとは
https://qiita.com/TakahiRoyte/items/949f4e88caecb02119aa

・LambdaとDynamoDBを使ったAPI開発
https://qiita.com/miutex/items/d80c9ff0290966eb0cf8

・ajaxでメッセージを送る
https://www.tantan-biyori.info/blog/2019/01/amazon-api-gatewayapi.html

#■DynamoDB
サーバレスで高速で柔軟なNoSQLデータベースサービス
https://aws.amazon.com/jp/dynamodb/

・DynamoDBとRDBとの違い
http://blog.serverworks.co.jp/tech/2017/04/12/what_is_different_dynamodb_and_rds/

・DynamoDBにテーブルを作成する
https://dev.classmethod.jp/cloud/aws/serverless-first-dynamodb/

#■Lambda
サーバレスを実現するためのサービス
https://aws.amazon.com/jp/lambda/
https://www.bit-drive.ne.jp/managed-cloud/column/column_14.html

・S3のファイルをコピーする関数を作る
https://dev.classmethod.jp/cloud/aws/lambda-my-first-step/

#■S3(Amazon Simple Storage Service)
スケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。https://aws.amazon.com/jp/s3/

S3料金表
https://service.plan-b.co.jp/blog/creative/4981/
S3の料金 = ストレージに保存している容量 + S3に対するリクエスト(GET、PUTなど)数 + データ転送料金

アップロード＆ダウンロード
https://dev.classmethod.jp/cloud/aws/amazon-s3-file-up-down/

※S3のバケットのトリガー設定は一つだけらしい
https://qiita.com/cobot00/items/140835a759055522c523

#■IoT Core
AWS IoT Core は、インターネットに接続されたデバイスから、クラウドアプリケーションやその他のデバイスに簡単かつ安全に通信するためのマネージド型クラウドサービスです。
https://aws.amazon.com/jp/iot-core/

・pythonでPubSub
https://symfoware.blog.fc2.com/blog-entry-2224.html

※MQTTとは
http://tech-blog.rakus.co.jp/entry/20180912/mqtt/iot/beginner
自分の勉強記録を分析しよう！～新米エンジニアの個人開発～

# 自分の勉強記録を分析しよう！～新米エンジニアの個人開発～
プログラマー歴1年目のじょーだいです。

プログラマーになって一年、そろそろ新しいことを学んでみたかったので、使ったことのない技術を使用して簡単なwebアプリケーションを開発してみました。

##どんなアプリ？

僕は勉強したことをTwitterでつぶやいています。

他にも多くの方々が自分の勉強したことをつぶやいているのをよく見かけます。

せっかく勉強しているならその記録をしっかり残したい。。。

そこで今回は自分の勉強を記録しておくことのできる**「Stacker」**というアプリを開発しました。

##使用している技術は？

- Laravel
- Vue.js
- Chart.js
- MySQL
- Docker
- XSERVER
- Git

##各画面の説明
###ダッシュボード
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375710/39643a54-5eae-1d7e-30e9-fe45b535584e.png)


この画面の作成が一番時間をとられました。

上部に1週間のグラフ、下部に日毎の入力したデータが表示されます。

また右上のボタンによって、1週間のグラフを総合計のグラフに切り替えることでカテゴリーごとの合計時間を知ることができます。

勉強している日、してない日がすぐわかるので結構気に入ってます。

###カテゴリ―毎の詳細
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375710/c8ea4be0-da75-5458-34b4-7462860f0851.png)

ダッシュボードの左側のカテゴリー一覧からカテゴリ―を選択すると画像のような画面が開きます。

今まで入力したコメントが一覧表示されるので、どんなことを勉強してきたのか一目瞭然です。

カテゴリ―詳細ページは他のユーザーが覗くこともできます。

知らない語句や勉強の順序、気になるエンジニアがどんなことを学んでいるのかを知ることができます。

###ホーム
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375710/605d8f12-dbff-34d3-3888-d9d1247d03e0.png)

各ユーザーの投稿が一覧表示されています。

とても簡易的なSNSのような感じです。

フォロー機能等は実装していませんが、他のユーザーの勉強量を知ることで、モチベーションを上げることができます。

現在会社の後輩とこのアプリを使用しているのですが、とても会話が盛り上がります。

特に相手が何を勉強しているのかがわかるので、気になったことをすぐに聞けるし、話のきっかけづくりにもなります。

##感想

一応完成はしたものの、まだまだ実装したい機能が盛りだくさんです。
例えば
　フォロー機能
　、円グラフでの分析
　、カテゴリ―毎の表示順序、色の切り替え
など、他にも細かいところでまだまだたくさんあります。

他にもリファクタリングやテストコードの作成などすることは盛りだくさん。

これからも勉強を記録していくためにこのアプリを使用し、改善を続けていきます。

自分自身が毎日使用していくので、改善、メンテナンスを無理なく続けていくことができると思います。

個人開発でも作りっぱなしではなく、しっかりと運用していくので、よければ皆様も使ってみてください。

##一言

コードが汚すぎる。リーダブルコード読んだはずなんだけどな～

[➡Stackerはこちら](https://today-stacked.net/)

[➡Twitterはこちら](https://twitter.com/jyodai_afigura)
【3分で分かる】回帰問題と分類問題の違い

これから機械学習を勉強してみたい！と思っている方に向けて書いた記事です。今回は**回帰問題**と**分類問題**について説明します。難しい言葉や数式は全く出てこないので安心してください！また、記事の最後にクイズも用意したので、ぜひチャレンジしてみてください。

##機械学習の種類
機械学習には大きく分けて3つの種類があります。教師あり学習、教師なし学習、強化学習です。この記事では機械学習の中で最も一般的である**教師あり学習**について扱います。

##教師あり学習とは？
例えば動物の画像データを大量に用意します。これらの画像データにはそれぞれ動物の種類の名前が正解として紐づけられています(この画像のはイヌ、この画像はネコといったように)。
![supervised_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399450/c355b2c5-41f8-6806-24ee-ac756ca9ef1d.png)
大量の画像を機械に何度も何度も見せることによって、だんだんとそれぞれの動物の特徴が分かってきます。
そしてまだ見せていないイヌの画像データを見せたときに、機械は「しっぽがあって、ギザギザの歯があって・・・」と分析して、「これはイヌです！」と答えるようになるのです。
![supervised_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399450/5093cac2-5b21-0790-3a1b-964bb90297cb.png)
このように**あらかじめ正解が分かっているデータを分析させて、未知のデータを予測させる手法**を教師あり学習と呼びます。

さて、この記事の本題に移りますが、実は教師あり学習には**回帰問題**と**分類問題**といった2つの種類があります。この違いについて、さっそく見ていきましょう。

##回帰問題とは？
例えば次のようなグラフがあったとしましょう。このグラフは、ある土地における温度と湿度の関係を表しています。
![regression_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399450/f36e76ce-53bb-914b-0f1a-fa260a630d9b.png)
もし温度が23℃のとき、湿度はどれくらいになるでしょうか。残念ながら23℃はこのグラフ上にプロットされていないので自分で予想を立てなければいけません。
図1のように直線を引いた場合は湿度35%、図2のように曲線を引いた場合は湿度37%です。わずかな違いではありますが、湿度の値が線の引き方によって変わりました(もちろん最も良い線の引き方もありますが、今回は省略させていただきます)。
![regression_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399450/97c0f51e-73e3-13da-8910-037f37a388ac.png)
しかしながらどちらも共通していることは、**温度が決まれば湿度も必ず決まる**ということです。線を引いたことによって、温度が17℃のときや34℃のときも湿度を求めることができますよね。これは引いた線がずっと続いていて途切れていないからです(これを**連続している**といいます)。
回帰問題とは**連続した数値**における予測を行う問題です。

##分類問題とは？
柴犬の特徴って何でしょうか？体の高さよりも体の長さの方がやや長く、小さな立ち耳で巻き尾、毛の色は茶色や黒色で腹は白色・・・。たくさんありますね。
大量のイヌの画像で学習した機械に、正解が「柴犬」の画像(機械にとっては未知のデータ)を見せます。最初に「体の大きさ」で判別したとしましょう。大型犬である「ハスキー」や「ゴールデンレトリバー」の可能性が消えます。続いて「しっぽの立ち具合」で判別します。ここで、しっぽが垂れている「ダルメシアン」などの可能性が消えます。・・・。
![classification.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399450/a6f8f510-2c36-a5dd-cd7c-8be14d6b5a87.png)
というように機械は「イヌはこういった特徴がある」ということを学習していて、それに基づいて正解を出します。
分類問題とは、データが**どのグループに属する**のか予測する問題です。

###確認クイズ
次の例は回帰問題、分類問題のどちらかに当てはまるか答えてください。
去年発売されたパソコンが欲しい。今から数えて3か月後にお金が貯まるので買いたいと思っている。いくらくらいの値段で買えるか予想したい。
↓
↓
↓
↓
↓
↓
↓
######クイズの答え
回帰問題

---
参考
『ゼロから作るDeep Learning pythonで学ぶディープラーニングの理論と実装』
『Coursera Machine Learning』
curl よく使うコマンドを端的に


## curlからwebAPIにPOSTする方法

ずいぶん前に[下位10%のダメなエンジニアにだけ解けないパズル](http://challenge-your-limits.herokuapp.com/)を解いた時にまとめたもの。

### パラメータを直接指定して送る場合
```shell:shell
curl -v http://challenge-your-limits.herokuapp.com/challenge_users \
-X POST \
-d 'name=your-name&email=123456789@example.com&comment=Thanks!' | jq .
```

### json形式で送る場合
```shell:shell
curl -v http://challenge-your-limits.herokuapp.com/challenge_users \
-X POST \
-H "Content-Type: application/json" \
-d '{"name":"your-name","email":"123456789@example.com", "comment":"Thanks!"}' | jq .
```

### オプション

-v レスポンスヘッダを標準出力
-X リクエストの種類を指定
-H リクエストにヘッダを追加
-d ボディの追加
\ コマンドラインにおいて複数行入力したい場合に使う

manでdオプションの説明を見てみると
> Sends the specified data in a POST request to the HTTP server

とあるので、この場合は本来XオプションでPOSTを指定する必要はないがオプションの紹介のために記載しておく

### jq

jqはjsonをパースするためのコマンドで、|(パイプ)で繋げることで標準入力として受け取ったjsonを整形し標準出力に表示する

### Appendix

#### urlにあるファイルをダウンロード
```shell:shell
 curl -O url
 ```
JavaとC++は学ぶな！！初心者が学ぶべき言語【小学生向けに厳選】

[JavaとC++は学ぶな！！初心者が学ぶべき言語【さらに厳選】 - Qiita](https://qiita.com/yumetodo/items/e37e11bccdf1d91ada2d)

上の記事で初心者が学ぶべき言語の要件について書かれています。今やプログラミングは小学生でも必修[^1]です。「コンピューターっておばあちゃんのことでしょ？[^2]」というようなプログラミング初心者以前にコンピューターが何かわからない超初心者でもちゃんと学べる言語を考えるべきでしょう。

[^1]: 2020年から。

[^2]: [コンピューターおばあちゃん](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%8A%E3%81%B0%E3%81%82%E3%81%A1%E3%82%83%E3%82%93) ... 令和になっても明治生まれだぞ！

## 学ぶべき言語

今回、私がお勧めする言語は [Scratch](https://scratch.mit.edu/) です。早速要件を満たすかを見ていきましょう。

- 人口がそこそこいる
    世界中のプログラミング教育で使用されている。つまり、世界中の子供達が利用者だ。

- Windowsでも容易に開発環境が構築できる
    OSに標準でインストールされているモダンブラウザー[^3]さえあれば、Webで開発できる。Windows 10 や Mac には簡単にインストールできるデスクトップ版も用意されている。

- 動作結果が目で見てわかる
    グラフィカルにキャラクターが動く！わーい！たーのしー！

- コンパイルしなくていい
    ブロックを組み立てて実行するだけで動く。コンパイルなんてものはいらない。

- 言語規格が少なくとも5年以内に更新されている
    2019年1月2日に3.0がリリースされた。

- 言語規格が後方互換性を備えていること
    2.0のオフラインエディターで作られたプログラムを3.0にアップロードすることができる。

- 日本語資料が豊富にあること
    サイトはもちろん日本語化済み。Scratch 向け教材はたくさんあるし、今後さらに増えると思われる。もちろん、小学生でもわかる内容になっている。

- 非力なPCでも開発できる
    Webで動作するので、まともにブラウザーが動くPCなら問題ない。

[^3]: IEでは動かないので、Windows 10やMacを使おう。

開発もMITメディアラボという超一流大学[^4]の研究所が作っているので、完成度も高く、将来性も問題ありません。ということで、英語を読みたくない、黒い文字だけの画面を見るのが嫌、コンピューターの仕組みについて知ろうとは思っていない、難しい専門用語を覚えたくないっていう初心者のみなさんは Scratch をやりましょう。

[^4]: 東大よりも遥かに上。

## 他の言語について

他にお勧めできるとしたら、同じブロック系の[Smalruby](https://smalruby.jp/#three)ぐらい[^5]です。それ以外の言語はお子様には難しいので、手を出すのはまだ早いです。

[^5]: [Blockly](https://developers.google.com/blockly/)というのを使ったブロック系言語は他にもありますが、日本語で詳しく書いているのは無いです。他にも小中学生向け教材としてレゴマインドストーム等もありますが、有償なので、今回は除外します。
Swift Package Manager はじめの一歩

## はじめに

Apple公式のパッケージマネージャーのSwift Package Manager（以下SwiftPM）を今回使用してみました。

パッケージマネージャーとはライブラリの依存関係を管理してくれるツールで、
`CocoaPods`や`Carthage`と同じようなものです。

https://github.com/apple/swift-package-manager

## はじめに

SwiftPMが動作するか確認しましょう。
XcodeをインストールされていればTerminalから下記のコマンドが実行できます。

``` bash
$ swift package --version
Apple Swift Package Manager - Swift 5.0.0 (swiftpm-14490.62.2)
```

また、ヘルプを確認するときは下記です。

``` bash
swift package --help
```

## プロジェクトを作成する

SwiftPMは作業ディレクトリを作成しないので、自分で作成する必要があります。
今回は`Hello-SwiftPM`という名前の作業ディレクトリを作成します。

``` bash
$ mkdir Hello-SwiftPM
$ cd Hello-SwiftPM/
```

今回はコマンドラインツールの作成方法です。
オプションに`--type executable`を追加する必要があります。
これを追加すると`main.swift`も同時に作成されます。

``` bash
$ swift package init --type executable
Creating executable package: Hello-SwiftPM
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/Hello-SwiftPM/main.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/Hello-SwiftPMTests/
Creating Tests/Hello-SwiftPMTests/Hello_SwiftPMTests.swift
Creating Tests/Hello-SwiftPMTests/XCTestManifests.swift
```

オプションはそのほかに

`entity`
`library`
`system-module`

があります


## ビルド

``` bash
$ swift package build
```

## Xcodeプロジェクト作成

``` bash
$ swift package generate-xcodeproj
```

## リリースビルド

```
$ swift build -c release
```
【GAS】Googleフォームの回答データに連番をふる

# はじめに
Googleフォームの回答は新しく行を作って挿入しているため、
左にINDEXの列を作って数字をふっても、Googleフォームから回答が送られると、下記のようにINDEX列のセルは空白となってしまいます。
![スクリーンショット 2019-07-28 22.36.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247753/21ae87fe-5b11-7a4d-200f-3a0ae9d48438.png)
↓
![スクリーンショット 2019-07-28 22.09.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247753/3d758169-58dd-9449-5fd7-5c8749087349.png)
今回は、上記の問題をGASを使って解決しました。

GASをいじったことのない方は、チュートリアル記事を用意したので参考にしてみてください。
[GASで「Hello,World!」を出力するまでをまとめてみた。](https://qiita.com/ta9star/items/fae274689334f8836a80)

# 実装
### タイムスタンプ列の左隣にINDEX列を作成する
この時、A列はタイムスタンプ型に変換されるようになってしまっているため、書式を「自動」に変更する。
![スクリーンショット 2019-07-28 20.49.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247753/501d25ac-e59a-214f-85c9-66eb18be99c2.png)
![スクリーンショット 2019-07-28 20.49.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247753/099aed33-7a0c-6960-b93b-fbd7e913cec5.png)
![スクリーンショット 2019-07-28 20.50.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247753/0656aa40-2ccc-9011-6f03-885bd2c9bb1c.png)
### スクリプトエディタから新規関数を実装する
機能は、"A列の最終行が空白である時、INDEXを割り振る"というもの。

```javascript
function myFunction() {
  var spreadsheet = SpreadsheetApp.openById('<id>');
  var sheet = spreadsheet.getSheets()[0];
  var range = sheet.getRange(sheet.getLastRow(),1);
  if(range.isBlank() == true){
    range.setValue("=ROW()-1");
  }
}
```

### Googleフォームから回答が送信された時に、上記で実装した関数が起動するように設定する
スクリプトエディタ左上の「編集」→「現在のプロジェクトのトリガー」から新規トリガーを作成する。
![スクリーンショット 2019-07-28 20.54.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247753/67296ea1-323e-5ab7-4622-9f0b2acce97f.png)

# 結果
適当な回答を送信し、INDEXの値が割り振られるようになったことを確認した。
![スクリーンショット 2019-07-28 20.54.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247753/14b6786d-6998-5f1c-b389-440d985bf470.png)
![スクリーンショット 2019-07-28 20.55.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247753/3aa338fc-66b5-2548-9eef-c776d1681b5c.png)

#　終わりに
今回の実装を応用すると、Googleフォームの回答データに初期値を持たせることができます。
活用してみてください。
max→logic(音源を鳴らす方法)

## 1.はじめに
logicは、豊富な音源が用意されているdawです。
そのためmax上でlogicを操作することが出来れば、音の表現幅が広がります。
今回は、音源を鳴らす方法について説明します。



##2.設定
まずmax上でmidiキーボードを作成し、設定を行います。



###2.1 Maxの設定

下の図と同じパッチを作成します。
<img width="410" alt="スクリーンショット 2019-07-29 5.03.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464319/cc15cb5d-aaa8-c8e8-1503-7588561a0ae9.png">


[noteout]オブジェクトをダブルクリックして「from Max1」と設定します。

![max.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464319/ee516fcb-7d0b-6b09-81e2-f09862d3e18c.jpeg)




これでmax側の設定は完了です。



###2.2　logicの設定（前準備）
トラックを立ち上げる前に、midiの設定を行います。

######[logic pro X]→[環境設定]→[詳細] : 
「MIDI項目」にチェックを入れます。

<img width="400" alt="logic1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464319/0f77e682-5008-2f2c-60d2-2df6319b082d.png">


#####[録音]→[録音チェックの設定] : 
「マルチトラックの録音時〜」にチェックを入れます。
<img width="500" alt="daw3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464319/585831ed-a380-68d2-44bd-c3a350ffefb8.png">



これで前準備は完了です。

###2.3　logicの設定（トラック作成後）
［トラック］のMIDIチャンネルを設定します。
設定することによって複数のトラックの中から、特定のトラックをmaxに割り当てることが出来ます。
<img width="700" alt="dawmidi.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464319/1a58c6b5-5fd1-6302-6bfd-983c6e10e5e6.png">






##３.演奏
演奏する前にlogicのトラックにある、[R]ボタンが押されているか確認します。

確認後、max上でキーボードをクリックすると、音が鳴ります。


動画では、maxのmidiナンバーの数値を変えることで、割り当てられたトラックの音源が鳴ります。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">max→logic <a href="https://t.co/isr69QVA3y">pic.twitter.com/isr69QVA3y</a></p>&mdash; sazae　赤い人 (@sazae2000en) <a href="https://twitter.com/sazae2000en/status/1155921907914383360?ref_src=twsrc%5Etfw">July 29, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

##4.まとめ
今回は、音源を鳴らす方法について説明しました。
次回は、maxからエフェクターのツマミを操作する方法
について説明したいと思います。
rails カラムの値 一斉変更

1日1回回答できるクイズの残回答数を24時にリセットするバッチにて用いた

```ruby:app/models/quiz.rb
class Quiz < ActiveRecord::Base
  def self.reset_quota
    QuizUserStatus.all.update_all(quota: 1)
  end
end
```

なお、条件次第で残1以上になるため今回はこのような実装にした

以上。
アクセスログからユーザーエージェントを抜き出す

以下、実際の活用例

```shell:
cat /var/log/httpd/access_log* | cut -f6 -d'"' | sort -r | uniq

cat /var/log/httpd/ip\_direct\_custom_log* | cut -f6 -d'"' | sort -r | uniq

cat /var/log/httpd/ssl\_access\_log* | cut -f6 -d'"' | sort -r | uniq
```

cut ―行から固定長またはフィールド単位で切り出す
-f N番目のフィールドを抜き出す
-d 区切り文字を変更、デフォルトはタブ


sort 並べ替え
-r reverseの略、逆順で並べ替え
1フィールド目の値でソートがデフォルト

uniq 重複削除
ruby match 正規表現、大文字小文字区別しない

以下AndroidであればPlayStore、iosであればAppStoreにリダイレクトさせるロジックの一部

```ruby:
if ua.match(/android/i) != nil
  redirect_to "https://play.google.com/store/apps/details?id=hoge"
elsif ua.match(/ios/i) != nil || ua.match(/iphone/i) != nil || ua.match(/ipad/i) != nil
  redirect_to "https://itunes.apple.com/th/app/fuga"
end
```
MEMO

# おMEMO

## Model

### ModelClassメソッド
共有の処理は、作成したモデル内へメソッド化すると良さそう。

```py:models.py
class ExampleModel(models.Model):
    class Meta(object):
        db_table = 'example'
    count = models.IntegerField(verbose_name='', default=0)
    def post_login(self):
        self.count += 1
        self.save()
```

## View

### ログアウト時の処理
モジュール使用。

```py:view.py
from django.contrib.auth import logout

auth_logout(request)
```

## 追記中
mysql 重複なし 結合して出現回数でソート

```sql:
SELECT message, COUNT(*) AS COUNT
FROM chats
GROUP BY message
ORDER BY COUNT DESC
```

条件指定する場合

```sql:
SELECT message, COUNT(*) AS COUNT
FROM chats
where created_at BETWEEN ('2018-12-01 00:00:00') AND ('2018-12-31 00:00:00')
GROUP BY message
ORDER BY COUNT DESC
```

余談：RailsのActiveRecordでやる場合

```ruby:
# ActiveRecord
Chat.select(:message,:created_at)
  .where(created_at: '2018-12-01'..'2018-12-31')
  .order('count_message desc')
  .group(:message)
  .count(:message)
```

結合して重複なしソート

```sql:
SELECT user_status_id,SUM(score),facebook_id,fullname,phone,address
FROM results
INNER JOIN user_vote_product_profiles ON results.user_status_id = user_vote_product_profiles.id
GROUP BY user_status_id
ORDER BY SUM(score) DESC;
```

そっからランダム抽出

```sql:
SELECT user_status_id,SUM(score),facebook_id,fullname,phone,address
FROM results
INNER JOIN user_vote_product_profiles ON results.user_status_id = user_vote_product_profiles.id
GROUP BY user_status_id
HAVING SUM(score) >= 100
ORDER BY RAND()
LIMIT 9;
```

今回はクイズアプリの成績上位者からランダムで景品の当選者を選抜するのにこれらSQLを使った

以上。
探索いろいろ

# 探索問題
## ランダム探索
ランダムに子ノードを選択して、見つかれば探索成功
ほとんどの場合、探索失敗
ループにハマる可能性あり

### ランダム探索の改良1
closedリストをつくる
一度行った場所は行かないようにする

### ランダム探索の改良２
openリストをつくる
途中で展開した状態を保持する。
これ以上展開できないノードまで行っても戻れる
=> (探索記が有限であれば)必ず終了し、解があれば必ず見つかる

## 幅優先探索
各レベル(深さ)ごとに全て展開し、解を見つける
メモリ量が指数的増加 <- 展開したノードを全部覚えておかないといけない
計算量もえぐい

## 均一コスト探索
オペレータのコストが異なる時、幅優先は最良の解を見つけられないかも
コストの観点から最適な解が得られる。
欠点は幅優先と同じ

## 深さ優先探索
探索が行き止まるまでいってから、展開したノードの一番浅いところに戻ってくる
木が有限の階層でなければ停止しない可能性がある
メモリ量少・効率が良い
最適解が求まるわけじゃない

## 深さ制限探索
深さに制限(limit)をつける

## 反復深化探索
深さ制限探索のlimitを増やしながら最適な解を求める
完全性・最適性・メモリ量少・計算量は深さ優先より良い
大きな探索空間、ゴールへの経路長がわからない時によく使われる

## 双方向探索
ゴールがわかっていて、経路(オペレータの列)を知りたい時
双方向で進めることで探索の範囲を狭くできる(3次元では1/4)

| |幅優先|均一コスト|深さ優先|深さ制限|反復深化|双方向|
|---|---|---|---|---|---|---|
|時間|$b^d$|$b^d$|$b^m$|$b^l$|$b^d$|$b^(d/2)$|
|メモリ|$b^d$|$b^d$|$bm$|$bl$|$bd$|$b^(d/2)$|
|最適性|Yes|Yes|No|No|Yes|Yes|
|完全性|Yes|Yes|No|Yes<br>($l>=d$)|Yes|Yes|
mecab ipadic-NEologd を Google Colaboratory で使う

#これはなに？
形態素解析のデファクトスタンダードであるMeCabと、その追加辞書mecab-ipadic-NEologdをGoogle Colaboratoryで動かすためのコードです。
かつてはmecabとipadic-NEologdを直接インストールしていましたが、いまはGinza経由で呼び出すほうが便利です。

#Ginzaのインストール

```
!pip install ginza==4.0.5 ja-ginza 
!pip install sortedcontainers~=2.1.0
import pkg_resources, imp
imp.reload(pkg_resources)
```
pipを使ってginzaをインストールします。
sortedcontainersというライブラリがColabのデフォルトとGinzaの要求バージョンが違うせいでエラーが発生するので、Ginzaの指定するバージョンをインストールし直します。
また、デフォルトでは日本語辞書にパスが通っていないようなので、pkg_resourcesを再度読み込ませます。これはColabの仕様(?)によるもののようで、ランタイムを再起動しても読み込むようなのですが、ランタイムの再起動をいちいちやるのも面倒なのでpythonの方で再読み込みをさせています。

#形態素解析

```ginza.py
import spacy
import ginza
nlp = spacy.load("ja_ginza")
ginza.set_split_mode(nlp, "C")
doc = nlp("彼女はペンパイナッポーアッポーペンと恋ダンスを踊った。")

for token in doc:
  print(str(token))

#>>
#彼女
#は
#ペンパイナッポーアッポーペン
#と
#恋
#ダンス
#を
#踊っ
#た
#。
```

```nlp = spacy.load("ja_ginza")```で形態素解析エンジンを呼び出し、```ginza.set_split_mode(nlp, "C")```で分割単位をCに設定します。分割単位は3種類あり、それぞれ以下の辞書を使用します。

|分割単位|使用する辞書|
|---|---|
|A|UniDic|
|B|IPADIC|
|C|NEologd|

分割単位をCに設定することで、NEologdが使用できます。
お疲れさまでした。

MeCabとNEologdを直接インストールしたい方のために、かつてのやり方も記載しておきます。
<details><summary>かつてのやり方</summary><div>

#MeCabのインストール

```
!apt install aptitude swig
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3==0.996.3
```

#mecab-ipadic-NEologdのインストール

```
!git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
!echo yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n -a
```

2つ合わせて実行すれば、形態素解析の環境構築は終了です。インストール完了まで2~3分程度かかります。

#pythonからの呼び出し

```MeCab.Tagger()``` を呼び出す際に、引数にmecab-ipadic-NEologdのパスを指定する必要があります。辞書のパスは```echo `mecab-config --dicdir`"/mecab-ipadic-neologd"```で取得できます。

```mecab.py
import MeCab
import subprocess

cmd = 'echo `mecab-config --dicdir`"/mecab-ipadic-neologd"'
path = (subprocess.Popen(cmd, stdout=subprocess.PIPE,
                           shell=True).communicate()[0]).decode('utf-8')
m = MeCab.Tagger("-d {0}".format(path))
```

これで呼び出し完了です。あとは使うだけ。

```mecab.py
print(m.parse("彼女はペンパイナッポーアッポーペンと恋ダンスを踊った。"))
#>>
#彼女	名詞,代名詞,一般,*,*,*,彼女,カノジョ,カノジョ
#は	助詞,係助詞,*,*,*,*,は,ハ,ワ
#ペンパイナッポーアッポーペン	名詞,固有名詞,一般,*,*,*,Pen-Pineapple-Apple-Pen,ペンパイナッポーアッポーペン,ペンパイナッポーアッポーペン
#と	助詞,並立助詞,*,*,*,*,と,ト,ト
#恋ダンス	名詞,固有名詞,一般,*,*,*,恋ダンス,コイダンス,コイダンス
#を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
#踊っ	動詞,自立,*,*,五段・ラ行,連用タ接続,踊る,オドッ,オドッ
#た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
#。	記号,句点,*,*,*,*,。,。,。
#EOS

```
お疲れさまでした。

</div></details>

#更新履歴
2021/10/29: Ginzaについて記載
2021/1/2: mecab-python3が1.xにアップデートしたことでコードが動かなくなったので、明示的に0.996.3をインストールするように暫定的に変更。

#参考文献

https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md
https://qiita.com/inatatsu_csg/items/40b11701d256a84a0510
https://engineering.linecorp.com/ja/blog/mecab-ipadic-neologd-new-words-and-expressions/
[布留川 英一『BERT/GPT-3/DALL-E 自然言語処理・画像処理・音声処理 人工知能プログラミング実践入門』](https://www.borndigital.co.jp/book/23409.html)
VRMMOゲーム開発:ボイスチャット

##jsonデータの取り扱い

jsonデータは以下の経路で伝送します。

1.クライアントよりnginxへ
httpプロトコルにて伝送、送信にはc++ を使用

2.nginxよりfcgiを用いてmysqlへjson格納
c++ を使用します。
(web VRを意識)

3.mysqlよりjsonデータをhttpプロトコルにてクライアントに伝送
c++ を使用します。

4.クライアント-サーバ間通信にはudpまたは上位プロトコルを使用、c++ を使用します。(速さ重視)

今考えているのは、変数jsonを定義しjsonを再代入する手法です。

##ゲームオブジェクトの更新

各種コンポーネント及びスクリプトを追加したゲームオブジェクトを生成します。
元データはmysqlよりjsonデータにて伝送。

流れとしては

json utility.from json
↓
 json utility.to json
↓
 json utility.from json overwrite

##ボイスチャット

マイク入力は

microphoneを用いてaudioclip化

audio sourceで再生します。

on audio filterreadで録音してゲームオブジェクトに反映します。(リップシンク)

(恐らく、同じ要領で、各種ファイル形式を扱えます)

音量表示、音量調節がしたいです。

最後に、 audio listenerコンポーネントでスピーカー出力出来ます。

steam audio sdkを用いることで、立体音響を再現出来ます。

注)理論段階です。あしからず。
ソースコードは、unity内部はc#、外部及びインターフェイスにはc++ を使用予定です。
ソースコードのビルド、テスト、デバッグが終わり次第、githubにて公開予定です。

よろしくお願いします。
Windowsではxargsではなくwhileを使う

# Summary

windowsでのxargsは引数に関数をもってこれない（正確にいうと export -f ができない）ので while をつかう

## environment

windowsでbashを使うために`busybox.exe`を同一フォルダに入れておく

```
$ ver
ver

Microsoft Windows [Version 10.0.18362.239]

$ tree
Active code page: 437
Folder PATH listing
Volume serial number is 80A0-D9ED
C:\USERS\MOCHI\SAMPLE_XARGES
    bar.cmd
    busybox.exe
    foo.bash
    foo.cmd
    
No subfolders exist 
```


## bashでのコード

```bash:foo.bash
#! /usr/bin/env bash

function foo () {

  echo "Hello "$1

}

function main () {

  local x="nor135 ytez callmekohei"

  export -f foo

  echo $x | tr ' ' '\n' \
    | xargs -I{} bash -c 'foo {}'

}

main
```

結果

```bash
Hello nor135
Hello ytez
Hello callmekohei
```

## windowsでのコード（xargs）

```bash:foo.cmd
: <<EOF_BAT
@echo off
"%~dp0busybox.exe" bash "%~f0" %*
exit /b %ERRORLEVEL%
EOF_BAT

#! /usr/bin/env bash

function foo () {

  echo "Hello "$1

}

function main () {

  local x="nor135 ytez callmekohei"

  export -f foo

  echo $x | tr ' ' '\n' \
    | xargs -I{} bash -c 'foo {}'

}

main
```

結果

```bash
C:/Users/mochi/sample_xarges/foo.cmd: export
: line 19: illegal option -f
```

## windowsでのコード（while）

```bash:bar.cmd
: <<EOF_BAT
@echo off
"%~dp0busybox.exe" bash "%~f0" %*
exit /b %ERRORLEVEL%
EOF_BAT


#! /usr/bin/env bash

function foo () {
  echo "Hello "$1
}

function main () {

  local x='nor135 ytez callmekohei'

  echo  "$x" | tr ' ' '\n' \
    | while read -r twitterID
      do
        foo $twitterID
      done

}

main
```

結果

```bash
Hello nor135
Hello ytez
Hello callmekohei
```

現場からは以上です
【TeraTerm】ターミナル接続の簡略化【マクロ】

## 【目的】
マクロで簡単接続。
TeraTermマクロ学習。

## 【前提】
- 母艦はWindows
- 接続先の Pi は何でも
- ターミナルソフトは TeraTerm
- 個人使用（セキュリティより手軽さ重視）

## 【マクロ - 単体用】
```ttl:piz.ttl
hostname = '192.168.11.112'	; piz
username = 'pi'
passwd   = 'raspberry'

msg = hostname
strconcat msg ':22 /ssh /auth=password /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg passwd

connect msg
```
1. テキストエディタを開き、上記マクロをコピペ
2. 先頭行の IPアドレスは手持ちの Pi の IPアドレスに書き換える
3. ユーザ名、パスワードもデフォルトから変更している場合は書き換える
4. 分かりやすい名前で保存。拡張子は「.ttl」とする
5. ttlファイルの関連付けが設定されていない場合は設定する  
https://www.j-oosk.com/teraterm/configuration/516/
6. 保存したマクロファイルをダブルクリック

正常にログインできれば成功。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254888/48680b21-361c-b71a-77ab-f315cdc5399a.png" width=75%>
失敗する場合は、IPアドレス、ユーザ名、パスワードのいずれか、又は全てが間違っているので見直す。

## 【マクロ - 複数台用】
```ttl:piall.ttl
strdim hostname 4
hostname[0] = '192.168.11.112'	; piz
hostname[2] = '192.168.11.101'	; pi2
hostname[3] = '192.168.11.110'	; pi3

strdim username 4
username[0] = 'pi'
username[2] = 'pi'
username[3] = 'pi'

strdim passwd 4
passwd[0]   = 'raspberry'
passwd[2]   = 'raspberry'
passwd[3]   = 'raspberry'

inputbox '0:raspberry piz, 2:raspberry pi2, 3:raspberry pi3' '選択'
str2int int_input inputstr

msg = hostname[int_input]
strconcat msg ':22 /ssh /auth=password /user='
strconcat msg username[int_input]
strconcat msg ' /passwd='
strconcat msg passwd[int_input]

connect msg
```

先にこのマクロの動きを説明。
起動すると以下の「選択」ダイアログが表示される。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254888/eb7f4941-e116-8766-01cf-560a6009c4cb.png" width=40%>

入力する数値により接続先が切り替わる。

| 値  | 接続先   |
| --- | ------- |
| 0   | Pi Zero |
| 2   | Pi2     |
| 3   | Pi3     |

「OK」ボタンクリックでログイン。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254888/a27888bd-9f1d-a66f-51aa-de6bc0864ece.png" width=75%>

改めてマクロの説明。
マクロ先頭に定義されている各接続先情報を自分の環境に併せて書き換え実行する。
4台以上を制御したい場合は、コピペでコードを拡張。

## 【備考】
マクロ内にユーザ名、パスワードが書かれている、しかも平文で、なのでセキュリティ的にどうなのってのはあるけど、あくまでも個人が自宅で趣味で使う範囲ということで。
いや逆に考えるんだ。これはユーザ名、パスワードのメモ書きなんだと。

当たり前だけど、TeraTermによる接続なので、接続先は Pi に限らない。
Linuxをインストールした PC なり AWS なり何でも良い。

マクロの入門、取り合えず動かしてみよう、なので入力値チェックといったエラー判定は行っていない。
Excel(VBA) + PostgreSQL

<h1>初めに</h1>
この記事では, VBAからPostgreSQLへの接続方法を説明し, 実際にマクロから
シンプルなSQL実行までデモンストレートします. 

仕事の業務効率化で使用した際の備忘録的なものです.


><strong>実行環境: </strong>
> OS : Windows10 64bit
> DB : PostgreSQL 11.3
> Excel2016 32-bit

※PostgreSQLをインストールしていない方は, 以下からダウンロードできます.
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

<h2>1. psqlODBCドライバのインストール</h2>
初めに, 自分のPCのExcelのバージョン(bit)を確認する. その後, 以下のサイトへ移動し, 適切なpsqlodbcドライバをインストールする.

https://www.postgresql.org/ftp/odbc/versions/msi/

使用しているExcelが32bitの場合, psqlodbc_11_01_0000-x86.zipを選択してpsqlodbc_x86.msiを実行する.
※ 64bitの場合は, psqlodbc_11_01_0000-x64.zipを選択する
![スクリーンショット 2019-07-28 23.31.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365365/cb7d51f4-564b-7004-a357-6a885b1582fc.png)


<h2>2.ODBC登録</h2>
Windowsボタン -> ODBC Data Source Administrator (32-bit) を実行し, SystemDSNの[add]ボタンからPostgreSQL35Wドライバを選択し, データソースを作成する.



<img width="523" alt="スクリーンショット 2019-07-30 0.06.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365365/23cfc1e7-9968-6a99-62e4-66a8ec23d9ca.png">

<h2>3.マクロ作成</h2>

　まず初めに, Visual Basicを開き, 「ツール>参照」から "Microsoft ActiveX Data 2.8 Library"にチェックマークをつける.
<img width="391" alt="スクリーンショット 2019-07-30 0.34.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365365/8552fa9d-65b6-631e-9121-61029dd34587.png">
　それでは, 実際にマクロ【CnxTest】からPostgreSQLに接続して, 以下のテーブルについてSQLを発行してデータを取得してみる.

<strong>テーブル名: Employee</strong>

|ID|名前(name)|部署名(dep_name)|
|---|---|-----|
|1|ロバート|開発部|
|2|太郎|人事部|

実行結果は, 以下のようになる.

【マクロ実行前】
<img width="241" alt="スクリーンショット 2019-07-30 1.28.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365365/5392f531-b1cf-b882-47df-25c9eb66ed55.png">
【マクロ実行後】
<img width="255" alt="スクリーンショット 2019-07-30 1.28.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365365/27843399-1202-9dd2-a260-154b783034d1.png">

<h2>実行コード</h2>
```VB:CnxTest
Sub CnxTest()
    Dim cnn As ADODB.Connection
    Dim recSet As ADODB.Recordset
    Dim sql As String, i As Integer, c As Integer
    
    Set cnn = New ADODB.Connection
    '接続情報を定義: ここでは, データソース名のみ
    cnn.ConnectionString = "DSN:PostgresSQL35W;"
    Set recSet = New ADODB.Recordset
    sql = "SELECT * FROM Employee"

    cnn.Open
        recSet.Source = sql
        recSet.ActiveConnection = cnn  
        recSet.Open 
            i = 1
            'sql実行結果を一レコードずつフェッチする. 
            Do Until recSet.EOF
               For c = 0 To recSet.Fields.Count - 1
                   Cells(c+2,c+2) = recSet(c).Value
               Next c
               i = i + 1
               recSet.MoveNext
             Loop
         recSet.Close
     cnn.Close

     Set recSet = Nothing
     Set cnn = Nothing

End Sub
```
※　ソースコード内のマジックナンバー2は, Excelの出力位置に依存している.

<h2>参照</h2>
https://qiita.com/syict001/items/9ec043f711636dc0105b
minikube と nginx でKubernetesを試してみる

# minikube とは

Kubernetes環境を単一ノードで手軽に動かせるコマンドです。
インストールも手軽で、GKEなどクラウド上に載せる前にローカル環境下でテストが行えるので、
非常に便利です。今回は、Mac環境での動かし方になります。
とても簡単なものですが、軽く挙動を確認したい方はご覧ください！

# インストール

minikubeをインストールしていきます。

```
$ brew cask install minikube
```

# 起動

まずminikubeを起動してみましょう。

```
$ minikube start

Starting local Kubernetes v1.8.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
```

これで起動が完了しました。

# ざっくりymlファイル作成

## Podを作成するファイル
今回は二つポッドを作成してみます。

```yml:nginx-deploy.yml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: nginx
```

## Serviceを定義するファイル

```yml:nginx-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - name: nginx
    protocol: TCP
    port: 80
  type: LoadBalancer
  selector:
    app: nginx
```


ymlファイルを元にPodとServiceを定義していきます。

```
$ kubectl create -f nginx-deploy.yml
deployment "nginx" created
$ kubectl create -f nginx-service.yml
service "nginx" created
$ minikube service nginx
```

最後のコマンドを打ちますと、
nginxの初期ページが表示されると思いますので、
確認してみてください。

<img width="1308" alt="Welcome_to_nginx_.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258186/2d1f1dce-5619-68e7-a768-7d13520267fd.png">
Maixpy で WROOM-02を使ってネットワーク接続

Maix Bit を手に入れて遊んでいるところです。

Maix Bit やM5StickV はネットワークI/Fがないのが弱みですが、
WROOM-02(ESP8266)を使って技適上問題なくWi-Fi接続できました。

配線は WROOM-02のTX をmaixbitのpin-6へ、RXをpin-7に接続します。
あとは電源、Io0、IO2、EN、電源(3.3V/GND)などは通常のWROOM-02と同様。
WROOM-02はATモードで動作させます。Arduinoなどで使ったものはフラッシュの書き戻しが必要です。
＃ここら辺、もし要望があればもう少し詳しく書きます。
＃Qiitaで探せば色々あると思います。

下記にntpクライアントのサンプルを公開しています。
ただ今のところSDへの書き込み日時とシステムの時間で年がずれる問題が出ています。SDへの書き込みを優先しています。
https://github.com/shiosalt/maixpy_sample

HTTP クライアントのサンプルは本家にあります。
https://github.com/sipeed/MaixPy_scripts/blob/master/network/demo_net_socket.py

ちまちまとブログにも書いてます。
http://ssj.siosalt.tokyo/
APP 基本架構

## 佈局
* Android Studio 使用
[XML Tutorial](https://www.w3schools.com/xml/)
### 範例
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:gravity="center" 
    xmlns:android="http://schemas.android.com/apk/res/android" >
 
     將要放的佈局物件放在LinearLayout裡
     .
     .
     .
 
</LinearLayout>



* **layout_height** 與 **android:layout_width** 是基本設定，如果不宣告便會出錯。
* **orientation** 用來設定排列方
* **gravity** 用來放置的位置(置中、置左...)

### 佈局物件範例

```xml

    <EditText
        android:id="@+id/et_name"
        android:layout_width="200dp"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/btn_enter"
        android:layout_marginTop="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="push it"
        android:textSize="20dp"/>

    <TextView
        android:id="@+id/tv_s1"
        android:layout_marginTop="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="heheXD"
        android:textSize="20dp"/>
```
* EditText : 可編輯文字方塊
* Button   : 按鈕
* TextView : 文字
* **id** 是用來宣告這個物件的名稱，可在主程式內呼叫與操作。

## MainActivity 

### 從畫面得到物件，並轉換成該物件型態
```java

public class MainActivity extends AppCompatActivity {
    private EditText et_name;
 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//該畫面中的布局
        et_name = (EditText)findViewById(R.id.et_name);//物件型態轉換
        
        Toast.makeText(MainActivity.this,"successful",Toast.LENGTH_LONG).show();//產生成功提示
    }
}

 
```
### TAG 用法
* 可以用來顯示於debug視窗，方便偵錯。

```java

private final String TAG = MainActivity.class.getSimpleName();

Log.i(TAG, put some to debug );
```
### 建立物件
* 點選右鍵 app->java->new->java class
![](https://i.imgur.com/STTGDI2.png)

* 編輯畫面中右鍵使用generate 幫助跨快速建構function     如: 建構子 set & get
![](https://i.imgur.com/7PBKDrx.png)

### ListView 使用
[Android 學習筆記 - 建立簡單的 ListView](https://qiita.com/vc7/items/3fe9edded4b8306646f5)

## 參考資料
[透過setContentView轉換layout](https://dotblogs.com.tw/psjhuo/2013/04/18/101805)
[Android Context完全解析](https://blog.csdn.net/guolin_blog/article/details/47028975)
[Android入門基礎：從這裡開始](http://hukai.me/android-training-course-in-chinese/input/game-controller/controller-inputs.html)
[Android 學習筆記 - 建立簡單的 ListView](https://qiita.com/vc7/items/3fe9edded4b8306646f5)
共有やリンク誘導のUIに使う著名、有名企業ロゴのカラーコードまとめ表

2017年7月29日時点のものらしいです、以下の記事のもろパクリ(抜粋)です
(スクロールしなくていいように説明を省いてます)
**・[保存必須！代表的なSNS＆Webサービスのブランドカラーコード29選｜ferret [フェレット]](https://ferret-plus.com/7909)**

|       企業           |     カラーコード |
|:-----------------:|:------------------:|:------------------:|
| **Instagram**|青: **#4C64D3**, 紫: **#CF2E92**, 赤:**#F26939**, 黄:**#FFDD83**|
| **Facebook**|青: **#3C5A99**|
| **Twitter**|水色: **#1DA1F2**|
| **LINE**|緑: **#00B900**|
| **YouTube**|赤: **#DA1725**, 黒: **#050000**|
| **Dropbox**|青: **#007EE5**|
| **Evernote**|緑: **#2DBE60**|
| **Amazon**|オレンジ: **#FF9900**, 青: **#146EB4**|
| **Twitch**|紫:**#6441A4**|
| **feedly**|緑: **#6CC655**|
| **Pinterest**|濃赤: **#BD081C**|
| **Dribbble**|濃ピンク: **#C32361**, 薄ピンク: **#EA4C89**|
| **Android**|緑: **#77C159**|
| **Skype**|水色: **#00B0F0**|
Educational Codeforces Round 69A: DIY Wooden Ladder

Educational Codeforces Round 69A: DIY Wooden Ladder
===

https://codeforces.com/contest/1197/problem/A

淡々と解くだけ。
q問の以下の問題が与えられる。

```
- n本の木がある
- それぞれの長さはa1,a2,..,anである
- この時、図のような「はしご」は何段作れるか
```

図を読み解くと以下のように読み替えられる。

```
- 長さa,bの縦の木があるとき、長さ1以上の木を横に最大min(a,b) - 1本かけることができる
```

anは>0であることが自明の整数なので、min(a-1, b-1, len(a) - 2)が答えになる。

これを実装すると以下の通り。

```Python
q = int(input())
for qq in range(q):
    n = int(input())
    dat = list(map(int, input().split()))
    dat.sort()
    a, b = dat[-2], dat[-1]
    a ,b = a-1, b-1
    dat = dat[:-2]
    l = len(dat)
    print(min(a,b,l))
```

https://codeforces.com/contest/1197/submission/57514580
Visual Studio CodeのRemote Developmentで初期化が終わらない場合の対処法

#### 環境

- windows10
- OpenSSHはwindows10の「オプション機能」からインストール。

#### 症状

- リモートへの接続のための別ウィンドウが出てから、初期化（左下の「リモートを開いています」）が終わらない。
- ターミナルには何も表示されない。
- OpenSSHは起動している。
- PowerShellなどではsshコマンドで接続できる。

#### 理由と対処法

- ターミナルに何も表示されなかったのはOpenSSHのパスがVScodeが知らなかったのが問題だったようです。
    - 設定の[Remote-SSH]の[Remote.SSH: Path]にパスを入力してあげると解決します。
    - パスの調べ方はコマンドプロンプトで[where ssh]と入力すると表示されます。こちらの環境では[C:\Windows\System32\OpenSSH\ssh.exe]でした。ここまでで無事接続できる方も多いと思います。
- この状態で再度接続しようとしたら[WARNING: UNPROTECTED PRIVATE KEY FILE!]と警告がでました。
    - これは警告の通りで調べればすぐわかるのですが、秘密鍵のパーミッションが不適切だということです。
    - これの対処法は、秘密鍵を右クリック=>プロパティ=>「セキュリティ」タブ=>「詳細設定」を開いたら、「継承の有効化」を押して「継承されたアクセス許可をこのオブジェクトの明示的なアクセス許可に変換します。」を選択。そしたら、windowsにアクセスしているユーザー以外のユーザーを削除。そしたら「OK」で終わり。

OpenSSHのインストール場所は既定のものだったらので特にsshのパスを気にしていなかったのと、
PowerShellからsshコマンドで接続できていたので秘密鍵に意識が向かなかったのが失敗でした。
（linuxではパーミッションなんて初歩的なことなんですけどね＞＜）
railsでパーシャルに引数が渡らないときはcocoonが関係しているかも

# パーシャルに引数が渡らない

**※ cocoonを使用している場合しか以下は参考になりません。**

例えば以下のような構成だとします。
必要最低限しか書いていません。

- パーシャル呼び出し側

```slim
.cocoon-container
  = f.fields_for :form_items do |form_item|
    = render 'partial', f: form_item, partial_arg: 'パーシャルに渡す引数'
  .add_button
    = link_to_add_association '追加ボタン',
      f,
      :form_items,
```


- パーシャル

```slim
.nested-fields
  .field
    = link_to_remove_association '削除ボタン', f
/ ここら辺で partial_arg を参照するとなぜか undefined local value になる
```

なぜかパーシャルで `partial_arg`を参照すると**undefined**になります。

## 解決方法

パーシャル呼び出し側の追加ボタンにオプションを足してあげるといけます！


```slim
.cocoon-container
  = f.fields_for :form_items do |form_item|
    = render 'partial', f: form_item
  .add_button
    = link_to_add_association '追加ボタン',
      f,
      :form_items,
      render_options: {locals: { partial_arg: 'パーシャルに渡す引数' }}
```

`render_options: {locals: { partial_arg: 'パーシャルに渡す引数' }}`のところです！
もちろん、`partial_arg`は好きな名前で大丈夫です！

以上！
TypeScriptでrequireを使おうとしたらエラーが出た

# エラー内容
TypeScriptで、

```ts
const XMLHttpRequest: any = require("xmlhttprequest").XMLHttpRequest;
```

とするとrequireが読み込めないエラーになった。

# 対処方法
## npm init

```console
PC:ts User$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (ts) 
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /Users/katsuki_y/Develop/ts/package.json:

{
  "name": "ts",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes) yes
```

これでプロジェクトフォルダ内にpackage.jsonが出来る

## npm i @types/node
Node.jsの型定義用のパッケージをインストール
https://www.npmjs.com/package/@types/node

```console
PC:ts User$ npm i @types/node
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN ts@1.0.0 No description
npm WARN ts@1.0.0 No repository field.

+ @types/node@12.6.8
added 1 package in 1.008s
```

プロジェクトフォルダ内に`node_modules`というフォルダが出来る。
その中の`@types/node/globals.d.ts`に定義されているため、requireが使えるようになる。
Capistranoで、EC2+S3への自動デプロイで起きたエラー集と基礎用語

#はじめに
メルカリクローンアプリの作成でグループ開発でデプロイを担当しました。
今回はほぼ前提知識ない中、疑問に思った用語とエラーの解決へのプロセス、そして今回意識した事を備忘録とチームメンバーとの共有資料として記載しておきます。

環境
Ruby　→　2.5.1
Rails　→　5.2.3
Capistrano　→  3.11.0
carrierwave

#用語
用語の説明ですが、１００%正しい知識ではないかも知れないです。と言うのも、もっと深い知識を知るともっと差別化しないと状況がごちゃごちゃになると思いますが、今回は小規模での開発だったので最低限の知識で乗り切りました。
私は今後必要になったら、詳細について調べていくつもりです。もっと詳細に知りたい人は随時調べてみてください。
###●ssh
EC２に入るとき使っている下記のコマンド

```
$ ssh -i キーの名前.pem ec2-user@00.000.0.00
```
Secure Shellの略。リモートコンピュータと通信するためのプロトコルです。
ざっくり鍵を使って暗号化と復号で認証作業をしています。
さらっとやったchomd６００は読み込み、書き込み権限の付与をしています。

###●sudo
スーパーユーザーでdoする。スーパーユーザーとはrootの事です。
rootユーザーは権限が強過ぎるのでコマンド単位だけその力を使おうと言うコマンド。
###●mysqld
dはデーモンの略です。mysqldはmysqlからデータを持ってきたりしてくれるものと言う認識です。
デーモンは常に待機状態でいるプログラムです。
###●nginx
webサーバーの一つ。webサーバーとはリクエストを受け取り、レスポンスを返す役割を請け負っています。
nginxの特徴が気になる人は別途調べてみてください。
###●tail
logを見るときに使用。最後の１０行が表示される。-fのオプションを使用する事でログを垂れ流しに出来る。
個人的には、あまり使いませんでした。
###●cat
ファイルの中身を見る事が出来る。logやエラーが起きた箇所の本番環境での記述を見るために使った。-nオプションで行数を表示出来るので見やすい.
###●RAILS_ENV
動作環境を指定したい時に使用。環境がどうこうのエラーが出た時に確認したり、場合によっては環境を指定してあげないとエラーが出る事があったので使った。

#エラーへの対処
まず最初に特に何もしていない部分のエラーが起きた時は、EC2インスタンスの停止→起動をするのが得策です。
無料枠を使っているせいなのか、期待通りの動きをしてくれない事があるらしいです。（真偽は確認していませんが、何日か空けて自動デプロイしようとすると大体エラーが出ていました。仕様と諦めていたので、わかる方教えてください）
なので、心辺りのないエラーや自動デプロイが止まる時は再起動をしてみて、それでも起こるならエラーに対処をしてくのが時間効率がいいと思います。
では、私がハマったり頻度の高かったエラーを書いていきます。

####Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
（２）の場合はsocketがないので

```
$ touch mysql.sock
```
で、解決出来ると思います。ないなら作ってやる、それだけです。ここから発展して（３８）に変わる事があるようですが、それは私は出会わなかったので、割愛します。

####Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
検索してみると、権限がない事に起因するエラーの様ですが、私の場合には当てはまりませんでした。mysqlにアクセス出来ない旨のエラーなのでひとまず

```
$ mysql -u root -p
```
でひとまずルートに入る事が出来るが確認してみる→出来なかったら検索
入れたらsocketの指定をしているファイル（database.yml）の設定を見る
それも合っていたら、環境変数を指定してみる

```
$ rake db:migrate RAILS_ENV=production
```
私はこれで解決しました。
他にも、mysql.sockが消えていない為、新しいmysql.sockが生成出来ず起動できないみたいな事もある様です。
この辺の解決策は他の方の記事を参考に出来ると思うのでそちらを見てみてください。

####credentials.yml.enc
ここは一番苦労しました。ただ参考資料が沢山のあるので、状況を整理しながらやっていけば問題なく出来ると思います。
チーム開発で起こっていたミスとしては。
・master→rails newした人とデプロイ担当が違う為、master.keyが複数ある環境で開発を進めていた
・APIkeyを書く人が、自分のmaster.keyで新しいcredentials.ymlを作ってしまったファイルをmargeして本番環境で開けなくなった
などです。
暗号化されている為コンフリクトが起きた時にわかりにくいので、一度丁寧に確認するのが良いと思います。
今回のチーム開発では初期段階でmaster.keyの共有をして、使わないkeyは消してしまうのが得策と思います。

以下、大変参考になった記事です。
https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39
https://qiita.com/yuuuking/items/53a37a2e998972be32b8

#追記
mysql.sockエラーが出た時はdatabase.ymlの確認が優先度が高いかも知れません。ソケットファイルの指定はここに記述している為です。
#まとめ
チーム共有がメインの記事なので、分かりにくいところもあると思いますが、デプロイ担当で思ったことは、**どの環境で、どのコマンドを、何に対してやったのか**をわかった上で作業を進めるのが大切だと思いました（当たり前ですが）。
自分でも良くわからない状況で、適当にコマンドを叩いていると周りもフォローしにくくなりますし、泥沼にハマる確率が高くなります（体験談）。
頑張れ！デプロイ担当！
※口頭説明しながら前提で作ったのと、知識不足で憶測や間違った解釈を書いている可能性が高いので後日書き足すか、限定公開にする予定です。
KotlinコンソールアプリでとりあえずCircleCIを回したい時にAndroid用のテンプレを流用する

###この記事について
KotlinでCUIアプリを作成する際にCircleCI用のテンプレを探したのですが見つかりませんでした。なのでAndroid用のテンプレ(https://circleci.com/docs/ja/2.0/language-android/ )を調整してプルリクに対して自動テストを行うようにします。前提としてGradleで管理されていること、JUnit5をテストフレームワークとして使用します。ちなみにgradle.ktsはうまく行かず、調べてみるとうまく行っていない人が多く、辛いのでやめました。

###設定ファイル
```gradle:build.gradle
plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.40'
}

group 'org.your-group-name'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

    // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api
    testCompile "org.junit.jupiter:junit-jupiter-api:5.5.1"
    testCompile "org.junit.jupiter:junit-jupiter-engine:5.5.1"
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

test {
    useJUnitPlatform()
}
```

```yml:config.yml
version: 2
jobs:
  build:
    working_directory: ~/code
    docker:
      - image: circleci/android:api-28-alpha
    environment:
      JVM_OPTS: -Xmx3200m
    steps:
      - checkout
      - restore_cache:
          #key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
          key: jars-{{ checksum "build.gradle" }} #app/build.gradleがないので
      - run:
          name: Download Dependencies
          #command: ./gradlew androidDependencies
          command: ./gradlew dependencies #androidではないので
      - save_cache:
          paths:
            - ~/.gradle
          #key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
          key: jars-{{ checksum "build.gradle" }}
      - run:
          name: Run Tests
          command: ./gradlew test
      #今回はテスト結果を格納する
      - store_artifacts:
          path: build/reports/tests/test/ 
          destination: test_art
      - store_test_results:
          path: build/test-results/
```

###結果
- 通らないほう
![スクリーンショット 2019-07-29 22.06.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112637/392722e0-12a1-ee9e-35ad-222af9236152.png)

- 通るほう
![スクリーンショット 2019-07-30 0.40.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112637/68da8d74-8b88-166b-4012-61b3d1024020.png)

- 当該レポジトリ
https://github.com/murakamiii/BootstrapKt
Nuxt + TypeScript で 2つ以上の値をコンポーネントに渡して変更を受け取る方法

`nuxt-property-decorator` (`vue-property-decorator`) を使用しているとき、
親コンポーネントから、子コンポーネントに2つ以上の値を渡し、その変更を受け取る方法。

意外と解決するのに手間取ったので、備忘録として。

Nuxt (Vue) + TypeScript
---

- 親コンポーネント

```Parent.vue
<template>
  <div>
    <p>Value A: {{ valueA }}</p>
    <p>Value B: {{ valueB }}</p>
    <Child
      :value-a.sync="valueA"
      :value-b.sync="valueB"
    />
  </div>
</template>
<script lang="ts">
import { Vue, Component } from 'nuxt-property-decorator'
import Child from '~/components/Child.vue'

@Component({
  components: {
    Child,
  },
})
export default class Parent extends Vue {
  valueA: string = ''

  valueB: string = ''
}
</script>
```

- 子コンポーネント

```Child.vue
<template>
  <div>
    <input v-model="computedValueA"> -
    <input v-model="computedValueB">
  </div>
</template>
<script lang="ts">
import { Vue, Component, Prop } from 'nuxt-property-decorator'

@Component
export default class Parent extends Vue {
  @Prop({ required: true })
  valueA: string

  @Prop({ required: true })
  valueB: string

  get computedValueA() {
    return this.valueA
  }

  set computedValueA(value) {
    this.$emit('update:valueA', value)
  }

  get computedValueB() {
    return this.valueB
  }

  set computedValueB(value) {
    this.$emit('update:valueB', value)
  }
}
</script>
```

対応するJavaScriptでの書き方(Child.vue)
---

```javascript
export default {
  props: {
    valueA: {
      type: String,
      required: true,
    },
    valueB: {
      type: String,
      required: true,
    },
  },
  computed: {
    computedValueA: {
      get() {
        return this.valueA
      },
      set(value) {
        this.$emit('update:valueA', value)
      },
    },
    computedValueB: {
      get() {
        return this.valueB
      },
      set(value) {
        this.$emit('update:valueB', value)
      },
    },
  },
}
```



構成
---

```package.json
  "dependencies": {
    ...
    "@nuxt/config": "^2.8.1",
    "@nuxt/typescript": "^2.8.1",
    "nuxt": "^2.8.1",
    "nuxt-property-decorator": "^2.3.0",
    "ts-node": "^8.2.0"
  },
  "devDependencies": {
    ...
    "@babel/runtime-corejs3": "^7.4.5",
    "@types/node": "^12.0.7",
    "@types/webpack-env": "^1.13.9",
    "babel-core": "7.0.0-bridge.0",
    "babel-preset-vue": "^2.0.2",
    "webpack-merge": "^4.2.1",
  }
```

Nuxt関係ないね。Vueだね。