OmniAICreator/Qiita-1.07M huggingface dataset:
【3D OD LiDAR編】PointRCNN : Anchorなしの2-stage 3D Object Detection

<h1>PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud</h1>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/5777dec1-5adf-4626-9c22-b2b655b81b59.png)
2D Object DetectionのRCNNを真似た構造になっている
1st stage =>物体の大まかな位置をPoint Netを使って推定する
2nd stage =>1st stageで得たBounding Boxを入力のPoint CloudとPointNetで得た特徴量を元に修正する

*2DのRCNNと違う所は物体に所属するPointを推定する事と、入力のPoint Cloudを使って2nd stageの修正を行っている(2DだとSemantic Featureだけを入力にして、元のRGBimageを入力していない)

<h1>新規性</h1>

<h2>Bottom-up 3D proposal generation via point cloud segmentation</h2>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/178bca1f-a33b-774a-814c-3483f02e4f8a.png)

<h3>Learning point cloud representations</h3>
point cloudから特徴量を抽出するのにPointNet++を使用している。
pointの特徴が取れれば別に何でも良いらしい。

<h3>Foreground point segmentation</h3>
得られたPointの特徴からPointが前景(物体の点)かを推定する。
Ground TruthのForeground pointは、Ground TruthのBounding Boxの中に入っているPoint Cloudである。

<h3>Bin-based 3D bounding box generation</h3>
得られたForegroundのPoint Cloudから3D Bounding Boxを推定する


<h2>Point cloud region pooling</h2>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/7e435ba7-e287-3c8b-ddfa-d3a534ef369f.png)
1. 得られた3D Bounding Box(オレンジ)のサイズを少し拡大してグレーのBounding Boxを得る
2. ForeGround Point Segmentationで前景として推定されたPointを抽出(地面や壁や木とかのPointを除去できる)
3. 残った青いPoint達に対応する点のSemantic FeatureをPoint-wise feature vectorから取り出す
4. もし一つも点がグレーのBounding Boxに入っていなければ、Bounding Boxを削除




<h2>Canonical 3D bounding box refinement</h2>

<h3>Canonical transformation</h3>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/3b80be10-c078-91fb-c0c3-f47cf8f1f9e9.png)
得られた3D Bonding Boxを基準に座標変換を行う。
そうすると学習がしやすいらしい。

<h2>Feature learning for box proposal refinement</h2>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/ede56f9e-68f0-1bd2-be7a-7ad933f954df.png)
入力となる特徴量はr(反射強度)、m(segmentation mask)、d(LiDARからの距離)を入力とする。

*depthの情報を入力する理由はcanonical TransformしたPointの3次元距離の情報がなくなってしまい、密度の違いやIntensityへの影響などを考慮する為。


<h1>結果</h1>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/f1db5e12-d27d-7167-adcd-154bcb2a866d.png)
精度はあがってる。速度はどうなんだろう?

<h1>結論</h1>
・Anchor Freeの2Stage 3D Object Detectionは3Dでも精度が良かったらしい。

<h1>参考文献</h1>
PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud
https://openaccess.thecvf.com/content_CVPR_2019/papers/Shi_PointRCNN_3D_Object_Proposal_Generation_and_Detection_From_Point_Cloud_CVPR_2019_paper.pdf
BOTSv2データを使ってFraud監視ダッシュボードを作ってみる

