OmniAICreator/Qiita-1.07M huggingface dataset:
kmyacc を独立させました（Fork 後）

# kmyacc

[前回](https://qiita.com/Kray-G/items/c77f2d5401c31290bfcd) fork しました、と報告した kmyacc ですが、オリジナルは10年程度メンテされていなさそうだったので、何かあった場合に自分でメンテできるようにするために独立したリポジトリに変更しました。

* https://github.com/Kray-G/kmyacc
    * kmyacc 本体のライセンスはオリジナルと同様に GPL 2.0 です。
    * ただし、kmyacc で出力したパーサー・ファイルの利用は自由（Public Domain）です。
        * これもオリジナル同様。

### リリース

リリースしておきました。ビルド済 Windows 用の実行ファイルを zip でアップロードしてあります。

* v4.1.4+update.1
    * https://github.com/Kray-G/kmyacc/releases

## 修正

新たに以下の修正を実施。

* Windows では kmyacc.exe と同じフォルダにあるベース・ファイルを使用するように修正。

## 適用

**「見た目は JavaScript、頭脳(中身)は Ruby、（安定感は AC/DC）」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。

こちらに適用。というか、適用しなくても正しく動作するようにしてあるので特に適用する必要はなかったのだが、テストの意味も込めて適用。

## おわりに

kmyacc 自体の完成度が高いのであえてメンテを考慮する必要はないかもしれませんが、何かあったときに自分で色々できると助かるケースもあるかと。

また、kmyacc は本当に優れているので、これを使った構文解析のやり方みたいな学習にも使えると思う。ぜひ使ってみてください。機会があればちょっとしたサンプルと解説なども紹介していけるかもしれません。
Javaの特徴

この記事は、他の言語でプログラミングしていた人が、Javaでプログラムを組んでみると言う人に向けて書いた記事です。
今回はJavaはどう言ったプログラミング言語なのかという、特徴について記載しています。

#注意事項

この記事はWikiの内容をもとに書かれています。
wikiのリンク
https://ja.wikipedia.org/wiki/Java

## Javaの特徴
現在Java開発を行っているOlacleによると、Javaには6つの特徴があります。

### 1.オブジェクト指向
Javaの主要プログラミングパラダイム(プログラマにプログラムの見方を与えるもの)は、クラスベースのオブジェクト指向であるとされています。
※オブジェクト指向とは、作業単位でプログラムを分割することで、修正などを簡単にするという考え方です。

### 2.プラットフォーム非依存
プラットフォームとは、
>ソフトウェアを動作させるのに必要な、基盤となる装置やソフトウェア、サービス、あるいはそれらの組み合わせ（動作環境）

のことを指します。（http://e-words.jp/w/プラットフォーム.html ）
つまり、プラットフォーム非依存とは、どのプラットフォームでも(=動作環境がWindowsでもMacでもLinuxでも)実行できるプログラミング言語だということです。
逆に、プラットフォーム依存だと、プラットフォームごとに併せてコンパイルする必要があります。

#### プラットフォーム非依存の詳細説明
[「JavaはOSに依存しない」ということを、あなたならどう新人SEに説明しますか？](https://jp.quora.com/Java-ha-OS-ni-izon-shinai-toiu-koto-wo-anata-nara-dou-shinjin-SE-ni-setsumei-shi-masu-ka )
に分かりやすい回答があったので、内容を噛み砕いて説明します。

まず、Javaと他言語の違いとして
>基本的にコンパイル言語のコンパイル結果はOS固有の形式になる

という点が大事です。
CやRubyなどの言語でも、どのプラットフォームでも同様に記載し、実行することが出来ますが、コンパイルした結果はWindowsならWindows用の、macならmac用のものとなります。なので、もしWindowsで記載したプログラムをmacに持ってくれば、再コンパイルを行う必要があります。
しかし、 JavaはJVM（Java Virtual Machine）という仮想マシンの上で動いており、このJVMがOSの差異に対応してくれます。このおかげでWindowsで記載したプログラムをmacに持ってきても、再コンパイルせずにできるのがJavaの大きな特徴です。このJVMで動くJava以外の言語は、Scala、Kotlin、Groovyなどがあるそうです。

### 3.マルチスレッド
マルチスレッドとは、複数のスレッドを同時に走らせる事ができる能力のことです。この場合のスレッドとは作業のことで、複数の作業を同時に行うことができるということです。いろいろ調べてみましたが、マルチスレッド出来ない言語が見つかりませんでした。

### 4.ガベージコレクション
ガベージコレクションとは、不要なデータ領域を開放することです。もっと分かりやすく言うと、もう使っていないデータを空にすることで、使える箇所を増やす機能です。C言語/C++はライブラリとして実装されていますが、Javaは言語の標準機能として実装されています（=必ずやってくれます）。

### 5.分散コンピューティング
分散コンピューティングとは、複数のコンピュータをネットワークでつなぐことで一つのコンピュータとして使用することです。この分散コンピューティングをJavaは行うことができます。
システム内のあらゆるハードウェアにアクセスできるプログラミング言語なら全てできるようですが、Java言語はJava-RMI(Java Remote Method Invocation)という、ネットワークを意識せずにネットワークを介したアプリケーション間でのプログラム呼び出しを可能とするAPIを持っています。
このJava-RMIにより、分散コンピューティングのすべてをJavaで記述できるので別の言語を使う必要がありません。これがJavaの分散コンピューティング時の強みといっていいと思います。
([Java標準の分散オブジェクト技術「Java-RMI」とは](https://www.atmarkit.co.jp/ait/articles/1003/24/news099_2.html)  を参照)

### 6.セキュリティ
Javaは開発当初からセキュリティを考慮した設計をされており、セキュリティ面で信頼されています。
具体的にはサンドボックスモデルに基づいたセキュリティ機構を備えているとあります。サンドボックスとは、
>外部から受け取ったプログラムを保護された領域で動作させることによって、システムが不正に操作されるのを防ぐセキュリティ機構

のことを指します。
(https://ja.wikipedia.org/wiki/サンドボックス_(セキュリティ) を参照)

---
以上の６点が特徴です。

--fin--
便利ツールをまとめてみた

# rclone - rsync for cloud storage

https://rclone.org/
Rclone is a command line program to sync files and directories to and from.

# Process Monitor

https://docs.microsoft.com/ja-jp/sysinternals/downloads/procmon
ファイルシステムやプロセス・レジストリ活動をモニターできるツール

# Metabase

OSSのデータ可視化ツール


# Windows Performance Analyzer

パフォーマンスの可視化

# Moodle


# Canvas

# 
msrdc.exe windows virtual desktop
汎用JPドメインをお名前.comからさくらインターネットへ無料で移管した

# 移管する理由

1. コスト
2000年初頭に"お名前.com"で汎用JPドメインを取得し、毎年の更新費用が約7,000円。
2020年5月現在、"お名前.com"で新規に汎用JPドメインの取得・更新費用は値下げされていて約2,800円。
"お名前.com"に新価格が適用されないか問い合わせたが、登録時の料金が継続されるとの意味不明な回答が返ってきたので移管を検討しはじめる。
なお、一旦移管して再度"お名前.com"に移管すれば新価格が適用されるようだ。

2. セキュリティ
"お名前.com"のログインは二要素認証に未対応である。
"お名前.com"のログインID(会員ID)は連番で採番された整数である（らしい）。
"お名前.com"はパスワードを平文で保存している（らしい）。

令和の時代にこんなセキュリティなので、ある日"お名前.com"に不正ログインされてドメインを持っていかれたら大変だ。


脱"お名前.com"に向けて移管検討を開始。

# 移管先に求めるもの
- 汎用JPドメインの更新費用が4,000円以下
- 二要素認証に対応
- ドメイン自動更新に対応
- DNSサーバを無料で提供
- DMが少なそうな業者

いくつかの業者に問い合わせなどし、サポート体制含め評価した結果、"さくらインターネット"に移管を決定。

# 移管費用や期限等

移管先からみると、「転入」となるが、その費用について確認する。
汎用JPドメインの移管（転入）費用は3,982円。
しかし、指定業者変更という手続きで実施すれば無料で移管ができる。

汎用JPドメインは、ドメイン単位で指定事業者を移す「移転」手続きと、登録者番号単位で指定事業者を移す「指定事業者変更」手続きの2種類があります。

「指定事業者変更」で移管（転入）する場合は、登録者番号に登録されている全てのドメインが対象になる。

今回、"お名前.com"に登録している指定事業者変更の対象ドメインは１ドメインとなるので、他への影響もないので無料で移管できる指定事業者変更で処理することにする。

なお、指定事業者変更の受付期限は有効期限の当月10日までです。

# 移管前の準備（ネームサーバー）

ドメインを移管すると、ネームサーバ情報もそのまま引き継がれる。ここで一つ問題が。
"お名前.com"のネームサーバを利用したままドメインを移管した場合、ドメインに紐付いている各DNSレコードが参照できなくなり、ドメインに係る運用に問題が生じます。

そこで、一旦ネームサーバを外部に移す作業を挟むことにしましょう。外部ネームサーバはAWSの提供するRoute 53を利用、一ヶ月で100円くらいかな？

SOA, NS以外のレコードをそのままRoute 53へ複製します。ここは確実にテストして、複製漏れがないよう注意しましょう。

複製したら、"お名前.com"の管理画面から、ネームサーバーをRoute 53のものへ変更します。
変更後、ドメイン運用に問題がないことを概ね72時間経過するまで継続的に確認しましょう。

# 移管前の準備（WHOIS）

ドメインを移管するには、WHOIS情報公開代行の解除を行う必要があります。
念の為、"お名前.com"の管理画面からドメインの登録情報が正しいかを確認し、間違っているものがある場合は正しい情報を登録する。
移管前最後の手順は、WHOIS情報公開代行の解除を行います。

また、不要な更新が行われないよう念の為にドメインの自動更新は外しておきました。

※WHOIS情報公開代行を外すことで、氏名・住所・電話番号等が公開されるので、注意してください。

# 指定事業者変更申請

"さくらインターネット"の管理画面で問い合わせフォームから行う。
以下３つのみ記入して申請すればいい。

サービス名称：ドメイン取得
お問い合わせの種類：JP系ドメイン指定事業者変更（転入）依頼
申請ドメイン名：移管するドメイン名

![sakura01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37451/cc7fbae9-94fe-17ff-f0e6-d98049d72291.png)

# トランスファー申請の承認

申請後、まずは"さくらインターネット"から指定事業者変更申請を行いましたとのメール連絡がきます。
これに対しては特にすることはありません。営業日に処理されると思うので、少し待ちましょう。

そして"お名前.com"から次のメールがきます。

![onamae01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37451/c1e6e1f9-56ce-b872-6111-fafaca062ea2.png)

メールに記載の通り、承認手続きを行います。

承認して数時間後、"さくらインターネット"から指定事業者変更が完了した旨のメールが届きます。

トランスファー直後から、WHOIS情報公開代行が再び行われました。

# 移管後の処理

"さくらインターネット"の管理画面からDNSレコードが登録できます。
ここで、再びSOA、NS以外のレコードをすべて複製します。またまた確実にテストして、複製漏れがないよう注意しましょう。

複製したら、"さくらインターネット"の管理画面から、ネームサーバーを"さくらインターネット"のものへ変更します。
変更後、ドメイン運用に問題がないことを概ね72時間経過するまで継続的に確認しましょう。

私は念の為1週間くらい継続的に確認します。
その後、AWSのRoute 53のHosted Zoneを削除して移管後の処理も完了です。

# 最後に

ドメイン関連の操作は一つ間違えるとドメイン運用に大きな問題を生じさせます。
十分に検証した上で実施するよう注意してください。
Javaの開発環境

#はじめに
この記事は、Javaを始めてみようと思っているけど、何からすればいいのかがわからない人のために、自分の理解を記載した備忘録です。

#開発環境構築
https://www.oracle.com/java/technologies/javase-downloads.html#JDK14

上記はオラクルのページです。まずはこちらからダウンロードして見ましょう。今回は新しいJavaSE14を入れていきます。

<img width="1229" alt="スクリーンショット 2020-05-11 10.52.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/6f1e42ca-ee72-41b6-d6a3-25549c9838bb.png">

画像のJDKDownloadと記載されている箇所をクリックすると、下記の画面が出てきます。

<img width="1218" alt="スクリーンショット 2020-05-11 10.55.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/2e6157eb-a387-321d-97e1-8277a9d4200a.png">

ここで気をつけなければいけないのは、自身のOSに対応したファイルをインストールしなければいけません。私はMacなのでmacOS InstallerのDownloadを選択しています。
すでに自身のPCにSE14が入っているので、ここからの手順は記載できませんが、インストーラーにしたがっていけば、インストールはできると思います。

2020/05/08時点では、JavaSE14が最新?みたいですが、最新だと動かないアプリとかがあるかもしれないので注意したい。

##終わりに
ここまでが開発環境構築となります。皆様のとっかかりになればと思います。
Flutter のWebviewを触ってみたので感想

# flutterとは
dart言語を使用してandroid, iOS, webのフロントエンド開発ができるパッケージ

# webviewとは
アプリケーションにウェブサイトを表示すること
既存のウェブアプリがある場合などにその資産を生かしてミニマムでネイティブアプリを開発できる。

# flutterでwebviewを実装する方法
flutterのwebview関連のプラグインは3つあります。
- webview_flutter
- flutter_webview_plugin
- flutter_inappwebview

## webview_flutter(Flutter公式)

リンクはこちら
https://pub.dev/packages/webview_flutter
### メリット
#### 公式である安心感
何と言っても公式のプラグインなので長期的にきちんとメンテナンスされる可能性が高いでしょう。
これはポジティブ材料であると考えます。
#### レイアウトを組みやすい

### デメリット
#### 強いて言うなら、flutter_webview_pluginと比べて機能が少ない
v1.0.0で既存の問題が解消されたので、基本的にデメリットはないと思います。
強いて言うなら、flutter_webview_pluginと比較して、機能が少ないですが、必要最低限の機能は入ってると思います。（Evaluation JavascriptによるJSの実行とJavascript ChannelによるJSからdartへの通知）

## flutter_webview_plugin
リンク
https://pub.dev/packages/flutter_webview_plugin
### メリット
#### 機能が充実している
用意されているパラメータやメソッドが多く、いろんなことができると思います。
また、どの子クラス、親クラスからも操作が可能です。

``` dart:main.dart
Future<Null> launch(String url, {
    Map<String, String> headers: null,
    Set<JavascriptChannel> javascriptChannels: null,
    bool withJavascript: true,
    bool clearCache: false,
    bool clearCookies: false,
    bool hidden: false,
    bool enableAppScheme: true,
    Rect rect: null,
    String userAgent: null,
    bool withZoom: false,
    bool displayZoomControls: false,
    bool withLocalStorage: true,
    bool withLocalUrl: true,
    String localUrlScope: null,
    bool withOverviewMode: false,
    bool scrollBar: true,
    bool supportMultipleWindows: false,
    bool appCacheEnabled: false,
    bool allowFileURLs: false,
    bool useWideViewPort: false,
    String invalidUrlRegex: null,
    bool geolocationEnabled: false,
    bool debuggingEnabled: false,
    bool ignoreSSLErrors: false,
});
```
#### 地味にウェブにも対応しているっぽい
使っていないのでわかりませんがウェブ版にも対応しているみたいです。
#### あまりバグもないっぽい（不確かな情報なのであまり参考にしないで欲しい）
一通り使ってみてバグが見つかりませんでした。
きちんとメンテナンスされているみたいです。

### デメリット
#### Scaffold単位の生成
画面のレイアウトを作成して一部をwebviewにする場合でもScaffoldごと持ってかれます。
これは良さでもあり、逆に言えばどこからでもメソッドを叩くことができます。

#### 公式ではない（flutter communityの認証はある）
公式ではないので最新のdartやflutterのバージョンへのキャッチアップがどこかのタイミングで遅れる可能性があると思います。

#### popすると親ルートにあるWebviewもdisposeされてしまう
webviewを使用しているページ（ページ1）→webviewを使用しているページ（ページ2）
といった遷移を行った際、ページ２においてpopすると、ページ1ではwebviewが表示されません。

## flutter_inappwebview
https://pub.dev/packages/flutter_inappwebview
まず、こちらのプラグインに関しては、他に使っているプラグインが使用している何か（よくわかっていないし、面倒なので調査していない）とのバージョンの衝突で、自分の環境では動作しませんでした。
使っていない上でのレビューなのであまり参考にしない方がいいかもしれません。

### メリット
#### 海外のフォーラムで情報が比較的多く見つかる
flutterのwebviewに関する諸々のエラーについて調べると、stackoverflowをはじめとする海外サイトではやたら
``` ... use inappwebview plugin instead! ...```
みたいなレスを見つけます。
なんかいいところがあるのかもしれない（？）

### デメリット
#### 公式ではない
特にこのプラグインに関しては致命的に感じます。
おそらく最新のdartに対応するのに時間かかっているみたいです。
自分の環境ではそもそも動きませんでした。

# 総論
2020年5月現在、flutterでwebviewを使用するなら、機能が充実していて動作も安定している
flutter_webview_pluginを使用するのがいいと思います。
どこかのタイミングで公式が上回ることは考えられるので、書き換えられるようにコードを設計しておいた方がいいと思います。
MagicalRecordで簡易マイグレーションが失敗する

MagicalRecordがメンテされなくなって、使ってる人も少なくなってきてるから不要かもだけどメモとして。

## 環境
Xcode 11.3
iOS13
Cartage
MagicalRecord 2.4.0

## 事象
xcdatamodelに新しいバージョン追加して、項目追加し、実行したら、AppDelageteの以下部分でエラーが発生してマイグレーションされていない。

```swift:AppDelegate.swift
MagicalRecord.setupCoreDataStack(withAutoMigratingSqliteStoreNamed: "MyModel.sqlite")
```

## 原因
MagicalRecordの不具合

## 解決策
[実際はすでに不具合修正されてマージ（masterへ）されている](https://github.com/magicalpanda/MagicalRecord/pull/1378)が、リリースされそうにもない。
なので、Carthageでブランチ指定(master)に変える

```sh:Carthage
github "MagicalPanda/MagicalRecord" "master"
```
これで簡易マイグレーションされるようになりました。

### 参考
[CoreDataバージョニング(Apple公式)](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html)
[MagicalRecord Issue](https://github.com/magicalpanda/MagicalRecord/issues/1376)
Video Representation Learning by Dense Predictive Coding


https://www.robots.ox.ac.uk/~vgg/publications/2019/Han19/han19.pdf

- 自己教師あり学習でビデオから時空間埋め込みを学習。人間の動作認識
- Dense Predictive Coding という手法を提案
 recurrently predicting future representation
- カリキュラムトレーニング
- Kinetics 400 で事前学習してaction recognitionで評価。HMDB51で35.7%

### ネットワーク
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412142/a24e4027-e145-6a12-7fd5-b3592efe06db.png)

- 2.5秒分学習して1.5秒分の埋め込みを予測。
- fでxを隠れ変数z_t に変換、その後集計関数gでc_tに変換。
- z_t = f(x_t), c_t = g(z_1, z_2, .., z_t)
- 予測関数Φでc_tからz^_t+1を予測

#### Contrastive loss
- NCE Noise Contrastive Estimation 
- z^とｚをdot product で比較。コサイン距離？
- 3つのnegative pairs
 + Easy Negative - 別のビデオから
 + Spatial Negative - 同じビデオの空間的に異なる場所
 + Temporal Negative - 同じビデオの同じ場所の、時間的に異なる場所
 
#### カリキュラムトレーニング
予測するフレーム数をだんだん増やして遠くまで予測するようにする。
DNSとは

# ざっくり
ドメイン名とIPアドレスの対応付けや、 メールの宛先ホストを指示するためのシステム
# 詳しく
Domain Name Systemの略で、インターネット上でドメイン名を管理・運用するために開発されたシステム
インターネットに接続している機器には「IPアドレス」という固有の番号が必ず割り当てられ、通信は、相手先のIPアドレスが指定されることにより行われる。
Protocol Buffers用 Go言語APIの APIv1 と APIv2 の差異

# この記事について

Protocol Buffers用 Go言語API に新しく V2 (APIv2) が出たことにより、import のパス、リポジトリ、protoc-gen-go などに違いがあり混乱したので整理してみた。

[2021/2/13更新]
初回投稿時点(2020/05/11)では APIv2 用の protoc-gen-go-grpc がリリースされてませんでしたが、2020年10月にリリースされたため内容を更新しました。

# Protocol Buffers用 Go言語API について

Protocol Buffers(以下、protobuf)は言語ニュートラルなデータのシリアライズの仕組みで、Go言語でも protobuf を使うための API が提供されている。

最初の API が提供されたのが 2010年ごろで、これを `APIv1` と呼ぶ。
そして、2020年3月に新しい `APIv2` がリリースされた。

APIv2 についてのごく簡単な特徴：

- *.proto ファイルで定義された protobuf のアノテーションを Go から読めるようにした
- APIv2 は後方互換性はない
  - APIv1 は今後もずっとサポートを継続する(原文: We intend to maintain support for APIv1 indefinitely.)

**[補足] protoc-gen-go について**
*.proto ファイルのコンパイルには `protoc` というコンパイラを用いるが、protobuf 自体は言語ニュートラルなためGo言語用のコードの生成するには `protoc-gen-go` というプラグインが必要になる。この `protoc-gen-go` と後述する gRPC のスタブコード生成にも APIv1 と APIv2 で違いが生じている。



# APIv1 と APIv2 の違い

## APIv1 

- 最新バージョンは v1.4 系
  - v1.4.0 から内部的には APIv2 を使って実装されている
- APIv1 の import パス等は以下を参照

| 対象              | 値 |
|:------------------|:------------------|
| import のパス     |github.com/golang/protobuf|
| ソースのリポジトリ|https://github.com/golang/protobuf|
| protoc-gen-go     |github.com/golang/protobuf/protoc-gen-go|
| gRPCスタブコード生成 |同上|


## APIv2 

- バージョンは `v1.20.0` から始まる
  - APIv1 のバージョンが 1.20 まで進まないだろうという予想とのこと
- APIv2 の import パス等は以下を参照

| 対象              | 値 |
|:------------------|:------------------|
| import のパス       |google.golang.org/protobuf|
| ソースのリポジトリ   |https://github.com/protocolbuffers/protobuf-go|
| protoc-gen-go      |google.golang.org/protobuf/cmd/protoc-gen-go|
| gRPCスタブコード生成 |google.golang.org/grpc/cmd/protoc-gen-go-grpc|


## protoc-gen-go と gRPC のスタブコード生成について

### APIv1 の場合
APIv1 では `protoc` に `--go_out=plugins=grpc` オプションを付けることで、`protoc-gen-go` に gRPC スタブコードを生成させることができた。

```bash:gRPC用スタブコードの生成例
protoc --go_out=plugins=grpc:. sample.proto
```

### APIv2 の場合

APIv2 の `protoc-gen-go` 自体は gRPC のスタブコードを生成しなくなり、追加で `protoc-gen-go-grpc` というプラグインが必要になった。

```bash:プラグインのインストール例
export GO111MODULE=on
go get google.golang.org/protobuf/cmd/protoc-gen-go
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
```

```bash:gRPC用スタブコードの生成例
protoc --go_out=. --go-grpc_out=. sample.proto
```


# 参考

- [A new Go API for Protocol Buffers](https://blog.golang.org/protobuf-apiv2)
- [Goが新たなリフレクションベースのProtocol Buffer APIを獲得](https://www.infoq.com/jp/news/2020/04/go-protobuf-apiv2/)
- [Go Protocol Buffer Message API V2 のReflectionとgRPC Server-side Interceptorを使ってAPIの呼び出し権限チェックを実現する](https://note.com/dd_techblog/n/n9d7f4f1df979)
Javaの機能について

##はじめに
この記事はこれからJavaを勉強する方に向けた私自身の理解している内容の記録です。

これからJavaの機能や記載方法についてを、下記のリストに分けて記載していきます。

・変数と型、型変換 https://qiita.com/pitan109/items/2538b234a2c6e20c037f
・変数のスコープ https://qiita.com/pitan109/items/b30589bc4c2e8169734c
・文字列の操作（準備中）
・配列の操作（準備中）
・演算子（準備中）
・条件分岐（準備中）
・繰り返し処理（準備中）
・例外処理（準備中）
・クラスについて（準備中）
・抽象クラス（準備中）
・インターフェース（準備中）
・カプセル化（準備中）
・モジュールについて（準備中）

今回はJavaを使う上で覚えておきたいことの概要と、私自身がRubyを使用していたので、Rubyとの比較を列挙していきます。

5/11 更新 共通箇所、各方式のメリットデメリットを追記
5/12 更新 目次を追加

##コンパイラ方式
コンパイラ(コンパイル)とは、シンプルにいうとコードをコンピュータが読める形に全て変更してから実行します。Javaではこちらが採用されています。あとはC++もコンパイラ方式です。
Rubyやpythonはインタプリタ方式です。インタプリタでは一行ずつ翻訳して実行していく形です。
どのような違いがあるのか見ていきましょう。

インタプリタ
```$ ruby hello.rb ```
インタプリタではこれで実行すると、コード内の処理が表示されます。

コンパイラ
```$ javac hello.java ```
この例はJavaなのでJavacのコマンドで解説していきます。コンパイラではコンパイルするコマンドを入力し、コンピュータがわかるclassファイルを生成します。hello.javaファイル内のHelloクラスができるので、それを実行します。

```$ java Hello```
これでclass内の処理が実行されます。この手順を踏まなければJavaを実行できないので覚えておきましょう。

## 変数の型、型変換
Javaでは変数の型指定を静的に行う必要があります。
String str = "文字型";
strという変数を文字型(String)で作成していますが、こちらに数値型(int)等の別の型の要素を代入することはできません。
Rubyでは
str = "文字型"
と記載できます。関連付けがないため、この後
str = 1
と記載しても大丈夫です。

また、Javaでは型変換ができます。この変数をこの型で参照したい時などに使用します。

Rubyでも型変換ができ、基本的には記載方法が違うだけで、考え方としては同じです。

Java

```java
String str = (String)10;
```

Ruby

```ruby
str = 10.to_s
```

Javaで変数の型指定、型変換についての詳細はこちらに記載しています。
https://qiita.com/pitan109/items/2538b234a2c6e20c037f

##変数のスコープ
JavaもRubyも変数を書いている場所や、記載方法の違いなどで、変数を参照できる範囲が変わります。
JavaとRubyでは様々な書き方が変わってきますが、考え方は同じで、Javaで知ったことは、Rubyに応用できると思います。

Javaでの変数の参照範囲、記載方法については、こちらに詳しく記載しています。
https://qiita.com/pitan109/items/b30589bc4c2e8169734c


##RubyとJavaの共通箇所
今回は私がRubyを使っていたので、おまけで共通の部分も記載しようと思います。
オブジェクト指向言語であることとインターフェースが使えることです。書き方や詳細についてはここでは触れませんが、オブジェクト指向やインターフェースの考え方があると片方の言語を学習していれば、
もう片方の考え方がほぼそのまま使えるので、JavaやRubyに限らず、オブジェクト指向の言語を1つ学んでおくのはおすすめだと思います。

##終わりに
今回はRubyと比較しつつ、Javaの主要な機能をまとめてみました。また、今回の記事はこちらも参照させていただきました。
https://codezine.jp/article/detail/2144
Cannot read property 'replaceChild' of null (React/webpackのエラー対処方法)

めっちゃ単純なエラーだったけど一応記録として残しときます。

## エラー内容
HtmlWebpackpluginでテンプレートした際に、
webpack-dev-serverで立ち上げるとコンソールエラーが起きる。（サイト自体はちゃんと動く)![スクリーンショット 2020-05-11 10.22.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441432/bf7ff7c0-07be-fae6-8700-fd68ca6d5dcb.png)


## 対処法
https://github.com/jantimon/html-webpack-plugin/issues/288
こちらが参考になりました。

>The plugin will generate an HTML5 file for you that includes all your webpack bundles in the body using script tags.

html-webpack-pluginは勝手にscriptタグ埋め込んでくれるらしいです。(ドキュメントの記述見逃してた)
なのでHTMLにJSのscriptを記述していると、二回読まれちゃってエラーになってるぽい。
実際開発ツールのElementsタグをみてみると、同じjsファイルが二回よまれてる。

なので、HTMLの記述からバンドルしているJS呼び出しを削除。
これでOKです。
DynamoDBで属性が無いItemをFilterExpressionで抽出する

`attribute_not_exists' を使い以下のように書くことができます。
この例では属性ageが設定されていないアイテムが抽出されます。

```typescript
const params: QueryInput = {
  // 略
  FilterExpression: 'attribute_not_exists(age)'
};
```
docker-compose network + dhcpcd

dhcp 管理の Raspberry PI で docker を動作させ始めて出てきた問題。マシンの default route が docker-compose 作成のブリッジ側を向いていて通信できなくなっていた。症状としては https://www.reddit.com/r/docker/comments/7haaik/how_to_prevent_docker_from_creating_default/ の人と同じ。

対処法として挙げられていたのは、dhcp 管理をやめて static 割り当てにすること。

別解で対応したので、そのメモ。

docker は docker-compose で起動させていたので、docker-compose 上では次のように default network を作る。

```yaml:docker-compose.yml
# これより上は省略
networks:
  default:
    driver_opts:
      com.docker.network.bridge.name: tsdb0
```

dhcpcd でそのインターフェースを対象から外す。

```text:/etc/dhcpcd.conf
denyinterfaces tsdb0
```
PHPファイルにCSSを読み込ませる

#はじめに
こちらでは問合せもあった事から、phpファイルにcssを読み込ませるやり方を説明できればと思います。
またHTMLとCSSを触られたことがあることを前提で進めさせていただきます。


#環境
CentOS
PHP 7.3.17 
Apache
chrome

#やり方
みなさんHTMLとCSSを触られたことはあるとあるとおもいます。
今回は簡単にphpでecho表示させたものを色をつけただけのシンプルなものです。
やり方としてはhtml同様に読み込ませるだけです。

```php:test.php
<link rel="stylesheet" href="style.css">
<?php
  echo "<div class=red>";
  echo "赤色";
  echo "</div>";
?>
```

```css:style.css
.red{
  color:red;
}
```
#まとめ
いかがだったでしょうかphpだからといって難しく考えることはないことがわかるとおもいます。
Mac 最新OSでbashを使用する際に出力される通知を非表示にする

# 目的

- MacOSの最新版であるCatalina(10.15.X)にてbashを使用する際に出力される通知を非表示にする方法をまとめる

# 実施環境

- ハードウェア環境

| 項目 | 情報 |
| --- | --- |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook Pro (16-inch ,2019) |
| プロセッサ | 2.6 GHz 6コアIntel Core i7 |
| メモリ | 16 GB 2667 MHz DDR4 |
| グラフィックス | AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB |

# 通知内容

- bashを使用している状態でターミナルを開くと、下記の内容が出力される。

    ```terminal
    The default interactive shell is now zsh.
    To update your account to use zsh, please run `chsh -s /bin/zsh`.
    For more details, please visit https://support.apple.com/kb/HT208050.
    ```
- 簡単に要約すると、「デフォルトの対話型シェルはzshに変更されました。コマンド`chsh -s /bin/zsh`でzshに変更できます」という内容である。
- 現在のデフォルトの対話型シェルであるzshを使用する事を促す通知である。

# 通知の非表示化

1. 下記コマンド実行して`~/`に存在するbash_profileファイルに当該記載の追記を行う。

    ```terminal
    echo "export BASH_SILENCE_DEPRECATION_WARNING=1" >> ~/.bash_profile
    ```
1. 下記コマンドを実行して.bash_profileを再読み込みする。

    ```terminal
    source ~/.bash_profile
    ```
1. ターミナルを再起動して先の通知が表示されない事を確認する。
ABC167 C - Skill UpをHaskellで解く

## 問題
https://atcoder.jp/contests/abc167/tasks/abc167_c

## 解法
解法としては各本を買う/買わないで全探索すると`O(M2^N)`で解けます。
`C_n A_n_m`は型としては`[(Int, [Int])]`になります。各要素の`(Int, [Int])`は単位元を`(0, 要素が0の無限リスト)`、演算をfstは足す、sndはzipして各要素を足すとするとモノイドになりそうですし問題を解くのに使えそうです。このようになる`(Int, [Int])`のnewtypeは`(Sum Int, Ap ZipList (Sum Int))`になります。`Ap`は`Applicative f`と`Monoid a`から`Monoid (f a)`を作るnewtypeです。`ZipList`は`pure`を`repeat x`、`liftA2`を`zip`して関数適用という`Applicative`実装を持つ`List`のnewtypeなので`Ap`と組み合わせると欲しい`Monoid`が得られます。
ところで`newtype`の変換には`coerce`という関数が便利です。安全に変換できる2つの型同士をオーバーヘッドなしで変換してくれる便利関数です。ある型から`A`型に変換したい時は`TypeApplications`拡張と組み合わせて`id @A . coerce`と書くと型注釈が楽です。
次に非決定性計算です。Haskellのリストモナドは非決定性計算なので全探索に便利です。

```hs
do
  x <- [1, 2, 3]
  y <- [10, 20, 30]
  pure $ x + y
```

とすると、`[1, 2, 3]`と`[10, 20, 30]`を足した時の全パターンのリストを得ることができます。
今回は買う/買わないの全列挙で、買わない場合はさっきのモノイドの単位元になるので疑似コードは以下のようになりそうです。

```hs
do
  x_1 <- [x_1, mempty]
  x_2 <- [x_2, mempty]
  ︙
  x_n <- [x_n, mempty]

  pure $ x_1 <> x_2 <> … <> x_n
```

こうすることで、全購入パターンの金額と各アルゴリズムの理解度を得ることができます。
これは`fmap mconcat . traverse (: [mempty])`で実現できます。`(: [mempty])`は`\x -> [x, mempty]`です。`traverse`は与えられた関数で`fmap`したあとに`sequence`する関数です。`sequence`はここではリストで与えられたモナドを「実行」して結果のリストを得る関数を考えることができます。こうすることで全購入パターンを得ることができるので、各購入パターンで金額と各アルゴリズムの理解度を得るために`fmap mconcat`しています。

この後は`filter (all (>= x) . snd)`で各アルゴリズムの理解度が`x`以上の物のみをフィルタリングし(入力`x`は1以上で、各アルゴリズムの理解度が無限リストの時、つまり全て変わらないパターンの時全要素は0になるので無限ループにはなりません)、`map fst`で金額のみを取り出して`fromMaybe (-1) . foldl1May min`で金額の最小値を得る、存在しなければ`-1`を返すだけです。
`foldl1May`は`safe`パッケージにあるやつの特殊版でないので自分で定義しています。

## 全コード

```hs
{-# LANGUAGE TypeApplications #-}

import Data.Maybe
import Data.List
import Control.Monad
import Data.Bifunctor
import Control.Applicative
import Data.Monoid
import Data.Coerce

main :: IO ()
main = do
    [n, m, x] <- fmap (read @Int) . words <$> getLine
    list <- replicateM n $ fromJust . uncons . fmap (read @Int) . words <$> getLine
    print $ solve x list

solve :: Int -> [(Int, [Int])] -> Int
solve x = fromMaybe (-1)
        . foldl1May min
        . map fst
        . filter (all (>= x) . snd)
        . id @[(Int, [Int])]
        . coerce
        . fmap mconcat
        . traverse (: [mempty])
        . id @[(Sum Int, Ap ZipList (Sum Int))]
        . coerce

foldl1May :: (a -> a -> a) -> [a] -> Maybe a
foldl1May f (x:xs) = Just $ foldl f x xs
foldl1May _ _ = Nothing
```
CSSでヘッダーリストに「｜」線を入れる

ヘッダーリストの項目の間に縦線を入れる方法
scssを使用した場合を想定しています。

![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635497/82b7d8f4-3e52-11ec-63b7-9c926e2b1e91.jpeg)


    &+li::before {
      content: "";
      border-right: 1px solid #FFFFFF;
      position: absolute;
      display: block;
      top: 50%;
      height: 14px;
      margin-top: -7px;


li要素の疑似要素として、beforeを使う。
絶対配置として、position: absolute;を使い配置する。
最後は、margin-top: -7px;で中央寄せ

もしくは、

+li {
 border-left:1px sorid #ffffff；
}

で対応する。
fastlane  match initがエラーで実行できない

#症状

fast lane match を実行すると meime/typesがロードされずに「bundler: failed to load command: fastlane」というエラーになり実行できない。

#環境

MacOS Catalina 10.15.4

#手順

手順に従って以下のようなGemfileを作成

```:Gemfile
source "https://rubygems.org"

gem "fastlane"
```

```bundle exec fastlane match init```

実行すると下記のようなエラーになる。

```
% bundle exec fastlane match init

bundler: failed to load command: fastlane (/usr/local/bin/fastlane)
LoadError: cannot load such file -- mime/types
  /Library/Ruby/Gems/2.6.0/gems/google-cloud-storage-1.16.0/lib/google/cloud/storage/service.rb:19:in `require'
  /Library/Ruby/Gems/2.6.0/gems/google-cloud-storage-1.16.0/lib/google/cloud/storage/service.rb:19:in `<top (required)>'
  /Library/Ruby/Gems/2.6.0/gems/google-cloud-storage-1.16.0/lib/google/cloud/storage/project.rb:17:in `require'
  /Library/Ruby/Gems/2.6.0/gems/google-cloud-storage-1.16.0/lib/google/cloud/storage/project.rb:17:in `<top (required)>'
....
```

# 解決方法

mime-typesを追加する。

```:Gemfile
source "https://rubygems.org"

gem "fastlane"
gem "mime-types"
```
【Unity】Unity Hub から Unity インストールするときに「不完全または破損したダウンロードファイル」と出たときの対処方法

# 現象

Unity 2019.2.9f1 のインストールしている途中に、「不完全または破損したダウンロードファイル」と表示され、インストールに失敗しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233011/528219b8-9d9f-371d-9a7a-4601f7c9ca82.png)

そのときに行った対処方法まとめです。
結論から言うと、 **Unity Hub を経由せずに、公式サイトからインストーラーをダウンロードして、直接 Unity をインストールするのが一番はやいです。**

# 環境

- Windows10
- Unity Hub 2.3.1
- インストールできなかった Unity Version は 2019.2.9f1



# やったこと

- proxy を使用していないか確認
- システム要件を確認
- インストールしていた Unity を全てアンインストール
- Unity Hub を再インストール
- インストール中に Unity Hub をアクティブウィンドウから動かさない

## proxy を使用していないか確認

proxy を使用している場合は、設定を OFF にしてください。
確認方法は[こちら。](https://pasokatu.hateblo.jp/entry/2017/07/04/111147)」

proxy の設定なんてしていないので、問題なし。

## システム要件を確認

[Unity のシステム要件](https://docs.unity3d.com/Manual/system-requirements.html) を確認しました。
もちろん要件を満たしていたので、問題なし。

## インストールしていた Unity を全てアンインストール

インストールしたい Unity 2019.2.9f1 以外を全てアンインストールしました。
もちろんこんなことしても解決しませんでした。

## Unity Hub を再インストール

Unity Hub が壊れた説をかけて、再インストールしました。
もちろん改善しませんでした。

## インストール中に Unity Hub をアクティブウィンドウから動かさない

インストールが終わるまで、インストール画面を選択して状態で、他の作業を何もしない。
もちろん改善しませんでした。

# いろいろやった結果

諦めて Unity Hub を経由せずに Unity をインストールしてください。

# 終わりに

Unity Hub からインストールすれば、いろいろな Unity の Version を一元管理できます。
アンインストール、 Android, iOS などのモジュールを加えることもできます。
ただ、 Unity Hub を経由せずに、直接インストールした Version は、 Unity Hub からアンインストールもモジュールも追加することができません。

こうなると面倒なので、時間かけて頑張りました。
意味ありませんでしたが。

# 参考文献

[インストールがうまくいかない場合 – ユニティ・テクノロジーズ](https://helpdesk.unity3d.co.jp/hc/ja/articles/219377968-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%8C%E3%81%86%E3%81%BE%E3%81%8F%E3%81%84%E3%81%8B%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88)
AtCoder Beginner Contest 167の復習, E問まで(Python)

競プロ初心者の復習用記事です。

ここで書く解は解説や他の人の提出を見ながら書いたものです。自分が実際に提出したものとは限りません。

## [A - Registration](https://atcoder.jp/contests/abc167/tasks/abc167_a)

文字列Tは文字列Sの末尾に一個文字をつけたものになっているか答える問題です。

Tを`T[:-1]`とスライスすることで比較しました。

```python
S = input()
T = input()

if S == T[:-1]:
  print('Yes')
else:
  print('No')
```

## [B - Easy Linear Programming](https://atcoder.jp/contests/abc167/tasks/abc167_b)

1と書かれたカードが$A$枚、0と書かれたカードが$B$枚、-1と書かれたカードが$C$枚あります。この中から$K$枚を選ぶ時の最大値はいくつか答える問題です。

1, 0, -1の順番に優先して数えればいいです。ただし$A, B, C\leq2\times10^9$である点から、配列に入れたりforで回そうとすると痛い目にあいます。(一敗)

```python
A, B, C, K = map(int, input().split())
out = min(A, K) - max(0, K-A-B)
print(out)
```

## [C - Skill Up](https://atcoder.jp/contests/abc167/tasks/abc167_c)

それぞれの番号ごとに合計した全ての要素が$X$を超えるような組み合わせの中で最小の価格を求める問題です。

$N, M \leq 12$という制限から十分に全網羅が可能です。全探索には`itertools.product()`, ついでに`numpy`を使用することで並列計算を行いました。

```python
import itertools
import numpy as np

N, M, X = map(int, input().split())
items = np.array([list(map(int, input().split())) for _ in range(N)], dtype=np.int32)

out = 10**18
for c in itertools.product([False, True], repeat=N):
    tmp = np.sum(items[np.where(c)], axis=0)
    if M == np.count_nonzero(tmp[1:] >= X):
      out = min(out, tmp[0])

if out == 10**18:
  print(-1)
else:
  print(out) 

```

## [D - Teleporter](https://atcoder.jp/contests/abc167/tasks/abc167_d)

それぞれの町は一個ずつワープ先が設定されています。最初の町からK回テレポートして到着する町を答える問題です。

$K\leq10^{18}$という制限からまともに探索すればTLEです。諦めました。他の人の解答を見ます。

Kの範囲は$K\leq10^{18}$でも、Nの範囲は$N\leq 2 \times 10^{5}$であるところに注目するべきでした。つまりこの探索は必ずループする。

まずは普通に探索。各町に最初に到達した時間`t_zero`を配列として保存しておいて、同じ町に二回目の到達をしたら1周のための時間を計算。Kから一周の時間の剰余項を取る。残りの時間kで再び探索...するまでもなく、前にやった計算を再利用。以下のコードで通りました。


```python
N, K = map(int, input().split())
A = list(map(int, input().split()))

t_zero = [-1] * N

t = 0
a = 1

while t_zero[a-1] == -1:
  if t == K:
    break
  t_zero[a-1] = t
  t += 1
  a = A[a-1]
else:
  k = (K - t_zero[a-1]) % (t - t_zero[a-1])
  a = t_zero.index(t_zero[a-1] + k) + 1
print(a)
```

## [E - Colorful Blocks](https://atcoder.jp/contests/abc167/tasks/abc167_e)

横一列に並んだブロックを色分けする問題です。ただし、同じ色が隣り合うことが許容されるのはK個までで、何個組み合わせがあるでしょうか。

M色の色が隣り合わないようにN個並べる組み合わせは、$M\times(M-1)^{N-1}$個存在します。

K組のブロックが隣り合っていい時というのは$N-K$個のブロックを色が並ばないように並べる作業とも言えます。また、隣り合うブロックの組み合わせの選び方は$_{N-1} C _ {K}$個。

つまり以下の数式を計算すればいいことになります。

$$ \sum M\times (M-1)^{N-k-1} \times _{N-1} C _ k $$

実装したのが以下になります。ただし本番中はうまく計算速度を上げることができずに、時間内に解くことができませんでした。

```python
N, M, K = map(int, input().split())
out = 0
mod = 998244353

c = 1

for k in range(K+1):
  out += M * pow(M-1, N-k-1, mod) * c
  out %= mod
  c *= (N-k-1) * pow(k+1, mod-2, mod)
  c %= mod
print(out)
```
ここでは
$$ Y^{p-2} \mod p \equiv {1\over Y} $$
という式(フェルマーの小定理の変形)を用いて、$Y^{-1}$の計算の高速化を行っています。

この記事はここまでとします。
アコーディオン設置

htmlでは、クリック要素の直下にアコーディオンの中身をもってきているのがポイント

```html
<div class="js-accodion">アコーディオンボタン</div>
<div class="">
  アコーディオンの中身
</div>
```

htmlで、クリック要素の直下にアコーディオンの中身をもってきているので、
$(this).next() でクリックした対象の次の要素を、スライドをトグルしている。

```js
$(function () {
  $('.js-accodion').on('click', function () {

    //クリックしたアコーディオンのボタン表示を切り替え
    $(this).toggleClass('is-open');

    //クリック対象の次の兄弟クラスをスライド動作
    $(this).next().slideToggle(300);
    return false;
  });
});
```
Gitで最新と一つ前のtagの間のマージログを出力する

Gitでreleaseノートを作るときなどに、直近マージしたPR一覧を出したいことがあります。

そういうときにこちらのコマンドで一覧が取得できます。

```shell
git log $(git tag --sort version:refname | tail -n 2 | head -n 1)..$(git tag --sort version:refname | tail -n 1) --merges --reverse --pretty=format:"* %b"
```

こちらのコマンドでは最新と一つ前のtagの間のマージのログを出力します。

[Github Actionsも用意しました](https://github.com/yanamura/git-merge-diff)のでRelease Note自動化の際にご活用いただけると幸いです。

## 参考
https://stackoverflow.com/questions/34800786/git-diff-between-latest-and-previous-tag
SwiftUI でオブジェクトを回転させる方法

##はじめに
短く簡潔にコーディングできるSwiftUIと,オブジェクトを回転させることは相性が良さそう。
Apple公式チュートリアルでもForEachで複数出現させています。

##できるもの
<img width="200" alt="スクリーンショット 2020-05-11 9.29.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549093/a99f38e8-0370-e412-9bc6-5f34e1e9ee79.png">


##ソースコード

```swift
import SwiftUI

struct SwiftUIView4: View {
    let angle: Angle
    var body: some View {
        Text("Hello, World!")
        .rotationEffect(angle, anchor: .bottom)
    }
}

struct SwiftUIView4_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView4(angle: .init(degrees: 180))
    }
}
```

TextやButtonなどのオブジェクトには、frameの大きさや背景色の設定などができるモディファイアが準備されています。今回用いるのは`.rotationEffect(angle, anchor: )`
プレビューをする構造体の中でそれらを角度と軸を指定しています。
.NetFramework付属のコンパイラだけで実行ファイルを作る をしてみた。

## コンパイラ

```go
csc.exe : c#
vbc.exe : vb.net
jsc.exe : JScript.net
```

## コンパイル

ソースコードは [hello.cs](https://qiita.com/toshirot/items/dcf7809007730d835cfc#%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89) で確認。

```vb:comple.bat
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe ^
 hello.cs
```

これをダブルクリックで hello.exe が生成されました。
5KBとは小さい！

![スクリーンショット_2020-05-11_09-12-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/d443b6c9-37da-87b1-c322-36a0bdb24d5a.png)

実行すると、大きめの黒い窓と共に表示される。

![スクリーンショット_2020-05-11_09-13-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/c3c9a152-0c55-13fa-6ac1-d1f832153e8e.png)


大きめの黒い窓を消すには `/target:winexe` オプションを指定する。

```
csc.exe /target:winexe hello.cs
```

## コマンドプロンプトにPATHを渡す

* [C# コンパイラ (csc.exe) の使い方 - C# 入門](http://kaitei.net/csharp/csc/)

```vb:setenv.bat
@echo off
PATH="%WINDIR%\Microsoft.NET\Framework\v1.0.3705";%PATH%
PATH="%WINDIR%\Microsoft.NET\Framework\v1.1.4322";%PATH%
PATH="%WINDIR%\Microsoft.NET\Framework\v2.0.50727";%PATH%
PATH="%WINDIR%\Microsoft.NET\Framework\v3.0";%PATH%
PATH="%WINDIR%\Microsoft.NET\Framework\v3.5";%PATH%
PATH="%WINDIR%\Microsoft.NET\Framework\v4.0.30319";%PATH%
cmd
```

ここから`csc.exe`がすぐに呼べる。

* [Visual Studioを使わずにコンパイルする方法（備忘録） - Qiita](https://qiita.com/smzknt_ast/items/6a8a396a6a4b0dfe9bbc)さんの記事から以下を使わせていただきました。感謝！

```vb:comple_js.bat
@echo off
PATH="%WINDIR%\Microsoft.NET\Framework\v4.0.30319";%PATH%

cd %~dp0

rem 引数無し実行はエラー
if "%~1"=="" (
  echo "[quit] Drug and drop a .js file."
  timeout 5
  exit
)

echo "[info] comple.."
jsc %1
timeout 5
```

### 参照設定

```vb
csc.exe ^
 /reference:MyDLL_1.dll ^
 /platform:x86 ^
 /target:winexe ^
 hello.cs
```

## jsc.exe

```js:hello.js
print("Hello,World");
```

```sh:コンパイル
jsc.exe hello.js

# 実行
hello.exe
```


## その他参考

* [Visual Studioを使わずにコンパイルする方法（備忘録） - Qiita](https://qiita.com/smzknt_ast/items/6a8a396a6a4b0dfe9bbc)
* [VBScript をJScriptに変換してコンパイルする](https://www.vector.co.jp/soft/winnt/prog/se348855.html)フリーソフトもある。すごい
Calling third-party API on AWS

We wanted to call third-party API on AWS. Since they are third-party API, we should call them one by one and dodge to call multiple time at the same time. Otherwise, we might be blocked by providers.

## SQS + Lambda

SQS + lambda should be easy to implement, but not sure if it fits with our purpose.
Therefore, we studied how SQS + Lambda works.

![architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/c2cfd670-274f-cc0b-773b-2ec24e1d4463.png)


## Configure SQS

The type of SQS is standard. The default visibility timeout is 30 sec.

![sqs-configure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/332a8e32-e352-21bb-03ba-040cc6d0895b.png)


## Configure Lambda

### Add trigger to lambda

![add-trigger.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/0aec297d-f643-92e4-653e-f8ba67ae66e9.png)


### Set concurrency to 1

![concurrency.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/115069c7-e4b2-1b49-5ed0-7c79e7c21dac.png)


### Timeout is 5 for testing

Timeout is 5 sec.
![timeout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/972707f2-d183-b721-4323-a876297e156b.png)


### Source code

This lambda will be timeout, but it is on purpose.

```
from time import sleep
import json

def lambda_handler(event, context):

    print("start python lambda");
    print(event)

    sleep(10)

    print("10 sec latter")

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

```


## Now, ready to go

We sent messages to SQS via AWS console.

![send-message.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/ec730dea-5099-33d5-5525-16f2d4b6cc7e.png)

![send-message1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/ca40f23c-8a50-dbc2-e574-4197a9a7f5ed.png)



## Expected result

Since lambda's timeout is 1 sec and the lambda sleeps 5 sec, every lambda must be timeout.
We assumes that SQS doesn't run all lambda in the queue concurrently, so each lambda should be executed one by one without 30 sec interval which is the default visibility timeout.


## Cloudwatch

When we sent messages in a row like "1" -> "2" -> "3", then the log showed up like below.

![cloudwatch-log.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326401/e9b84c70-b813-0df0-1c57-8cf29aab9b1b.png)


The red block is "1", the blue block is "2" and the yellow block is "3". The first red block is executed at 17:37:05, the first blue block is executed at 17:37:10. Also, the second red block is executed almost 30 sec later. It seems that the default visibility timeout (30 sec) works well.

### What this log shows?

If SQS tried to run lambda concurrentry, those message should be invisible. The invisible messages have to wait 30 sec because of the default visibility timeout. However, the blue block is executed at 17:37:10. That means that SQS waited until the first lambda had finished.

## Conclustion

It is worth to consider SQS + lambda for calling third-party API.

*本記事は @qualitia_cdevの中の一人、伊藤さんに書いていただきました。
javaでGUIの練習

javaのGUIの練習のためにルーレットを作りました。


```java:Gui.jajva

package sample;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.util.Random;
import java.util.Arrays;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.Container;
import java.awt.BorderLayout;
public class Gui extends JFrame{
	static String theName="hello world";
	int count=11;
	String[] names = {"Aさん","Bさん","Cさん" ,"Dさん","Eさん","Fさん","Gさん","Hさん","Iさん","Jさん","Kさん"};//ルーレット	
	public Gui() {
		// TODO 自動生成されたメソッド・スタブ
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100,100,640,480);
		JButton btn1=new JButton("ボタン");
		add(btn1);	///	ボタン追加	
		setSize(250,250);
		JLabel label = new JLabel(theName);

		JPanel p = new JPanel();
		p.add(label); 	//ラベル追加	

		Container contentPane = getContentPane();
		contentPane.add(p, BorderLayout.NORTH);


		btn1.addActionListener(new ActionListener(){

			@Override

			/**
			 * ルーレット乱数部分
			 */
			public void actionPerformed(ActionEvent e) {

				int i=0;
				count--;
				do{ i = rnd();
				if(count==0) {
					System.out.println("全員回答しました");
					names[0]="Aさん";
					names[1]="Bさん";
					names[2]="Cさん";
					names[3]="Dさん";
					names[4]="Eさん";
					names[5]="Fさん";
					names[6]="Gさん";
					names[7]="Hさん";
					names[8]="Iさん";
					names[9]="Jさん";
					names[10]="Kさん";
					count=11;


					break;

				}
				}while(names[i]=="0");


				btn1.setLabel(names[i]);
				System.out.println("のこり"+count +"人");


				names[i]="0";


			}
			private int rnd() {
				// TOD動生成されたメソッド・スタブ

				Random rand = new Random();
				int val = (rand.nextInt(11));
				return val;
			}
		});
	}
	public static void main(String[] args) {
		Gui frm=new Gui();
		frm.setVisible(true);
	}
}
```


ボタンを押すとボタンのところに名前が表示され、1回表示されたら全員表示されるまで表示できないようになっています。

本当はボタンを押したら画面の別の場所に名前が表示されるようにしたかったのですが、ラベルには処理に合わせた変更ができないようだったのでボタンに表示をしました。
メモ: VB6で印刷

## VB6 標準コンポーネントを使用する場合

* DataReport
* Crystal Report (日本語版はCD1枚目の以下。)
   * D:\Common\Tools\VB\Japanese\crysrept\crystl32.exe

![スクリーンショット_2020-05-11_08-33-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/906a7da3-ac54-682d-9256-8385c021768e.png)


### Printer オブジェクト

```vb
With Printer
    .CurrentX = 0 '水平座標
    .CurrentY = 0 '垂直座標
End With
Printer.Print "日本語でok"
```

## Windows XP でのXPF印刷出力

* [Microsoft XML Paper Specification Essentials Pack
](https://www.microsoft.com/ja-jp/download/details.aspx?id=11816)
スクショ用にラベルを付ける

# はじめに

Webページの「この部分はこんな感じです」というような資料を作る事が多いです。例えば…

[![Image from Gyazo](https://i.gyazo.com/2748d183b630ae654cbf303b9da880e1.png)](https://gyazo.com/2748d183b630ae654cbf303b9da880e1)
という部分をパワーポイント等で
[![Image from Gyazo](https://i.gyazo.com/8b197ff5f8dd73e24fb16014e5cc86bb.png)](https://gyazo.com/8b197ff5f8dd73e24fb16014e5cc86bb)
のように加工して、「①はXXです。」みたいな補足を加える感じ。
この赤部分を入れるのがめんどくさくてしょうがない…ので！ブラウザのコンソールから簡単に挿入できるスクリプトを作ってみました。

# 使い方
1. 加工対象の要素にid属性がない場合は付与する
* ブラウザのコンソールに下記を流し込む
※idとlabelの部分は置き換えてね

```js
(function(){"use strict";var
id='abc',
label='①',
e=document.getElementById(id);e.style.border='2px solid red';e.innerHTML='<div style="position:relative;"><div style="color:red;font-weight:bold;position:absolute;top:-18px;left:-15px;padding-right:3px;background-color:white;">'+label+'</div></div>'+e.innerHTML;}());
```
これだけで上記赤文字と赤線を加えることができます。便利便利♪

# 整形
上記スクリプトはコピペして使いやすいようにしていますが、整形するとこんな感じ

```js
(function () {
    "use strict";
    var id = 'abc',
        label = '①',
        element = document.getElementById(id);
    element.style.border = '2px solid red';
    element.innerHTML = '<div style="position:relative;">'
        + '<div style="'
        + 'color:red;'
        + 'font-weight:bold;'
        + 'position:absolute;'
        + 'top:-18px;'
        + 'left:-15px;'
        + 'padding-right:3px;'
        + 'background-color:white;"'
        + '>'
        + label
        + '</div>'
        + '</div>'
        + element.innerHTML;
}());
```
スタイルが崩れる場合は少し加工してみてくださいね(^^)
【GAS】スクリプトの作成・保存・実行

###ブラウザでGoogle Driveを表示する
https://drive.google.com/drive/

###スクリプトを作成
Google Driveの一覧画面 左上の「作成」ボタンより、
「Google Apps Script」選択する。
![GASを開く.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488082/fb5f2533-a58e-36b4-a12c-cf18ebe7dd5d.png)


###スクリプトを保存する
メニューの「ファイル」→「保存」または、
ショートカットキーの「Ctrl + S」で保存できる。

###プロジェクトの名前を変更
![プロジェクトを保存.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488082/781307ad-b7a1-14d8-43ec-85944eacf99b.png)

###スクリプトを実行する
メニューの「実行」→「関数を実行」から実行する関数名を選択すると実行することができる。
![実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488082/7a24b5b7-0f79-aa73-1d49-c0c5d1dba701.png)

###ログを確認する。
ショートカットキーの「Ctrl + Enter」で確認できる。
![ログ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488082/8106adaf-01c0-50c3-9702-349b89ba0f6c.png)
#Mac で Esc キー / Delete キーなどを押したときのサウンド、効果音を無効にする (警告音のボリュームを最小に)

サウンド設定でアラートの「ボリューム」を最低にしておく必要があるっぽい

![image](https://user-images.githubusercontent.com/13635059/81486446-cddcce00-928f-11ea-95a0-e45078e20f80.png)


[How do I disable the beep in OSX Leopard when I perform an invalid action? - Super User](https://superuser.com/questions/98868/how-do-i-disable-the-beep-in-osx-leopard-when-i-perform-an-invalid-action)

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/3160











<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
DRF Django Rest Framework viewからserializerに引数を渡す

# やりたいこと
- viewからシリアライザに引数を渡したい

行ってみよう

## view側
```
class HogehogeAPIView(views.APIView):

    def get(self, request, *args, **kwargs):
        serializer = HogehogeSerializer(interview, context={'trigger': request.GET})
        return Response(serializer.data, status=status.HTTP_200_OK)
```
contextに突っ込むだけでOK！

## serializer側
```
class HogehogeSerializer(WritableNestedModelSerializer):
    class Meta:
        model = MstHogehoge
        exclude = ['created_at', 'updated_at', 'deleted_at']

    def to_representation(self, instance):
        user = self.context["trigger"]["user_trigger"]

```
self.contextの中に、viewで突っ込んだ内容が入っている！
Qt for Python with Designer でアプリケーションが最初に表示された時に行う処理の書き方

備忘録かつ添削していただければということで。

アプリケーションが最初に表示された時にだけある処理を行いたいというのはありがちだと思うのですが、MainWindow.show.connect( なんちゃらという書き方が出来ないようです。

Designerが生成するsetupUIの記述をできるだけ残してVBAなどで行われる onLoad的な処理をどう書こうか探してeventfilterで解決したので備忘録かつ添削していただければということで。

```
self.startUpFilter = StartUpFilter()
self.centralwidget.installEventFilter(self.startUpFilter)
self.startUpFilter.installWidget(self.hoge,self.fuga)
```

centralwidget にshowのイベントが渡ってくることがわかったので、centralwidgetにeventfilterをセットしておいて、最初のshowイベントの時だけあれこれすると書けば良いのだろうと考えましが、eventfilterで渡ってくるのはeventの送信元とイベントそのものだけで、そのイベントからDesignerで作っている hoge,fugaをどう操作する方法がなかなかわからない、見つからない。
そこで、eventfilterはクラスなんだから、installEventFilterとは別に、後であれこれするwidgetそのものを先に登録しておけば良いのではと思いつき、installWidgetというメソッドを入れてみました。
出来上がった StartUpFilterは

```
class StartUpFilter(QtCore.QObject):
    startupState = False

    def installWidget(self,hoge,fuga):
        self.hoge = hoge
        self.fuga = fuga

    def eventFilter(self, widget, event):
        if event.type() == QtCore.QEvent.Type.Show:
            if not self.startupState:
                self.hoge.hogeMethod(self.fuga)
            self.startupState = True

        return False
```

hoge,fugaをサブクラス化するが定石なのかもしれません。こう書いても動くということの報告と、これではダメだという指摘がいただきたく投稿します。
Next.js + react-konvaでFont Awesomeを利用したメモ

## 概要
Font Awesomeを利用してアイコンの表示を行った。
適用するプロパティに少し癖があったのでメモ。

[この時点のソース](https://github.com/hibohiboo/create-now/tree/f65c8021635c57c18a73055d1eaffd0bb37459df/)


## Font Awesomeの確認
今回はハートを使いたかったのでそちらを確認する。確認すべきはスタイルとunicode。

* [Font Awesome Heart Solid][*2]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/b8c79c1f-b2c7-f64b-f078-07955f19ede7.png)

* 同じunicode`f004`でも、solidとregularで見え方が違う。以下はRegular

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99876/1c6c33e1-d121-bbaa-019a-04e4969f3e72.png)


## ソース

### CDNから読み込み
* まずはFont Awesomeを使えるようにCDNから読み込む設定を追加

```diff:pages/trpg-manual/index.tsx
const Home: NextPage = () => {
  return (
    <div className="container">
      <Head>
        <title>僕の私のTRPG説明書</title>
+        <link
+          rel="stylesheet"
+          href="https://use.fontawesome.com/releases/v5.13.0/css/all.css"
+          integrity="sha384-Bfad6CLCknfcloXFOyFnlgtENryhrpZCe29RTifKEixXQZ38WheV+i/6YWSzkz3V"
+          crossOrigin="anonymous"
+        />
      </Head>
```

### Konvaで利用

* konvaのText要素に指定する。再利用可能な形にするためオブジェクトにしている。

#### Font Family 設定
```diff:components/organisms/trpg-manual/ImageArea.tsx
  const family = {
    gothic:
      '"Hiragino Sans W3", "Hiragino Kaku Gothic ProN", "ヒラギノ角ゴ ProN W3", "メイリオ", Meiryo, "ＭＳ Ｐゴシック", "MS PGothic", sans-serif',
    serif:
      '"游明朝", YuMincho, "Hiragino Mincho ProN W3", "ヒラギノ明朝 ProN W3", "Hiragino Mincho ProN", "HG明朝E", "ＭＳ Ｐ明朝", "ＭＳ 明朝", serif',
+    fontawesome: '"Font Awesome 5 Free", "Font Awesome 5 Brands"',
  }
```

#### Font Weight設定

```ts:components/organisms/trpg-manual/ImageArea.tsx
  const faWeight = { solid: '900', regular: '400', brands: '400', light: '300' }
```

#### unicode設定

* `\u` + unicodeの形で指定する

```ts:components/organisms/trpg-manual/ImageArea.tsx
  const faUnicode = { heart: '\uf004', check: '\uf00c' }
```

#### Text要素で利用

* FontWeihtは`fontStyle`というプロパティに設定するので注意。

```diff:components/organisms/trpg-manual/ImageArea.tsx
import { Stage, Layer, Rect, Text, Ellipse } from 'react-konva'

// 省略

        <Text
          x={x}
          y={y}
          width={inputWidth}
          align="left"
          text={faUnicode.heart}
          fill={sheet.heartColor}
          fontFamily={family.fontawesome}
+          fontStyle={faWeight.solid}
          fontSize={60}
        />
```


## 参考

[Font Awesome の使い方（ver5.9以降）](https://www.webdesignleaves.com/pr/plugins/fontawesome_03.html)
[Konva](https://konvajs.org/api/Konva.Image.html)
[Font Awesome Heart Regular][*1]
[Font Awesome Heart Solid][*2]

[*1]:https://fontawesome.com/icons/heart?style=regular
[*2]:https://fontawesome.com/icons/heart?style=solid
ReactOSを使ってみた (0.4.13)

## インストール

Proxmoxでのインストールで以下を選択すること

* IDEを選択 (sataは非対応)
* Default i440fx (q35は非対応)
* VirtIOS SCSI
* NetworkDevice : VirtIO (ドライバはOSインストール後に入れる)

![スクリーンショット_2020-05-11_05-16-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/5598d2f5-63da-ea7e-011f-4c6d57c00e34.png)

フォントレンダリングがきれいになった。

![スクリーンショット_2020-05-11_05-17-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/5624597f-30a3-6f44-ba3e-335d1b07049d.png)


### driver

* [Creating Windows virtual machines using virtIO drivers :: Fedora Docs Site](https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/)から `Latest virtio-win iso` をダウンロードし用いる。

![スクリーンショット_2020-05-11_05-22-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/70ecc5f1-b331-abd6-cb17-f65ea872bdb6.png)


![スクリーンショット_2020-05-11_05-20-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/a705aa07-549a-505e-c6ee-e0095293bae4.png)


### アプリケーション

* VB6ランタイムを入れた。

![スクリーンショット_2020-05-11_05-25-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/e45b691f-9a54-b6af-97da-b58c985b626a.png)

* Firefox 28を入れた。

![スクリーンショット_2020-05-11_05-31-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/1c422dd1-437e-d529-755d-98ce2f5d29d1.png)

### vb6で開発したexeとdllを実行

* dll 登録前

![スクリーンショット_2020-05-11_05-34-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/3e077085-b68c-af55-f783-fbd816d1b68a.png)

`regsvr32.exe MyDLL_1.dll`

![スクリーンショット_2020-05-11_05-38-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/89b5937f-22fa-ac85-e7f2-30946e70a4c9.png)

動いた

![スクリーンショット_2020-05-11_05-39-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25728/cbb3db1f-1de8-22f2-2589-6384f2dd7363.png)
初心者によるプログラミング学習ログ 312日目

#100日チャレンジの312日目
twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。
100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。
312日目は、
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">おはようございます<br>312日目 8h<br>・ポートフォリオ作成<a href="https://twitter.com/hashtag/%E6%97%A9%E8%B5%B7%E3%81%8D%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8?src=hash&amp;ref_src=twsrc%5Etfw">#早起きチャレンジ</a><a href="https://twitter.com/hashtag/%E9%A7%86%E3%81%91%E5%87%BA%E3%81%97%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%A8%E7%B9%8B%E3%81%8C%E3%82%8A%E3%81%9F%E3%81%84?src=hash&amp;ref_src=twsrc%5Etfw">#駆け出しエンジニアと繋がりたい</a><a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;ref_src=twsrc%5Etfw">#100DaysOfCode</a></p>&mdash; ぱぺまぺ@webエンジニアを目指したい社畜 (@yudapinokio) <a href="https://twitter.com/yudapinokio/status/1259575669215727616?ref_src=twsrc%5Etfw">May 10, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Oculusソフトウェアが再起動を求めてきてインストールできないときにする事

[Oculus Software](https://www.oculus.com/setup/?locale=ja_JP)のインストーラー、OculusSetup.exeが再起動を求めてきて何度やってもインストールできない。

> コンピューターを再起動
> 
> インストール中にエラーが発生しました。コンピューターを再起動し、Oculus設定をもう一度実行してください。問題が引き続き発生する場合は、Oculusサポートにお問い合わせください。

![コメント 2020-05-11 025815.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2382/f46e6fe9-9997-abb2-2286-255976a2ad80.jpeg)

以上のような表示が出る。English(US)などの言語でインストールしようとしても同様。

いろいろ悪戦苦闘したり、プロセスの状況を調べたり、reddit漁ったり、twitter漁ったりして判明。どうやらWindowsセキュリティ対策(元Windows Defender)にウイルスとして認識される様子。

Windowsセキュリティの設定 > ウイルスと脅威の防止 > ウイルスと脅威の防止の設定から

- リアルタイム保護
- 改ざんの防止

以上をオフにする。

![コメント 2020-05-11 033053.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2382/eba1c5ce-8400-0a59-a1b0-e5a1768d0b68.jpeg)

これらをオフにしてインストールを実行すればインストールに成功する。

![コメント 2020-05-11 033759.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2382/703508ad-4d46-7320-06c3-4acb1b959dfd.jpeg)

以上のようにインストールが完了して起動する。

インストール時にダウンロードするデータ5GB相当がレジュームされているのが救いです...。Facebook Oculusさん、お願いですからこの不具合は直して欲しいなと思います...。たぶんたくさんの方が心折れて返品しちゃうと思います。