OmniAICreator/Qiita-1.07M huggingface dataset:
オンライン授業（会議）のスクリーンショットを簡単にPDFにまとめる方法


# 概要

オンライン授業での板書・資料のスクリーンショット（キャプチャー）・録画で
膨大に増えてしまった画像の管理に困っていませんか？
（オンライン会議やオンラインイベントでの資料のキャプチャ画像も！）

キャプチャ画像を１枚ずつノートアプリやPowerPointに貼って管理するのは時間もかかるし面倒ですよね・・・

> そこで、**Adobe Acrobat**を使えば
 **<font color="red">画像を複数枚選択するだけで簡単に１つのPDFファイルにまとめられます</font>**

以下、その紹介です
（※オンライン授業やオンラインイベントの資料のキャプチャーは、 著作権に十分気をつけた上で**許可を得てから**行いましょう）

## <font color="gray">環境</font>
- パソコンがあれば大体OK
- 使用するAdobeAcrobatはPC用ソフトのため、スマホやタブレットには今回紹介する方法は対応していません。<br>
<font color="gray">（スマホやタブレットでご希望の方はアプリ版Adobe Acrobat Readerでできるとの噂です。~~できたら教えてください~~）</font>

#  複数の画像を１つのPDFファイルにまとめる方法

1. まずはAdobeに登録して**Adobe Acrobat**をインストールしてください

2. 次にAdobe Acrobatを開いて**ツール**から**ファイル結合**を選択して開きます
![S__12001286.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532035/ca786503-d942-0a29-15ee-39b8e2b949af.jpeg)




3. **ファイルを追加**より結合したい画像を複数選択
 <font color="orange">ポイント</font>
・ まとめたいキャップチャー画像は同じフォルダ内に保存
・ まとめたい順番に画像の名前を**１から番号を振って保存**しておく
→　画像を結合する際は、１枚目を選択してそのあと上から順にShift＋下矢印キーを押すだけで一気に複数選択できます
![S__12001288.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532035/6fb5e5fb-5405-7034-16d7-b85afd0183da.jpeg)

![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532035/c51277ff-439d-e404-50aa-b6a8ba6b03ee.jpeg)

４. そして**結合**をクリックします
![S__12001284.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532035/49f42ad3-bdf2-9e95-4029-29f9429db9ac.jpeg)


５. しばらくするとPDFに変換されます

６. 変換されたPDFを指定のフォルダに任意の名前で**保存**すると完了です
![S__12001285.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532035/9fc3eeb5-d46e-01f5-b523-f0b029892103.jpeg)

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532035/8e488dd7-f250-8933-dfb5-1e1002ef1a3e.png)

以上で、**複数の画像を１つのPDFファイルにまとめることができました**。<br>
それでは、よいお家タイムを〜

## AdobeCCコロナの影響により教育機関に無償提供に関する記事
[アドビ、新型コロナウイルスの影響を受けた世界中の教育機関の自宅学習をサポート ～Creative Cloudツールへの自宅からのアクセス機能を2020年5月31日まで無料提供～](https://blogs.adobe.com/japan/corp-adobe-enables-distance-learning-globally/)

噂では2020年7月まで無償提供期間が延長されるとのことです。噂では
(この記事は2020年5月14日時点の内容です)
[WordPress]サイト画像のWebP化はEWWW Image Optimizerプラグインが超簡単だった

![webp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593842/1345fbcd-800e-cc21-0335-85d81c078944.jpeg)

https://myscreate.com/webp-ewwwio/
Git/GitHub(CodeCommit)超最低限のコマンドメモ

## 記事の目的

GitやGitHub（CodeCommit）を初めて使う人向けの超最低限のコマンドのメモです。
チーム開発で使用をするときにかなり重要であるし、知っておかないとまずい要素でもあります。

## 流れ

だいたい以下の流れでチーム開発します。

+ 作業ブランチ作成
+ 作業する
+ ステージング
+ ローカルにコミット
+ リモートにプッシュ
+ プルリクエスト
+ 承認
+ リモートのmasterにマージ
+ ローカルのmasterにプル
+ ローカルの作業ブランチを削除

## 作業ブランチ作成

以下コマンドで現在のブランチから新しいブランチが作られる。
基本masterブランチを最新にしmasterブランチから新しいブランチを作るのがよいと思う。

```
git checkout -b <作業ブランチ名>
```

## 作業する

ソースを編集する。

## ステージング

作業完了したらステージに乗せる。

```
git add .
```

## ローカルにコミット

ローカルにコミットする。
リモートにプッシュするまでに何回コミットしても大丈夫です。

```
git commit -m "コミットコメント"
```

## リモートにプッシュ

リモートにプッシュする。

```
git push origin <作業ブランチ名>
```

## プルリクエスト

GitHub(CodeCommit)上でプルリクエストする。
注意点は何に何をプルリクエストするかを間違えないこと。
ここでは[master←作業ブランチ]になります。


## リモートブランチをローカルブランチに落とす（レビュワー）

```
git checkout -b local_branch_name origin/remote_branch_name
```

## 承認

承認をもらう。
承認ルールをつけることができます。最低でも何人とかこの人の承認は必ず必要とか。

## リモートのmasterにマージ

承認がもらえれば、リモートのmasterにマージする。
ついでにリモートの作業ブランチを削除する。

## ローカルのmasterにプル

ローカルのmasterにプルする。

```
git checkout master
git pull origin master
```

## ローカルの作業ブランチを削除

ローカルの作業ブランチも不要になるので削除

```
git branch -d 作業ブランチ名
```

ローカルにあるリモートブランチも削除

```
git fetch -p
```

## まとめ

チーム開発する上での超最低限のコマンドをまとめました。
この他にもコンフリクトとか超怖いことが起きると思いますが、とりあえず最低限の使い方はこれくらい知っていれば大丈夫かなと思います。（ダメかも・・・）

間違っていたり、これはないとだめなやつとかあればコメントください。
AtCoder Stalkerを支える技術

##AtCoder Stalkerとは
AtCoder StalkerはAtCoderのユーザーが精進した時にそれをLINEで通知してくれるサービスです。
LINEのMessagingAPIとAWSのLambdaを用いて作りました。


このようにLINEで誰かが精進した際に自動でお知らせしてくれます。
![通知のコピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490805/d901ad42-06e2-bbc4-ab9b-3387bf180831.jpeg)

##主な機能
- ストーキングリストへの登録
- ストーキングリストの削除
- 現在登録しているユーザーの取得
- LINEへの精進量通知

##システム構成

![システム構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490805/f59b5c5b-5d9b-4b51-2d65-798275880e35.png)


システム構成図は上記の通りとなっています。

LINE MessaginAPIではユーザーの行動に応じてWebhookイベントを飛ばすことができます。

WebhookイベントをAPI Gatewaiで受け取りそれをトリガーとして①のLambdaを実行します。

①のLambdaでは以下のことをやっています。

- ストーキングリストへの登録
- ストーキングリストの削除
- 現在登録しているユーザーの取得

ストーキングリストの登録はユーザーからAtCoderIDを含むリクエストを受信した際に、その情報をDBに登録しています。
登録の前にあらかじめDBを確認しており、すでに登録されている場合は削除が行われます。

また登録する際には、そのAtCoderIDが存在するか判定する必要があります。これはAtCoderの公式サイトのユーザーページがあるかどうかで判定しています。(例：https://atcoder.jp/users/Zaurus)

現在登録しているユーザーの取得はユーザーから```リスト```とLINEにメッセージが送られた場合に行われます。DBから現在ストーキングリストに登録してある情報を返します。

②のLambdaと③のLambdaは精進量をLINEに通知するために使用されます。
この関数はCloudWatchで定期的に実行されます。

②ではまず、AtCoderのAC数を取得します。この際、既に格納されていた値も参照しており、増加分がそのユーザーの精進量ということになります。AC数の取得はAtCoderProblems様のAPIをお借りしています。

②で取得したAC数と増加分、2つの値を③のLambdaへ渡し、LINEにpushメッセージを送信しています。

##おわりに
AtCoder Stalkerで使用した技術を説明しました。
詳しいサービスの内容は[こちら](https://note.com/zaurus/n/n3ca56c3305c7)で説明しています。


もし興味があればぜひ使ってみてください！
以下LINEの友達登録のリンクとQRです。

https://line.me/R/ti/p/@381fkvdg
![AtCoder_Stalker_prd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490805/8d512cdd-897a-47ed-efe1-b5b381b6d638.png)


コメントや要望、不具合やバグなどがありましたら、お手数ですが[twitter](https://twitter.com/zaurus_yusya)のDMまでご連絡をお願いいたします。

####Reference
https://atcoder.jp/
【Vue.js】v-ifと$refsによるTypeErrorの対処法

`v-if`を設定したコンポーネントに対して`this.$refs`で要素を取得しようとするとunderfinedになります。

以下、具体例と対処法です。
開発環境は`Vue.js 2.6.11`です。

## コード

例は適当です。最低限の部分しか書いていません。

```vue
<template>
  <div>
    <!-- 編集部分 -->
    <status-edit
      v-if="isEditing"
      ref="editArea"
    />
    <!-- ビュー部分 -->
    <status-view v-if="!isEditing" />
    <!-- ボタン -->
    <button v-if="!isEditing" @click="pushEdit">編集</button>
  </div>
</template>

<script>
import statusView from "./StatusView"
import statusEdit from "./StatusEdit"

export default {
  components: {
    statusView,
    statusEdit
  },
  data() {
    return {
      isEditing: false
    }
  },
  methods: {
    pushEdit() {
      // isEditingをtrueにすることで編集画面/表示画面を切り替える
      this.isEditing = true
      // statusEditコンポーネントの中のfetchDateメソッドを実行
      this.$refs.editArea.fetchData()
    }
  }
}
</script>
```

## エラー

```
[Vue warn]: Error in v-on handler: "TypeError: Cannot read property 'fetchData' of undefined"

vue.runtime.esm.js:1927 TypeError: Cannot read property 'fetchData' of undefined
```

「編集」ボタンを押すと、このようなエラーが出ます。
「`this.$refs.editArea`がunderfinedになっているから、`fetchData`なんてプロパティは読み込めないよ」という意味です。


## 原因

`v-if="false"`のとき、statusEditコンポーネントはページ上に存在していません。
そして、メソッド内の処理は非同期に行われます。
つまり、コンポーネントが描画されていない状態で`this.$refs.editArea`を取得しようとするので、当然underfinedになってしまうのです。


## 解決法

### async/awaitを使う

```js
methods: {
  async pushEdit() {
    await (this.isEditing = true)
    this.$refs.editArea.fetchData()
  }
}
```

`async/await`でコンポーネントが描画されるのを待ちます。その後、`$refs`でコンポーネントを取得してメソッドを実行します。

### v-ifをv-showに変える

```vue
<status-edit
 v-show="isEditing"
 ref="editArea"
/>
```

`v-show`は`display: none;`によって見えていないだけで描画はされているので、コンポーネント内のメソッドを実行することができます。


## 参考リンク

- [Vue.jsのv-ifとv-showの違い](https://qiita.com/Aqua_ix/items/61eac355f3c24d7676e1)
- [条件付きレンダリング — Vue.js](https://jp.vuejs.org/v2/guide/conditional.html#v-if-vs-v-show)
Ruby：インスタンス変数(attr_accessorとself)に関して

本記事はまだ更新の可能性があります。
※2020/5/14時点

---

・attr_accessorメソッド
・インスタンス変数(メソッド内で定義するself)

---

これらの関連性と整理を追求する記事です。

出発点はメソッド内で
@変数名やself.変数名などの使い方がややこしすぎて
わけがわからなくなってしまったので始めています。

各種の初心者用説明サイトなどでは個別には説明されているものの
両方を混ぜ込んだコードでの説明はあまり見つけられませんでしたので
ここで自分の備忘録としても記載したく思います。


本記事は、なんとなく整理ができた成果物としてのコードを載せております。

それぞれの考察に関しては

###[attr_accessorメソッドについて](https://qiita.com/fumi1011/items/bfe585d726f9a8c92061)

###[メソッド定義の中におけるselfについて](https://qiita.com/fumi1011/items/484a4366ca424e06345e)


上記の2つの記事を参照ください。

混ぜ込んだコードとコンソールでの吐き出しを順に記載します。

```ruby

class Alcohl
 attr_accessor :name
 def initialize(hobby)
  @hobby=hobby
 end 
 def my_hobby
  puts "私の好きなのは#{@hobby}"
  puts "でも大切なのは#{self.name}"
 end 
 def wisky
  "飲みづらいのは#{@hobby}"
 end 
end
 
alc=Alcohl.new("酒")
alc.name="オリオンビール"
alc.my_hobby
alc2=Alcohl.new("ウイスキー")
puts alc2.wisky

```



```ruby
ec2-user:~/environment/ruby_lessons $ ruby hello.rb
私の好きなのは酒
でも大切なのはオリオンビール
飲みづらいのはウイスキー
```

以上です。

コードとしては汚いのかもしれませんが(それすらわからないのですが)、
とりあえず網羅性を意識しました。

いったん、こちらで整理とします。
AIトークの設計(フロント概要)

#注意点
今現在開発中のもののため、内容を変更する可能性があります。
#使用技術
* 言語
 * JavaScript 
* フレームワーク
 * React
 * React Bootstrap 
* 利用外部サービス
 * AWS(S3,Amazon Polly) 
 * Netlify
 * Nody API

#サービスの流れ
![u22-2020仮-ページ1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500157/d0e12572-ff8e-f084-8cdf-1ce18e75e253.png)

#画面設計
* PC画面(Reactのコンポーネントクラスが入っています)
![u22-2020仮-ページ2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500157/8182c694-50b9-8f69-c668-a83af3e104ed.png)

* スマホ画面z
![u22-2020仮-ページ3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500157/9fbc162d-a70b-1a65-3f80-f930dd676dbd.png)



#クラス図
初めてまともなクラス図を描いたので、矢印の使い方を間違っている可能性があります。
また、クラス解説の内容と矛盾してる可能性があります。
![u22-2020仮-ページ4 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500157/9dadc2fd-1c0b-2960-2fc6-ca75376a9a91.png)


#クラス解説
###**LiveTalkPage**
* 概要

"/livetalk"に遷移するページそのものである。そのため、この中に様々なコンポーネントを集約させる。


###**myMessageForm**
* 概要

ユーザーがAIに対して、メッセージを送るためのフォームである。
メッセージの送り方は、テキストボックスに入力するか、録画ボタンを押して、マイクを通して音声をテキストに変換する方法である
![u22-2020仮-myMessageForm　テキストパターン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500157/e95c4698-172e-b8d7-eb27-d813da4d88d3.png)

###**SpeechBubble**
* 概要

AIが最後に喋った台詞を記載する

![u22-2020仮-SpeechBubble (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500157/a123602a-5be3-dafb-d9b1-64edf1f4ae7f.png)

###**TalkingLog**
* 概要

AIとユーザーの会話ログをスクロールバーの末尾に新しいものを表示

実際にログ1つ分の表示の仕方

```html:表示
 <p>私：元気？</p>
```

表示するための配列の構造

```javascript:配列の構造
 [{who: '私',speech:'元気？'},{Who: 'AI',speech:'元気？'}];
```

![u22-2020仮-TalkingLog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500157/bd71f595-abf4-90f5-b174-ccfabee67d9b.png)

###**Live2DController**
* 概要

Live2Dを操作するコントローラー。音声と再生させながら、口パクモーションを再生させる!
Live2Dの操作を参考にするもの：https://docs.live2d.com/cubism-sdk-tutorials/sample-build-web/?locale=ja

![u22-2020仮-Live2DController.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500157/f671c8f6-11cc-0fa9-60ca-968cda1ace5f.png)
AWS Config カスタムルールを使用してRDSを監視する

# 概要

AWS Config カスタムルールを使用してRDSを監視したい
更に言えば特定のインスタンスタイプ以外は違反としたい

# 前提

## AWS Config有効化

こちらを参考にしました。

[CloudFormationによるAWS Configの有効化 - Qiita](https://qiita.com/akashima/items/2cde33863c923c41ed8f)

# 本題

## lambda関数

blueprintのconfig-rule-change-triggeredをベースに判定部分を修正します。

```typescript

function evaluateChangeNotificationCompliance(
  configurationItem: {
    configuration: {
      dBInstanceClass: string | null;
      readReplicaSourceDBInstanceIdentifier: string | null;
    };
    resourceType: string;
  },
  ruleParameters: { desiredInstanceType: string | null }
) {
  checkDefined(configurationItem, "configurationItem");
  checkDefined(
    configurationItem.configuration,
    "configurationItem.configuration"
  );
  checkDefined(ruleParameters, "ruleParameters");
  // 実チェックの部分
  if (configurationItem.resourceType !== "AWS::RDS::DBInstance") {
    return "NOT_APPLICABLE";
  } else if (
    ruleParameters.desiredInstanceType ===
    configurationItem.configuration.dBInstanceClass
  ) {
    return "COMPLIANT";
  }
  return "NON_COMPLIANT";
}
```
ロールは
・AmazonRDSFullAccess
・AWSConfigRulesExecutionRole
・CloudWatchLogsFullAccess
を雰囲気で追加しています。

## AWS Config カスタムルール

ルール追加
カスタムルールの追加

名前：適当
トリガータイプ：設定変更
変更範囲：リソース、RDS:DBInstance
ルールのパラメータ
キー：desiredInstanceType
値：db.t3.micro（任意のインスタンスタイプ）
# 実行

AWS Configのコンソールから「再評価」を実行
評価結果を確認
AWS Educate のアカウントで AWS マネジメントコンソールにログインする

特に書いておくようなことではないかもしれませんが、ひと手間あるので一応。

まずは、 [AWS Educate](https://www.awseducate.com/student/s) にログインしてください。
そのあと、画面右上の **AWS Account** をクリックして、AWS Educate Starter Account を申請してください。すでに申請済みの場合は、ここは無視してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628276/b2e4d541-bfd4-805e-be70-409ec99a5e05.png)

申請したあと、再読み込みすれば、以下のような画面になるので、**AWS Educate Starter Account** をクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628276/9b2b9762-6549-e51e-6c7d-28f07b5c63f0.png)

あとは、 **AWS Console** をクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/628276/41bd0fbd-8312-98e7-3375-f05f381991cc.png)

以上です。

AWS マネジメントコンソールは、一定時間でログアウトされますが、もう一度上記の手順を踏めば再ログインできます。少し面倒ですね。

## 関連記事

- [Django+PostgreSQLのアプリケーションをAWSのElastic Beanstalkにデプロイする](https://qiita.com/Chrg/private/d0c6fa829040613d1bb6)
rosbridge overview

## rosbridge

### Reference

- http://wiki.ros.org/rosbridge_suite
- https://github.com/RobotWebTools/rosbridge_suite

### overview

![rosbridge_overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112819/adea2246-7d38-6418-1431-89631e681b52.png)

rosbridge is to connect ROS world to other world such as websocket, so that application in Non-ROS world can communicate ROS world.

### message protocol

[ROSBRIDGE_PROTOCOL](https://github.com/RobotWebTools/rosbridge_suite/blob/groovy-devel/ROSBRIDGE_PROTOCOL.md)

rosbridge is constructed with major two parts, one is protocol and the other is implementation to convert.

rosbridge uses json format protocol to interact with,

```
{
  "op": "subscribe",
  "topic": "/cmd_vel",
  "type": "geometry_msgs/Twist"
}
```

### Examples

unfortunately mainline does not have good example but there is one as following.

https://github.com/nickvaras/rosbridge-websocket-examples

### Note

- rosbridge is really simple design and does not do much things, but good enough to bridge ROS world to the other side.
AWS EC2でcentosのAMIを使用する(python3/ffmpeg/dav2fsインストール)

# はじめに

これまで、AWS EC2をお試しする際、AmazonLinux2ばかりを利用していましたが、極力一般的なパッケージ導入や手順を使いたく、CentOSを導入してみました。

なぜCentOSかというと、仕事ではRedhatLinuxも扱うこともあったり、AmazonLinux2も触ることを考え、OSとして類似のものがよいだろう・・・。という理由です。

# 導入

まずはAMIから素のOSを起動するのですが、CentOSのサイトにも最新のAMI情報がはっきり書いてありません・・・。

先人のお知恵を拝借し、AWS CLIで確認します。

```
aws ec2 describe-images --owners aws-marketplace \
--filters Name=product-code,Values=aw0evgkw8e5c1q413zgy5pjce \
--query "reverse(sort_by(Images, &CreationDate))[:5].[CreationDate, Description, ImageId]" \
--region ap-northeast-1
```

最新のAMI IDをメモしておきます。

```
[
    [
        "2020-03-09T21:54:50.000Z",　←最新
        "CentOS Linux 7 x86_64 HVM EBS ENA 2002_01",
        "ami-06a46da680048c8ae"　←このAMIを使用する。
    ],
    [
        "2019-01-30T23:44:22.000Z",
        "CentOS Linux 7 x86_64 HVM EBS ENA 1901_01",
        "ami-045f38c93733dd48d"
    ],
...略
```

あとは、EC2起動時にAMIを指定するだけですが、初回利用時にはMarketplaceの利用許諾確認があります。

# 基本設定として変更した点

## timezone、locale、keymap
```
$ sudo timedatectl set-timezone Asia/Tokyo
$ sudo localectl set-locale LANG=ja_JP.UTF-8
$ sudo localectl set-keymap jp106
```
## yum update
とりあえずパッケージの最新化、基本的なパッケージも入れておく。

```
$ sudo yum update -y
$ sudo yum install -y unzip wget bind-utils

[参考] yumコマンド
　入れているものの一覧
　yum list installed

　リポジトリにあるリスト
　yum list available 
```
## python3

デフォルトで導入できるパッケージはpython2の模様。
python.x86_64 2.7.5-86.el7

https://qiita.com/shu1rou/items/3fac0fc0fcdafec051b7
https://weblabo.oscasierra.net/python3-centos7-yum-install/

このあたりを拝見し、「IUS」とやらのリポジトリから導入する。

```
$ sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
$ sudo yum install -y python36u ;  python3 -V
Python 3.6.8
```
## ffmpeg

とある目的の為に導入。こちらは「nux」とやらのリポジトリにある。

```
$ sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
$ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
$ sudo yum install -y ffmpeg

$ ffmpeg -version
ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers
(略)
```
## Webdavをマウント(davfs2)

```
$ sudo yum install -y davfs2
```
【Unity】スクリプトでLoadSceneがうまく動かないと思ったら気をつけること


![](https://cdn-ak.f.st-hatena.com/images/fotolife/f/ferrari458tukapai/20200514/20200514225654.png)

こんな実装しているんだけど肝心のGame_Sceneが出ないような感じになったとき

## BuildSettingにシーンが入っているかを確認する。

![](https://cdn-ak.f.st-hatena.com/images/fotolife/f/ferrari458tukapai/20200514/20200514225718.png)


File>BuildSettingを開く

![](https://cdn-ak.f.st-hatena.com/images/fotolife/f/ferrari458tukapai/20200514/20200514225737.png)


ロードできるシーンはこの辺に書いてあるので対象としているシーンがない場合はここにドラッグアンドドロップで追加する。

development/Starry_Hill
Pythonで浮動小数点数を2進数に変換する方法

最近，表題の件で相談を受けることがしばしばありましたので，[Pythonのテキスト](https://qiita.com/KatsunoriNakamura/items/b465b0cf05b1b7fd4975)からの抜粋を上げておきます．
　
原理自体はどこの学校でも教わるのですが，実際にプログラムを書くとなると面倒に感じる方もおられると思います．
　
Pythonのmpmathライブラリを使用すると，とても簡単に，しかも高精度で浮動小数点数を2進数表現にすることができます．
　
[→抜粋部分(PDF)](http://www.k-techlabo.org/www_python/DEC2BIN.pdf)
RailsにBULMAでビューを作成するまでの手順



どうも！！
Railsで、オリジナルアプリ開発を始めた、プログラミング学習歴3ヶ月の初心者です。

##BULMAを導入するまでの経緯

CSSフレームワークのBULMAをRailsで使いたい！！！


「今のところJSを使わないので、BootstrapではなくてBULMAを使いたいな。」と思い立ち、
ビューで使用するまでの手順を模索していました。

BULMAの概要は以下を参照ください。
[BULMA](https://bulma.io/)

##具体的な手順

###gemをGemfileに記載する

```ruby:Gemfile
gem "bulma-rails"
```

###bundle install

```ruby:ターミナル

$ bundle install

```

###application.scssでimport

```ruby:application.scss
@import "bulma";
```
app/assets/stylesheets/application.scss(application.cssから変更してます。)
にBULMAをインポートする。

###application.html.erbを編集する
```ruby:application.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title>ShitsumonWa</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <#以下の行を忘れずに追加する >
    <%= stylesheet_pack_tag 'application' %>
    
  </head>

  <body>
    <%= yield %>
  </body>
</html>
```
app/views/layouts/application.html.erbに
**<%= stylesheet_pack_tag 'application' %>**を追加

##Bootstrapからの乗換の際に注意事項

```ruby:application.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title>ShitsumonWa</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
    
  </head>

  <body>
    <%= yield %>
  </body>
</html>
```
app/views/layouts/application.html.erb

**<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>**

ここの2行のままだと、
_**Sprockets::FileNotFound in コントーラー名#アクション名**_
というエラーが出て怒られるので、修正するのを忘れずに!!!!
原因が何かわからず、3時間ぐらいググり続けました...（本来ならこの時間でviewを作成できていた
）


##まとめ

BULMAをRailsで利用するまでの手順は、単純です。

Rails6以降、Bootstrapが少しめんどくさくなりました。
それでも、RailsにBootstrapを導入したい人もたくさんいると思います。
以下の記事が大変参考になりました。感謝です。
[Rails 6にjQueryとBootstrapを入れる](https://qiita.com/kazutosato/items/d47b7705ee545de4cb1a)

Rails6以降の変更点はこちらの記事が参考になりました。ありがたやです。
[Ruby on Rails 6の主要な新機能・機能追加・変更点]
(https://qiita.com/ryohashimoto/items/622c3bcfb3336cb9317e)

個人的には、
**①フロントで時間をかけるよりもしっかりバックエンドの機能実装に時間を使いたい**
**②実際に現役のバックエンドエンジニアの方が、現場で使用している**

上記の理由でCSSフレームワークにBULMAを導入することにしました。(あと使ってて純粋に楽しい。)
アプリ開発の際に、BULMAを導入している方の参考になれば、嬉しいです。


公式: >[BULMA start](https://bulma.io/documentation/overview/start/)
vagrantのコマンド

色々すぐ忘れるので個人的なメモ。

# プラグインインストール

よく使うプラグインのインストールコマンド
新しい端末を使うときくらいしか打たないのですぐに忘れてしまう。

```
vagrant plugin install vagrant-vbguest
vagrant plugin install vagrant-docker-compose
```

インストールされているのを調べるのには `list` 。

```
vagrant plugin list
```

アップデートは `update` 。

```
vagrant plugin update
```

# BOXの追加

単純な追加。

```
vagrant box add centos/7
```

バージョンを指定しての追加。

```
vagrant box add centos/7 --box-version 1804.02

# initでも同様。
vagrant init centos/7 --box-version 1804.02
```

バージョンは以下とかで調べられる。

https://app.vagrantup.com/centos/boxes/7

# BOXのUPDATE

`vagrant up` すると新しいバージョンがあるよ的なメッセージが出る事がある。
パッケージを更新したい場合は

```
vagrant box update --box ubuntu/bionic64
```

な感じで行う。
関連するもので、インストールされている一覧を表示は、

```
vagrant box list
```

削除したい場合は、

```
vagrant box remove ubuntu/bionic64
```

随時更新していきたい。
Ruby on Rails 環境切替の方法

プログラム勉強中です。自分の備忘録として投稿します。
# 環境切替の方法
テスト環境 (test)
開発環境 (development)
本番環境 (production) 

#####例） 本番環境への切り替え

```
$export RAILS_ENV=production
```
java.security.InvalidKeyException: Illegal key size or default parametersとなった時の対応方法


- 環境
    - Red Hat Enterprise Linux Server release 6.3 (Santiago)
    - java version "1.7.0_79"

# 事象 : 複合化する処理が動いたらInvalidKeyExceptionが発生した
ほかのサーバから送られてきたパラメータを複合化する処理が動いたらInvalidKeyExceptionが発生した

```bash
java.security.InvalidKeyException: Illegal key size or default parameters
        at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1011)
        at javax.crypto.Cipher.implInit(Cipher.java:786)
        at javax.crypto.Cipher.chooseProvider(Cipher.java:849)
        at javax.crypto.Cipher.init(Cipher.java:1213)
        at javax.crypto.Cipher.init(Cipher.java:1153)
...省略...
```

# 原因 : (Java8以下の場合)AES256bitの鍵長が使えないから
> Java では標準ライブラリの Cipher クラスを使えば、サードパーティのライブラリを使うことなく AES 暗号を扱うことができます。しかし、AES 暗号はアメリカの輸出規制の対象になっているらしく、標準では 128bit までの鍵しか扱えません。
> [Java 9時代のAES 256暗号 - Qiita](https://qiita.com/oohira/items/18e55207e92d3d1f83d2)

## 対応 : ポリシーファイルを入れ替える
1. [Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE Download](https://www.oracle.com/java/technologies/javase-jce-all-downloads.html)からJavaのバージョンに合ったzipファイルをダウンロードする
    - 今回はJava1.7なので`UnlimitedJCEPolicyJDK7.zip`をダウンロード
1. 解凍したディレクトリ内のjar(`local_policy.jar``US_export_policy.jar`)を配置するサーバへ転送する
1. Javaのインストールディレクトリを確認する
    - 当たり前のことだけど・・・同じバージョンが2箇所にあって最初間違えたディレクトリに配置したのでちゃんと書いた
    - [Javaのインストールディレクトリがわからなくなった時の探し方 - Qiita](https://qiita.com/ponsuke0531/items/eb27321a3a6a15b4836e)
1. `{javaのインストールディレクトリ}/jre/lib/security/`にある`local_policy.jar``US_export_policy.jar`のバックアップを取る
1. `{javaのインストールディレクトリ}/jre/lib/security/`に解凍したディレクトリ内のjarを配置する


```bash
# jarを配置するサーバへ転送する
$ scp -i /path/to/{秘密鍵}.pem /path/to/zip/UnlimitedJCEPolicy/*.jar ponsuke@{サーバ}:/home/ponsuke/
local_policy.jar      100% 2500    12.2KB/s   00:00
US_export_policy.jar  100% 2487    12.1KB/s   00:00

# サーバにログイン
$ ssh -i /path/to/{秘密鍵}.pem ponsuke@{サーバ}
Last login: Thu May 14 20:56:50 2020 from 10.0.1.10

# Javaのインストールディレクトリを確認する
$ printenv JAVA_HOME
/usr/java/default

# jarのバックアップを取る
$ cd $JAVA_HOME/jre/lib/security/
$ sudo mv local_policy.jar local_policy.jar.bak
[sudo] password for ponsuke:
$ sudo mv US_export_policy.jar US_export_policy.jar.bak

# 解凍したディレクトリ内のjarを配置する
$ sudo mv /home/ponsuke/*.jar .
$ ls -la | grep jar
-rw-r--r--   1 ponsuke appl  2487  5月 14 21:36 2020 US_export_policy.jar
-rw-r--r--.  1 root    root  2397  4月 11 03:55 2015 US_export_policy.jar.bak
-rw-r--r--   1 ponsuke appl  2500  5月 14 21:36 2020 local_policy.jar
-rw-r--r--.  1 root    root  2865  4月 11 03:55 2015 local_policy.jar.bak
```
Laravel6でauthを入れるときnpm run devで　ERROR in ./resources/sass/app.scss　が発生したら？

#前提
Laravel6.0でauthしようとして

```
npm install && npm run dev
```

でscss関連のエラーが出たとする。


#解決方法

①package.jsonファイルを開く
②ファイルの中をsass-loaderで検索する
③バージョンが８になっていると思うので、7に変更する。

```
"sass-loader": "^7.0.0",
```


④node_modulesを消す。

```
rm -rf node_modules
```

⑤いつもの

```
npm install
```
でnode_modulesを再インストールする。

#最後に

お役に立てたら嬉しいです。

#参考文献
https://syachiku.net/npm-run-dev-error/
Pyenvでアクティブなバージョンをanacondaから普通のPythonに変更する

## これまでの成り行き
最初にPythonに触れるときAnacondaを使う人も多いと思います。しかしAnacondaは環境を破壊するなど諸説あり、(参照: [Pythonインストール方法とAnacondaを使わない3つの理由](https://watlab-blog.com/2019/04/06/python-install/))やっぱり使うのはやめてGoogle colabなどに乗り換える人も多いと思います。
その時にアクティブなPythonのバージョンを切り替える必要があって、その手順がちょっと複雑だったので書いておきます。

## 結論
[glocalコマンドを用います。](#glocalコマンドでバージョンを切り替える)
切り替え先のPythonのバージョンがわかっていない場合は

```
$ pyenv versions
```
で現在のバージョンと切り替えたいバージョンを確認してから

```
$ pyenv global (切り替え先のバージョン名)
```
です。
「現在のバージョンとはなんぞや？」という人は順番に読み進めてもらえればと思います。


## インストール済み一覧の表示

```
$ pyenv versions
* system (set by /Users/yuri/.pyenv/version)
  3.7.2
  anaconda3-4.2.0
  anaconda3-5.0.1
```

*印の付いているsystemが今アクティブなバージョンです。
```/Users/yuri/.pyenv/version``` で指定されているとのことです。

そこで、そのファイルを見てみます。

```/Users/yuri/.pyenv/version
anaconda3-5.0.1
```

これですね。というわけで、このファイルを消すと、

```
$ rm -r /Users/yuri/.pyenv/version
$ pyenv versions
* system (set by /Users/yuri/.pyenv/version)
  3.7.2
  anaconda3-4.2.0
  anaconda3-5.0.1
```
systemになりました。
3.7.2を使いたい場合はさっきのファイルに3.7.2と書けばよいです。

## glocalコマンドでバージョンを切り替える
切り替え先のバージョンがわかっている場合、glocalコマンドを使えば一瞬で切り替えられます。
3.7.2に切り替えたいとしましょう。

```
$ pyenv global 3.7.2
$ pyenv versions
  system (set by /Users/yuri/.pyenv/version)
* 3.7.2
  anaconda3-4.2.0
  anaconda3-5.0.1
```
こうですね。3.7.2になりました。

## 終わりに
私も最初はAnacondaユーザーでPythonと言えばAnacondaだ！と思っていましたが、Anacondaにも色々と欠点があるみたいです。時間があったら今度詳しく調べて記事書きたいと思っています。今はGoogle Colabなどブラウザ上で実行できる便利なものがあるのでローカルで環境構築する必要に迫られない限りはそちらを使うのがいいかと思います。

## 参考
こちらを参考にさせていただきました。
[Pyenvの使い方](https://qiita.com/mogom625/items/b1b673f530a05ec6b423)
Railsのポリモーフィック関連付けのテストを考えてみた。

## なぜ今回の記事を書いたか。
Railsの場合、ポリモーフィック関連付けを行なった際に紐づくモデルに対して実装しなければいけないメソッドの強制が行われません。そのため、メソッドの定義を忘れた場合エラーが発生します。
ただ、実装する際に忘れるメソッドのテストを書くのは難しいのでは？　と個人的に思いました。
そのため、良し悪しは別として僕が実装したテストを記載します。

他に良い方法があれば是非教えてください！

## 実装したモデル
今回の記述に関係ない箇所に関しては省略しています。

``` app/models/notification.rb
class Notification < ApplicationRecord
  belongs_to :event, polymorphic: true
  ・
  ・
  ・
end
```

``` app/models/comment.rb
class Comment < ApplicationRecord
  has_many :notifications, as: :event, dependent: :destroy
  ・
  ・
  ・
  def notification_message()
    "#{self.user.name}によりコメントされました。"
  end
end
```

## 実装したテスト
ポリモーフィック関連付けに紐づくテストなので、Notificationのモデルテストに記載いたしました。

``` spec/models/notification_spec.rb
require 'rails_helper'

RSpec.describe Notification, type: :model do
  it 'Notificationと関連づいているクラスに対して必要なメソッドが定義されているか' do
    # 定数オブジェクトの一覧を取得。
    constants = Object.constants.map do |name|
      Object.const_get(name)
    end
    # Notificationモデルと紐づいているモデルを取得する
    models = constants.select do |c|
      # モデルクラスを絞り込む
      next unless c.class == Class && c < ActiveRecord::Base && !c.abstract_class? 
      # Notificationモデルが紐づいているか絞り込む
      c.reflect_on_all_associations.map(&:name).include?(:notifications)
    end
    models.each do |model|
      # 定義されたメソッドがあるかを確認する
      expect(model.method_defined?(:notification_message)).to be true
    end
  end
end
```
この実装を行う事で、自動的にポリモーフィック関連付けされたモデルに必要なメソッドが存在しているかを確認してくれる。これでポリモーフィック関連付けを行なった際にメソッド忘れは無くなります！

## 懸念点
- モデルの数が多くなった時にテスト時間が増えそう
- モデルテストで、他のモデルにメソッドがあるか確認するのは良いのか？
- テストでここまで処理を書くのは良いのか？
- ポリモーフィック関連付けで関連づいたモデルに対してメソッドの強制を行う方法が他にあるのではないか？
- 継承やmoduleを使用した方が良いのではないか？

## 参考にしたサイト
- https://kitak.hatenablog.jp/entry/2013/11/10/195254
Javascript 現在の日付を「YYYY年MM月DD日」の形で取得

#日付を文字列として取得
Javascriptで日付を取得しても、画面に表示したい時に困ることが多い。
と言うわけで、こんな形で取得すれば困ることはないかと。

```javascript
// 現在の月を「2020年5月10日」みたいな形で取得
  getMonthString() {
    let dt = new Date();
    let y = dt.getFullYear();
    let m = ('00' + (dt.getMonth() +1 )).slice(-2);
    let d = ("00" + dt.getDate()).slice(-2);
    const result = y + '年' + m + '月' + d + '日';
    console.log(result);
    return result;
  }
```

[こちら](https://web.plus-idea.net/on/javascript-date-string-convert/#Date_-gt_String_-gt)が参考になりました:blush:
windowsでyolov4を「とりあえず」動かす

本ページではyolo-v4のチュートリアルである、有名なdog.ipgの推論を行うまでを記述しています。osはwindowsを使います。また、英語が苦手なので無駄な手順を踏んでいることもあるかもしれません。気になる人はhttps://github.com/AlexeyAB/darknet より自分で行ってみてください。　
dog.jpg　↓↓↓
![dog.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512849/9b46ff0c-032b-a346-a40a-857b9d719f21.jpeg)

#初めに
opencvやvisual studioなどの基本的なものはできているものとします。できていない人はそちらを調べてください、やり方はv3までと一緒です。
#gitからcloneする
darknetを構築したい場所で以下のコマンドを打ってcloneしてください。

```
git clone https://github.com/AlexeyAB/darknet
```

#cmakeを行う
先ほどcloneしたdarknetフォルダの中にあるbuildの中に移動し、cmakeを行ってください。以下コード。

```
cd build
cmake ..
```

cmakeがコマンドとして認識していない方はcmakeを行うところから始めてください。cmakeは簡単なので頑張って構築してください。
#ビルドしていく
buildフォルダの下に2個目のdarknetがあるので、その中にある

* darknet.sln
* yolo_console_dll.sln
* yolo_cpp_dll.sln

この3つをvisual studioを使いビルドしていきます。no_gpuが付いたファイルがあると思いますが、さわったことがないのでどうなるかはわかりません。名前から察するにcpuに切り替わるのかと(-_-;)私はgpuで行うのでgpuのままやります。
#各.slnのビルド方法
darknet.slnを例に挙げて行います。他2つも同じ方法で行えます。
darknet.slnをvsで開くとこのような画面になると思います。
![無題_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512849/3aa18fdf-cf55-9504-a5e5-3bb3ace47867.jpeg)
手順

* 右上のソリューションエクスプローラー内にあるdarknetを右クリック
* ソース管理から自身のcudaを選択
* 再度右クリック、一番下のプロパティを選択
* 右上の構成マネージャーを開き、アクティブソリューションとプラットフォームをreleaseとx64に変更
* プロパティページに戻り、c/c++からインクルードディレクトリにopencvとcudaのincludeファイルがあるpathを追加(cudaのincludeファイルはwindows→programfiles→nvidia gpu→各バージョンの中にincludeファイルがあります。opencvは自力で頑張ってください)
* include pathを追加したらリンカーを開きます(左にあります)。その中に追加のライブラリディレクトリがあるのでこちらにはopencv、cudaのlibファイルのpathを追加してください
* 適用を押します
* darknetを右クリック後ビルドを押します(ここで何も動かなかったりする人はリビルドを何回か押すと動くかもしれません)。

以上を行い、x64以下にdarknet.exeができていたら成功です。

* darknet.sln→darknet.exe
* yolo_console_dll.sln→yolo_console_dll.exe
* yolo_cpp_dll.sln→yolo_cpp_dll.dll

以上のものが作られます。
ここまでくればほぼ終わりです。
#推論してみる
x64のフォルダ内で以下のコマンドを実行します。

```
python darknet.py
```
このコマンドでデフォルトのdog.jpgを推論します。
結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512849/a95f5e73-b31a-f341-8c70-500188886c38.png)
このような結果が出てきます。対応表を作ってないのでbboxのみですね。別の画像を行いたい場合、darknet.pyを編集することで行えます。
#この後は
学習をさせる、これに関しても行いたいと思っているので学習が完了した時点で記事が増えていないようであれば書きます。

#感想
日本語の記事が少ないというだけで難易度が高く、大変でした(;^_^A
学習もちゃんと行えるようにしたいですね。英語が苦手な私がかろうじてできたものなので信用性はボロボロですが（笑）気になる人はgithubから自分で行ってみてください。たぶんいらないことを多くやってる気がします。読みづらくてすみませんm(_ _"m)
PowerQueryで最新のレコードを抽出する

# はじめに
Power BI でこんなテーブルから各品名の最新の価格を抜き出したいとおもったところ、良い方法が見つからず意外と手間がかかってしまいました。忘れてしまいそうなのでメモ書きです。もっと簡単な方法がありそうなものだけど見つけられない&思いつきませんでした:disappointed_relieved:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/5143be55-ed9b-b34a-fc08-13b1d15a9526.png)

# どうやったの？
PowerQueryにテーブルを読み込む。このなかのマーキングしたレコードが残るようにしたい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/a552a3c9-5017-13cc-1f56-95cce51d65a6.png)

クエリを複製する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/83c204fb-49c8-e522-6056-ed0321363212.png)

品名でグループ化する。新しい列には「最大」「日付」を指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/12e51706-bba7-3c3a-9591-956dc4f35424.png)

元のテーブルとマージする。照合列は複数選ぶことができるので「最新日付」と「日付」、「品名」と「品名」とを対応させる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/3b671a9c-7408-7cd8-a18a-04e6dfc2c1b1.png)

マージ結果を展開する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/ef283d43-b7f3-8701-b763-e7f07d71f9e3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/7a3b3106-d262-a42a-b5bf-f723a8998450.png)

列の順番を入れ替えて完成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/939a6dc8-2e20-20d8-8835-9838ee478da6.png)

#まとめ
できることはできたのですがもっと少ない手数で簡単にできる方法がないものでしょうか:sob:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433170/5f54a064-3d9d-7344-3f7d-bb1d64d6e56c.png)
Kubernetes Secretsについてのメモ


Kubernetes Secrets の Secret名とデータキーの制限を調べた時のメモ書き。

## 内容

### Secret名

#### 一意性

> name: a string that uniquely identifies this object within the current namespace

[metadata](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#metadata)にNamespace内で一意であると記載がある。

#### 制限

> The name of a Secret object must be a valid DNS subdomain name.

[creating-a-secret-using-kubectl](https://kubernetes.io/docs/concepts/configuration/secret/#creating-a-secret-using-kubectl)に記載がある。

> * contain no more than 253 characters
* contain only lowercase alphanumeric characters, ‘-’ or ‘.’
* start with an alphanumeric character
* end with an alphanumeric character

DNS subdomain name とは [dns-subdomain-names](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names)にある通り、上記の制限がある。

### データキー

> The keys of data and stringData must consist of alphanumeric characters, ‘-', ‘_’ or ‘.'.

[creating-a-secret-manually](https://kubernetes.io/docs/concepts/configuration/secret/#creating-a-secret-manually)に記載がある。

## 参考

* [Kubernetes 上で Credentials を扱う](https://tellme.tokyo/post/2018/08/07/kubernetes-configmaps-secrets/)
* [KubernetesのConfig＆Storageリソース（その1）](https://thinkit.co.jp/article/14139?page=0%2C1)
expo-cliのinstallでpermission deniedエラー

#前提
<code>npm install expo-cli --global</code>でexpo-cliを使用できるようにインストールしようとした時のお話

mac

#本題
<code>npm install expo-cli --global</code>で下記のようなpermission deniedのエラー発生。

```terminal.
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for @expo/ngrok-bin-freebsd-x64@2.2.8: wanted {"os":"freebsd","arch":"x64"} (current: {"os":"darwin","arch":"x64"})

npm ERR! code EACCES
npm ERR! syscall access
npm ERR! path /usr/local/lib/node_modules
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!  [Error: EACCES: permission denied, access '/usr/local/lib/node_modules'] {
npm ERR!   stack: "Error: EACCES: permission denied, access '/usr/local/lib/node_modules'",
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules'
npm ERR! }
npm ERR! 
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR! 
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/ユーザー名/.npm/_logs/2020-05-14T12_14_47_487Z-debug.log
```

#解決方法
nmpの公式サイトを見ると解決！

```
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
```

もう一度、<code>npm install expo-cli --global</code>実行！

<code>expo --version</code>でインストールできているか確認！

expo-cliでできること
JavaScriptのコードをビルドする
本番公開の際にpublishする
Javaのインストールディレクトリがわからなくなった時の探し方

サーバでいろいろな事情によりインストールディレクトリを見失ってしまった。

# 方法1 : 環境変数の`JAVA_HOME`を見る
今使っているバージョン(javaコマンドで動くバージョン)ならこれでOK。

```bash
$ printenv JAVA_HOME
/usr/java/default
```

# 方法2 : 環境変数の`PATH`を見る
今使っているバージョン(javaコマンドで動くバージョン)で`JAVA_HOME`がない時はこれでOK。

```bash
$ printenv PATH | sed -e 's/:/:\n/g' | grep java
/usr/java/default/bin:
```

# 方法3 : `yum`でインストールしたパッケージ名で探す
いくつもバージョンをインストールしていることはよくあること。
`JAVA_HOME`に設定していないバージョンのJavaを探したいとき。

参考 : [yumでインストールしたパッケージのインストール場所を調べる - 学生時代に頑張ったことが何もない](https://muupan.hatenadiary.org/entry/20130311/1362939424)

```bash
# バージョンからインストールしたパッケージを調べる
$ yum list installed | grep java-1.7
java-1.7.0-openjdk.x86_64  1:1.7.0.151-2.6.11.0.el6_9
java-1.7.0-openjdk-devel.x86_64

# インストールディレクトリを確認する
$ rpm -ql java-1.7.0-openjdk-devel.x86_64 | grep bin
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.151.x86_64/bin
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.151.x86_64/bin/appletviewer
...省略...
```
【Windows】Javaのコードが文字化け

JavaのコードをWindowsのコマンドプロンプトで実行すると文字化けしてしまう問題。
やり方が2通りあるので紹介します!!
![471c1995a62dc4b007e3ab8e72e6e08c[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610089/a8a496a8-3420-a975-ba27-5a006d163917.png)

# なぜ起こるのか
テキストエディタとコマンドプロンプトの文字設定が食い違ってるからみたいです。

コマンドプロンプトのプロパティの「オプション」タグの下部に、
現在のコードページが`932 Shift-JIS`となっていますね。
けど、VScodeの設定からEncodingを見ると`urf8`となってるので合わないから化けちゃったのかもです。
なので今回はVScodeに合わせて設定していきます。

## 前提
- Windowsでプログラミングしている人
- Java初学者
- VScode使ってます。

# 解決法1 CHCPコマンドを使う
CHCPコマンドとは、文字コードの設定に使えるコマンドのことで、`chcp <コードページ番号>`と指定すると変更ができ、コマンドプロンプトの設定も変わります。

VScodeと同じUTF-8にしたい場合はコマンドプロンプトで`chcp 65001`と打つと画面が切り替わります。
あとはいつも通りコンパイルして実行後に文字化けしていなかったら成功です!

```
javac Sample1.java
java Sample1
Hello, Java!
```

# 解決法2 オプションをつける
コマンドラインのオプションを付けて実行する方法。
これでも良いんですけど付けるのがめんどい人は上のやり方がいいです!

```
javac Sample1.java -J-Dfile.encoding=UTF-8
java Sample1 -J-Dfile.encoding=UTF-8
Hello, Java!
```

### 参考サイト
[javaコードを実行すると文字化してしまいます](https://teratail.com/questions/125729)
[Windowsコマンドプロンプト　文字コード設定](https://qiita.com/user0/items/a9116acc7bd7b70ecfb0)
[文字コードの設定](https://www.adminweb.jp/command/display/index5.html)
ノーコードでAudiobookのアプリを作ってみた

Glide(https://www.glideapps.com/ )というプラットフォームで、ノーコードのアプリを初めて作ってみました。初めてだったのにもかかわらず、1時間もかからず出てきしまい、驚きです！！

# 完成作品
[Sherlock Audiobook](https://sherlock-audiobook.glideapp.io/)
LibriVoxにあるシャーロックホームズのオーディオブックを聴けるアプリです。個人的にシャーロックホームズの話が大好きなので、あったら良いなーと思い早速作ってみました。
## ホーム画面
<img width="389" alt="Screen Shot 2020-05-14 at 21.15.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248886/a49342cb-83c0-a0c7-f47c-43f684208594.png">
<img width="377" alt="Screen Shot 2020-05-14 at 21.15.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248886/9142efbf-13d7-8d6d-ab19-87e352e286e5.png">

## エピソード画面
<img width="383" alt="Screen Shot 2020-05-14 at 21.15.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248886/abf96294-6e09-d1e2-6cd5-2256ce137073.png">
<img width="386" alt="Screen Shot 2020-05-14 at 21.15.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248886/5f21df32-260e-87f7-136b-a15f9155f7cc.png">

##  エピソード詳細画面
<img width="386" alt="Screen Shot 2020-05-14 at 21.16.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248886/5f7aa83c-3efc-513a-56ae-f36973234635.png">

# 感想
すごく直感的にコンポーネントを決めるだけで適当に良い感じにしてくれて、すごく便利でした。データベースはGoogleのスプレッドシートで管理です。
<img width="1319" alt="Screen Shot 2020-05-14 at 21.16.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248886/9aaa3bd4-50f1-e0c3-57e3-6d86e48b10a8.png">

# すごいと思った事
本当にいろんなテンプレートがあり、チャット機能などもノーコードで実装できるみたいです。すごい... 
<img width="1313" alt="Screen Shot 2020-05-14 at 21.21.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248886/1385a4f0-c768-ab80-9b92-f851f90d927b.png">
【salesforce】ソースレビュー観点

徐々に増やしていきます。
<難易度高：普段意識されない>
・ボタンの２重送信防止は講じているか
・オブジェクトレベルセキュリティと項目レベルセキュリティが実装されているか、特に検索画面は忘れがち
　→with sharing キーワードでは共有ルールのみ適用されるため、忘れがち
・排他制御は実装されているか
　→標準では先勝ちだが、APEXの場合、何も意識しないと後勝ちとなる。
　　（後勝ちでOKの方針だったらそれで問題ないですが。）
<難易度中>
・検索処理（SOQL）の並び順（Orderby）が指定されているか
・ListなどのNULL判定は行っているか
・ループの中で、SOQL、DMLを実施しないこと。
3点が同一直線上の点か調べる（sympyで）

(参考)3点が同一直線上の点か調べる

https://qiita.com/tydesign/items/ab8a5ae52eb9c50ad26a

#例 A=(2,3),B=(7,6),C=(12,9) のとき
```python
from sympy import *
var('xA yA xB yB xC yC co si tx ty d yCs')
# xA,yA,xB,yB,xC,yC = 2,3,7,6,12,9
d=sqrt((xA-xB)**2+(yA-yB)**2)
v=solve([co*0-si*0+tx-xA,si*0+co*0+ty-yA,co*d-si*0+tx-xB,si*d+co*0+ty-yB],[co,si,tx,ty])
A=Matrix([
                [v[co],-v[si],v[tx]],
                [v[si], v[co],v[ty]],
                [0   ,     0,     1]
])
B=Matrix([
                [xC],
                [yC],
                [ 1]
])
AinvB=A.inv()*B
yCs=AinvB[1]
print(yCs)
print(yCs.subs({xA:2,yA:3,xB:7,yB:6,xC:12,yC:9}))
# yCs結果省略
# 0
```

#pycharmとsympyで別の評価方法のチャレンジ

(参考)

https://qiita.com/sugurutakahashi12345/items/59cc6366da15aeb00c43

？？？？？以下なんだか怪しいですね。何となく、結果が同じです。
sympy3Dの使い方のアドバイスをお願いします。

```python
from sympy import *
var('xA yA xB yB xC yC co si tx ty d yCs')
def myHenkan():
    d=sqrt((xA-xB)**2+(yA-yB)**2)
    v=solve([co*0-si*0+tx-xA,si*0+co*0+ty-yA,co*d-si*0+tx-xB,si*d+co*0+ty-yB],[co,si,tx,ty])
    A=Matrix([
                [v[co],-v[si],v[tx]],
                [v[si], v[co],v[ty]],
                [0   ,     0,     1]
    ])
    B=Matrix([
                [xC],
                [yC],
                [ 1]
    ])
    AinvB=A.inv()*B
    return AinvB[0],AinvB[1]
def myHyoka(myDx,myDy,myDs):
    if myDy==0.0 and 0 <= myDx and myDx <= myDs:
       ans = true
    else:
       ans = false
    return ans
def mySubs2XY(mySubs):
    return "("+str(mySubs[xC])+","+str(mySubs[yC])+")"

mySubs0={xA:1,yA:3,xB:3,yB:7}
myX=myHenkan()[0].subs(mySubs0)
myY=myHenkan()[1].subs(mySubs0)
myD=sqrt((xA-xB)**2+(yA-yB)**2).subs(mySubs0)
#
mySubs1={xC:0,yC:1}
print("#",mySubs2XY(mySubs1),myHyoka(myX.subs(mySubs1),myY.subs(mySubs1),myD))
mySubs2={xC:1,yC:3}
print("#",mySubs2XY(mySubs2),myHyoka(myX.subs(mySubs2),myY.subs(mySubs2),myD))
mySubs3={xC:2,yC:5}
print("#",mySubs2XY(mySubs3),myHyoka(myX.subs(mySubs3),myY.subs(mySubs3),myD))
mySubs4={xC:3,yC:7}
print("#",mySubs2XY(mySubs4),myHyoka(myX.subs(mySubs4),myY.subs(mySubs4),myD))
mySubs5={xC:4,yC:8}
print("#",mySubs2XY(mySubs5),myHyoka(myX.subs(mySubs5),myY.subs(mySubs5),myD))
mySubs5={xC:0,yC:0}
print("#",mySubs2XY(mySubs5),myHyoka(myX.subs(mySubs5),myY.subs(mySubs5),myD))
#
#以下作図です
import matplotlib.pyplot as plt
data = [(0, 1), (1, 3), (2,5), (3,7), (4,8),(0,0)]
x, y = zip(*data)
plt.scatter(x, y)
plt.plot((1,3) , (3, 7))
for i in range(6):
    plt.text(x[i],y[i], "({},{})".format(x[i],y[i]) )
plt.show()
# (0,1) False
# (1,3) True
# (2,5) True
# (3,7) True
# (4,8) False
# (0,0) False
```
herokuを使ったデプロイ手順

今回はherokuを使ったデプロイ方法について紹介していきます。

#手順

0.自分のPCとherokuを繋げて上げる必要があります。（初回のみ）
ホームディレクトリで以下のコマンドを実行しましょう。

```
$ brew tap heroku/brew && brew install heroku
```

1.herokuにログインする(herokuのアカウントがない人は下記のURLからアカウントを作成しましょう)
https://signup.heroku.com/

```
$ heroku login
```

2.Gemfileを以下のように編集

＊DBでsqliteを使用している場合＊

```ruby

group :development do
  <!-- sqliteを使用している場合下記のgemを追加 -->
  gem 'sqlite3'
  # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end
```

＊DBでmysqlを使用している場合＊

```ruby

group :development do
  <!-- mysqlを使用している場合下記のgemを追加 -->
  gem 'mysql2', '>= 0.4.4', '< 0.6.0'
  # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end
```
アプリ立ち上げ時にDBを指定した際は、初期でgemfileにgemの記述があるので削除かコメントアウトしておきましょう！
<a href="https://gyazo.com/a4c034c196a4ba57349b55656a963319"><img src="https://i.gyazo.com/a4c034c196a4ba57349b55656a963319.png" alt="Image from Gyazo" width="1056"/></a>

下記の記述もGemfileに追加し本番環境に適したパッケージに変更します。

```ruby

group :production do 
  gem 'pg'
end
```

3.productionの中以外をアップデートする

```
$ bundle --without production
```

4.gitの管理下に置く

```
$ git init
```

5.heroku上にアプリ作成(アプリ名は被らないような名前) 

```
$ heroku create アプリ名
```

6.全てのフォルダやファイルを管理対象にすることを明示

```
$ git add *
```

7.現在の状態をコメント付きで保存

```
$ git commit -m "first commit"
```

8.現在の状態をherokuに送信

```
$ git push heroku master
```

9.Heroku上にデータベース作成
＊２回目以降はDBを編集していないかぎり実行する必要はありません＊

```
$ heroku run rails db:migrate
```
＊seeds.rbに記述している場合は下記のコマンドも実行する＊

```
$ heroku run rails db:seed
```

10.アプリを開く

```
$ heroku open
```

デプロイ後にローカルで編集した際には、6の手順から再び実行すると本番環境にも反映されます。

本番環境のDBをリセットする方法は以下の通りです。

```
$ heroku pg:reset DATABASE_URL
```
すると以下のように問われる。
本当にDBのリセットしていいの？？って聞かれています。
実行ならname-app、再度コマンドから実行なら--confirm name-appを選択します。

```ruby

 ▸    WARNING: Destructive action
 ▸    postgresql-round-20524 will lose all of its data
 ▸    
 ▸    To proceed, type name-app or re-run this command with --confirm name-app
```
今回はリセットしたいので。

```ruby
> name-app
```

あとは、もう一度DBをマイグレートすれば完了。

```
heroku run rails db:migrate
```


以上
[MagicLeap]mldbコマンド早見表

基本的にThe LabのDevice Bridgeを使えばコマンドで操作する必要はないのですが、何かの時に使えるかなと思うので自分用にメモしておきます。
デバイスが複数繋がっている場合は以下のようにシリアル番号を指定して操作します

```bash
# デバイスが複数繋がっている場合シリアルナンバーを指定する
$ mldb -s [シリアルナンバー] [操作]
```

##デバイス情報
```bash
# デバイスが正しくUSBで接続されているか確認
$ mldb usbreg

# バッテリーの情報を取得
$ mldb battery

# コントローラーの情報を取得
$ mldb controler info

# インストールされているLuminOSの詳細データを取得
$ mldb getprop ro.build.fingerprint

# ライトパックのハードウェア情報を取得
$ mldb controller info
```

##無線経由で操作する
###接続

```bash
# 接続されているデバイスの確認
$ mldb devices

# デバイスのポートを開く (USBで接続しておく必要がある)
$ mldb tcpip [ip]:[port]

# 接続
$ mldb connect [ip]:[port]

# pingテスト
$ mldb ping ip

# 接続状況確認
$ mldb wifi status
```


###切断
```bash
# 切断
$ mldb disconnect [ip]:[port]

# デバイスのポートを閉じる (USBで接続しておく必要がある)
$ mldb usb
```

##アプリケーション
###アプリケーションをインストール、アップデートしテストする

```bash
# 現在インストールされているアプリの一覧を取得する　
$ mldb packages

# アプリケーションを新規にインストールする
$ mldb install [アプリケーション名].mpk

# アプリケーションを更新する
$ mldb install -u [アプリケーション名].mpk

# アプリケーションを起動する
$ mldb launch [アプリケーション名]
```

###アプリケーションを終了、削除する
```bash
# アプリケーションを終了する -f オプションの追加で強制終了
$ mldb terminate package

# アプリケーションを削除する
$ mldb uninstall [アプリケーション名]
```


###ログ作成
```bash
# MagicLeapのログを取得し　ファイルに保存する
$ mldb log -d > log.txt

# バグレポートの作成
$ mldb bugreport myZipFIle
```

##ファイル操作
MagicLeapには基本的に C1 と C2 と命名されている二つのディレクトリがあり、C1には一般的なファイルをC2には機密ファイルを保存することを推奨している
###MagicLeapからファイルをダウンロードする

```bash
# ファイルのダウンロード
# デフォルトではmlsdkがインストールされているパスに保存されます
$ mldb pull -p [アプリケーション名] [Magicleap内のダウンロードするファイルのパス]

# MagicLeap内のphotos以下のファイルを全てダウンロードする
$ mldb pull -D C1/photos

# MagicLeap内の拡張子が.txtのファイルを全てダウンロードする
$ mldb pull "*.txt" -D /C1
```

###PCからMagicLeapにファイルをアップロードする
```bash
# ファイルのアップロード アプリケーションのディレクトリに
$ mldb push -p [アプリケーション名] [アップロードするファイルのパス]

# ファイルのアップロード Magicleap内のディレクトリに
$ mldb push -D [アップロードするファイルのパス]
```

###デバイス内でのファイルの移動
```bash
# ディレクトリの作成
$ mldb mkdir -D /C1/TestDir
```

###デバイス内でのファイルの移動
```bash
# C1にあるファイルをC2に移動
$ mldb mv -D documents/C1/hogehoge.txt /documents/C2/hoge.txt

# hogehoge.txtをhoge.txtに変更
$ mldb mv -D -n documents/C1/hogehoge.txt /documents/C1/hoge.txt
```

###デバイス内でのファイルの削除
```bash
# C1にある画像ファイルを削除
$ mldb rm -D C1/photos/sea-bunny.jpg

# アプリケーション内のサブディレクトリを丸ごと削除
$ mldb rm -p [アプリケーション名] -r [削除するディレクトリのパス]
```

##キャプチャ

###画面キャプチャ
```bash
# レンダリングされている表示のみスクショ
$ mldb caputure image -r [path].jpg

# カメラの映像ごと解像度を指定してスクショ
$ mldb caputure image -q 720p [path].jpg

# レンダリングされている表示のみ録画
$ mldb caputure video -r [path].mp4

# カメラ映像ごと解像度を720p,120秒間録画
$ mldb caputure video -p 720p -t 120 [path].mp4
```

###音声キャプチャ、再生
MagicLeapでサポートされているのは .wav, .mp3, .oggのみ

```bash
# デバイスから再生されている音声のみ30秒間録音
$ mldb audiocapture -v -d 30 [path].mp3

# 環境音ごと全て60秒間録音
$ mldb audiocaputure -a -d 60 [path].mp3

# 音声を再生する
$ mldb audioplayer [path].mp3

# 3D音源として再生する。サウンドの空間化。 -s以下は自分を中心としての座標
$ mldb audioplayer [path].mp3 -s -x 1 -y 1 -z 1
```

このほかにもまだまだ色々ありますが、一応上記だけでも覚えていればある程度不自由しないかなと思います。
【初心者】GASで複数メール送信するシンプルなコード

前回[【初心者】GASでメール送信するシンプルなコード](https://qiita.com/Shin/items/8a6ca1b984e7ce8d0294) の続き。

送信するメールの内容をスプレッドシートに登録しておき、メール送信するコード。スプレッドシートに送信したい内容を記入しておけば、複数メールを送れます。

#### sendMailListシート
| recipient | subject | body | bcc | cc |
|:---:|:---:|:---:|:---:|:---:|:---:|
| recipient1@example.com | 件名 | 本文 | bcc@example.com | cc@example.com |
| recipient2@example.com | 件名 | 本文 | bcc@example.com | cc@example.com |
|...|...|...|...|...|


#### コード
```javascript
function sendMail() {

  // データ取得するシートを指定
  var sheet = SpreadsheetApp.getActive().getSheetByName('sendMailList');
  
  // シート内のデータ取得
  var rangeValues = sheet.getDataRange().getValues();

  // 1セルずつデータ取得し、メール送信
  for(var i=1; i<rangeValues.length; i++) { // i=1：ヘッダもrangeValuesに含まれているため1行目を飛ばす。
    // １行１セルずつ送信内容を取得
    var recipient = rangeValues[i][0];
    var subject = rangeValues[i][1];
    var body = rangeValues[i][2];
    var options = {
      bcc: rangeValues[i][3],
      cc: rangeValues[i][4]
    };
    
    // メール送信
    GmailApp.sendEmail(recipient, subject, body, options);
  }
}
```
アマゾンの犬に癒されたい

# 結論
* Amazon.comでは404ページに犬が出てくる
* これらを眺めて癒されたい

# 背景
* あるサイトでAmazon.comへのリンクを叩いたら、すでに存在しない商品で404ページが出た。めちゃくちゃ癒される犬の写真とともに。
* 例: [Amazon.comの404](https://www.amazon.com/dp/x)
* 犬の写真は毎回ランダムで出てきて、200種類くらいあるようだ。
* MPが減った時、これらを見て癒されようではないか。

# やること
* 仕事などでMPを削られる。
* Chromeブラウザで新しいタブを開き、アドレスバーに下記を入力してEnter、真っ白なページを表示させる

```
data:text/html, <html contenteditable>
```

* Developer Consoleを開いて、下記JavaScriptを実行する。

```
setInterval(()=>{r=Math.random()*199|0+1;i=document.createElement('img');i.title=r;i.src=`https://images-na.ssl-images-amazon.com/images/G/01/error/${r}._TTD_.jpg`;document.body.append(i)},5000)
```

* 5秒おきに追加表示されるワンコを眺めて、MPが回復するのを待つ。

# 最後に

* お気に入りのワンコの番号を教えろください
* 私は105のMaeとか53の二匹とか。165にライオンが居た。
Power BI Report Serverをローカルにインストールした際の"フォルダの内容を読み込めませんでした"などの権限エラー対応について 

## エラーについて

Power BI Report Serverを、検証・開発目的で、自分のアカウントでインストールしたにも関わらず、下記のメッセージがでてしまった場合の対応方法を共有します。



>   フォルダの内容を読み込めませんでした
>   このフォルダーを表示することを許可されていません。管理者に連絡して必要なアクセス許可を取得してください

![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/283f8899-42fd-db4c-085b-93464f1ab3ee.png)




## 対応方法

ローカルユーザーを作成して、Power BI Report Serverのサービスアカウントとして登録します。原因については、Active Directory関連の複雑な話となるため割愛します



### 手順１　ローカルユーザーを作成し、管理者権限を付与します。


![015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/c2f41485-8b7e-1270-9985-3653c45a448e.png)



### 手順２　Report Server Configuration Managerを起動し、サービスアカウントにて、ローカルユーザーを登録。


![020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/cc65aed0-2aa5-632c-ce4d-7492627ac4bf.png)



### 手順３　ブラウザから、Power BI Report Serverにログイン。


![login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7c8185d1-866e-928c-89c4-c3813a900c7f.png)



### 手順４　Power BI Report Serverに接続できることを確認。必要に応じて権限付与を実施。


![040.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/f9602167-d3b2-081b-b633-ff58adf76c70.png)



以上です。

本手順の実施は、検証・開発目的でローカル環境に構築する場合のみに適応してください。