はじめに
---
- 前に、書いた以下記事を見ていただいた方へ。実際に本番環境で試す前にそもそもstreamデータってどれほど見えるものなのか触れてみたいなという方向けにSAMPLEデータとその使い方の紹介です
    - [AWS VPC Traffic Mirroringを使ってFraud監視をスタート!](https://qiita.com/odorusatoshi/items/40a0bf66d8078e1f6b35)
- 会員系Webサイトに対する不正ログインの監視や不正決済などの兆候を捉えるために[Splunk Stream App](https://splunkbase.splunk.com/app/1809/)によるhttpトラフィックの分析が便利です
    - 認証イベントが記録されたアプリケーションのログがすぐに用意できない（アプリ改修が必要）などの状況においてStreamを使ってネットワークレイヤーでキャプチャして監視ができるため
    - もちろん、Webサイトは通常httpsで提供しているので、SSLアクセラレータなどで復号済みのhttpトラフィックをモニターする必要はあります
- そこで、Splunk StreamでキャプチャしたhttpトラフィックがSplunkに入ることでどのように調査、分析ができるのかを体験するのにBOTSv2のdataを使ってみてみたいと思います
- BOTSデータのいいところ
    - **すでにindex済みのデータのため、Splunkに取り込んでもライセンスを消費しないで利用できる**
- BOTSv2データはFrothly社という架空の飲料メーカーに起きたインシデントを調査していくという背景が用意されています
    - 不正ログインはFrothly社のECサイト(**store.froth.ly**)において発生した体になっています。


作り方
---

### BOTSv2データを準備する

- 前提：Splunkをインストール済みの環境がある状態
- SplunkインスタンスにCLIログインして、以下サイトからBOTSv2のattack onlyデータを直接wgetでダウンロードします
    - https://github.com/splunk/botsv2

```shell
# appフォルダ配下に移動します
cd /opt/splunk/etc/apps

# dataのダウンロード
wget https://s3.amazonaws.com/botsdataset/botsv2/botsv2_data_set_attack_only.tgz

# appフォルダ配下に展開します
tar zxvf botsv2_data_set_attack_only.tgz 

# 以下フォルダが生成されることを確認
botsv2_data_set

# ゴミは削除しておきます
rm botsv2_data_set_attack_only.tgz 

# Splunk再起動
/opt/splunk/bin/splunk restart

```

### SPLを試す

- データが検索できることを確認
    - stream:httpの分析を行う際は、**2017/8/1-2017/8/31**にかけての時間範囲で選択して検索してください

```:SPL
index=botsv2 sourcetype=stream:http
```

![スクリーンショット 2020-12-23 10.04.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/21bcc14c-bd0d-b749-2b48-d4092e2a238f.png)


#### 8月の間に複数の異なる地域からアクセスのあったアカウントを特定する
- いわゆるリスト型攻撃を想定したときの初歩的な監視例です。
- Webサイトの利用状況からして、利用者が国をまたいでサービスにログインしてくることが割合として低い場合、以下のようなサーチで傾向をみることができます

```:SPL
index=botsv2 sourcetype="stream:http"
| rex field=form_data "login\[username\]=(?<web_user>[^&|^$]+)" 
|search web_user=*@*
|iplocation src
|eval ipcon = src + "_" + Country
|stats count  values(ipcon) by web_user
|sort - count

# 解説
# まず2行目でいきなりrexコマンドをつかって、正規表現をもとにECサイトへのログインユーザ情報を抽出しています
# 3行目でログインユーザがメールアドレス形式のものにフィルタ
# 4行目でsrcのIPアドレスにGeo情報をエンリッチします
# 5行目でsrcと国名をくっつけたipconフィールドを新たに生成します
# 6行目でweb_user別に集計をおこないます
# 7行目で降順にソートをかけます
```

- サーチ結果

![スクリーンショット 2020-12-23 10.28.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/6bd3e811-1f97-d23d-a813-3e6eb3371fc2.png)

- Tom2014のアカウントは3つの異なる国から計5回もログイン試行があったことがわかります。


### 傾向監視用のダッシュボードSAMPLEを適用して見てみる 

- そのままはりつけて利用できるXMLはこちらです
    - [odorusatoshi
/
fraud_monitor_with_stream](https://github.com/odorusatoshi/fraud_monitor_with_stream/blob/main/web_botsv2)

- このような画面が用意できます。ぜひ試してみてください。

![スクリーンショット 2020-12-23 10.37.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185759/7ba8c3a5-681c-5bed-f9c3-87a5650c5ecc.png)



最後に
---
- 上で例示したSPLとダッシュボードを実環境のstream:httpデータで適用した場合、色々とチューニングは必要だと思います
- そのための叩き台として参考いただけると幸いです
【高等学校情報科】情報Ⅰ・情報Ⅱ 令和3年度 副教材 演習例

## 授業の概要
|該当章|第３章：情報システムが支える社会|
|----------|--------------------------|
|**該当節**|ネットワークを利用した犯罪|
||情報収集と調査|
|**めあて**|「webスクレイピング」という技術のメリットとデメリットを使用者側の視点に立って考える|

### 成績評価基準
本クラスではA〜Cで個人の授業に関する評価をつけていく。

|成績に応じた対応とA到達要件||
|-------------------------|--------------------------|
|Aの学生の要件         |本授業で扱ったコードの1行1行がどのような処理をしているのかを説明でき、他サイトのスクレイピングができるようになる。またサイトの規約やAPIの正しい使い方を踏まえた上でWebスクレイピングを使うことができる。|
|Cの学生に対してのサポート|本授業で扱ったコードの1行1行の理解を補助。ウェブスクレイピングの危険性を知り、ウェブサイトに応じた正しい使い方を把握する方法を説明できるようになるまでサポートする。|

## Webスクレイピングとは
#### 【演習】（5分で調べ、まとめましょう） 
Webスクレイピングとはどのような技術でしょう。またメリット・デメリットを挙げましょう。

＝＝＝＝＝＝＝（授業内で共有）＝＝＝＝＝＝＝＝

## Webスクレイピングを実際試してみよう
実際にpythonでかいたwebスクレイピングのコードを試し、どのような値が返ってくるのかを確かめましょう。

皆さんはこのwebスクレイピングで、**何のサイトの**、**どんなタグの情報(liタグ、imgタグなど)**を抽出したいでしょうか？？

## ウェブサイトの規約に応じたスクレイピングを行いましょう。
- instagramをスクレイピングして、個々のユーザの写真を抽出できたらなぁ…
- TwitterやFacebookをスクレイピングして、個々のユーザの投稿を抽出できたらなぁ…
- 企業のTechブログをスクレイピングして、タイトルを抽出し、その文言から自分の知見を深めたいなぁ…

などなど、Webスクレイピングでやりたいことが増えている今日このごろです。

### しかし
安易に個人情報にアクセスしやすい技術ということで、instagramをはじめとしたSNSはスクレイピングやAPI使用に関する規約を定めています。

#### 【演習】（15分で調べ、まとめましょう） 
instagramやTwitterのような大規模なSNSの運営サイトを3つ選び、それぞれスクレイピングに関する規約の文言をサーベイしましょう。サーベイをもとに、正しい判断で使うための方法をまず隣の人と話し、お互いの共有が終わり次第同じテーブル内のメンバーと意見交換しましょう
また出席確認も兼ねて、**この記事に今日の知見や授業の感想をコメントしてください**。
Power Automateでフローを作成してもPower Appsに表示されない

#概要
今回私がぶちぶちたった壁！
<font color="red">**ソリューションの中にあるアプリにPower Automateで作成したフローを追加したい！**</font>
前はできてたのに！なんでできないのって思った人もいるんじゃないかな？
そうです。私もその一人です。。。

#何を試しても…
Power AutomateのトリガーとPower Appの接続を消して、再接続してみたり。
もう一回、作ってみたり。
ソリューションにフローを追加しようとしてみたり。
　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　などなど…
#Microsoft Docsに書いてありました！
https://docs.microsoft.com/ja-jp/powerapps/maker/common-data-service/solutions-overview#known-limitations
今年の9月にアップデートされていたんですね(-_-;)

この中の「既知の制限」ってとこに、
**キャンバス アプリ ボタンによってトリガーされるフローは、既にソリューションにあるアプリから作成する必要があります。 外部ソリューションからのこの種類のフロー追加はブロックされます。**
と…

#まとめ
これからは、ソリューションの中から作成しないといけないんですね。
あ、Power Appのアプリからフローを作成しても接続はできます！
ServiceNow - 退職したユーザの管理

#概要
ServiceNowで退職したユーザをどのように扱うかについて説明

#課題
退職したユーザをServiceNowでアクティブ（有効な状態）で残すことはセキュリティ上危険であることに、ユーザ選択一覧にも表示されるので利用者側からも不便になります。
ただし、ユーザを削除するとユーザが行われたものを検索するのに不便になります。

#対策
一般的には退職したユーザをロックアウトして非アクティブにします。それによりユーザはログインすることができなくなり、一覧表示からも排除することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/c23af1a0-702d-6106-7231-e9c44ed79620.png)

以上
メモ：Wordpressから静的ファイルを書き出してS3/CF配信する

やりたかったこと
===
* Wordpressでコンテンツを配信したいけど、セキュリティ対応をしたくなかったです

構成
===

* 直接のEC2へのアクセスは内部NWからのみにする
* EC2内からWordpressのプラグインを使って静的htmlをS3へ書き出し、CFで配信する


Wordpress構築
===

* bitnamiのamiを利用して適当に構築（シングル構成のEC2）
  * 参考 https://tech-blog.s-yoshiki.com/entry/157
* グローバルIPの割り振り
* セキュリティグループの指定で80/443へのアクセスのソースIPを絞る
* 詳細は割愛

S3/CloudFrontの設定
===

* 普通に作ります
* 詳細は割愛

静的ファイル書き出しプラグイン
===

WP2Staticというプラグインを使います。（StaticPress/StaticPress-S3という国産プラグインもあったのですが、S3連携が動きませんでした）

* 本体
  * WP2Static
  * https://github.com/leonstafford/wp2static
* S3へのアップロード&CF invalidationのアドオン
  * WP2Static-S3
  * https://github.com/leonstafford/wp2static-addon-s3
* プラグインファイルDL
  * https://wp2static.com/thanks-for-donating/
  * https://wp2staticdlsnov2020.s3.amazonaws.com/wp2static-7.1.6.zip
  * https://wp2staticdlsnov2020.s3.amazonaws.com/wp2static-addon-s3-1.0.zip

機能
===

* 静的ファイルへの書き出し
* S3へのアップロード
* CloudFrontのinvalidation（キャッシュ削除）

インストール
===

上記のプラグインのzipファイルをwp-adminからアップロードしてインストールします

設定方法
===

下記の感じで設定します。特に難しいところはない。

* WP2Static > Addons > S3Deployment > Configure
  * バケット名、リージョン、アクセスキー、シークレットキー、バケットパスなどS3の基本情報を指定する
  * 同様にCloudFrontのinvalidation情報を指定する
  * 通常はObject ACLをprivateに変更しないとエラーになるので注意
* WP2Static > Addons > S3Deployment > Enabled
    * ボタンを押して有効化する
    * 「Enabled」というボタンが表示されていると有効
* WP2Static > Options > Post-processing Options > Deployment URL
    * 配信する際のドメインを指定する
    * このドメイン直書きで静的ファイルが生成されるもよう
* WP2Static > Jobs > Events to queue new jobs
    * デフォルトで記事の更新・削除をすると自動的に再ビルドするようになっている
    * お好みでOFFにしたほうがよい

書き出しの実行
===
* WP2Static > Generate static site
    * 実行が開始される
    * Refresh logsボタンを押すとログを更新できる

追記
===

* どうも書き出しをした時にCSSや画像のリンクが切れることがあって変だなーと思ったら、ApacheのModPagespeedというモジュールが悪さをしていました。
* sshで入って、下記の修正で直りました。

```:/opt/bitnami/apache2/conf/pagespeed.conf
#ModPagespeed on
ModPagespeed off
```

* Apacheの再起動が必要です

```
$ sudo /etc/init.d/bitnami restart apache
```

終わりに
===

これでセキュリティのこと考えずに眠れますね
Db2の基本動作について -自己覚書-

Db2をインストールしたのはいいけれど、手も足も出ない。
そんな日に分かったことをつらつらと。

DB2コマンドウインドウ（管理者）起動
コマンド「db2」でdb2にアクセスするモードになる

ID:db2admin
PW:xxxpassxxx

・今存在しているデータベースの一覧を見る
list db directory

・データベース（SAMPLEDB）の作成
CREATE DATABASE SAMPLEDB ON C: USING CODESET UTF-8 TERRITORY JP COLLATE USING IDENTITY

・データベースに権限を与える
connect to sampledb
GRANT CONNECT ON DATABASE TO USER db2admin

ここまでで、データベースを作ることができ、db2adminでテーブル作成や、CRUDが出来るようになる。

・データベース（SAMPLEDB）にアクセスする
CONNECT TO SAMPLEDB user db2admin using xxxpassxxx

・データベース(SAMPLEDB)の削除
DROP DATABASE SAMPLEDB

アクセス、削除は基本。
アクセス出来れば、CreateTableなどSQL操作が出来る。
NODEとかSCHEMAとかは最初は気にしない。
まずはCUIでテーブル操作が出来ること。
次にプログラムからデータを参照することが出来ること。
composer本体のバージョンを下げる

composerの2系をインストールしていたところ関わっているプロジェクトでプラグインのエラーが出てしまい、1系に戻すことにしました。
いくつか検索でヒットした記事の方法を試しましたが、自分の環境(Mac/Catalina)ではうまく解決しなかったので最終的にうまくいった方法を記載します。

どうやら1.8.3であれば動くとのことだったので以下のコマンドでバージョンを戻すことができました。
self-updateというコマンドなので、アップデート専用かなと思ったのですが下げられるようです。(間違えてたらすいません。)

```
$ composer self-update 1.8.3
```

いくつかの記事で公式からバージョン指定でインストール後、パスの通ったディレクトリにcomposer.pharを移動するという方法が紹介されていて、試してみましたが自分の場合うまくいきませんでした。

```
$ curl -sS https://getcomposer.org/installer | php -- --version=1.8.3
$ mv composer.phar /usr/local/bin/composer
```
同じ問題が起こっている人の参考になれば幸いです。
PayPay for Developersやってみた

# PayPay for Developersやってみた
メリークリスマス！
今年はいい子にしていたので、サンタさんからPayPay送金があるかもしれない！
サンタさんから送金してもらうにはQRコードがなきゃダメだ！
そうだPayPay for DevelopersでQRコードを生成しよう！

ということで
2020年7月29日より[PayPay for Developers](https://developer.paypay.ne.jp/)の提供スタートしたらしいので、キャッシュレス信者なので触ってみようと思いました。  

## ツールの選択
現時点（2020年12月）で、ツールが7つあるのですが、請求書の支払いのためのQRコードの印刷とあったので、動的ユーザスキャンというツールを使ってみます。

## 言語の選択
4つの言語でPayment SDKがあり、今回はNode.jsで動かして行きます。

## 実装
ドキュメントに書いてあるとおりなのですが。  

```
npm i @paypayopa/paypayopa-sdk-node  
```

でNode.js用のPayment SDKをインストールし
今回はqr.jsを作成、その中に処理を書き  

```
node qr.js  
```

で処理を走らせます。

まずはSDKで認証させる処理を書きます。  

```javascript
'use strict';

const PAYPAY = require('@paypayopa/paypayopa-sdk-node');
PAYPAY.Configure({
  clientId: 'API_KEY',
  clientSecret: 'API_SECRET',
  merchantId: 'MERCHANT_ID',
  productionMode: false,
});
```
API_KEYとAPI_SECRETとMERCHANT_IDは自身のアカウントのものに置き換えてください。
次に、QRコードを作成します。
先程の続きで色々なパラメーターでQRコードをリクエストします。  

```javascript
'use strict';
let payload = {
    merchantPaymentId: "my_payment_id",
    amount: {
      amount: 10000,
      currency: "JPY"
    },
    codeType: "ORDER_QR",
    orderDescription: "Mune's Favourite Cake",
    isAuthorization: false
  };
```

merchantPaymentIdは加盟店から提供された一意の支払い取引IDとあるのですが、同じものは使えない仕様です。
（QRコード生成ごとに、現状はテストなのでテスト時には適当な数字を入れました。）
amountは支払金額で高額設定したいところですね。
payloadの中にパラメーターを入れたら  

```javascript
PAYPAY.QRCodeCreate(payload, (response) => {
  console.log(response);
});
```

こちらの関数で返却された、値にurlが入っているのでそこにアクセスすると、QRコードが表示されます。
ちょっと改造してnpmのopenを入れ勝手にブラウザを開くように調整しました。  

```javascript
const open = require('open');
PAYPAY.QRCodeCreate(payload, (response) => {
  let body_arr = JSON.parse(response.BODY);
  if(body_arr.resultInfo.code === 'SUCCESS'){
    open(body_arr.data.url);
  }
});
```

開いたurlのQRコードはテストモードなので、普通に決済できません。  
テストモードでのQRコード作成なので決済を試すにはアプリをサンドボックスアプリにし、テストユーザーでログインしてテストする必要があります。  
[https://paypay.ne.jp/developers-faq/sandbox_environment/post-43/](https://paypay.ne.jp/developers-faq/sandbox_environment/post-43/)  

## やってみて
今回はQRコードをとりあえず生成するところまでやったのですが、他にも実装しなきゃいけない機能がまだまだあるので、
個人ではアプリでマイコードを発行すればいいのでは？という考えは捨てて、
サンタさんにちゃんと送金してもらえるように実装していきたいと思います。
MySQL基本構文一覧

<使用環境>

- macbook air (2020 M1)

<開発環境>

- homebrew (homebrew 2.6.2)
- MySQL (mysql  Ver 14.14 Distrib 5.7.32, for osx10.16 (x86_64) using  EditLine wrapper)
- ターミナルを使用



<基本構文一覧>

<dl>
 <dt>データーベース作成(CREATE DATABASE)</dt>
  <dd>CREATE DATABASE DB名;</dd>
 <dt>データーベース削除(DROP DATEBASE)</dt>
  <dd>CREATE DATABASE DB名;</dd>
 <dt>テーブル作成(CREATE TABLE)</dt>
  <dd>CREATE TABLE テーブル名 (フィールド名1 データ型,フィールド名2 データ型...);</dd>
 <dt>テーブルの削除（DROP TABELE）</dt>
  <dd>DROP TABLE テーブル名;</dd>
 <dt>データの挿入（INSERT）</dt>
  <dd>INSERT INTO テーブル名 (値1,値2,値3...)</dd>
 <dt>データの検索(SELECT)</dt>
  <dd>SELECT カラム名1,カラム名2... FROM テーブル名</dd>
  <dd>カラム名に「*」を使用する事で全データを取得</dd>
 <dt>データの更新（UPDATE）</dt>
  <dd>UPADATE テーブル名 SET カラム名=更新したい値 WHERE 条件;</dd>
 <dt>データの削除（DELETE）</dt>
  <dd>DELETE FROM テーブル名 where 条件;</dd>

 <dt></dt>
  <dd></dd>
<dt></dt>
  <dd></dd>


</dl>
Twitter APIでの日付指定

# はじめに
<!-- 発端や概要を記載 -->
Twitter APIで日付指定をしたくなった。

#環境
<!-- 開発環境 -->
・Windows 10
・Python3.8
・Twitter API v1.1


# 目次
<!-- タイトルとアンカー名を編集 -->
1. [問題](#Chapter1)
1. [結論](#Chapter2)
1. [参考文献](#reference)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
# 問題
"q="の後に
since:とかuntil:
をつけてると、エラーが返ってくる

```py
import json
from requests_oauthlib import OAuth1Session

ck = 'xxxxxxxxxxxxxxxxxxxxxxxxx' # コンシューマーキー
cs = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # コンシューマーシークレット
at = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # アクセストークン
ats = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # アクセストークンシークレット

twitter = OAuth1Session(ck, cs, at, ats)#OAuth認証


API_URL = "https://api.twitter.com/1.1/search/tweets.json?q="
keyword = "ハロ -RT since:2020-12-20_00:00:00_JST until:2020-12-21_00:00:00_JST"
type = "resent"
count = 50
url = API_URL + keyword + "&result_type=" + type \
+ "&count=" + str(count) + "&exclude_replies=True"
response = twitter.get(url)

response_data = json.loads(response.text)
# response_data
```

```json
{
  "errors": [
    {
      "code": 32,
      "message": "Could not authenticate you."
    }
  ]
}
```


<a id="#Chapter2"></a>
# 結論

keyword = "ハロ%20-RT520until%3A2020-12-23%20since%3A2020-12-22%20"
で成功

#余談
Twitter APIの仕様上、一週間以内のツイートしか検索できないらしい。


<a id="#reference"></a>
# 参考
[Twitter API リファレンス](https://developer.twitter.com/en/docs/twitter-api/premium/search-api/api-reference/premium-search)
【サルが書く】特定文字列と特定文字列の間の特定文字列を取り除きたいときの操作

わきゃ!!

GIGアドベントカレンダー16日目になります！
GIGメンバーの投稿はこちら👇 から見てみてね！
https://qiita.com/organizations/gig-inc

文字列から特定の文字列を取り出す操作は探せばあるけど、特定文字列と特定文字列の間の特定文字列を取り除きたいが見当たらなかったのでこれが役に立てば嬉しいです!

以下の例の場合は`<blockquote>`と`</blockquote>`の間の`<p>`と`</p>`を取り除きたいという例です。
適宜入れ替えてご使用ください。

```php
	    $body = '<blockquote>hoge<p>fuga</p>piyo<\/blockquote>';
        $htmlTags = ['<p>', '</p>'];

		$body = preg_replace_callback(
            '/<blockquote>(.*?)<\/blockquote>/',
            function ($matches) use ($htmlTags) {
                $quotation = str_replace($htmlTags, '', $matches[1]);
                return "<blockquote>{$quotation}</blockquote>";
            },
            $body
        );
```
Unity2020.2から追加されたシーンテンプレートはとても便利

Unity2020.2から**シーンテンプレート**という機能が追加されています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328771/36644414-da34-7e45-e56e-906b3a157d1e.png" wdith=450 />
シーンの設定を予めテンプレートとして保存でき、それを呼び出すことができます(まさに[QoL](https://blogs.unity3d.com/jp/2020/10/07/the-road-to-2021-team-quality-of-life/)!!)。サムネも設定できて分かりやすいです。

そんなシーンテンプレートの使い方を説明していきます。

## 現在開いているシーンをテンプレート化する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328771/5a6172d0-8e58-db44-b0df-333a7f8e371e.png" width=250 />
`File > Save As Scene Template...`を選択して、`シーン名.scenetemplate`という形で保存します。

以上です。

## テンプレートの呼び出し方法

いつものように新規シーン作成 (`⌘ + N`)

 <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328771/e516c7ea-8bf3-cf45-4c35-f054374eb735.png" width=450 />
すると`New Sceneウィンドウ`が表示され、そこからテンプレートを選択できるようになっています。

便利です。

## シーンテンプレートの編集

先の`New Sceneウィンドウ`内のEditををクリック。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328771/c1ef61a4-6bff-54f5-c181-ba0fd1e645ad.png" width=450 />

すると`Scene Template Asset`が選択されるので、その中の中身を編集してくだけです。
特にシーンのサムネールをつけると分かりやすくなります。

そんな時は`Take Snapshot`をクリックするだけで撮影されますのでオススメ。撮影した画像はScene Template Asset内に格納されます。

## まとめ

この機能を使うことで、シーンでゲームのステージを管理している場合、量産時に活躍します。今までであればTemplateとなるシーンを**複製**して使っていたと思います。

間違えてTemplateシーンをを上書き保存しちゃったってこともあるかも知れません。
そういうオペミスが減るワークフローが構築できそうですね。

Unity2020.2は細かく色々改善してて個人的にとても良いと感じています。
Windows から awscli を 利用する。

# 1. awscli ダウンロード

[Installing, updating, and uninstalling the AWS CLI version 2 on Windows](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html)
↓インストーラ
[AWSCLIV2.msi](https://awscli.amazonaws.com/AWSCLIV2.msi)

# 2. netsh に proxy の 設定

netsh winhttp set proxy プロキシーサーバ "NO_PROXY一覧(Bypass LIst)"

```
C\> netsh winhttp set proxy proxy.xxxxx.co.jp:8080 "localhost;*.xxxxx.co.jp"
```

# 3. AWS 接続情報設定

```
C\> aws configure
AWS Access Key ID [****************ABCD]: xxxxxxxxxxxxxxxxxxxxxxx
AWS Secret Access Key [****************ABCD]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: JSON
```

# 4. S3 から データをダウンロード(設定成功した場合落とせます)

```
C\> aws s3 cp s3://backet-name/folder/ C:\Users\xxxx\Desktop --recursive
```
Googleでアカウント復元が続く時の解決方法

#ある日からアカウント復元が始まった
　私は、Gmail他、のGoogleのサービスを常日頃愛用しておりますが、ある日、Chromeを立ち上げると、以下のような画面が。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/0f1c81db-5a7b-a39c-cc0d-4051b1a479c0.png)

　これを進めていくと、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/8b2dff30-1044-136f-b5de-99ca4ab28638.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/6da76712-afe3-cde9-7068-d75552a49db7.png)

　とアカウントの復元が表示され、最後はパスワードの再設定を求められます。

　これが、１度ならまだいいのですが、ChromeからEdgeに変えると、またパスワードの再設定をさせられる。別のPCでログインしようとするとまたパスワードの再設定をさせられる、と、ブラウザ、PCを変えるたびにパスワード再設定で、キリがありません。Googleのサポートに相談したところ、パスワード再設定を通知する条件については、システムが判断しているので説明できないとのこと。１回ログインが成功したPCとブラウザで使ってくださいとのこと。

　それでは、複数PCを使い回し、複数のブラウザをとっかえひっかえしている私がGmailを使っているメリットがなくなってしまいます。

　動作の様子から、Googleは、アカウント名の確認はでますが、パスワードの入力になる前に、「本人であることの確認」が表示されてしまいます。原因と思われるのは、なにかの拡張機能か、なにかのアプリが一度不正検知されて、その結果をブラウザ側で保持し続けているのではないかと考えました。

#解決方法
　まず、拡張機能を信頼性の高いもの以外を全てアンインストールします。次に、Google設定の同期が「一時停止中」となっているので、これを「オフにする」にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/9754e0b5-c076-e5d0-8107-0444e07da135.png)
　その後に、設定の「リセットとクリーンアップ」から「設定を元の既定値に戻す」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/8851202e-7fb0-49f3-9ba4-11d29437088f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/49c4ab7a-441d-a906-d2e0-6a1dd9c55b8a.png)

　これで、Chromeを一旦終了して、起動しなおし、Googleにログインし直すと、今度はパスワードの入力要求が出てきて、ログインできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/8e4cbe4d-d848-0d2e-8426-45a2ef1ccede.png)

　再度、設定で同期をオンにして、同期する内容の管理を確認すれば完了です。Microsoft Edgeも、同様の手順で同期を切って、リセットしてやればOKです。

#FireFoxは
　FireFoxは、リセットでは修復できませんでした。設定ファイルの削除が必要です。

　隠しファイルが表示できるようにし、ユーザーフォルダの AppData\Roaming\Mozilla から Firefox のフォルダを削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/2dba7d80-f596-afc2-804b-901a03c71699.png)

MacやUbuntuの場合は、メニューボタンからヘルプの「トラブルシューティング情報」を選択し、アプリケーション基本情報セクションの、プロファイルディレクトリーの隣りにある「ディレクトリーを開く」をクリックして、prefs.jsを削除してやればいいようです。中身を全部削除しても、最後に同期を設定しなおせば、各種設定は戻ります。
技術書典10 ゆるふぁい出店のお知らせ

こんにちは、やましょうです。
Delphi アドベントカレンダー23日目の記事です。

#連絡事項
技術書典10 の出店のお知らせです。
本自体は、技術書典7で出したものと変わりありません。
もし、技術書典7もしくはその他の部分で購入済みで、pdf版が欲しいんだけどという人は1/10日以降に、
やましょう宛てサポートのメールに書籍の画像をつけて送付してください。
pdf版をご依頼いただいたメールアドレスに送付します。

#技術書典ってなんだ？
公式サイト：https://techbookfest.org/
を見るとわかりますが、
新しい技術に出会えるお祭りです。
技術書典は、いろんな技術の普及を手伝いたいとの想いではじまりました。
技術書を中心として出展者はノウハウを詰め込み、来場者はこの場にしかないおもしろい技術書をさがし求める、技術に関わる人のための場として『技術書典』を開催します。
技術書展8からオンライン開催になっています。
購入した物理本はマーケット終了後(2021/1/7)以降に一括送付されます。

#"ゆるふぁい"で出店
https://techbookfest.org/organization/5768042554327040
毎月、木曜日に集まっていたわけですけど、この流行り病ではなんともですよね。。。

#頒布１ "Delphiで作る スマホアプリ"
https://techbookfest.org/product/5736302253178880
スマホでお絵描きソフトをつくります。
アンドロイドでセーブもできる様にしたので、Delphiのマルチプラットホーム開発を堪能できる一冊です。

#頒布2 "Delphi と micro:bitで作る USB接続 スマホアプリ"
https://techbookfest.org/product/6454927591211008
アンドロイドスマホでマイクロビットと232c通信をしてマイクロビットに文字を表示するソフトをつくります。
Windows/アンドロイドで232c通信が(マイクロビットのみ）ですが、簡単にできる様になっています。
マイクロビットV2ですとボタンの挙動が何かかわっしました模様ですが、それなりに動きます。

#感謝
デルオを表示につかわせていただきました。
本当にありがとうございます。
![デルオ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31412/b673f97b-69b9-e474-7a57-60cea4d13025.png)


以上
やましょうでした。
React import/exportについて


export名とimport名が違うのはなんで？？となったので調べたことをメモしておく。

<h1>import</h1>
①defaultでexportされているものについてはimport時にファイルパスさえあっていれば自由に名付けて良い。（当然同じ名前でも構わない）
import 〇〇  from 'ファイルのPath等'
import 『export時の名前』AS 〇〇 from 'ファイルのPath等'

②defaultではないものについては
import { 〇〇 } from 'ファイルのPath等'と記載する。
この際、export時と同じ名前を使用する必要がある。

③②で名前を変えたい時は、
import { 〇〇　AS つけたい名前 } from 'ファイルのPath等'で変更することができる。

<h1>export</h1>
default
・export 〇〇でファイル・変数を自由にexortできる。
・クラス名・変数名に関わらず、export default 〇〇で自由に名付けられる。（1ファイルにつき1つのみ）

以上、参考になれば幸いです。
【javascript】配列の置き換え

#constで定義したい

配列を定義する時に、後に`Array.filter()`等の結果に置き換える理由で`let`を用いてました。
この事に何か違和感を感じていたので、`const`で定義できるように関数を用意した、ただそれだけです。

```javascript:exmaple1.js
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array = array.filter(x => x < 5);
```

こんな感じに。

```javascript:exmaple2.js
const array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
renewArray(array, array.filter(x => x < 5));
```
#コード

```javascript:
const argumentsError = (argValue, nth, len='-', fnName='') => 
	console.error(`wrong arg(${nth} of ${len}) / ${fnName} function\n`, argValue);

const renewArray = (...args) => {
	//引数検査
	for (let i=0; i<2; i++) {
		if (!Array.isArray(args[i])) return argumentsError(args[i], i+1, 2, 'renewArray');
	}
	//本体
	const [baseArray, newArray] = args;
	baseArray.length = 0;
	baseArray.push(...newArray);
};


const array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
renewArray(array, array.filter(x => x < 5));
```

#これ必要？
必要とも言えるし、不要とも言える。
PHPInsightsをLaravel5.5でも起動する

こんにちは。M2です。
[Laravel Advent Calendar 2020](https://qiita.com/advent-calendar/2020/laravel)の12日目を代打で担当させていただきます。

# 概要

[PHP Insights公式](https://phpinsights.com/get-started.html#within-laravel)によると
PHP7.2以上あれば入れられるとのことだが、

`symfony/console`の依存関係でどうしても入れられない時があります。

そういう時に[ Support lower Laravel version then 5.7](https://github.com/nunomaduro/phpinsights/issues/55)を見つけたので、共有がてらに。

## 対処法

- phpinsight.shをLaravelのルートディレクトリに設置


```phpinsight.sh
#!/bin/sh
composer global require nunomaduro/phpinsights
cp ~/.composer/vendor/nunomaduro/phpinsights/stubs/laravel.php phpinsights.php
php -d memory_limit=-1 ~/.composer/vendor/bin/phpinsights --config-path=phpinsights.php
```

あとは

```console
$ bash phpinsight.sh
```
を実行するだけ。


実行結果の例

[![Image from Gyazo](https://i.gyazo.com/753b146cbd420ad355782f17fe23a533.png)](https://gyazo.com/753b146cbd420ad355782f17fe23a533)


## 参考

[ Support lower Laravel version then 5.7](https://github.com/nunomaduro/phpinsights/issues/55)
IoT電子制御トレーニングマシーン



#はじめに
 　自分が使ったことのある（みんなも利用したことがあると思う）ものが素晴らしい進化を遂げていたので、みんなにも知ってもらいたいと思ってこの記事を書きました。


#Higatrec
　これはHigatrecという、ウェイトトレーニングマシーンになります。
![kinn.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869426/55cf5cee-5179-717d-6ee5-71d5fcdbc550.jpeg)

#Higatrecの特徴
他のマシーンと何が違うかというと、、、

###コンピュータで制御されたモーターが荷重
　ウェイトトレーニングに欠かせない重りプレートがなく！
　モーターはコンピュータープログラムで制御され、ベストな荷重を発生。

###ユーザーの筋力にあわせた負荷最適化プログラム
　荷重は１回の運動でも常に変化し続け、個人の筋力にあわ
　最適な負荷を生み出すことで、効率的なトレーニングが可能になる。

###安全でサポーターがいらない
　重りがないので、プレート交換による重りの落下事故を防ぐ。
　また、運動中に手をはなしてもバーが落下してこない。
　サポーターやトレーナーがいなくても一人でできる。

###ソフトウェアによるトレーニングの記録の管理、分析
　トレーニングした記録はスマホのアプリで閲覧、管理ができる。
　記録を振り返ることで、トレーニングの効果を実感でき、モチベーションの維持に役立つ　


#老若男女に利用可能！！
　Higatrecは重りがなく、個人の持つ筋力にあわせて荷重を自動調整する。
　また、重りがなく安全な製品のため、だれでも利用できる。
　ボディメイクしたい人の他、健康維持が目的のシニア層にも利用可能！
　日本の健康産業にも貢献できるかも、、。

#感想
　今回調べたマシーンは、ジムではもちろん、リハビリを行う医療機関でも導入できるのではないかと思いました。この機器は高齢者でも利用可能であるという点が大きいアピールポイントになると思います。IT技術が進んでいく中で、高齢者の方も利用できるようにすることが大事になってくると思います。私も幅広い年代が利用できるものを開発できるように勉強していきたいと思いました。
アナログ回路 その25

# 概要

circuit sandboxをplunkerでホスティングした。
アナログ回路をシュミレーションで、説明してみる。

# オペアンプ・半波整流回路

![無題.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/d8801c7f-0302-20ed-c3a6-d40500c6ddbd.jpeg)


# 結果

![無題.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/48ef9eb7-1fc2-8334-0593-6cac2dae9f34.jpeg)


# 説明

理想半波整流回路です。


# 成果物

https://embed.plnkr.co/plunk/zIaIXafGpl0nkG6a

以上。
AI婚活について

#はじめに
　今月8日に、自治体で行われているAIを用いた婚活支援を国が後押しすることが発表されました。今では転職支援サービスのマッチングやファッションの販売サービスにもAIが活用されています。様々な分野で活躍するAIですが、婚活で用いられるAIとはどのようなものなのでしょうか。その特徴を自分なりにまとめてみました。


#AI婚活とは
AI婚活とは、婚活における「あなたへのおすすめ」をAIが探し出すというものです。過去の成婚例を基にしたAIのレコメンド機能により相性のいい相手とのマッチングが期待できるようです。AI婚活のサービスの仕組みとしては、

(1)登録者の情報に似た過去の成婚者を探す
(2)その成婚者の結婚相手のタイプを分析する
(3)結婚相手のタイプに似た登録者を探し出し、点数化する
(4)点数の高い登録者から紹介する

という流れが主流となっています。現状はAIに完全に任せたものではなく、人の行うマッチングをサポートするシステムとしてAIが導入されるケースが多いようです。
また、AIによる婚活支援事業は、2015年3月に導入した愛媛県が先進例とされています。現在、愛媛県をモデルケースに採用しているのは18県にのぼります。


#AI婚活の特徴
####膨大な情報を処理することができる
AIを用いることで、利用者が持つ細かな希望や過去の成婚例を素早く分析し、最適と推測される相手を提案することができます。アドバイザーの経験に依存していた部分もパターン化でき、ヒューマンエラーを減らすこともできます。最近では、価値観や性格なども解析することができるようになっています。

####希望条件に合わなくても、相性の良い相手を見つける
AIは、「自分と好みが似ている人」の情報や「自分を好むかもしれない相手」の情報も分析、学習するため条件検索では出てこない相手を相性の良い相手として提案することがあります。これにより、紹介の幅に柔軟さが生まれ成婚率が上がったと考えられています。

####成婚の実績、実例が少ない
利用者の境遇や意欲など、コンピュータでは未だ扱えない情報は多くあります。AIを用いたマッチングの実例が少ないこともあり、現状はAIの学習材料が不足していると言えます。そのため、マッチング精度も向上の只中にあります。


#最後に
AI婚活について調べる中で、AIには社会問題の解決につながる可能性が多くあると感じました。既にAIは多くの分野で活躍しているので、機会があれば他のAIについてもまとめてみたいと思います。

参考ページ：
https://s-marriage.jp/column/8/
https://news.yahoo.co.jp/articles/4b0af8dac6e4c420ced529c8dd7bc314249f1b4e?page=1
webサイト改善のヒント 

この記事は[エイチーム引越し侍 / エイチームコネクト Advent Calendar 2020](https://qiita.com/advent-calendar/2020/hikkoshizamurai-connect) 23日目の記事です。
# はじめに
引越し侍ではサービスをより良いものにするために、毎日様々なサイト改善施策が提案されています。私たちエンジニアはその施策をプログラムに落とし込んでいくことになりますが、その中でさらに新しいアイデアを提案したり、一緒に考えたりする場面も多いです。今回は私たちが日頃どのように引越し侍のサイト改善をしているか少しだけご紹介します。

# webサイト改善のヒント
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306965/cd21c73c-4330-4955-c59e-b66c81840c01.png)

## 1.目標とスケジュールを決める
まずは具体的な目標を決めます。指標は様々ですが「**いつまでにどのくらい**」を明確にすることで各施策のスケジュールが立てやすくなります。開発を無理なく行うためにも計画は大切ですね！

## 2.仮説を立てる
施策を実行することで「**何がどう改善されるのか**」を考えます。漠然とアイデアだけあると運任せになってしまうので、ある程度根拠となるデータを集めるのがポイントです。

### ユーザー心理を具体的にイメージ
サイトを利用するのは開発者ではなくユーザーです。自分がこうなったらいいな、よりも、ユーザーにとってこうなった方がいいな、を考えます。

### 過去の施策を見る
もし過去に行った施策の記録が残っている場合はそれが参考になります。**施策が成功しても失敗しても何かしら新しいアイデアの材料になる**ので残しておきましょう！

### 他社のwebサービスや競合の観察
自分が普段使っているWebサービスからいいなと思った機能をメモしておきます。競合や類似サービス以外でもヒントがたくさんあります。

## 3.データ分析の準備
サイト改修するにあたり、改修前と改修後が比較できるような仕組みを準備します。「**改修によって何が変わったのか**」があやふやだと、改善するつもりが実は逆効果だった！ということも起こり得ます。しっかりエビデンスが残せるようにしましょう。

### GA(Google Analytics)
**webサイト改善はこれが無いと始まらない**
アドオンでスプレッドシートに簡単にデータ抽出&記録することができます。GoogleTagManagerと併用してサイトのあらゆる箇所に設置しておきましょう。

## 4.施策の振り返り
サイト改修後の効果を検証します。改善されていない場合は前の状態に切り戻したり、追加で改修を行ったりします。なぜ成功(失敗)したか理由の深掘りと記録をして次に繋げます。

# まとめ
大きな組織だと各々役割が分担されているので、プログラマーがデータ解析や施策立案について知る必要はあるのか？という疑問も出てくるかと思います。実際、私が普段開発しているところに関しても他事業部の方からあがってくる施策が多いです。

ただ、「**なぜこの施策を行うのか**」「**どのような経緯で施策をするに至ったのか**」を知るだけでエンジニアから提案できるアイデアの幅も広がりますし、何より主体的に開発ができるのでモチベーションが上がります。この記事が皆さんの開発モチベーションアップに繋がれば幸いです！

# 明日
明日は@kekiさんの投稿です！お楽しみに！
[備忘録]パワポが死んだ時の対処

##　起動時の謎のエラー
起動時に
![SCR 2020-12-23 at 8.17.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545134/159e5eb0-f599-fc7c-dd59-28bf0eded3a9.png)

```
Run-time error '53':
File not found:/Library/Application Support/Adobe/MACPDFM.MacPDFM.framework/Versions/A/MacPDFM
```

が出るようになって、PowerPointが使えなくなった。

## 環境
macOS Big Sur
Version 11.1

## 原因
Adobe Acrobat DCをアンインストールしたのが問題らしい。

ちゃんとCreative Cloudからアンインストールしたんだけどなぁ

## 対処
~/Library/Group Containers/UBF8T346G9.Office/User Content.localized/Startup.localized/PowerPoint
に行って
SaveAsAdobePDF.ppam
を削除する。

ターミナルで

```sh
rm ~Library/Group\ Containers/UBF8T346G9.Office/User\ Content.localized/Startup.localized/PowerPoint/SaveAsAdobePDF.ppam
```

を実行しても良い。

なお、ここら辺のパスは微妙に変わるっぽいので([参考にしたサイト](https://apple.stackexchange.com/questions/407353/how-to-fix-run-time-error-53-every-time-i-open-a-document-in-word-or-a-worksheet)は.localizedがなかった)
- 適宜確認しつつそれっぽいところに行く、
- User\ Content.localized/Startup.local下でfind(fd)　SaveAsAdobePDF.ppamをする
などすると良い
JavaScript/TypeScriptでAWSのARNをパースする方法

JavaScript/TypeScriptでAWSのARNをパースして、サービス、リージョン、アカウントID、リソースIDなどを取得する方法をご紹介します。

## ARNとは

**ARN**はAWS上のリソースを一意に識別するための識別子のことで、`arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint`のような文字列で表されます。
単純そうに見えてそのフォーマットにはいくつかのバリエーションがあり、自前でパースしようとするのはバグの温床となりえます。

## パッケージをインストール

ARNをパースするためのnpmパッケージはいくつかあるようですが、AWSが公式に提供している[@aws-sdk/util-arn-parser](https://www.npmjs.com/package/@aws-sdk/util-arn-parser)を使うのがいいでしょう。

```sh
$ npm i @aws-sdk/util-arn-parser
```

## ARNをパース

JavaScriptの場合：

```js
const { parse } = require('@aws-sdk/util-arn-parser')

const arn = 'arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint'
const {
  partition,
  service,
  region,
  accountId,
  resource
} = parse(arn)
console.log(partition)  // aws
console.log(service)  // s3
console.log(region)  // us-west-2
console.log(accountId)  // 123456789012
console.log(resource)  // accesspoint:myendpoint
```

TypeScriptの場合：

```ts
import { parse } from '@aws-sdk/util-arn-parser'

const arn = 'arn:aws:s3:us-west-2:123456789012:accesspoint:myendpoint'
const {
  partition,
  service,
  region,
  accountId,
  resource
} = parse(arn)
console.log(partition)  // aws
console.log(service)  // s3
console.log(region)  // us-west-2
console.log(accountId)  // 123456789012
console.log(resource)  // accesspoint:myendpoint
```

## 参考リンク

- [Amazon リソースネーム (ARN) - AWS 全般のリファレンス](https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-arns-and-namespaces.html)
アナログ回路 その24

# 概要

circuit sandboxをplunkerでホスティングした。
アナログ回路をシュミレーションで、説明してみる。

# オペアンプ・バンドパスフィルター回路

![無題.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/b69cef7f-8a3f-bf9e-239d-cb0e068e78c1.jpeg)


# 結果

![無題.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/de1cca9b-9761-b349-9afd-fb3e992c907e.jpeg)


# 説明

１ｋｈｚのバンドパスフィルターです。

# 成果物

https://embed.plnkr.co/plunk/2df2mRF6GzpPbzny


以上。
メンタリングとは？～若手社員の自律を促すメンター制度～

この記事は「[NEXTSCAPE Advent Calendar 2020](https://qiita.com/advent-calendar/2020/nextscape)」の23日目の記事です

初めまして、こんにちは。
kodama0101です。

私は業務では普段、[Kentico](http://kentico.jp/)というチェコ発CMSの日本代理店業務や保守・開発に従事しています。
今回はそんな私がメンター制度についての説明と、私が当社のメンター制度でメンターに指名された経験から感じたことを記事にしました。

# メンター制度について

### メンター制度とは
厚生労働省が配布している「女性社員の活躍を推進するためのメンター制度導入・ロールモデル普及マニュアル」には次のようにあります。

`職場の上司は職務・業務の指示・命令を行い、組織目標の達成を行います。それに対しメンター制度とは経験豊かな先輩社員（メンター）が双方向の対話を通じて、後輩社員（メンティ）のキャリア形成上の課題解決や悩みの解消を援助して個人の成長をサポートする役割を果たします。具体的には、定期的にメンターとメンティとが面談（メンタリング）を重ね、信頼関係を育む中で、メンターはメンティの抱える仕事上の課題や悩みなどに耳を傾け、相談に乗ります。そして、メンティ自らがその解決に向けて意思決定し、行動できるよう支援します。`
https://www.mhlw.go.jp/file/06-Seisakujouhou-11900000-Koyoukintoujidoukateikyoku/0000106269.pdf

**つまり、メンティ（若手社員）に指揮命令を持つ上長以外のメンター（先輩社員）を付けて、メンティが自身や業務などの課題解決プロセスを経て自律性が育つよう、メンターがサポートを行う制度です。**

**他にも、若手社員の精神的なサポート役を担うことで離職防止や社内コミュニケーションの活性化なども目的として挙げられます。**

メンター制度以外にも似た制度だとよく耳にするOJTやブラザー・シスター制度なるものがあるようです。
![brothersister_001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927539/bdb4d32f-d8d6-a16c-d3ce-e182156b0d96.jpeg)
https://www.dodadsj.com/content/190122_brothersister/

### メンタリングとは

メンタリングについてはWikiに以下のように記載があります。

`メンタリング（英語：mentoring）とは、人の育成、指導方法の一つで、指示や命令によらず、メンター（mentor）と呼ばれる指導者が、対話による気づきと助言により、被育成者たるプロテジェ（protégé）ないしメンティー（mentee）本人と、関係を結び自発的・自律的な発達を促す方法である。
プロテジェがメンターから指導・支援・保護されるこの関係をメンター制度（メンターせいど）ないしメンターシップ（mentorship）と呼ぶ。`
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%B3%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0#%E7%8F%BE%E4%BB%A3%E3%81%AE%E3%83%A1%E3%83%B3%E3%82%BF%E3%83%BC%E5%88%B6%E5%BA%A6

**前述のメンター制度を行うにあたっての手法のことですね。**
**重要なのはメンターは指示や命令を与えるのではなく気づきやヒントを与えることで、メンティー本人が自分で考えて行動することです。**

### メンタリングで最も重要なこと
メンタリングで重要なこととしてメンター側のスキルなども挙げられますが、**最も重要で最優先なのは信頼関係を形成すること**です。
メンター制度の性質上、メンティーの自発的・自律的な成長を促すには信頼関係の形成が前提条件であるため、いかに信頼関係を形成するかがメンタリングで大切になってきます。

### メンタリングの際に最低限守るべきこと

メンタリングをする際に最低限守るべきこととして、厚生労働省の「女性社員の活躍を推進するためのメンター制度導入・ロールモデル普及マニュアル」に次の3点が挙げられています。

- 1.メンタリングで話し合われた内容を口外しないという「守秘義務」を守ること
- 2.メンタリングにおいて不都合が生じたときの「相談窓口」を設けること
- 3.メンタリングも業務の一環と位置づけ、原則として「就業時間内」に行うこと

**特に1点目は重要です。**
**友達でも秘密をバラされたら信頼できなくなりますよね。**

# 私のメンター制度での経験

### メンタリングで実施したこと
- 定期的な1on1
- （メンタリング）ではないかもしれないが、他部署メンバを交えた定期的な昼食会

### メンタリングする際に心がけたこと
- 関係性を形成するために
    - 積極的傾聴を心がける
    - コミュニケーションの絶対量を増やす
        - なんでも話せるような関係性になってからがスタートかなと考えながらやっていた。
- 自律を育むために
    - 否定はしない。まずは自分で考えた解決方法や方針でやってみてもらう。
    - メンティーの思いを大事にする。
    - なぜそう思ったのか、なぜそうしたのかを問いかける。
        - 言語化し対話を重ねることで気づきや解決策をメンティー自身で見出すきっかけになれば。

### メンター制度をとおして感じたこと
- 双方の信頼関係を形成してからがスタート。
    - ここからがメンタリングのスタート。それまでは積極的なコミュニケーションを図る。
- リモート環境下ではコミュニケーションが取りづらい。
    - 私の場合は開始当初は対面でのメンタリングであったためそこで得られた関係性を基にリモートへ移行できたが、初めからリモートでは難しい一面もあるのではと感じた。

### メンター制度をとおして得られたこと
- メンティーのお手本となるべく、言動や意識に変化が。
    - 言葉遣いや態度も模範となるように意識するように。
    - 依頼された社内業務も他人事と考えず我が事と考え行動するように。
- コミュニケーション能力アップの実感も。
    - 普段から積極的傾聴を心がけるようになった。
- 論理的思考が高まった。
    - メンティーになぜそう思ったのか、なぜそうしたのか問いかけることで自身もなぜなぜ分析が癖付いた。

# まとめ
今回はメンター制度について紹介及び私が感じたことをご紹介しました。

メンター制度は若手社員の自律を促し離職防止にも繋がるものであるため、会社の未来となる社員を育む重要な制度です。

当社においても今後は目的や現場に合ったメンター制度へと発展し、メンター・メンティー双方を成長させるものになっていければよいなと感じております。
laravel6 バッチを作って実行してみる

# 目的

- laravel6のアプリでバッチを作成し、実行する方法をまとめる。

# 実施環境

- ハードウェア環境

| 項目 | 情報 |
| --- | --- |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

- ソフトウェア環境

| 項目 | 情報 | 備考 |
| --- | --- | --- |
| PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518) |
| Laravel バージョン | 6.X | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69d6392e08) |
| MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いてこちらの方法で導入→[Mac HomebrewでMySQLをインストールする](https://qiita.com/miriwo/items/ef6a064bc545fbea29d9) |

# 条件

- laravel6のアプリがありローカルサーバなどを起動しブラウザから確認する事ができること。

# 情報

- バッチの実行方法は手動でコマンドを叩いて実行するものとする。
- バッチの作成と手動実行の方法をまとめることが目的のためバッチの内部で実行する処理は最低限とし「Hello Japan!」をターミナルに表示するだけのものとする。

# 概要

1. バッチの作成
2. 実行と確認

# 詳細

1. バッチの作成
    1. アプリ名ディレクトリで下記コマンドを実行してバッチクラスを作成する。

        ```terminal
        $ php artisan make:command EchoStrCommand
        ```
    1. アプリ名ディレクトリで下記コマンドを実行して作成したバッチクラスが記載されているファイルを開く。

        ```terminal
        $ vi app/Console/Commands/EchoStrCommand.php
        ```
    1. 開いたファイルを下記のように修正する。

        ```アプリ名ディレクトリ/app/Console/Commands/EchoStrCommand.php
        <?php
        
        namespace App\Console\Commands;
        
        use Illuminate\Console\Command;
        
        class EchoStrCommand extends Command
        {
            /**
             * The name and signature of the console command.
             *
             * @var string
             */
            // 下記を修正
            protected $signature = 'command:echo_str';
        
            /**
             * The console command description.
             *
             * @var string
             */
            // 下記を修正
            protected $description = 'Echo Hello Japan!';
        
            /**
             * Create a new command instance.
             *
             * @return void
             */
            public function __construct()
            {
                parent::__construct();
            }
        
            /**
             * Execute the console command.
             *
             * @return mixed
             */
            public function handle()
            {
                //下記を追記
                echo 'Hello Japan!'."\n";
            }
        }
        ```

2. 実行と確認
    1. アプリ名ディレクトリで下記コマンドを実行し出力結果の中に「command:echo_str」が存在していることを確認する。

        ```terminal
        $ php artisan list
        ```

    1. アプリ名ディレクトリで下記コマンドを実行する。

        ```terminal
        $ php artisan command:echo_str
        ```
    
    1. 下記のようにターミナル上に「Hello Japan!」の文字が表示されることを確認する。

        ![EchoStrCommand_php_—_laravel6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/089b27e8-0fbd-271e-299a-b81132548ce3.png)
VsCodeでPrettierが動かない時の対処法

Prettierを入れてみたものの、ファイルの保存時にコードが整形されなかったので、その時の対処法をめもしておく。

①SettingでFormat On Saveが有効になっているかを確認する
②SettingでDefault Formatterにesbenp.prettier-vscodeが選択されていることを確認する。

おそらくこの二つで対処可能だが、上記以外で解決した場合はコメントを残していただけると幸いです。
証明書について調べる(メモ)

こちらも、雰囲気でなんとなくで理解しているので
深堀りして調べてみる

##まずはじめに
インターネットには、「**4大リスク**」と呼ばれるものがある
→`盗聴、改ざん、なりすまし、事後否認`

それを防ぐためにあるのが、**電子証明書**
現実の世界における運転免許証やパスポートのように
対象を正しく認証・特定する、インターネットにおける身分証明書のようなもの

##証明書とは
電子証明書も、信頼できる機関(＝認証局)が発行することで、
正しく本人を証明することができる。

さらに、期限が切れた証明書や、
内容が古く正確でなくなった証明書を無効にすることもできる

ほぼ現実の免許証やパスポートと同じだ

##SSLサーバー証明書とは
SSLサーバ証明書は、Webサイトの「運営者の実在性を確認」し、
**ブラウザとWebサーバ間で「通信データの暗号化」**を行うための`電子証明書`で、認証局から発行される

SSLサーバ証明書には、
Webサイトの所有者の情報や、暗号化通信に必要な鍵、発行者の署名データなどが含まれる


####SSLとは
SSL(Secure Sockets Layer)とは、インターネット上における
**ブラウザとWebサーバ間でのデータの通信を暗号化**し、送受信させる仕組みのこと

SSLは、重要な情報を、
悪意ある第三者による盗聴を防いだり、送信される重要な情報の改ざんを防ぐ

【SSLの簡単な流れ】
1.ブラウザ:**SSL通信をリクエスト**する
2.サーバー:**SSLサーバー証明書を送付**する
3.ブラウザ受け取った証明書の**公開鍵を使って共通鍵を暗号化**し、**サーバーに送付**する
4.サーバー:受け取った**共通鍵を、秘密鍵を使って復号**する
5.ブラウザ/サーバー:**一致した共通鍵**を使って**送受信するデータを暗号化、復号**して暗号化通信を成立させる

##感想
まだまだ深く調べることができそうなので
合間をぬって、また記事を書いていきます

##参考記事
https://ssl.sakura.ad.jp/column/ssl/
https://www.cybertrust.co.jp/blog/ssl/knowledge/ssl-basics.html
https://www.cybertrust.co.jp/blog/ssl/knowledge/ssl-movie.html
https://securitynavi.jp/3532
https://qiita.com/kinpira/items/69a9b0dfc734b28835bf
https://jp.globalsign.com/ssl-pki-info/ssl_beginner/sslcerts.html#:~:text=SSL%E3%82%B5%E3%83%BC%E3%83%90%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AF,%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82
https://jp.globalsign.com/ssl-pki-info/ssl_beginner/aboutssl.html#:~:text=SSL%EF%BC%88Secure%20Sockets%20Layer%EF%BC%89%E3%81%A8,%E3%81%95%E3%81%9B%E3%82%8B%E4%BB%95%E7%B5%84%E3%81%BF%E3%81%AE%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82&text=SSL%E3%81%AF%E3%80%81%E3%81%93%E3%82%8C%E3%82%89%E3%81%AE%E9%87%8D%E8%A6%81,%E5%BD%B9%E5%89%B2%E3%82%92%E6%8C%81%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82
Adobe Stockで無料の写真やイラスト素材を入手する

# Adobe Stockとは
- https://stock.adobe.com/
- Adobeの提供する、ロイヤリティーフリーの写真やイラストを提供する有償サービス。
- 一部が無料化されている
    - [Adobe、ストック素材7万点を無料で公開　商用利用も可](https://www.itmedia.co.jp/news/articles/2010/21/news129.html)


# ユーザ登録(Adobe ID)が必要
- [アドビアカウントページ](https://accounts.adobe.com/)で、「アカウントの作成」をクリック
- メルアド、パスワード、氏名、生年月日を入力して、登録する

 <img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/d034b7bd-a739-537b-faaf-4c8331f07b60.png">


# 画像の検索とダウンロード
- [Adobe Stock](https://stock.adobe.com/jp/) のページを開く
- ジャンルに「無料素材」を選んで、キーワードを入れて検索する
    - 他のジャンルは全て有償なので注意
    - 「10点のAdobe Stock画像を無償でご利用いただけます。」は、初月無料で翌月から料金がかかるので、クリックしない。
![adobe-stock-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/b6c02a47-dec0-849b-53ed-37c97c990383.png)


- 画像一覧が表示されるので、必要な画像を探す
- ダウンロードした画像が見つかったら、画像の右下に「無料」と表示されているのを確認して、画像をクリック
![adobe-stock-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/082c83b0-1a29-c410-343d-50b3b3d92989.png)


- 「無料でライセンス」をクリックすると、ダウンロードされる
![adobe-stock-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142577/e8d34eed-a482-dbff-72cb-d6f6b60fb2e9.png)



# ライセンスにも目を通しておく
- [Adobe Stock ライセンス情報](https://stock.adobe.com/jp/license-terms)のページにライセンス情報が書かれているので、読んでおく
    - 通常ライセンスでは、無制限の回数の Web 表示、アセットを最大 500,000 回コピーまたは表示　などができる。
    - できること、できないことが明記されている

# その他のサイト
- [unsplash](https://unsplash.com/) など、有名な画像素材サイトはいくつもあるので、リンク集などでたどるか、[googleで調べる](https://www.google.com/search?q=%E7%94%BB%E5%83%8F+unsplash)。
Jiraのプロになる！課題検索のためのクエリ言語「JQL」の使い方

# この記事について

この記事は、[aslead Agile](https://aslead.nri.co.jp/solution/aslead_agile.html)の開発チーム「[オキザリス](https://speakerdeck.com/viva_tweet_x/huesudeyong-qi-wode-taxin-gui-timugashi-yan-wozao-rifan-sitejin-nizhi-rumadefalsewu-yu)」にて行っているアウトプット企画である「[チーム「オキザリス」Advent Calendar](https://qiita.com/advent-calendar/2020/oxalis)」の23日目の記事です。

# この記事の立ち位置

本アドベントカレンダーの18日目に、[「Confluenceを使いこなそう！便利な機能5選」](https://qiita.com/aykooo/items/0d8e557e21ed03b9e9e4)という記事を書きました。その中でJiraの「JQLを用いたアドバンス検索」機能に少し触れたのですが、この記事ではJQLの使い方に特化してご紹介します。

# JQLとは？

"JIRA Query Language"つまり"Jiraクエリ言語"のことです。Jira上で、課題のアドバンス検索を行う際に用います。基本的な文法はSQLに似ています。

# JQLの書き方を抑えよう！

よく使うJQLの書き方を、例を交えて紹介します。

### 複数条件指定
複数の条件を`AND`や`OR`でつなぐことができます。SQLと同じく`AND`の方が`OR`よりも優先されるため、`OR`のかかる範囲は()を用いて適切に設定しましょう。
下記は「プロジェクトProject_A内に作成され、ステータスが完了であり、担当者がUser1の課題」を検索するクエリです。

```
project = Project_A AND status = done AND assignee = User1
```

### 1つの条件に複数の値を設定
1つの項目に対し複数の値を指定する場合には、`IN (値1, 値2, ...)`を用います。例えば下記は、「Project_A、Project_BおよびProject_Cに所属する」課題を検索するクエリです。

```
project IN (Project_A, Project_B, Project_C)
```

### その他の演算子

JQLでは`=`や`IN`の他にも、`IS`、`~`などの演算子を使い分ける必要があります。

例えば下記は「説明欄が空（何も書かれていない）」である課題の検索クエリです。EMPTYまたはNULLを検索値とする場合は、`IS`を用います。

```
description IS EMPTY
```

また、下記は「コメント欄に"テスト"という言葉を含む」課題の検索クエリです。

```
comment ~ テスト
```

### 否定条件

`=`や`~`の否定は`!=`、`!~`ですが、`IN`や`IS`の否定には`NOT`を用います。例えば下記クエリのような書き方になります。

```
project NOT IN (Project_A, Project_B) AND description IS NOT EMPTY AND comment !~ テスト 
```

### 

### 日にちに関する指定

JQLでは、現時点を0として相対的に日にちを指定することができます。「直近1週間以内に作成された課題」という指定は、「作成日が-1週間より新しい」と考えて下記のようなクエリで書けます。

```
created > -1w
```

また、「今年の初め」を表す`startOfYear()`といった関数も用意されています。同様に`startOMonth()`、`startOWeek()`、`startOfDay()`、また終わりを表す`endOfYear()`などもあります。例えば「今年になってから作成された課題」はこのように表します。

```
created > startOfYear() 
```

### 人に関する指定

「自分が担当者の課題」という指定は、`assignee = 自分の名前`と自分の名前を直接指定することでも実現できますが、JQLに用意されている`currentUser()`という関数を用いて下記のように書くことができます。

```
assignee = currentUser() 
```

この関数は「現在のユーザー」を表すので、例えばこの検索条件を公開設定でフィルタ保存しておくと、他の人も「自分が担当者の課題」を検索するクエリとして利用することができます。

また、Jiraのユーザー管理として、ユーザーをグループに紐づけて管理することができます。例えば「Developperというグループに所属する人のいずれかが担当である課題」は下記のように検索できます。

```
assignee IN membersOf("Developper")
```

※ここまでいくつかJQLに用意されている関数をご紹介しましたが、詳細は[こちら](https://ja.confluence.atlassian.com/jirasoftwarecloud/advanced-searching-functions-reference-764478342.html)のアトラシアン社サイトをご覧ください！

### 並べ替え

`ORDER BY`句を用います。昇順に並べたい場合は`ASK`、降順び並べたい場合は`DESC`を指定します。

例えば下記は、プロジェクトProject_A内に作成された課題を、作成日が新しい順に表示します。

```
project = Project_A ORDER BY created DESC
```


# 最後に

初めは難しく見えるかもしれませんが、Jiraにはオートコンプリート機能もありますし、慣れてしまえば簡単です。
慣れるためにも、色んなフィルタを作って遊んでみることをお勧めします（特にJiraに関するアトラシアンの資格試験を受験予定の方は、JQLの知識は必須です！）。
JQLをマスターして、Jira名人に近づきましょう！
QtWebAssemblyの導入方法(2020年版)

おはようございます、[Qt Advent Calendar 2020](https://qiita.com/advent-calendar/2020/qt)の 23日目の記事です。

去年技術書展で購入した本でQtWebAssemblyに興味を持ったのですが、まだまだ開発中の機能でQtのバージョンによって導入方法が違ったりしていたので、今回は現在最新のQtバージョンでQtWebAssemblyを導入してみようと思います。
この手順はWindows10での導入方法です。

# emsdkのインストール
WebAssemblyのコンパイラであるemsdkをインストールします。
これには以下のソフトウェアが必要なので、入っていない場合は先にインストールしてください。

+ Python2.7.12以上
+ Gitクライアント

コマンドプロンプトを立ち上げて下記を入力し、emsdkをインストールします。

```
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
emsdk.bat install 1.39.8
emsdk.bat activate --embedded 1.39.8
```
インストール後emsdkフォルダに.emscriptenファイルが出来るので、`` emsdk_path`` の部分をインストールした場所のパスに書き換えます。
下記は`` C:\emsdk``にインストールした時の例です。

```
import os
emsdk_path = os.path.dirname(os.environ.get('EM_CONFIG')).replace('\\', '/')
NODE_JS = 'C:/emsdk/node/12.18.1_64bit/bin/node.exe'
PYTHON = 'C:/emsdk/python/3.7.4-pywin32_64bit/python.exe'
JAVA = 'C:/emsdk/java/8.152_64bit/bin/java.exe'
LLVM_ROOT = 'C:/emsdk/upstream/bin'
BINARYEN_ROOT = 'C:/emsdk/upstream'
EMSCRIPTEN_ROOT = 'C:/emsdk/upstream/emscripten'
TEMP_DIR = 'C:/emsdk/tmp'
COMPILER_ENGINE = NODE_JS
JS_ENGINES = [NODE_JS]
```
ホームディレクトリ(C:\Users\ユーザー名)に.emscriptenをコピーします。

※このファイルの書き換えとコピーという手順はQtのドキュメントにはありません。
Qtでコンパイラに自動でEmsctipten Compilerを追加するために手順を追加しましたが、もっとスマートな解決方法がありそうです…もしご存じの方がいればコメントして頂きたいです…！

# sedのインストール
以下のサイトからsed-4.2.1-setup.exeをダウンロードし、全てデフォルトでインストールします。
https://sourceforge.net/projects/gnuwin32/files/sed/4.2.1/?sort=filename&sortdir=asc

# Qtのインストール
オンラインインストーラーで以下のコンポーネントをインストールします。
Qt
└Qt5.15.0
　└WebAssembly

Developer and Designer Tools
└MinGW 8.1.0 64-bit

# QtCreator WebAssemblyプラグイン有効化
[ヘルプ]の[プラグインについて]をクリックしてインストール済みプラグインウィンドウを開きます。
[Device Support]->[WebAssembly]を有効化し、QtCreatorを再起動します。


# QtCreator Kit設定
[ツール]の[オプション]をクリックします。
コンパイラに自動でEmsctipten Compilerが追加されています。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552929/8f03760b-eed9-3da5-ecdd-f3b99be45e1f.png)

Qtバージョンに自動でQt5.15.0WebAssemblyが追加されています。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552929/b546df30-0dd1-7a1e-b58b-f794e092c4ee.png)
Kitsに自動でQt5.15.0WebAssemblyが追加されています。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552929/f32814a2-d296-13b2-9ff9-46ad5db86427.png)

これでQtWebAssemblyのビルドができるようになります。

# 参考
https://doc.qt.io/qtcreator/creator-setup-webassembly.html
https://wiki.qt.io/Qt_for_WebAssembly
https://doc.qt.io/qt-5/wasm.html
javascriptの知識ゼロからvue.jsで業務がこなせるようになるまでのロードマップ 

プログラミング未経験からベンチャー企業に入社して半年の自分がvue.jsを実務で使えるようになるまでの学習手順について紹介します。vue.jsを初めて使った時ってmethods?computed?何それ？って状態だと思うんですよ。そういう初歩的な疑問をいち早くなくせる人が1人でも増えればいいなーと思ってます。

## 前提知識
・エディタが使える(vscodeとか)
・HTML+CSSでコーティングがある程度できるレベル

## 目標
vue.jsを使って[このサイト](https://bang-dream.com/)のような感じで作成できるようにする

# ①[Progate](https://prog-8.com/languages/es6)
javascriptを初めて触るならまずここから。
基本的にはカリキュラム通り進めればいいんですが、**個人的には3章の関数を学ぼう!までを理解できればいいかなーと。**
理由は4章以降はクラスの概念とかファイルの分け方などブラウザに表示させる内容とは関係ないので人によっては学んだ感じがしないんですよね。最初はコードを書いたら色が変わった！動いた！っていう体験をした方がモチベーションは上がるのではないでしょうか？そのため3章までは頑張って理解して4章以降は流し見でいいと思います。

# [②確かな力が身につくJavaScript「超」入門 第2版](https://www.amazon.co.jp/dp/B07Y3FJ885/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
javascriptの概念がなんとなくわかった所でもう少し深堀り。
色んな本も見てきましたがカラフル、わかりやすい、サンプルコードつきの3拍子でこの本をおすすめします。
何よりコードを書いたらすぐブラウザに表示されるので勉強してて楽しいです。

# ③HTML + CSS + javascriptを使ったサイト作成
ここで実際にアウトプットしてみましょう。
何作っていいかわからない！という人は模写でも大丈夫です。
[GODIVA](https://www.godiva.co.jp/#)のマウスを重ねたらメニューが出るぐらいで大丈夫だと思います。
![スクリーンショット 2020-12-19 8.58.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840696/bd4b18d4-500c-1484-64ba-6e4ecb97cb49.png)

# [④いちばんやさしい Vue.js 入門教室](//www.amazon.co.jp/いちばんやさしい-Vue-js-入門教室-大津-真-ebook/dp/B07Q7ZJLSW/ref=sr_1_8?__mk_ja_JP=カタカナ&dchild=1&keywords=vue.js+入門&qid=1608336148&s=digital-text&sr=1-8)
javascriptの知識がある程度身についたらvue.jsにシフトしましょう。
vue.jsの本いろいろ読みましたがこの本が一番わかりやすかったです。
なぜならサンプルコード1行1行丁寧に書いてるからです。
他の本だといきなりライフサイクルフックなど難しいワードが出てくるので挫折してしまう可能性があります。

# ⑤vue.jsを使ったサイト作成
Vue CLIを使って実際にサイトを作成。
ニュース一覧などをv-forで繰り返し表現できるとGOOD！
**vue.jsの理解を深めるためcssのhoverやfocusといった擬似要素は封印してみましょう。**
実際に自分は[このサイト](https://bang-dream.com/)を参考に作成しました。

# Q&A

### サイト作成で挫折した
いい証拠です。足りない知識がわかっているならググるかインプットし直しましょう。それでも挫折しそうなら作成するサイトのレベルを下げましょう。勉強は義務ではないので長続きしなければ意味ありません

### 他におすすめの教材はないの？
javascript、vue.jsも何冊か本読みましたが2冊目以降はあまり意味なかったなーと思います。
インプットする時間をいち早くアウトプットに回しましょう。

さて、続きまして、アルサーガパートナーズ Advent Calendar 2020 24日目の記事は @miumi さんの学習メンタル術です。:tada: